You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kubernetes中Grafana Pod日志异常、数据库锁死及ALB不健康问题求助

问题描述

我在Kubernetes环境中通过kube-prometheus-stack Helm Chart部署了Grafana 10.1.0,遇到三个核心问题:

  1. 异常请求日志泛滥:Pod日志中频繁出现访问不存在路径(如/psnlink/.env)返回302,以及/api/info.php这类路径返回401未授权的请求记录;
  2. 数据库锁死:日志持续输出数据库锁重试信息:
    logger=sqlstore.transactions t=2024-05-03T11:36:34.901159296Z level=info msg="Database locked, sleeping then retrying" error="database is locked" retry=1 code="database is locked"
    logger=sqlstore.transactions t=2024-05-03T11:36:34.913546808Z level=info msg="Database locked, sleeping then retrying" error="database is locked" retry=2 code="database is locked"
    
  3. AWS ALB目标不健康:ALB Ingress Controller显示Grafana后端目标状态不健康。

我已经尝试过调整Grafana版本、设置环境变量(如下),并配置了存活/就绪探针,但问题仍未解决:

image:
  tag: 10.1.0
env:
  GF_SECURITY_COOKIE_SAMESITE: disabled
  GF_SECURITY_COOKIE_SECURE: true
  GF_SECURITY_ALLOW_EMBEDDING: true

当前完整的values.yaml配置:

image:
  tag: 10.1.0
env:
  GF_LOG_LEVEL: debug
readinessProbe:
  httpGet:
    path: /api/health
    port: 3000

livenessProbe:
  httpGet:
    path: /api/health
    port: 3000
  initialDelaySeconds: 30
  timeoutSeconds: 20
  failureThreshold: 10
persistence:
  type: pvc
  enabled: true
  storageClassName: standard
  accessModes:
    - ReadWriteOnce
  size: 1Gi
 
ingress:
  enabled: true
  annotations:
    kubernetes.io/ingress.class: alb
    alb.ingress.kubernetes.io/scheme: internet-facing
    alb.ingress.kubernetes.io/target-type: ip
    alb.ingress.kubernetes.io/certificate-arn: arn:aws:acm:us-east-1:00000000000:certificate/288888bd2-c97d-433c-55555-400000000
    alb.ingress.kubernetes.io/subnets: "subnet-1,subnet-2,subnet-3" 
    alb.ingress.kubernetes.io/group.name: ms
  rules:
    - host: grafana.dev.developer.com
      http:
        paths:
        - backend:
            service:
              name: kube-stack-prometheus-grafana
              port:
                number: 80
          path: /
          pathType: Prefix
解决方案建议

1. 异常请求日志处理

这类请求属于互联网爬虫或恶意扫描,可通过以下方式拦截:

  • 在ALB层面配置WAF规则,匹配/psnlink/、*.php等异常路径,直接返回403或拒绝请求;
  • 启用Grafana IP白名单:添加环境变量GF_SECURITY_ALLOWED_IPs,仅允许可信IP段(如办公内网IP)访问Grafana;
  • 利用ALB listener规则,对异常路径设置重定向或直接拦截,避免请求到达Grafana Pod。

2. 数据库锁死问题

Grafana默认使用SQLite数据库,并发过高或存储IO不足时易出现锁死,可按以下优先级解决:

  • 切换外部数据库:将SQLite替换为PostgreSQL/MySQL,彻底解决锁死问题。在values.yaml中添加数据库配置:
    env:
      GF_DATABASE_TYPE: postgres
      GF_DATABASE_HOST: <postgres-service-name>:5432
      GF_DATABASE_NAME: grafana
      GF_DATABASE_USER: <db-username>
      GF_DATABASE_PASSWORD: <db-password>
    
  • 优化存储性能:检查standard存储类对应的底层存储(如AWS EBS),若存在IO瓶颈,升级到gp3等高性能存储类型;
  • 调整数据库连接参数:设置环境变量GF_DATABASE_MAX_OPEN_CONNECTIONS(默认100),适当降低并发连接数;同时配置GF_DATABASE_MAX_IDLE_CONNECTIONS为合理值,减少闲置连接占用。

3. AWS ALB目标不健康问题

ALB检测后端不健康,需从探针、网络映射两方面排查:

  • 验证端口映射:确认Servicekube-stack-prometheus-grafana的targetPort是否指向Grafana容器的3000端口(Service暴露80端口,需映射到容器3000端口);
  • 优化探针参数:当前timeoutSeconds=20过长,建议缩短至5秒;failureThreshold=10调整为3-5,periodSeconds(默认10)增加到15秒,减少探测频率;
  • 检查网络权限:由于ALBtarget-type为ip,需确保ALB安全组允许访问Grafana Pod所在节点的3000端口;
  • 验证探针路径可用性:在集群内部执行curl <pod-ip>:3000/api/health,确认返回200和{"status":"ok"}。若返回401,添加环境变量允许匿名访问探针:
    env:
      GF_AUTH_ANONYMOUS_ENABLED: true
      GF_AUTH_ANONYMOUS_ORG_ROLE: Viewer
    

内容的提问来源于stack exchange,提问作者Gourav Saini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 18:17:45