上一篇 讲解了如何利用 Prometheus 监控 Kubernetes 集群。本篇主要借助上一篇对 node_exporter
的理解,向大家介绍 使用 Exporter 监控 Kubernetes 集群应用。
Exporter
Prometheus 监控固然好用,但不是所有的服务都有自带 /metrics
接口。这个时候 Exporter 就派上用场了。Prometheus 官方为许多应用提供了对应的 Exporter 应用,也有许多第三方的实现,详见 Third-party exporters。
这里需要注意的是,每个 Exporter 都有默认暴露的端口,详见 Default port allocations。
下面以 redis
应用为例,为大家讲解如何使用 Exporter 监控 Kubernetes 集群应用。
redis
部署
下面是 redis
的部署文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# redis.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: redis
namespace: observability
spec:
selector:
matchLabels:
app: redis
template:
metadata:
labels:
app: redis
spec:
containers:
- name: redis
image: redis:5.0.8
resources:
limits:
cpu: 1000m
memory: 500Mi
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 6379
- name: redis-exporter
image: oliver006/redis_exporter:latest
resources:
limits:
cpu: 200m
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
ports:
- containerPort: 9121
---
kind: Service
apiVersion: v1
metadata:
name: redis
annotations:
prometheus.io/scrape: "true"
prometheus.io/port: "9121"
namespace: observability
spec:
selector:
app: redis
ports:
- name: redis
port: 6379
targetPort: 6379
- name: prom
port: 9121
targetPort: 9121
一般地,Exporter 会以 sidecar
的形式和主应用部署在同一个 Pod 中。这里,使用 redis-exporter
这个 sidecar
来采集 redis
的监控数据供 Prometheus 使用。
在 Default port allocations 中可以找到 redis_exporter 默认的端口为 9121
,因此,这里设置 prometheus.io/port: "9121"
。
Prometheus server
根据配置匹配定义注解 prometheus.io/scrape: 'true'
的 pod,并将 pod ip 和注解中定义的端口(prometheus.io/port: "9121"
)和路径(prometheus.io/path:"/metrics"
)拼接成采集目标 http://xx.xx.xx.xx:9121/metrics。通过这种方式就可以完成动态添加需要采集的应用。
1
2
3
$ kubectl apply -f redis.yaml
deployment.apps/redis created
service/redis created
查看 redis
部署情况
1
2
3
4
$ kubectl get deployment -n observability
NAME READY UP-TO-DATE AVAILABLE AGE
prometheus 1/1 1 1 3d22h
redis 1/1 1 1 88s
1
2
3
4
5
$ kubectl get service -n observability
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
node-exporter NodePort 10.111.82.119 <none> 9100:31672/TCP 23h
prometheus NodePort 10.98.133.13 <none> 9090:31033/TCP 3d22h
redis ClusterIP 10.104.118.216 <none> 6379/TCP,9121/TCP 42s
验证
查看指标
从上图可以看出,redis_exporter
服务已经被 Prometheus 自动发现。
查看 reids_
可以看出,已经增加了redis_exporter 相关的指标数据。
小结
本篇为大家介绍了使用 Prometheus 使用 Exporter 监控 Kubernetes 集群应用。下一篇将为大家带来,监控自己的服务。
注:本章内容涉及的 yaml 文件可前往 https://github.com/MakeOptim/service-mesh/prometheus 获取。