# 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`禁用）。

~~~yaml
- 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`
