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/ ,就可以看到如下监控视图:


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