[TOC]
## **Kubelet的指标**
kubelet通过`/metrics`暴露自身的指标数据。kubelet有两个端口都提供了这个url,一个是安全端口(10250),一个是非安全端口(10255,kubeadm安装的集群该端口是关闭的)。安全端口使用https协议,而且还需要认证与授权,所以我们通过浏览器直接访问 https://nodeip:10250/metrics, 会返回401 Unauthorized。
有两种方法可以在浏览器访问到这个Url:一个是开启kubelet的非安全端口;二是通过apiserver的代理API去访问:`/api/v1/nodes/{nodeName}/proxy/metrics`。
比如,我们一个集群有两个节点
```
$ kubectl get node -o wide
NAME STATUS ROLES AGE VERSION INTERNAL-IP EXTERNAL-IP OS-IMAGE KERNEL-VERSION CONTAINER-RUNTIME
peng01 Ready master 35d v1.17.3 192.168.2.101 <none> CentOS Linux 7 (Core) 4.19.12-1.el7.elrepo.x86_64 docker://18.9.9
peng02 Ready <none> 28s v1.17.3 192.168.2.102 <none> CentOS Linux 7 (Core) 4.19.12-1.el7.elrepo.x86_64 docker://19.3.12
```
我们可以通过以下两种方式,在浏览器中都可以访问到`peng02`的kubelet指标
方法一:kubelet的非安全端口
![](https://img.kancloud.cn/84/57/8457b0379a5e2e895c58b94120d43219_1225x309.png)
方法二:apiserver的代理API
![](https://img.kancloud.cn/4a/12/4a12191089d9b271ef61c655c832d37c_1224x305.png)
## **监控Kubelet的指标**
假设我们直接使用如下的配置:
```
- job_name: kubelet
kubernetes_sd_configs:
- role: node
```
由于prometheus中默认设置的kubelet的端口为10255,所以服务发现得到的Target的监听地址会是`http://nodeip:10255/metrics`,如下,很显然这是访问不通的
![](https://img.kancloud.cn/2f/c2/2fc22415b0df4805ca2a7447b8027900_1355x293.png)
kubelet的安全端口需要认证与授权(参考[《kubelet的认证》](https://www.kancloud.cn/pshizhsysu/kubernetes/1827158)),kubelet的认证机制有两种,kubeadm安装集群使用的是x509客户证书认证。
在使用prometheus监控kubelet时,由于prometheus容器中没有客户端证书,所我们通过Apiserver的代理API去采集kubelet的指标。
编辑prometheus-config.yaml,在采集任务中添加以下内容:
```
- job_name: kubelet
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: replace
target_label: __address__
replacement: kubernetes.default.svc:443
- action: replace
source_labels: [__meta_kubernetes_node_name]
regex: (.+)
target_label: __metrics_path__
replacement: /api/v1/nodes/${1}/proxy/metrics
```
解释一下上面的配置。prometheus去采集kubelet时,kubelet指标的完整地址应该为
```
https://kubernetes.default.svc:443/api/v1/nodes/{nodeName}/proxy/metrics
```
所以,`scheme`应该为`https`;`tls_config`与`bearer_token_file`的原理参考Kubernetes的[《ServiceAccount》](https://www.kancloud.cn/pshizhsysu/kubernetes/1827155)。
对于`relabel_configs`,`__address__`可以直接重置为`kubernetes.default.svc:443`。然后是`__metrics_path__`,值应该为`/api/v1/nodes/{nodeName}/proxy/metrics`,这个`nodeName`的值,我们要如何获取呢?
我们先看一下每个Target的初始指标有哪些,如下:
![](https://img.kancloud.cn/d2/7d/d27d77600d51d4bda5d9c3eb6ffb4ecd_631x560.png)
从上面可以发现,通过`__meta_kubernetes_node_name`可以拿到`nodeName`的值。
对于`relabel_configs`的原理,请阅读第五章的《Prometheus的relabel-config》。
- (一)快速开始
- 安装Prometheus
- 使用NodeExporter采集数据
- AlertManager进行告警
- Grafana数据可视化
- (二)探索PromQL
- 理解时间序列
- Metrics类型
- 初识PromQL
- PromQL操作符
- PromQL内置函数
- rate和irate
- 常见指标的PromQL
- 主机CPU使用率
- 主机内存使用率
- 主机磁盘使用率
- 主机磁盘IO
- 主机网络IO
- API的响应时间
- (三)Promtheus告警处理
- 自定义告警规则
- 示例-对主机进行监控告警
- 部署AlertManager
- 告警的路由与分组
- 使用Receiver接收告警信息
- 集成邮件系统
- 屏蔽告警通知
- 扩展阅读
- AlertManager的API
- Prometheus发送告警机制
- 实践:接收Prometheus的告警
- 实践:AlertManager
- (四)监控Kubernetes集群
- 部署Prometheus
- Kubernetes下的服务发现
- 监控Kubernetes集群
- 监控Kubelet的运行状态
- 监控Pod的资源(cadvisor)
- 监控K8s主机的资源
- KubeStateMetrics
- K8S及ETCD常见监控指标
- ETCD监控指标
- Kube-apiserver监控指标
- (五)其他
- Prometheus的relabel-config
- Target的Endpoint
- Prometheus的其他配置
- (六)BlackboxExporter
- 安装
- BlackboxExporter的应用场景
- 在Promtheus中使用BlackboxExporter
- 参考