Loki没有包含任何内置的身份验证层。运维人员需要在您的服务前面运行一个认证反向代理,例如使用基本身份验证的NGINX或OAuth2代理。

请注意,在使用多租户模式的Loki时,Loki要求将HTTP头X-Scope-OrgID设置为标识租户的字符串;负责填充该值的责任应由认证反向代理处理。有关更多信息,请阅读有关多租户的文档

有关对Promtail进行身份验证的信息,请参阅配置Promtail的文档

Loki官方的Helm Chart对于在loki-gateway上设置认证以及租户头X-Scope-OrgID提供了支持。具体配置如下。

在安装Chart所使用的value.yaml中做如下配置:

 1loki:
 2# ...
 3  tenants:
 4    - name: org1
 5      password: org1pass
 6
 7# ...
 8
 9gateway:
10  basicAuth:
11    enabled: true
  • tenants用于给loki配置租户和密码。
  • gateway.basicAuth.enabled=true表示为loki-gateway开启基本身份认证,将使用租户的用户名和密码。

将上面的配置更新到loki chart安装的release中后,此时通过loki-gateway调用API会报401未授权的错:

1curl https://loki.example.com/loki/api/v1/status/buildinfo
2<html>
3<head><title>401 Authorization Required</title></head>
4<body>
5<center><h1>401 Authorization Required</h1></center>
6<hr><center>nginx/1.19.10</center>
7</body>
8</html>

调用API时给定租户的用户名和密码,可以通过认证返回结果:

1curl -u org1:org1pass https://loki.example.com/loki/api/v1/status/buildinfo
2{"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":

1curl -u org1:org1pass https://loki.example.com/loki/api/v1/labels
2{"status":"success","data":["filename","job"]}

前面第2节Promtail的简单例子中,Promtail的配置文件也要做出修改,配置基本认证使用租户的用户名和密码。

 1# Disable the HTTP and GRPC server.
 2server:
 3  disable: true
 4
 5positions:
 6  filename: /tmp/positions.yaml
 7
 8clients:
 9  - url: https://loki.example.com/loki/api/v1/push
10    basic_auth:
11      username: org1
12      password: org1pass
13
14scrape_configs:
15  - job_name: system
16    static_configs:
17      - targets:
18          - localhost
19        labels:
20          job: varlogs
21          __path__: /var/log/*log

在grafana中配置loki数据源时,如果地址中配置的是loki-gateway,则也需要配置基本认证的用户名和密码。

参考