Kubernetes 1.7 下的 Prometheus 监控

在 Kubernetes 的标准 Heapster + InfluxDB 的监控方案之外,还有一个监控工具就是 Prometheus 了,相比 InfluxDB 来说,Prometheus 有更集中的检测能力,更多的 Exporter(数据源)支持(不过好像还是打不过 Zabbix?),以及更新潮。。

另外不少新的软件方案缺省开始支持 Prometheus 的数据抓取,所以,早上早填坑。下面是日前在一个 Kubernetes 1.7.3 集群中部署 Prometheus 监控遇到的两个坑,分享一下:

cAdvisor

官方示例解释如下:

This is required for Kubernetes 1.7.3 and later, where cAdvisor metrics (those whose names begin with 'container_') have been removed from the Kubelet metrics endpoint. This job scrapes the cAdvisor endpoint to retrieve those metrics.

In Kubernetes 1.7.0-1.7.2, these metrics are only exposed on the cAdvisor HTTP endpoint; use "replacement: /api/v1/nodes/${1}:4194/proxy/metrics" in that case (and ensure cAdvisor's HTTP server hasn't been disabled with the --cadvisor-port=0 Kubelet flag).

在 Kubernetes 1.7.3 和后续版本中,命名前缀为container_ 的 cAdvisor 指标被从 Kubelet 中移除,这一个 Job 从 cAdvisor 端点中抓取数据。

在 Kubernetes 1.7.0 - 1.7.2 中,这些指标只暴露在 cAdvisor 的 http 端点中,需要使用 eplacement: /api/v1/nodes/${1}:4194/proxy/metrics。(注意保证 cAdvisor 的 http 服务没有被--cadvisor-port=0禁用)。

- job_name: 'kubernetes-cadvisor'
  scheme: https
  tls_config:
    ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt
  bearer_token_file: /var/run/secrets/kubernetes.io/serviceaccount/token
  kubernetes_sd_configs:
  - role: node
  relabel_configs:
  - action: labelmap
    regex: __meta_kubernetes_node_label_(.+)
  - target_label: __address__
    replacement: kubernetes.default.svc:443
  - source_labels: [__meta_kubernetes_node_name]
    regex: (.+)
    target_label: __metrics_path__
    replacement: /api/v1/nodes/${1}/proxy/metrics/cadvisor

kube-state-metrics

https://github.com/kubernetes/kube-state-metrics

网址就能看出,这一服务和 Kubernetes 有点亲密。运行之后,能够为 Prometheus 提供大量详细指标, 而且这一服务的指标相对来说更具逻辑性,更方便从服务/应用的角度进行监控。

目前容器地址为(不过能 pull 到最新的 v1.0.0,可能是 README 没有同步):

gcr.io/google_containers/kube-state-metrics:v0.5.0