Grafana连接Loki数据源遇400未授权错误求助
问题与解决
场景说明
- 环境:EKS 1.23集群,Prometheus-stack集成Grafana v7.3.5,已部署Loki v2.7.3
- 问题:在Grafana中添加Loki数据源、配置loki-gateway服务URL后,出现错误:
Loki: Bad Request. 400. Authentication to data source failed - Loki-gateway Pod日志显示401请求记录:
10.7.60.60 - - [01/Mar/2023:14:18:53 +0000] 401 "GET /loki/api/v1/label?start=1677679732842000000 HTTP/1.1" 10 "-" "Grafana/7.3.5" "10.7.127.117, 10.0.60.21, 10.0.60.21"
- 前置信息:loki-gateway默认禁用
basicAuth,无需在Grafana数据源中配置账号密码 - 已尝试无效操作:
- 启用loki-gateway的
basicAuth并在Grafana数据源中传入凭证 - 跳过TLS验证
- 启用loki-gateway的
排查与解决步骤
1. 改用集群内部Service访问
如果Grafana和Loki在同一集群内,直接使用集群内部Service域名访问,比如http://loki-gateway.loki命名空间.svc.cluster.local,避免通过外部Ingress地址访问——很多时候Ingress层会自带认证策略(比如AWS ALB的IAM认证、Ingress-Nginx的auth配置),导致请求被拦截返回401。
2. 验证网络连通性与网关配置
在Grafana Pod内执行curl命令测试连通性:
curl -v http://loki-gateway.loki命名空间.svc.cluster.local/loki/api/v1/label?start=1677679732842000000
如果返回401,检查loki-gateway的nginx配置文件,确认是否被添加了额外的认证中间件(比如OIDC、OAuth2),移除多余的auth配置块即可。
3. 修正数据源URL格式
确保Grafana中配置的Loki URL末尾没有多余斜杠,比如用http://loki-gateway.loki命名空间.svc.cluster.local而非http://loki-gateway.loki命名空间.svc.cluster.local/,避免路径拼接错误触发400错误。
4. 解决版本兼容性问题
Grafana v7.3.5与Loki v2.7.3版本跨度较大,存在API兼容性风险:
- 优先升级Grafana到v8.5及以上版本(该版本对Loki v2.x的支持更完善)
- 若暂时无法升级,可在Loki配置中关闭认证并启用兼容模式,示例配置:
auth_enabled: false server: http_listen_port: 3100 common: path_prefix: /loki storage: filesystem: chunks_directory: /tmp/loki/chunks replication_factor: 1 ring: kvstore: store: inmemory schema_config: configs: - from: 2020-10-24 store: boltdb-shipper object_store: filesystem schema: v11 index: prefix: index_ period: 24h
(注:该配置仅用于测试,生产环境需根据实际存储、认证需求调整)
5. 检查IAM权限(若使用IRSA)
如果Loki或loki-gateway采用了EKS IRSA(IAM Roles for Service Accounts),需确认Grafana Pod绑定的IAM角色具备访问Loki服务的权限;若未启用IAM认证,直接关闭Loki相关的IAM配置项。
内容的提问来源于stack exchange,提问作者jrz
相关产品推荐
相关产品推荐

