使用 Exporter 监控 Kubernetes 集群应用

预计阅读时间 2 分钟

上一篇 讲解了如何利用 Prometheus 监控 Kubernetes 集群。本篇主要借助上一篇对 node_exporter 的理解,向大家介绍 使用 Exporter 监控 Kubernetes 集群应用。

Exporter

Prometheus 监控固然好用,但不是所有的服务都有自带 /metrics 接口。这个时候 Exporter 就派上用场了。Prometheus 官方为许多应用提供了对应的 Exporter 应用,也有许多第三方的实现,详见 Third-party exporters

这里需要注意的是,每个 Exporter 都有默认暴露的端口,详见 Default port allocations

下面以 redis 应用为例,为大家讲解如何使用 Exporter 监控 Kubernetes 集群应用。

redis

部署

下面是 redis 的部署文件。

# 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。通过这种方式就可以完成动态添加需要采集的应用

$ kubectl apply -f redis.yaml
deployment.apps/redis created
service/redis created

查看 redis 部署情况

$ kubectl get deployment -n observability
NAME         READY   UP-TO-DATE   AVAILABLE   AGE
prometheus   1/1     1            1           3d22h
redis        1/1     1            1           88s
$ 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 获取。

MakeOptim

MakeOptim

MakeOptim 是个人所学总结完再总结而形成的高质量文集。旨在通过这些文章,沉淀自己,帮助他人。