目录
(1).前置阅读
(2).前置准备
(3).容器化生产规划
(4).使用redisd-exporter监控redis实例
1.镜像选择
2.容器化配置
(5).容器化步骤
(6).关键配置
1.prometheus-redis-configmap.yaml
2.datasource.yml
3.provision.yml
4.exporter-deployment-redis-cluster.yaml
(7).最终效果与dashboard详解
(8).相关文章
架构实战交流钉钉群号:23394754
(1).前置阅读
需要先行部署grafana/prometheus,以及合理拓扑,参见:
grafana&prometheus生产级容器化监控-1:生产级容器化
(2).前置准备
容器化redis-cluster实例,可以使用:
https://github.com/hepyu/k8s-app-config/tree/master/yaml/min-cluster-allinone/redis-cluster-min
参考文章:
kubernetes-20:redis-cluster容器化
注意:
即使生产上redis集群本身没有放在K8S中,本文同样适用。redis-exporter放到K8S也是很划算的。
(3).容器化生产规划
原始图片位于:
https://github.com/hepyu/k8s-app-config/blob/master/product/standard/grafana-prometheus-pro/images/grafana-prometheus生产级实践.jpg
如上图所示:
容器化多个prometheus实例
由于当数据量很大(metrics很多)或者grafana选择的时间跨度很大时,prometheus的吞吐性能会很有问题,再加上会有很多人通过grafana查看各业务数据,如果生产环境只部署一个prometheus,肯定是有问题的,prometheus会经常性崩溃。
同时,这样也可以设置不同的数据保存时间,比如对于mq来说,我希望保留更长时间的数据。
(4).使用redis-exporter监控redis-cluster实例
1.镜像选择
镜像:image: oliver006/redis_exporter:v0.28.0
容器化配置位于:
https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro/exporter-redis
2.容器化配置
建立新的prometheus实例,专门用于存放redis-cluster实例的metrics,同时dashboards导入方式选择provisioning方式。
笔者提供生产级容器化配置,位于:
https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro
prometheus-redis容器化配置:
https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro/prometheus-redis
dashboard位置:
https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/redis
还有一个是单实例redis的dashboard,由于redis单例用法早就淘汰,这里不赘述,有兴趣可以看看。
(5).容器化步骤
大体步骤,注意本例配置默认使用local pv(生产环境需要换成云存储),需要使用者自行创建。
1.cd https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro
#Kubectl apply -f grafana-prometheus-image-repo-secret.yaml (生产环境使用)
Kubectl apply -f grafana-prometheus-namespace.yaml
2.cd grafana-prometheus-pro/prometheus-redis
kubectl apply -f .
3.cd grafana-prometheus-pro/grafana
kubectl apply -f .
4.cd grafana-prometheus-pro/exporter-redis
Kubectl apply -f .
(6).关键配置
1.prometheus-redis-configmap.yaml
相对路径:prometheus-redis/prometheus-redis-configmap.yaml
配置服务发现,从k8s的那些pod拉取metrics:
代码语言:javascript复制label_exporter=redis, namespace=monitor的pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_exporter, __meta_kubernetes_namespace]
action: keep
regex: redis;monitor
2.datasource.yml
相对路径:grafana/provisioning/datasources
将数据库prometheus-redis放到grafana的数据库列表中:
代码语言:javascript复制- name: prometheus-redis
type: prometheus
access: proxy
orgId: 1
url: http://prometheus-redis:9090
isDefault: false
jsonData:
tlsAuth: false
tlsAuthWithCACert: false
3.provision.yml
相对路径:grafana/provisioning/dashboards
将redis-dashboards放到grafana的dashboards列表中:
代码语言:javascript复制- name: 'redis-cluster'
orgId: 1
folder: 'redis-cluster'
folderUid: ''
type: file
options:
path: /var/lib/grafana/k8s-app-config/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/redis
4.exporter-deployment-redis-cluster.yaml
env要配置被监控的redis-cluster:
- name: REDIS_ADDR
value: redis-hkc-0.redis-hkc.redis-cluster-min.svc.cluster.local:9720,redis-hkc-1.redis-hkc.redis-cluster-min.svc.cluster.local:9720,redis-hkc-2.redis-hkc.redis-cluster-min.svc.cluster.local:9720,redis-hkc-3.redis-hkc.redis-cluster-min.svc.cluster.local:9720,redis-hkc-4.redis-hkc.redis-cluster-min.svc.cluster.local:9720,redis-hkc-5.redis-hkc.redis-cluster-min.svc.cluster.local:9720
(7).最终效果与dashboard详解
1.总览
可以看到dashboard分5组:
下拉框说明:
2.master cluster info bgsave
master节点信息,主要是last bgsave的持续时间和发生时间,可以看到有负数存在,这个在grafana/prometheust体系中是普遍存在的,用于占位。
生产环境要用redis集群的哨兵模式,如果成本允许;bgsave可以关闭,对峰值时段的服务影响还是比较大的,会有很多尖锐的spike。
3.master cluster info
各项很好看懂,不再赘述。
4.node master
各项很好看懂,不再赘述。
(8).相关文章
grafana&prometheus生产级容器化监控-1:生产级容器化
kubernetes-20:redis-cluster容器化