【问题标题】:How to monitor external service in prometheus-operatorprometheus-operator中如何监控外部服务
【发布时间】:2019-07-02 08:35:37
【问题描述】:

我正在尝试在 prometheus-operator 中监控外部服务(即 cassandra 指标的导出器)。我使用 helm 2.11.0 安装了 prometheus-operator。我使用这个 yaml 安装了它:

apiVersion: v1
kind: ServiceAccount
metadata:
  name: tiller
  namespace: kube-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: tiller
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: tiller
    namespace: kube-system

以及我的 kubernetes 集群上的这些命令:

kubectl create -f rbac-config.yml
helm init --service-account tiller --history-max 200
helm install stable/prometheus-operator --name prometheus-operator --namespace monitoring

接下来,根据文章: how monitor to an external service

我尝试执行其中描述的步骤。正如建议的那样,我为现有的 Prometheus 创建了带有标签的 Endpoints、Service 和 ServiceMonitor。这是我的 yaml 文件:

apiVersion: v1
kind: Endpoints
metadata:
  name: cassandra-metrics80
  labels:
    app: cassandra-metrics80
subsets:
- addresses:
  - ip: 10.150.1.80
  ports:
  - name: web
    port: 7070
    protocol: TCP
apiVersion: v1
kind: Service
metadata:
  name: cassandra-metrics80
  namespace: monitoring
  labels:
    app: cassandra-metrics80
    release: prometheus-operator
spec:
  externalName: 10.150.1.80
  ports:
  - name: web
    port: 7070
    protocol: TCP
    targetPort: 7070
  type: ExternalName
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: cassandra-metrics80
  labels:
    app: cassandra-metrics80
    release: prometheus-operator
spec:
  selector:
    matchLabels:
      app: cassandra-metrics80
      release: prometheus-operator
    namespaceSelector:
      matchNames:
      - monitoring
  endpoints:
  - port: web
    interval: 10s
    honorLabels: true

在普罗米修斯服务发现页面我可以看到:

此服务未激活,所有标签均已删除。 我做了很多事情试图解决这个问题,比如设置 targetLabels。试图重新标记曾经被发现的,如 此处描述:prometheus relabeling 但不幸的是,没有任何效果。可能是什么问题,或者我该如何更好地调查?

【问题讨论】:

    标签: kubernetes prometheus kubernetes-helm prometheus-operator


    【解决方案1】:

    好的,我发现服务应该与服务监视器和端点在同一个命名空间中,之后普罗米修斯开始看到一些来自 cassandra 的指标。

    【讨论】:

    • 另外,Endpoint 和 Service 必须同名。
    【解决方案2】:

    严格来说,只有“端点”和“服务”应该在同一个命名空间中。 此外,“端点”和“服务”应与 Lucas 之前提到的名称相同。

    ServiceMonitor 可以放置在任何地方,它会在定义的命名空间 (namespaceSelector->matchNames) 内查找并抓取 SVC/Endpoint,并匹配所有标签 (selector->matchLabels):

        spec:
      selector:
        matchLabels:
          app: cassandra-metrics80
          release: prometheus-operator
      namespaceSelector:
        matchNames:
        - my-namespace
    

    此外,现在还有更简单的方法来定义额外的抓取: https://github.com/prometheus-operator/prometheus-operator/blob/master/Documentation/additional-scrape-config.md 第二个唯一的缺点是它需要在更改后重新启动 pod。基于 Endpoint/Service/ServiceMonitor 的配置似乎会被自动发现和应用。

    【讨论】:

    • 感谢您提供准确信息,不幸的是我无法检查这是否正确。最好的问候。