主要是使用grafana来实现监控,grafana可以对接多种数据源,在官网中可以找到Redis数据源,需要安装redis data source插件。当然也可以利用Prometheus来做数据源,下面分别记录一下这两种数据源的安装配置过程。
环境:
redis cluster: localhost:9001 - localhost:9006
grafana: localhost:3000
prometheus: localhost:9090
redis_exporter: localhost:9121
grafana的redis 数据源,官方安装手册Redis
安装可以使用grafana-cli,也可以离线下载,解压到/var/lib/grafana/plugins
文件夹内。
grafana-cli plugins install redis-datasource
重启grafana之后,添加数据源,搜索Redis
之后导入自带的看板
Redis效果如下
后续也可以用redis数据源自建看板,监控指定业务数据。
Prometheus支持很多三方的exporter来采集数据,Prometheus Redis Metrics Exporter就是一个比较流行的用来采集redis的工具。
可以使用比较方便的docker镜像启动,如何使用介绍的都比较全面。这里只需要启动一个redis exporter即可,如果要监控多个集群,且redis密码不同才需要部署多个exporter。
docker pull oliver006/redis_exporter
docker run -d --name redis_exporter -p 9121:9121 oliver006/redis_exporter --redis.addr =redis://localhost:6001,redis://localhost:6002,redis://localhost:6003 --redis.password=123456
启动后可以打开 http://localhost:9121/metrics
可以看到数据。
也可以指定redis地址http://localhost:9121/scrape?target=redis%3A%2F%2Flocalhost%3A6003
来查看其他机器上的redis情况
之后,需要编辑prometheus.yml 来配置采集地址。
# redis集群监控
- job_name: 'redis_cluster'
static_configs:
- targets:
- redis://localhost:6001
- redis://localhost:6002
- redis://localhost:6003
- redis://localhost:6004
- redis://localhost:6005
- redis://localhost:6006
metrics_path: /scrape
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: localhost:9121
注意:好多帖子还配置了redis_exporter监控,这个不用配,打开是第一个redis的节点,上面已经包含了。好多帖子也启动了多个exporter,每个节点一个,也没必要。
# exporter监控 可以不用配,其实它的数据是上面其中一个
- job_name: 'redis_exporter'
scrape_interval: 5s
static_configs:
- targets:
- localhost:9121
这样配置好之后,就会从这样的地址去获取数据了 http://localhost:9121/scrape?target=redis%3A%2F%2Flocalhost%3A6003
之后重新加载Prometheus,可以重启也可以用热加载。
curl -X POST http://localhost:9090/-/reload
然后看一下Prometheus Targets中是否已经正常启动。
最后就是到Grafana Dashboards搜索Redis,选配合适的看板。
redis_exporter作者使用763-redis-dashboard-for-prometheus-redis-exporter-1-x
注意:Memory Usage这个图表,一直是N/A。是因为redis_memory_max_bytes 获取的值为0
导致 redis_memory_used_bytes / redis_memory_max_bytes 结果不正常。
可以手动将redis_memory_max_bytes改为服务器内存大小。
sum(100 * (redis_memory_used_bytes{instance=~"$instance"} / redis_memory_max_bytes{instance=~"$instance"}))
# 假如服务器内存为 1GB
sum(100 * (redis_memory_used_bytes{instance=~"$instance"} / 1073741824))