如何配置prometheus kubernetes_sd_configs 指定特定主机端口?

Posted

技术标签:

【中文标题】如何配置prometheus kubernetes_sd_configs 指定特定主机端口?【英文标题】:How to configure prometheus kubernetes_sd_configs to specify a specific host port? 【发布时间】:2020-08-19 12:48:09 【问题描述】:

我在 GKE 上的另一个端口 (11100) 上运行节点导出器,并将 prometheus.yml 配置为使用 kubernetes_sd_configs。但是,服务发现似乎正在返回具有 Kubelet 端口 (10250) <node-ip>:10250/metrics 的节点 IP。我似乎找不到指定使用哪个端口的方法。有什么想法吗?

 - job_name: gke-nodes
      kubernetes_sd_configs:
      - role: node

另外,node-exporter 在端口11100 中运行正常。我通过在内部节点 IP <node-ip>:11100/metrics 中执行 curl 来验证它,它就像一个魅力


这是我的节点导出器定义

apiVersion: apps/v1
kind: DaemonSet
metadata:
  name: node-exporter-ds
  namespace: monitoring
  labels:
    app: node-exporter
    belongsTo: monitoring
spec:
  selector:
    matchLabels:
      app: node-exporter
  template:
    metadata:
      labels:
        app: node-exporter
    spec:
      serviceAccountName: monitoring-sa
      volumes:
        - name: proc
          hostPath:
            path: /proc
        - name: sys
          hostPath:
            path: /sys
      containers:
        - name: node-exporter
          image: prom/node-exporter:v0.18.1
          args:
            - "--web.listen-address=0.0.0.0:11100"
            - "--path.procfs=/proc_host"
            - "--path.sysfs=/host_sys"
          ports:
            - containerPort: 11100
              hostPort: 11100
          volumeMounts:
          - name: sys
            readOnly: true
            mountPath: /host_sys
          - name: proc
            readOnly: true
            mountPath: /proc_host
          imagePullPolicy: IfNotPresent
      hostNetwork: true
      hostPID: true

【问题讨论】:

你是如何设置 prometheus/node 导出器的? 我将在问题中更新它,以便向您展示我的节点导出器定义 能分享一下prometheus/node exporter的错误信息和日志吗? 【参考方案1】:

以防万一有人遇到同样的问题,此配置将添加与 Kubelet 端口不同的 k8s 节点 IP:

  - job_name: 'gke-nodes'
    kubernetes_sd_configs: 
    - role: node
    relabel_configs:
      - source_labels: [__address__]
        action: replace
        regex: ([^:]+):.*
        replacement: $1:11100 # port you want to use
        target_label: __address__

kubernetes_sd_config 的默认行为是将具有 Kubelet 端口的节点的 IP 添加为目标,这在 documentation 中指定: p>

节点角色为每个集群节点发现一个目标,其地址默认Kubelet 的 HTTP 端口

但是,您可以使用 relabel_config 覆盖 __address__ 标签并将 Kubelet 端口替换为任何需要的端口。

【讨论】:

以上是关于如何配置prometheus kubernetes_sd_configs 指定特定主机端口?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用配置文件使 Prometheus Alertmanager 静音?

如何配置 Grafana 以捕捉 Prometheus 指标的急剧下降?

如何使用 Istio 的 Prometheus 配置 kubernetes hpa?

如何在 prometheus 配置中重新标记 ECS cadvisor 标签?

Prometheus Helm Chart:如何配置黑盒导出器?

如何在使用 grafana 和 prometheus-operator 时配置电子邮件警报