当前位置:   article > 正文

Prometheus Exporter 监控 Redis_redis prometheus exporter

redis prometheus exporter

Exporter简介

Prometheus已经成为云原生应用监控行业的标准,在很多流行的监控系统中都已经实现了Prometheus的监控接口,例如etcd、Kubernetes、CoreDNS等,他们可以直接被Prometheus监控,但是大多数监控对象都没办法直接提供监控接口,主要原因有

(1) 很多系统在Prometheus诞生前很多年就已经发布,例如MySQL、Redis等

(2) 它们本身不支持HTTP接口,例如对于硬件性能指标,操作系统并没有原生的HTTP接口可以获取;

(3) 考虑到安全性、稳定性及代码耦合等因素的影响

在这个背景之下,exporter诞生,exporter是一个采集监控数据并通过Prometheus监控规范对外提供数据的组件。除了官方实现的exporter如Node exporter、HAProxy exporter、Mysql exporter,还有很多第三方的如Redis exporter和Rabbitmq exporter

这些exporter主要通过被监控对象提供的监控相关的接口获取监控数据,这些接口主要通过以下方式对外提供服务。

(1) HTTP/HTTPS方式。例如Rabbitmq exporter通过Rabbitmq的HTTPS接口获取监控数据

(2) TCP方式。例如Redis exporter通过Redis提供的系统监控相关命令获取监控指标,MySQL server exporter 通过MySQL开放的监控相关的表获取监控指标

(3) 本地文件方式。 例如Node exporter通过读取proc文件系统下的文件,计算得出整个操作系统状态

(4) 标准协议方式。例如IPMI exporter通过IPMI协议获取硬件相关信息。这些exporter将不同规范和格式的监控指标进行转化,输出prometheus能够识别的监控数据格式,从而极大扩展prometheus采集数据的能力

使用exporter 监控Redis

Redis应用没有自带的/metrics接口,我们就需要利用exporter服务来为prometheus提供指标数据了。Prometheus官方为许多应用提供了exporter应用

我们这次使用Reedis exporter进行演示,对于这类应用,我们一般会以 sidecar 的形式和主应用部署在同一个 Pod 中,比如我们这里来部署一个 redis 应用,并用 redis-exporter 的方式来采集监控数据供 Prometheus 使用

创建一个Redis项目,包含2个pod

  1. cat >>prometheus-redis-exporter.yaml <<EOF
  2. apiVersion: extensions/v1beta1
  3. kind: Deployment
  4. metadata:
  5. name: redis
  6. namespace: abcdocker
  7. spec:
  8. template:
  9. metadata:
  10. labels:
  11. app: redis
  12. spec:
  13. containers:
  14. - name: redis
  15. image: redis:4
  16. resources:
  17. requests:
  18. cpu: 100m
  19. memory: 100Mi
  20. ports:
  21. - containerPort: 6379
  22. - name: redis-exporter
  23. image: oliver006/redis_exporter:latest
  24. resources:
  25. requests:
  26. cpu: 100m
  27. memory: 100Mi
  28. ports:
  29. - containerPort: 9121
  30. ---
  31. kind: Service
  32. apiVersion: v1
  33. metadata:
  34. name: redis
  35. namespace: abcdocker
  36. spec:
  37. selector:
  38. app: redis
  39. ports:
  40. - name: redis
  41. port: 6379
  42. targetPort: 6379
  43. - name: prom
  44. port: 9121
  45. targetPort: 9121
  46. EOF

在命名空间中,我们将命名空间指定到abcdocker

  1. #创建命名空间
  2. [root@abcdocker prometheus]# kubectl create namespace abcdocker
  3. namespace/abcdocker created
  4. #创建redis项目
  5. [root@abcdocker prometheus]# kubectl create -f prometheus-redis-exporter.yaml
  6. deployment.extensions/redis created
  7. service/redis created
  8. #查看redis pod是否正常
  9. [root@abcdocker prometheus]# kubectl get pod -n abcdocker
  10. NAME READY STATUS RESTARTS AGE
  11. redis-58c6c94968-8tsxg 2/2 Running 0 84s
  12. #查看svc是否正常
  13. [root@abcdocker prometheus]# kubectl get svc -n abcdocker
  14. NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
  15. redis ClusterIP 10.96.199.222 6379/TCP,9121/TCP 2m18s
  16. #镜像拉的比较慢,都是可以拉到的镜像,我这里就不提供压缩包了

创建完毕之后,在redis-exporter里面已经包含了metrics,我们访问一下service的metrics接口即可

  1. #ip为service IP (出现以下内容为服务正常)
  2. curl 10.96.199.222:9121/metrics
  3. # HELP exporter_scrape_duration_seconds Duration of scrape by the exporter
  4. # TYPE exporter_scrape_duration_seconds summary
  5. exporter_scrape_duration_seconds{quantile="0.5"} NaN
  6. exporter_scrape_duration_seconds{quantile="0.9"} NaN
  7. exporter_scrape_duration_seconds{quantile="0.99"} NaN
  8. exporter_scrape_duration_seconds_sum 0
  9. exporter_scrape_duration_seconds_count 0
  10. # HELP go_gc_duration_seconds A summary of the GC invocation durations.
  11. # TYPE go_gc_duration_seconds summary
  12. go_gc_duration_seconds{quantile="0"} 0
  13. ....
  14. redis_target_scrape_request_errors_total 0
  15. # HELP redis_up Information about the Redis instance
  16. # TYPE redis_up gauge
  17. redis_up 1
  18. # HELP redis_uptime_in_seconds uptime_in_seconds metric
  19. # TYPE redis_uptime_in_seconds gauge
  20. redis_uptime_in_seconds 184

Redis创建完毕,我们还需要修改prometheus配置文件(ConfigMap)

  1. #添加如下
  2. - job_name: 'redis'
  3. static_configs:
  4. - targets: ['redis.abcdocker.svc.cluster.local:9121']
  5. #job_name 是显示在prometheus监控项的名称
  6. #redis 为service名称
  7. #abcdocker为命名空间(如果和prometheus在一个命名空间下可以不写)
  8. #svc.cluster.local固定格式
  9. #9121为service端口

我们之前有一个configmap需要删除之前的,在重新创建一个

  1. [root@abcdocker prometheus]# kubectl delete -f prometheus.configmap.yaml
  2. configmap "prometheus-config" deleted
  3. [root@abcdocker prometheus]# kubectl create -f prometheus.configmap.yaml
  4. configmap/prometheus-config created
  5. #查看service是否正常
  6. [root@yzsjhl82-138 prometheus]# kubectl get svc -n kube-system |grep prometheus
  7. prometheus NodePort 10.101.143.162 9090:32331/TCP 3h14m
  8. #我们需要通过curl命令,进行热更新
  9. [root@abcdocker prometheus]# curl -X POST "http://10.101.143.162:9090/-/reload"

更新完毕后,在prometheus Web Ui界面就可以看到展示结果

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/624715
推荐阅读
相关标签
  

闽ICP备14008679号