Grafana HTTP Error Bad Gateway 和 Templating init failed 错误
Grafana HTTP Error Bad Gateway and Templating init failed errors
在本地 minikube
上使用 helm
安装 Prometheus
和 Grafana
。
$ helm install stable/prometheus
$ helm install stable/grafana
Prometheus 服务器,alertmanager grafana 可以 运行 设置端口转发后:
$ export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace default port-forward $POD_NAME 9090
$ export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=alertmanager" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace default port-forward $POD_NAME 9093
$ export POD_NAME=$(kubectl get pods --namespace default -l "app=excited-crocodile-grafana,component=grafana" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace default port-forward $POD_NAME 3000
从 grafana 添加数据源,出现 HTTP Error Bad Gateway
错误:
从以下位置导入仪表板 315:
然后检查Kubernetes cluster monitoring (via Prometheus)
,得到Templating init failed
错误:
为什么?
在Grafana的HTTP设置中你将Access
设置为Proxy
,这意味着Grafana要访问Prometheus。由于Kubernetes使用的是overlay网络,所以是不同的IP。
有两种解决方法:
- 设置
Access
为Direct
,浏览器直接连接Prometheus
- 使用Kubernetes内部IP或域名。我不知道 Prometheus Helm-chart,但假设有一个名为
prometheus
的 Service
,类似 http://prometheus:9090
的东西应该可以工作。
我关闭了设备上的防火墙,post 在 URL 上添加 http://prometheus:9090 没有抛出网关错误。
我一直找不到“合适”的修复方法,但我找到了解决方法:
apiVersion: v1
kind: Service
metadata:
labels:
prometheus: k8s
name: prometheus-k8s
namespace: monitoring
spec:
selector:
app: prometheus
prometheus: k8s
sessionAffinity: ClientIP
clusterIP: None
通过将 clusterIP
设置为 None
,服务更改为“无头”模式,这意味着请求将直接发送到 pods 中的随机一个 service/cluster。更多信息在这里:https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
可能有更好的解决方案,但这是我发现的唯一真正适合我的解决方案 kube-prometheus。 (我试过 docker-desktop、k3d 和 kind,它们都有同样的问题,所以我怀疑这是模拟器的错;我将我的配置剥离到基本上只有 kube-prometheus,所以它是很难理解问题出在哪里,但是哦。)
在本地 minikube
上使用 helm
安装 Prometheus
和 Grafana
。
$ helm install stable/prometheus
$ helm install stable/grafana
Prometheus 服务器,alertmanager grafana 可以 运行 设置端口转发后:
$ export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=server" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace default port-forward $POD_NAME 9090
$ export POD_NAME=$(kubectl get pods --namespace default -l "app=prometheus,component=alertmanager" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace default port-forward $POD_NAME 9093
$ export POD_NAME=$(kubectl get pods --namespace default -l "app=excited-crocodile-grafana,component=grafana" -o jsonpath="{.items[0].metadata.name}")
$ kubectl --namespace default port-forward $POD_NAME 3000
从 grafana 添加数据源,出现 HTTP Error Bad Gateway
错误:
从以下位置导入仪表板 315:
然后检查Kubernetes cluster monitoring (via Prometheus)
,得到Templating init failed
错误:
为什么?
在Grafana的HTTP设置中你将Access
设置为Proxy
,这意味着Grafana要访问Prometheus。由于Kubernetes使用的是overlay网络,所以是不同的IP。
有两种解决方法:
- 设置
Access
为Direct
,浏览器直接连接Prometheus - 使用Kubernetes内部IP或域名。我不知道 Prometheus Helm-chart,但假设有一个名为
prometheus
的Service
,类似http://prometheus:9090
的东西应该可以工作。
我关闭了设备上的防火墙,post 在 URL 上添加 http://prometheus:9090 没有抛出网关错误。
我一直找不到“合适”的修复方法,但我找到了解决方法:
apiVersion: v1
kind: Service
metadata:
labels:
prometheus: k8s
name: prometheus-k8s
namespace: monitoring
spec:
selector:
app: prometheus
prometheus: k8s
sessionAffinity: ClientIP
clusterIP: None
通过将 clusterIP
设置为 None
,服务更改为“无头”模式,这意味着请求将直接发送到 pods 中的随机一个 service/cluster。更多信息在这里:https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
可能有更好的解决方案,但这是我发现的唯一真正适合我的解决方案 kube-prometheus。 (我试过 docker-desktop、k3d 和 kind,它们都有同样的问题,所以我怀疑这是模拟器的错;我将我的配置剥离到基本上只有 kube-prometheus,所以它是很难理解问题出在哪里,但是哦。)