Please enable Javascript to view the contents

使用集群内 Prometheus 采集 Etcd 指标

 ·  ☕ 1 分钟

1. 跳过证书校验无法获取监控

如果指标抓取时,能跳过 TLS 认证是最便捷的。其 Prometheus 的 ConfigMap 配置如下:

1
2
3
4
5
6
7
8
9
    - job_name: etcd
      metrics_path: /metrics
      scheme: https
      tls_config:
        insecure_skip_verify: true
      static_configs:
      - targets: [ '1.1.1.1:2379' ]
      - targets: [ '2.2.2.2:2379' ]
      - targets: [ '3.3.3.3:2379' ]

但 Prometheus Targets 报错 Get "https://3.3.3.3:2379/metrics": remote error: tls: bad certificate

在 targets 页面的报错如下图:

2. curl 验证抓取请求

  • 跳过证书
1
2
3
curl https://1.1.1.1:2379/metrics -k

curl: (35) error:1401E412:SSL routines:CONNECT_CR_FINISHED:sslv3 alert bad certificate

这个报错没找到解法,于是直接换成了需要 TLS 的方式。

  • 配置证书使用 curl 获取数据
1
curl https://1.1.1.1:2379/metrics --cacert /etc/ssl/etcd/ssl/ca.pem --cert /etc/ssl/etcd/ssl/node-node1.pem --key /etc/ssl/etcd/ssl/node-node1-key.pem

成功返回 Metrics 数据。

这里的 node-node1.pem 证书应该包含全部 Etcd 节点 IP 的域。可以通过 openssl x509 -noout -text -in /etc/ssl/etcd/ssl/node-node1.pem 查看证书相关信息。

3. 给集群 Prometheus 新增 Etcd TLS 抓取

  • 创建凭证
1
kubectl -n monitor create secret generic etcd-certs --from-file=/etc/ssl/etcd/ssl/ca.pem --from-file=/etc/ssl/etcd/ssl/node-node1.pem --from-file /etc/ssl/etcd/ssl/node-node1-key.pem

这里的证书就是上面 curl 验证过的证书。

  • 在 Deployment 中挂载证书
1
kubectl -n monitor edit deployments.apps prometheus-server 

新增如下两部分内容:

1
2
3
        volumeMounts:
        - mountPath: /var/run/secrets/kubernetes.io/k8s-certs/etcd/
          name: k8s-certs
1
2
3
4
      volumes:
      - name: k8s-certs
        secret:
          secretName: etcd-certs
  • 在 ConfigMap 中添加抓取 Etcd 指标的 Job
1
kubectl -n monitor edit cm prometheus-server
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
    - job_name: etcd
      metrics_path: /metrics
      scheme: https
      tls_config:
        ca_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/ca.pem
        cert_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/node-node1.pem
        key_file: /var/run/secrets/kubernetes.io/k8s-certs/etcd/node-node1-key.pem
      static_configs:
      - targets: [ '1.1.1.1:2379' ]
      - targets: [ '2.2.2.2:2379' ]
      - targets: [ '3.3.3.3:2379' ]
  • 查看 targets 的状态

此时,在 Prometheus 中,应该可以看到抓取 Etcd 监控数据的 Job 状态为 Up,如下图:

4. 导入 Grafana 面板查看监控数据

在 Grafana 中导入面板 3070,即 https://grafana.com/grafana/dashboards/3070-etcd/ ,就可以看到如下监控视图:


微信公众号
作者
微信公众号