Loki没有包含任何内置的身份验证层。运维人员需要在您的服务前面运行一个认证反向代理,例如使用基本身份验证的NGINX或OAuth2代理。
请注意,在使用多租户模式的Loki时,Loki要求将HTTP头X-Scope-OrgID设置为标识租户的字符串;负责填充该值的责任应由认证反向代理处理。有关更多信息,请阅读有关多租户的文档。
有关对Promtail进行身份验证的信息,请参阅配置Promtail的文档
Loki官方的Helm Chart对于在loki-gateway上设置认证以及租户头X-Scope-OrgID提供了支持。具体配置如下。
在安装Chart所使用的value.yaml中做如下配置:
loki:
# ...
tenants:
- name: org1
password: org1pass
# ...
gateway:
basicAuth:
enabled: truetenants用于给loki配置租户和密码。gateway.basicAuth.enabled=true表示为loki-gateway开启基本身份认证,将使用租户的用户名和密码。
将上面的配置更新到loki chart安装的release中后,此时通过loki-gateway调用API会报401未授权的错:
curl https://loki.example.com/loki/api/v1/status/buildinfo
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.19.10</center>
</body>
</html>调用API时给定租户的用户名和密码,可以通过认证返回结果:
curl -u org1:org1pass https://loki.example.com/loki/api/v1/status/buildinfo
{"version":"2.8.2","revision":"9f809eda7","branch":"HEAD","buildUser":"root@e401cfcb874f","buildDate":"2023-05-03T11:07:54Z","goVersion":""}此时通过API查询数据时,只需给定基本认证的用户名和密码,不再需要在传递X-Scope-OrgID请求头,该请求头的填充将由loki-gateway使用基本认证的用户名自动填充。
例如,使用curl命令调用API /loki/api/v1/labes不需要在传-H "X-Scope-OrgID: org1":
curl -u org1:org1pass https://loki.example.com/loki/api/v1/labels
{"status":"success","data":["filename","job"]}前面第2节Promtail的简单例子中,Promtail的配置文件也要做出修改,配置基本认证使用租户的用户名和密码。
# Disable the HTTP and GRPC server.
server:
disable: true
positions:
filename: /tmp/positions.yaml
clients:
- url: https://loki.example.com/loki/api/v1/push
basic_auth:
username: org1
password: org1pass
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: varlogs
__path__: /var/log/*log在grafana中配置loki数据源时,如果地址中配置的是loki-gateway,则也需要配置基本认证的用户名和密码。