Stackdriver Prometheus sidecar 与 Prometheus Operator helm chart
Stackdriver Prometheus sidecar with Prometheus Operator helm chart
我们使用 stable/prometheus-operator helm chart 在我们的 GKE 集群上设置了 Prometheus + Grafana。现在我们想要将一些指标导出到 Stackdriver,因为我们已经安装了自定义指标 Stackdriver 适配器。我们已经在使用 Stackdriver 的一些 Pub/Sub 指标来自动缩放少数部署。现在我们还想在其他部署的自动缩放中使用一些 Prometheus 指标(主要是 nginx 请求率)。
那么,我的第一个问题:我们能否在同一集群中并行使用 Prometheus 适配器和 Stackdriver 适配器来自动缩放?
如果没有,我们将需要安装 Stackdriver Prometheus Sidecar 以将 Prometheus 指标导出到 Stackdriver,然后使用它们通过 Stackdriver 适配器进行自动缩放。
根据说明 here,我们似乎需要在 Prometheus 运行ning 所在的同一个 pod 上安装 Stackdriver sidecar。我试了一下。当我 运行 patch.sh
脚本时,我收到消息:statefulset.apps/prometheus-prom-operator-prometheus-o-prometheus patched
但是当我再次检查 statefulset 时,它没有 Stackdriver sidecar 容器。由于这个 statefulset 是由 Helm chart 创建的,我们可能无法直接修改它。在 Helm 中有推荐的方法吗?
感谢this comment on GitHub,我弄明白了。这个 Helm chart 接受了太多的配置选项,我在阅读文档时错过了它。
所以,原来这个 Helm chart 接受了一个配置选项 prometheus.prometheusSpec.containers
。它在 docs 中的描述说:“容器允许注入额外的容器。这意味着允许将身份验证代理添加到 Prometheus pod”。但显然,它不仅限于身份验证代理,您可以在此处传递任何容器规范,它将被添加到此 Helm chart 创建的 Prometheus StatefulSet 中。
这是我使用的示例配置。一些关键点:
- 请用您的实际值替换尖括号中的值。
- 随意删除 arg
--include
。我添加它是因为 nginx_http_requests_total
是我现在想要发送到 Stackdriver 的唯一 Prometheus 指标。查看 Managing costs for Prometheus-derived metrics 了解更多详情。
- 要找出要在
volumeMounts
中使用的卷的名称:
- 列出 Prometheus Operator 命名空间中的 StatefulSet。假设您将其安装在
monitoring
命名空间中:kubectl get statefulsets -n monitoring
- 描述 Prometheus StatefulSet 假设其名称为
prometheus-prom-operator-prometheus-o-prometheus
:kubectl describe statefulset prometheus-prom-operator-prometheus-o-prometheus -n monitoring
- 在这个StatefulSet的详细信息中,找到名为
prometheus
的容器。注意在 arg --storage.tsdb.path
中传递给它的值
- 在同一路径上找到安装在该容器上的卷。在我的例子中,它是
prometheus-prom-operator-prometheus-o-prometheus-db
所以我也在我的 Stackdriver sidecar 容器上安装了相同的卷。
prometheus:
prometheusSpec:
containers:
- name: stackdriver-sidecar
image: gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar:0.7.5
imagePullPolicy: Always
args:
- --stackdriver.project-id=<GCP PROJECT ID>
- --prometheus.wal-directory=/prometheus/wal
- --stackdriver.kubernetes.location=<GCP PROJECT REGION>
- --stackdriver.kubernetes.cluster-name=<GKE CLUSTER NAME>
- --include=nginx_http_requests_total
ports:
- name: stackdriver
containerPort: 9091
volumeMounts:
- name: prometheus-prom-operator-prometheus-o-prometheus-db
mountPath: /prometheus
将此 yaml 保存到文件中。假设您将其保存到 prom-config.yaml
现在,找到您用于在集群上安装 Prometheus Operator Helm chart 的版本名称:
helm list
假设版本名称是prom-operator
,你可以根据上面的配置通过运行这个命令更新这个版本:
helm upgrade -f prom-config.yaml prom-operator stable/prometheus-operator
希望对您有所帮助。
我们使用 stable/prometheus-operator helm chart 在我们的 GKE 集群上设置了 Prometheus + Grafana。现在我们想要将一些指标导出到 Stackdriver,因为我们已经安装了自定义指标 Stackdriver 适配器。我们已经在使用 Stackdriver 的一些 Pub/Sub 指标来自动缩放少数部署。现在我们还想在其他部署的自动缩放中使用一些 Prometheus 指标(主要是 nginx 请求率)。
那么,我的第一个问题:我们能否在同一集群中并行使用 Prometheus 适配器和 Stackdriver 适配器来自动缩放?
如果没有,我们将需要安装 Stackdriver Prometheus Sidecar 以将 Prometheus 指标导出到 Stackdriver,然后使用它们通过 Stackdriver 适配器进行自动缩放。
根据说明 here,我们似乎需要在 Prometheus 运行ning 所在的同一个 pod 上安装 Stackdriver sidecar。我试了一下。当我 运行 patch.sh
脚本时,我收到消息:statefulset.apps/prometheus-prom-operator-prometheus-o-prometheus patched
但是当我再次检查 statefulset 时,它没有 Stackdriver sidecar 容器。由于这个 statefulset 是由 Helm chart 创建的,我们可能无法直接修改它。在 Helm 中有推荐的方法吗?
感谢this comment on GitHub,我弄明白了。这个 Helm chart 接受了太多的配置选项,我在阅读文档时错过了它。
所以,原来这个 Helm chart 接受了一个配置选项 prometheus.prometheusSpec.containers
。它在 docs 中的描述说:“容器允许注入额外的容器。这意味着允许将身份验证代理添加到 Prometheus pod”。但显然,它不仅限于身份验证代理,您可以在此处传递任何容器规范,它将被添加到此 Helm chart 创建的 Prometheus StatefulSet 中。
这是我使用的示例配置。一些关键点:
- 请用您的实际值替换尖括号中的值。
- 随意删除 arg
--include
。我添加它是因为nginx_http_requests_total
是我现在想要发送到 Stackdriver 的唯一 Prometheus 指标。查看 Managing costs for Prometheus-derived metrics 了解更多详情。 - 要找出要在
volumeMounts
中使用的卷的名称:- 列出 Prometheus Operator 命名空间中的 StatefulSet。假设您将其安装在
monitoring
命名空间中:kubectl get statefulsets -n monitoring
- 描述 Prometheus StatefulSet 假设其名称为
prometheus-prom-operator-prometheus-o-prometheus
:kubectl describe statefulset prometheus-prom-operator-prometheus-o-prometheus -n monitoring
- 在这个StatefulSet的详细信息中,找到名为
prometheus
的容器。注意在 arg--storage.tsdb.path
中传递给它的值
- 在同一路径上找到安装在该容器上的卷。在我的例子中,它是
prometheus-prom-operator-prometheus-o-prometheus-db
所以我也在我的 Stackdriver sidecar 容器上安装了相同的卷。
- 列出 Prometheus Operator 命名空间中的 StatefulSet。假设您将其安装在
prometheus:
prometheusSpec:
containers:
- name: stackdriver-sidecar
image: gcr.io/stackdriver-prometheus/stackdriver-prometheus-sidecar:0.7.5
imagePullPolicy: Always
args:
- --stackdriver.project-id=<GCP PROJECT ID>
- --prometheus.wal-directory=/prometheus/wal
- --stackdriver.kubernetes.location=<GCP PROJECT REGION>
- --stackdriver.kubernetes.cluster-name=<GKE CLUSTER NAME>
- --include=nginx_http_requests_total
ports:
- name: stackdriver
containerPort: 9091
volumeMounts:
- name: prometheus-prom-operator-prometheus-o-prometheus-db
mountPath: /prometheus
将此 yaml 保存到文件中。假设您将其保存到 prom-config.yaml
现在,找到您用于在集群上安装 Prometheus Operator Helm chart 的版本名称:
helm list
假设版本名称是prom-operator
,你可以根据上面的配置通过运行这个命令更新这个版本:
helm upgrade -f prom-config.yaml prom-operator stable/prometheus-operator
希望对您有所帮助。