prometheus使用exporter監控應用-redis
參考https://www.qikqiak.com/k8s-book/docs/53.監控Kubernetes集群應用.html
應用可能沒有自帶/metrics
接口供 Prometheus 使用,在這種情況下,我們就需要利用 exporter 服務來為 Prometheus 提供指標數據了。Prometheus 官方為許多應用就提供了對應的 exporter 應用,也有許多第三方的實現,我們可以前往官方網站進行查看:exporters
通過一個redis-exporter的服務來監控 redis 服務,對於這類應用,我們一般會以 sidecar 的形式和主應用部署在同一個 Pod 中,比如我們這里來部署一個 redis 應用,並用 redis-exporter 的方式來采集監控數據供 Prometheus 使用,如下資源清單文件:(prome-redis.yaml)
apiVersion: extensions/v1beta1 kind: Deployment metadata: name: redis namespace: kube-system spec: template: metadata: # annotations: # prometheus.io/scrape: "true" # prometheus.io/port: "9121" labels: app: redis spec: containers: - name: redis image: redis:4 resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 6379 - name: redis-exporter image: oliver006/redis_exporter:latest resources: requests: cpu: 100m memory: 100Mi ports: - containerPort: 9121 --- kind: Service apiVersion: v1 metadata: name: redis namespace: kube-system spec: selector: app: redis ports: - name: redis port: 6379 targetPort: 6379 - name: prom port: 9121 targetPort: 9121
redis 這個 Pod 中包含了兩個容器,一個就是 redis 本身的主應用,另外一個容器就是 redis_exporter
[root@k8s-master prometheus]# kubectl apply -f prome-redis.yaml deployment.extensions/redis created service/redis created [root@k8s-master prometheus]# [root@k8s-master prometheus]# kubectl get pods -n kube-system | grep redis redis-69987696df-rrm6n 2/2 Running 0 61s [root@k8s-master prometheus]# kubectl get svc -n kube-system | grep redis redis ClusterIP 10.96.3.57 <none> 6379/TCP,9121/TCP 70s [root@k8s-master prometheus]#
我們可以通過 9121 端口來校驗是否能夠采集到數據:
[root@k8s-master prometheus]# curl 10.96.3.57:9121/metrics | grep redis_up % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 16548 0 16548 0 0 358k 0 --:--:-- --:--:-- --:--:-- 367k # HELP redis_up Information about the Redis instance # TYPE redis_up gauge redis_up 1 # HELP redis_uptime_in_seconds uptime_in_seconds metric # TYPE redis_uptime_in_seconds gauge redis_uptime_in_seconds 110 [root@k8s-master prometheus]#
同樣的,現在我們只需要更新 Prometheus 的配置文件:
- job_name: 'redis' static_configs: - targets: ['redis:9121'] #同一個namespace
[root@k8s-master prometheus]# vim prometheus/prometheus-configmap.yaml [root@k8s-master prometheus]# [root@k8s-master prometheus]# kubectl apply -f prometheus/prometheus-configmap.yaml configmap/prometheus-config configured [root@k8s-master prometheus]# #隔一會兒執行reload操作 curl -X POST "http://10.109.8.226:9090/-/reload"
按我的prometheus安裝方式,官方也默認配置pod自動發現,具體參考下一篇