使用Helm部署K8s时,如何让PostgreSQL版Grafana自动连接Prometheus
看起来你已经完成了Grafana和Prometheus的基础部署,并且切换了Grafana的存储到PostgreSQL,但配置的数据源没有自动生效。咱们一步步排查和解决这个问题:
1. 检查Helm Values.yaml的配置格式是否正确
首先,Grafana Helm Chart对数据源配置的格式有严格要求,你当前的配置可能存在结构错误。正确的配置应该是这样的(注意缩进和多行字符串的写法):
# 假设你的Grafana Helm release在monitoring namespace下 grafana: datasources: datasources.yaml: | apiVersion: 1 datasources: - name: on-premis type: prometheus # 这里必须填写Prometheus服务的正确集群内地址 # 如果Prometheus和Grafana在同一个namespace,直接用服务名+端口,比如prometheus-server:9090 # 不同namespace的话,格式是 <service-name>.<namespace>.svc.cluster.local:9090 url: http://prometheus-server.monitoring.svc.cluster.local:9090 access: proxy isDefault: true editable: false # 可选:设置定期同步配置,确保数据库中的配置和文件一致 updateIntervalSeconds: 30
你之前写的datasources: {}会覆盖后面的配置,导致数据源文件无法生成,必须把空的datasources字段去掉,换成上面的嵌套结构,用|来定义多行的YAML内容。
2. 验证Grafana Pod是否加载了正确的数据源配置
执行以下命令进入Grafana Pod,检查provisioning目录下的数据源文件是否存在且内容正确:
# 替换成你的Grafana Pod名称和namespace kubectl exec -it grafana-xxxxxx-xxxxx -n monitoring -- cat /etc/grafana/provisioning/datasources/datasources.yaml
如果文件不存在或者内容和你配置的不一致,说明Helm没有正确生成对应的ConfigMap。此时需要重新部署Grafana:
helm upgrade grafana grafana/grafana -n monitoring -f your-values.yaml
3. 查看Grafana日志,排查数据源加载错误
查看Grafana的启动日志,找和数据源配置相关的报错信息:
kubectl logs grafana-xxxxxx-xxxxx -n monitoring
重点搜索provisioning datasources相关的日志,比如是否提示“数据源已存在”、“URL不可达”或者“权限错误”。如果日志显示数据源已存在,可能是因为之前用SQLite时的配置已经同步到了PostgreSQL,此时可以先在Grafana UI中删除同名数据源,然后重启Pod让配置重新加载。
4. 确认Prometheus服务在Grafana Pod内可达
网络问题是常见的连接失败原因,在Grafana Pod内测试Prometheus的连通性:
kubectl exec -it grafana-xxxxxx-xxxxx -n monitoring -- curl http://prometheus-server.monitoring.svc.cluster.local:9090
如果curl失败,说明:
- Prometheus的服务名称或namespace填写错误
- 两个服务不在同一个网络策略允许的范围内
- Prometheus服务本身没有正常运行
5. 处理PostgreSQL存储的配置优先级
当Grafana使用外部数据库(PostgreSQL)时,数据库中的配置会优先于provisioning文件的配置,除非你设置了editable: false。如果之前已经有同名数据源存在于PostgreSQL中,Grafana不会自动覆盖它。你可以:
- 在Grafana UI中手动删除旧的数据源,然后重启Pod
- 确保provisioning配置中设置了
updateIntervalSeconds,让Grafana定期同步文件中的配置到数据库
按照上面的步骤逐一排查,应该就能解决自动连接的问题了。
内容的提问来源于stack exchange,提问作者user2156115

