繁体   English   中英

prometheus operator - 启用对所有命名空间中的所有内容的监控

[英]prometheus operator - enable monitoring for everything in all namespaces

我想通过 prometheus-operator 在名为developmentproduction命名空间中监视在 Kubernetes 集群上运行的几个应用程序。

使用的安装命令(根据Github )是:

helm install prometheus-operator stable/prometheus-operator -n production --set prometheusOperator.enabled=true,prometheus.service.type=NodePort,prometheusOperator.service.type=NodePort,alertmanager.service.type=NodePort,grafana.service.type=NodePort,grafana.service.nodePort=30906

我需要向上述命令添加哪些参数才能让prometheus-operator发现和监控在所有namespaces运行的所有应用程序/服务/pod?

有了这个, Service Discovery只显示一些prometheus-operator相关的services ,而不是我在“生产”命名空间中运行的应用程序,即使prometheus-operator安装在同一个namespace

我缺少什么吗?

注意 - 正在使用同一用户(使用$HOME/.kube/config file )执行所有操作,因此我认为权限不是问题。

kubectl 版本 - v1.17.3 掌舵版本 - 3.1.2

PS 在不同的论坛上有很多关于此的文章,但我仍然没有找到简单而直接的答案。

我有同样的问题。 经过一些调查回答更多细节。

我已经通过Helm 图表安装了 Prometheus 堆栈,其中包括直接作为子项目的 Prometheus 操作员图表。 Prometheus operator 监视由以下 helm 值指定的命名空间:

prometheusOperator:
  namespaces: ''
  denyNamespaces: ''
  prometheusInstanceNamespaces: ''
  alertmanagerInstanceNamespaces: ''
  thanosRulerInstanceNamespaces: ''

namespaces值指定了 ServiceMonitor 和 PodMonitor CRD 的受监控命名空间。 其他 CRD 有自己的设置,如果没有设置,默认为namespaces Helm 值作为命令行参数传递给运算符。 请参阅此处此处

普罗米修斯 CRD 由操作员从提到的命名空间中选择,默认情况下 - 无处不在。 但是,由于 Operator 的设计考虑了多个 Prometheus 的同时发布,因此特定 Prometheus 应用程序实例选择的内容由相应的 Prometheus CRD 控制。 CRD 选择器和相应的命名空间选择器通过以下 Helm 值控制:

prometheus:
  prometheusSpec:
    serviceMonitorSelectorNilUsesHelmValues: true
    serviceMonitorSelector: {}
    serviceMonitorNamespaceSelector: {}

其他 CRD 也有类似的值:alertmanagerConfigXXX、ruleNamespaceXXX、podMonitorXXX、probeXXX。 XXXSelectorNilUsesHelmValues设置为 true,意味着查找具有特定发布标签的 CRD,例如release=myrelease 这里

空选择器(对于命名空间、CRD 或任何其他对象)意味着没有过滤。 因此,对于 Prometheus 对象从其他命名空间中获取 ServiceMonitor 的选项很少:

  • 设置serviceMonitorSelectorNilUsesHelmValues: false 这使得 serviceMonitorSelector 为空。
  • 将发布标签(例如release=myrelease )应用于您的 ServiceMonitor CRD。
  • 设置一个与您的 ServiceMonitor 匹配的非空 serviceMonitorSelector。

对于好奇的人,这里是运营商来源的链接:

我使用了https://github.com/helm/charts/blob/master/stable/prometheus-operator/values.yaml 中的values.yaml ,将参数 *NilUsesHelmValues 修改为 False ,它似乎可以正常工作。 helm install prometheus-operator stable/prometheus-operator -n monitoring -f values.yaml

此外,如https://stackoverflow.com/users/7889479/anish-kumar-mourya所述,这些服务确实显示在 Grafana 仪表板中,即使它们没有出现在服务发现或目标下的 Prometheus UI 中。

希望这可以帮助像我这样的其他新手。

不可以,但是您可以创建新的命名空间进行监控,并在那里安装 prometheus 可以很好地管理与监控相关的事情。

helm install prometheus-operator stable/prometheus-operator -n monitoring

您需要为 pod 创建一个服务和一个 serviceMonitor 自定义资源来配置 prometheus 需要在哪些命名空间中发现哪些服务。

kube-state-metrics 服务示例

apiVersion: v1
kind: Service
metadata:
  labels:
    app: kube-state-metrics
    k8s-app: kube-state-metrics
  annotations:
    alpha.monitoring.coreos.com/non-namespaced: "true"
  name: kube-state-metrics
spec:
  ports:
  - name: http-metrics
    port: 8080
    targetPort: metrics
    protocol: TCP
  selector:
    app: kube-state-metrics

此服务针对所有带有 k8s-app: kube-state-metrics 标签的 Pod。

通用 ServiceMonitor 示例

此 ServiceMonitor 以命名空间 kube-system 和 monitoring (spec.namespaceSelector) 中带有标签 k8s-app (spec.selector) 任何值的所有服务为目标。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: k8s-apps-http
  labels:
    k8s-apps: http
spec:
  jobLabel: k8s-app
  selector:
    matchExpressions:
    - {key: k8s-app, operator: Exists}
  namespaceSelector:
    matchNames:
    - kube-system
    - monitoring
  endpoints:
  - port: http-metrics
    interval: 15s

https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/running-exporters.md

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM