美文网首页微服务 DevOps
微服务监控 - 使用 Exporter 监控 Kubernete

微服务监控 - 使用 Exporter 监控 Kubernete

作者: CatchZeng | 来源:发表于2021-05-15 21:47 被阅读0次

    原文:https://makeoptim.com/service-mesh/prometheus-exporter

    上一篇 讲解了如何利用 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
    

    验证

    查看指标

    image

    从上图可以看出,redis_exporter 服务已经被 Prometheus 自动发现。

    image

    查看 reids_ 可以看出,已经增加了redis_exporter 相关的指标数据

    小结

    本篇为大家介绍了使用 Prometheus 使用 Exporter 监控 Kubernetes 集群应用。下一篇将为大家带来,监控自己的服务

    注:本章内容涉及的 yaml 文件可前往 https://github.com/MakeOptim/service-mesh/prometheus 获取。

    相关文章

      网友评论

        本文标题:微服务监控 - 使用 Exporter 监控 Kubernete

        本文链接:https://www.haomeiwen.com/subject/tcikjltx.html