ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Nightingale 集成 Redis 监控:基于 Categraf 的 info 采集、多实例与集群监控完整指南

Nightingale 集成 Redis 监控:基于 Categraf 的 info 采集、多实例与集群监控完整指南 Nightingale 集成 Redis 监控基于 Categraf 的 info 采集、多实例与集群监控完整指南【免费下载链接】nightingaleNightingale is to monitoring and alerting what Grafana is to visualization.项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale本指南讲解 Nightingale 生态中 Redis 监控插件的使用方式监控 agentCategraf通过连接 Redis 实例执行info命令解析返回结果后整理成监控数据上报配合仓库内置的告警规则与监控大盘即可快速落地 Redis 的可用性、性能与容量监控。读完本文你将掌握 Redis 插件的最小配置、多实例扩展、集群与 Sentinel 的监控思路以及告警规则和大盘的使用方法。Redis 监控的核心原理仓库内 integrations/Redis/markdown/README.md 对监控原理的描述非常精炼连上 Redis执行info命令解析结果整理成监控数据上报。info是 Redis 自带的诊断命令返回服务端运行时状态按 section 组织成key:value文本块例如# Server redis_version:7.0.12 uptime_in_seconds:86400 # Clients connected_clients:32 # Memory used_memory:1048576 maxmemory:0 # Stats total_commands_processed:1024000 keyspace_hits:9000 keyspace_misses:1000 expired_keys:50 evicted_keys:2 # Keyspace db0:keys100,expires50,avg_ttl0监控插件周期性连接 Redis 实例、执行info、把上述指标行解析为带redis_前缀的时序指标如redis_used_memory、redis_connected_clients、redis_uptime_in_seconds再统一上报到 Nightingale。这一点可以从仓库自带的监控大盘得到印证integrations/Redis/dashboards/redis_by_categraf.json中的所有面板查询都基于redis_前缀指标例如redis_uptime_in_seconds、redis_connected_clients、redis_used_memory、redis_total_commands_processed、redis_keyspace_hits/misses等。插件配置文件与最小可用配置Redis 插件的配置位于conf/input.redis/redis.toml仓库内的示例文件为 integrations/Redis/collect/redis/redis.toml。最简单的配置如下[[instances]] address 127.0.0.1:6379 username password labels { instancen9e-10.23.25.2:6379 }各字段含义配置项说明addressRedis 实例地址格式ip:portusernameRedis 6.0 的 ACL 用户名无则留空password访问密码无则留空labels附加维度标签官方强烈建议配置instance标签仓库示例文件还展示了一批可选配置项# # collect interval # interval 15 [[instances]] # address 127.0.0.1:6379 # username # password # pool_size 2 # # Optional. Specify redis commands to retrieve values # commands [ # {command [get, sample-key1], metric custom_metric_name1}, # {command [get, sample-key2], metric custom_metric_name2} # ] # # interval global.interval * interval_times # interval_times 1 # important! use global unique string to specify instance # labels { instancen9e-10.2.3.4:6379 } ## Optional TLS Config # use_tls false # tls_min_version 1.2 # tls_ca /etc/categraf/ca.pem # tls_cert /etc/categraf/cert.pem # tls_key /etc/categraf/key.pem ## Use TLS but skip chain host verification # insecure_skip_verify true这些可选参数的作用interval采集周期秒不配置时沿用全局采集间隔pool_size与 Redis 建立连接时的连接池大小默认 2commands插件额外支持的自定义命令采集能力可对指定的 key 执行 Redis 命令并把返回值注册为自定义指标。例如{command [get, sample-key1], metric custom_metric_name1}会把GET sample-key1的返回值上报为名为custom_metric_name1的指标适用于采集业务侧自定义计数器的场景interval_times本实例的采集间隔倍率实际采集周期 全局间隔 ×interval_timeslabels附加维度标签注释中特别强调important! use global unique string to specify instance务必使用全局唯一的字符串标识实例TLS 配置use_tls、tls_min_version默认 1.2、tls_ca、tls_cert、tls_key用于对 Redis 开启 TLS 加密的场景insecure_skip_verify true可跳过证书链与主机名校验。多实例监控用多个 instances 扩展监控多个 Redis 实例时只需要在同一个redis.toml里追加多个[[instances]]块即可[[instances]] address 10.23.25.2:6379 username password labels { instancen9e-10.23.25.2:6379 } [[instances]] address 10.23.25.3:6379 username password labels { instancen9e-10.23.25.3:6379 }每个[[instances]]块对应一个独立的 Redis 连接与采集任务agent 会分别连接各地址执行info并各自上报指标。为什么强烈建议配置instance标签文档中的原话是建议通过 labels 配置附加一个 instance 标签便于后面复用监控大盘。仓库内的大盘 integrations/Redis/dashboards/redis_by_categraf.json 正是通过instance标签做面板过滤的其变量定义label_values(redis_uptime_in_seconds, instance)直接枚举所有上报的instance值各面板查询均形如redis_used_memory{instance~$instance}。也就是说只要你在采集端把instance标签配成全局唯一值例如n9e-10.23.25.2:6379导入大盘后就能在下拉框里选择对应实例查看数据无需改动大盘。顺带说明仓库还提供了一套按address标签过滤的大盘 integrations/Redis/dashboards/FilterByAddress.json其变量定义为label_values(redis_uptime_in_seconds, address)。如果你的采集配置里没有或不想用instance标签可以选用这套大盘并保证指标带有address标签。Redis 集群如何监控文档给出了明确的结论Redis 集群的监控本质还是逐个监控集群中的每个 Redis 实例。原因在于 Redis 集群的访问模型对于一个由 3 个实例组成的集群业务应用发起请求时可能随机命中任意一个实例这对业务无影响但监控端需要拿到所有实例的数据才能完整评估集群的状态每个节点的内存、连接数、key 分布、主从延迟等。因此采集配置必须把集群内每个实例都列入instancesagent 会分别连接全部节点抓取info数据。当多个实例组成集群时还需要一个标识来区分这批实例属于哪个集群。实现方式同样是利用labels给每个实例附加一个redis_clus标签值为集群名字即可。例如[[instances]] address 10.23.25.2:6379 labels { instancen9e-10.23.25.2:6379, redis_clusprod-cache-cluster } [[instances]] address 10.23.25.3:6379 labels { instancen9e-10.23.25.3:6379, redis_clusprod-cache-cluster } [[instances]] address 10.23.25.4:6379 labels { instancen9e-10.23.25.4:6379, redis_clusprod-cache-cluster }之后在 Nightingale 中即可通过redis_clusprod-cache-cluster把集群维度聚合起来做查询与告警例如按集群汇总sum by (redis_clus)内存、key 总量等。监控 Redis Sentinel仓库中 Redis 集成还包含 Sentinel 监控插件配置示例见 integrations/Redis/collect/redis_sentinel/redis_sentinel.toml。该插件 fork 自 telegraf 的redis_sentinel输入插件用于采集 Sentinel 节点的状态信息。Sentinel 插件的配置格式略有不同servers支持[protocol://][:password]address[:port]形式# # collect interval # interval 15 [[instances]] # [protocol://][:password]address[:port] # e.g. servers [tcp://localhost:26379] servers [] # # interval global.interval * interval_times # interval_times 1 # add some dimension data by labels # labels {} ## Optional TLS Config # use_tls false # tls_min_version 1.2 # tls_ca /etc/categraf/ca.pem # tls_cert /etc/categraf/cert.pem # tls_key /etc/categraf/key.pem ## Use TLS but skip chain host verification # insecure_skip_verify true例如要监控本地 Sentinel 节点默认端口 26379配置为[[instances]] servers [tcp://localhost:26379]与 Redis 插件一样它也支持interval_times采集倍率、labels维度标签以及整套可选 TLS 配置。开箱即用的告警规则仓库在 integrations/Redis/alerts/redis_by_categraf.json 中为 Redis 监控预置了 6 条 PromQL 告警规则默认disabled: 1需在 Nightingale 中启用每条规则都带有中文排障建议annotations.action规则名称核心 PromQL告警含义High Redis eviction raterate(redis_evicted_keys[5m]) / sum without (db) (redis_keyspace_keys) 0.1key 驱逐比例过高说明内存接近上限High Redis memory usage rateredis_maxmemory 0 and (redis_used_memory / redis_maxmemory) 0.85内存使用率超过 85%High Redis Ping latency (above 100 milliseconds)redis_ping_use_seconds 0.1PING 往返耗时超过 100ms可能存在阻塞Low Redis hit raterate(redis_keyspace_hits[5m]) / (rate(redis_keyspace_misses[5m]) rate(redis_keyspace_hits[5m])) 0.9缓存命中率低于 90%Redis connection refusedrate(redis_rejected_connections[5m]) 0出现连接被拒绝如达到 maxclientsRedis has just been restarted, please be awareredis_uptime_in_seconds 600实例刚重启运行不足 10 分钟需关注冷启动例如内存使用率过高规则的完整排障动作来自规则注解为1INFO memory确认used_memory_rss与碎片率mem_fragmentation_ratio碎片高可开启activedefrag2用redis-cli --bigkeys / --memkeys定位大 key 并拆分或补 TTL3检查是否有未设过期时间的 key 持续堆积4确认maxmemory-policy后按需扩容内存或分片。这些告警规则已同步在 integrations/Redis/i18n/en_US.json 中提供英文排障文案便于国际化场景使用。另外仓库还提供了面向redis_exporter采集方案的告警规则集 integrations/Redis/alerts/redis_by_exporter.json规则名带- exporter后缀其 PromQL 使用 exporter 风格的指标名例如连接数规则为(redis_connected_clients / redis_config_maxclients) 0.85、驱逐率规则为rate(redis_evicted_keys_total[5m]) / sum without (db) (redis_db_keys) 0.1、平均命令耗时规则为sum without (cmd) (rate(redis_commands_duration_seconds_total[5m])) / rate(redis_commands_processed_total[5m]) 0.25。如果你在环境中使用redis_exporter而非 Categraf 采集可以直接选用这套规则。开箱即用的监控大盘仓库提供了三套 Redis 大盘 JSON可按采集方案选用integrations/Redis/dashboards/redis_by_categraf.jsonRedis by instance与 Categraf 插件指标配套按instance标签过滤。面板覆盖Redis Uptime、Connected Clients、Memory Used、Max Memory Limit、Commands Executed / sec、Hits / Misses per Sec、Top Commandstopk(5, irate(redis_cmdstat_calls{...}[1m]))展示最热命令、Total Items per DBsum(redis_keyspace_keys) by (instance, db)、Expired / Evicted、Expiring vs Not-Expiring Keys、Network I/O。integrations/Redis/dashboards/FilterByAddress.json面板结构与上一套一致但改用address标签过滤变量label_values(redis_uptime_in_seconds, address)适用于未配置instance标签的采集端。integrations/Redis/dashboards/redis_by_exporter.json面向redis_exporter采集方案指标为 exporter 风格如redis_memory_used_bytes、redis_commands_processed_total、redis_db_keys同样按instance过滤。将大盘 JSON 导入 Nightingale配置好 Prometheus 数据源变量$prom后即可在页面上直观查看每个 Redis 实例的运行状态。这与 README 中建议通过 labels 配置 instance 标签以便复用监控大盘的建议形成闭环大盘按标签过滤 → 采集端按标签打标 → 实例维度可视化。快速落地 Checklist结合上述内容接入 Nightingale Redis 监控的完整流程可归纳为在采集端编写conf/input.redis/redis.toml为每个 Redis 实例配置一个[[instances]]块addressusername/password 全局唯一的instance标签集群场景把集群内所有节点全部列入instances并附加redis_clus标签标识集群归属Sentinel 场景另配置redis_sentinel插件servers使用[protocol://][:password]address[:port]格式需要 TLS 时在实例上开启use_tls并配置证书相关参数在 Nightingale 中导入 redis_by_categraf.json或 FilterByAddress 版本大盘查看数据导入并启用 redis_by_categraf.json 中的告警规则结合注解中的排障动作处理告警。【免费下载链接】nightingaleNightingale is to monitoring and alerting what Grafana is to visualization.项目地址: https://gitcode.com/GitHub_Trending/ni/nightingale创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表