Prometheus+Grafana构建云原生分布式监控系统(四)

Prometheus+Grafana构建云原生分布式监控系统(三)https://blog.csdn.net/xiaochenXIHUA/article/details/157127991

一、Prometheus监控Redis数据库

1.1、安装部署Redis数据库

Linux中下载安装部署Redis7.4.5------并设置用户名、密码及其授权的保姆级教程https://blog.csdn.net/xiaochenXIHUA/article/details/151261564

1.2、监控Redis需关注的几个重要指标

|--------|------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | 监控Redis的重要指标 | 说明 |
| 1 | 延迟 | 延迟数据对使用Redis的应用程序至关重要,因此要重点监控。 bash #Redis官方提供的延迟测试命令 #(实时检测客户端redis-cli与指定redis服务器之间的网络/响应延迟) #会持续向redis发送Ping命令,统计每次请求的往返耗时(单位是:毫秒) #方式一:若有密码则会提示输入密码后测试(可避免命令行明文暴漏密码) redis-cli --latency -h 192.168.1.37 -p 6379 --user ck #方式二:使用配置文件方式连接(完全避免命令行暴漏用户名与密码【最安全】) #1-创建 Redis 客户端配置文件 vim ~/.rediscli.cnf #2-写入以下内容(适配 Redis 6.0+ 用户名密码) username ck password Qzsd43561 host 192.168.1.37 port 6379 #3-设置文件权限(仅当前用户可读写,关键) chmod 600 ~/.rediscli.cnf #4-执行延迟测试(自动读取配置,无警告) redis-cli --latency -c ~/.rediscli.cnf #方法三:通过URI完整连接快速测试(存在redis用户密码暴露风险,不建议使用) redis-cli --latency -u redis://ck:Qzsd43561@192.168.1.37:6379 bash #定位redis慢查询 #1-查看到Redis当前配置的慢查询配置命令【单位是(微秒)默认为10000微秒=10毫秒】 grep slower /etc/redis.conf #2-使用【redis-cli】登录到redis中设置慢查询的参数 redis-cli -h 192.168.1.37 -p 6379 --user ck #2.1-设置redis的慢查询阈值为5毫秒 config set slowlog-log-slower-than 5000 config get slowlog-log-slower-than config rewrite #2.2-在登录的redis中查询最新的15条慢查询的详细内容 slowlog get 15 #最后退出登录 quit |
| 2 | 流量 | Redis每秒处理多少请求,每秒接收多少字节、返回多少字节,在Redis里面都内置了相关指标,通过redis-cli连接上Redis,执行【info all】命令可以看到很多指标。 bash #使用redis-cli登录到Redis redis-cli -h 192.168.1.37 -p 6379 --user ck info all #1-使用redis-cli登录到Redis查看到【info all】命令包含的所有【瞬时指标】 redis-cli -h 192.168.1.37 -p 6379 --user ck info all | grep instantaneous #2-查看redis中【缓存的命中与非命中数量】 #注意:若这里查询到的命中率低于0.8则需要关注了 redis-cli -h 192.168.1.37 -p 6379 --user ck info all | grep keyspace |
| 3 | 错误 | 客户端操作Redis返回了错误比较常见,要关注;另外需要关注客户端的最大连接数量。 bash #查看redis允许连接的最大客户端数量和拒绝连接的数量 redis-cli -h 192.168.1.37 -p 6379 --user ck info all | grep maxclients redis-cli -h 192.168.1.37 -p 6379 --user ck info all | grep rejected_connections |
| 4 | 饱和度 | Redis重度使用内存,内存的使用率、碎片率,以及因为内存不够用而需要清理的Key数量,都是需要重点关注的。可以通过【info memory】命令查看这几个关键指标。 bash #使用【redis-cli】登录到redis中查看所有的内存信息 redis-cli -h 192.168.1.37 -p 6379 --user ck info memory #临时设置【开启自动内存碎片整理(总开关)】(redis重启后失效) redis-cli -h 192.168.1.37 -p 6379 --user ck config get activedefrag config set activedefrag yes config get activedefrag #永久设置内存相关配置(即:编辑redis的配置文件/etc/redis.conf) #如下的内存配置按需调整优化 vi /etc/redis.conf # 开启自动内存碎片整理(总开关) activedefrag yes # 当碎片达到 100mb 时,开启内存碎片整理 active-defrag-ignore-bytes 100mb # 当碎片超过 10% 时,开启内存碎片整理 active-defrag-threshold-lower 10 # 内存碎片超过 100%,则尽最大努力整理 active-defrag-threshold-upper 100 # 内存自动整理占用资源最小百分比 active-defrag-cycle-min 25 # 内存自动整理占用资源最大百分比 active-defrag-cycle-max 75 #最后保存配置文件后,重启 Redis 服务使配置生效 systemctl restart redis.service |
[监控Redis需关注的几个重要指标]

1.3、安装部署redis_exporter

bash 复制代码
#在安装了redis的服务器上安装redis_exporter

#1-下载redis_exporter
wget https://github.com/oliver006/redis_exporter/releases/download/v1.80.1/redis_exporter-v1.80.1.linux-amd64.tar.gz -c -P /data

#2-解压redis_exporter
cd /data
tar -zxvf redis_exporter-v1.80.1.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv redis_exporter-v1.80.1.linux-amd64 redis_exporter-v1.80.1
cd redis_exporter-v1.80.1/
ls

#3-编写redis_exporter的服务
#3.1-创建环境变量文件
vim /etc/redis_exporter.env
#【/etc/redis_exporter.env】文件完整内容如下:
REDIS_USERNAME=ck
REDIS_PASSWORD=Qzsd43561

#3.2-设置文件权限(仅 root 可读写)
chmod 600 /etc/redis_exporter.env
chown redis:redis /etc/redis_exporter.env

#3.3-编写redis_exporter的服务文件
vim /usr/lib/systemd/system/redis_exporter.service
#【/usr/lib/systemd/system/redis_exporter.service】文件的完整内容
[Unit]
Description=redis_exporter for prometheus
Documentation=https://github.com/oliver006/redis_exporter
After=network.target

[Service]
Type=simple
#指定运行用户(建议用非 root 用户,如 redis 或 prometheus)
User=redis
Group=redis
#禁止服务进程被交换到虚拟内存
NoNewPrivileges=true
#添加环境变量
EnvironmentFile=/etc/redis_exporter.env
#启动参数:指定 Redis 地址、用户名、密码
ExecStart=/usr/local/redis_exporter-v1.80.1/redis_exporter \
  --redis.addr=192.168.1.37:6379 \
  --redis.user=${REDIS_USERNAME} \
  --redis.password=${REDIS_PASSWORD} \
  --web.listen-address=0.0.0.0:9121 \
  --log-level=info
#进程崩溃后的重启策略
Restart=on-failure
RestartSec=2s

[Install]
WantedBy=multi-user.target


#4-启动redis_exporter服务并设置开机自启
systemctl daemon-reload
systemctl start redis_exporter
systemctl status redis_exporter
ps -ef | grep redis_exporter
netstat -antlp | grep redis_exporte
systemctl enable redis_exporter.service


#5-打开浏览器访问【IP:9121】即可查看到redis_exporter收集到的redis状态数据。
ip a

|--------|---------------------------|--------------------------------|
| 序号 | redis_exporter启动参数 | 说明 |
| 1 | --redis.addr | 指定redis服务的ip地址和端口号 |
| 2 | --redis.user | 指定登录redis服务的用户名称(有才需要配置,没有则不用) |
| 3 | --redis.password | 指定登录redis服务的密码(有才需要配置,没有则不用) |
| 4 | --redis.password-file | 指定登录redis服务的密码文件(有才需要配置,没有则不用) |
| 5 | --web.listen-address | 指定当前redis-exporter启动使用的端口信息 |
[redis_exporter的启动参数解析]

bash 复制代码
#3-编写redis_exporter的服务【避免redis密码暴露版本】【生产环境推荐使用】
#3.1-创建redis密码的json文件
vi /etc/redis_exporter.json
#【/etc/redis_exporter.json】文件的完整内容如下:
{
  "192.168.1.37:6379": "Qzsd43561"
}


#3.2-设置文件权限(仅 root 可读写)
chmod 600 /etc/redis_exporter.json
chown redis:redis /etc/redis_exporter.json

#3.3-编写redis_exporter的服务文件
vim /usr/lib/systemd/system/redis_exporter.service
#【/usr/lib/systemd/system/redis_exporter.service】文件的完整内容
[Unit]
Description=redis_exporter for prometheus
Documentation=https://github.com/oliver006/redis_exporter
After=network.target

[Service]
Type=simple
#指定运行用户(建议用非 root 用户,如 redis 或 prometheus)
User=redis
Group=redis
#禁止服务进程被交换到虚拟内存
NoNewPrivileges=true
#添加环境变量
EnvironmentFile=/etc/redis_exporter.env
#启动参数:指定 Redis 地址、用户名、密码
ExecStart=/usr/local/redis_exporter-v1.80.1/redis_exporter \
  --redis.addr=192.168.1.37:6379 \
  --redis.user=ck \
  --redis.password-file=/etc/redis_exporter.json \
  --web.listen-address=0.0.0.0:9121 \
  --log-level=info
#进程崩溃后的重启策略
Restart=on-failure
RestartSec=6s

[Install]
WantedBy=multi-user.target


#4-启动redis_exporter服务并设置开机自启
systemctl daemon-reload
systemctl start redis_exporter
systemctl status redis_exporter
ps -ef | grep redis_exporter
netstat -antlp | grep redis_exporter
systemctl enable redis_exporter.service

1.4、在Prometheus上添加redis_exporter节点

bash 复制代码
#在prometheus上添加redis_exporter节点

#1-进入prometheus server的目录下编辑【prometheus.yml】配置文件
cd /usr/local/prometheus-3.5.0/
vi prometheus.yml
#【prometheus.yml】配置文件最后【scrape_configs下】可以新增名为【- job_name "dbserver"】的节点且在该节点下【 static_configs-->- targets】里面添加上redis_exporter所在服务器的【IP:1921】(如:192.168.1.37:9121)
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090",'192.168.1.39:9100','192.168.1.36:9100','192.168.1.37:9100']
       # The label name is added as a label `label_name=<label_value>` to any timeseries scraped from this config.
        labels:
          app: "prometheus"

  - job_name: "dbserver"
    static_configs:
      - targets: ['192.168.1.36:9104','192.168.1.36:9100','192.168.1.37:9121']
        labels:
          app: "db-exporter"


#2-验证编辑后的【prometheus.yml】配置文件语法是否正确(若结果显示SUCCESS则表示正确可用,否则需要根据提示错误修改)
./promtool check config prometheus.yml

#3-验证编辑后的【prometheus.yml】配置文件无误后重载配置生效(热重载)
curl -XPOST localhost:9090/-/reload

#4-最后在浏览器访问prometheus的web界面查看【status-->Target health】即可看到这个redis_exporter的节点内容,且状态显示UP在线

二、Grafana中配置prometheus的redis_exporter数据可视化

(若已经添加过数据源了则不用重复这个操作)登录到Grafana中(IP:3000)选择【连接】-->【添加新连接】-->【搜索Prometheus】后点击Prometheus-->点击右上角的【添加新数据源】则进入设置界面,在设置界面可以填写名称、与prometheus server的URL地址后点击最底部的【保存并测试】。

然后配置仪表盘(到【Grafana dashboards | Grafana Labs】官网获取更多的仪表盘模板。在Grafana的仪表盘界面中间输入框输入redis即可列出所有redis相关模板(如:我们选择【Redis Dashboard for Prometheus Redis Exporter 1.x】模板进入后,获取到该模板的编号是【763】)然后在浏览器上进入我们服务器上部署好的Grafana界面的【仪表盘】-->【新建】-->【导入】界面输入模板的编号或者JSON文件内容后点击【加载】后弹出的界面上可以修改模板名称、数据源为prometheus后点击【Import】)如下图所示:

三、redis中各个监控指标的含义

bash 复制代码
#redis监控指标的含义(以下的这些指标都是【light weight(轻量级 lw)】
#表示采集、获取这些指标几乎不消耗 Redis 性能,无需担心采集开销。)
redis_active_defrag_running:活动碎片整理是否运行

redis_allocator_active_bytes:分配器活动字节
redis_active_allocated_bytes:活动分配的字节
redis_assocator_frag_bytes:关联碎片字节
redis_allocator_frag_ratio:分配器碎片比率
redis_allocator_resident_bytes:分配器常驻字节
redis_allocator_rss_bytes:分配器RSS字节
redis_allocator_rss_ratio:分配器RSS比率


redis_aof_current_rewrite_duration_sec:aof当前重写持续时间sec
redis_aof_enabled:是否启用aof
redis_aof_last_bgrewrite_status:最近一次AOF重写操作是否执行成功
redis_aof_last_cow_size_bytes:在执行AOF重写期间,分配给COW的大小
redis_aof_last_rewrite_duration_sec:最近一次AOF重写操作消耗的时间
redis_aof_last_write_status:aof上次写入状态
redis_aof_rewrite_in_progress:是否在进行AOF的重写操作
redis_aof_rewrite_scheduled:是否有AOF操作等待执行

redis_blocked_clients:被阻止的客户

redis_client_recent_max_input_buffer_bytes:客户端最近最大输入缓冲区字节
redis_client_recent_max_output_buffer_bytes:客户端最近最大输出缓冲区字节
redis_cluster_enabled:是否启用集群

redis_commands_duration_seconds_total:命令持续时间总秒数
redis_commands_processed_total:命令处理总数
redis_commands_total:命令总数

redis_config_maxclients:配置最大客户端
redis_config_maxmemory:配置最大内存

redis_connected_clients:连接的客户
redis_connected_slave_lag_seconds:连接的从节点延迟秒
redis_connected_slave_offset_bytes:连接的从节点偏移字节
redis_connected_slaves:连接的从节点
redis_connections_received_total:收到的连接总数

redis_cpu_sys_children_seconds_total:由后台进程消耗的系统CPU
redis_cpu_sys_seconds_total:由Redis服务器消耗的用户CPU
redis_cpu_user_children_seconds_total:由后台进程消耗的用户CPU
redis_cpu_user_seconds_total:由Redis服务消耗的用户CPU

redis_db_avg_ttl_seconds:db平均ttl秒
redis_db_keys:数据库key的数量
redis_db_keys_expiring:即将过期的key

redis_defrag_hits:碎片整理命中
redis_defrag_key_hits:碎片整理命中key
redis_defrag_key_misses:碎片整理未命中key
redis_evicted_keys_total:被驱逐的key总数

redis_expired_keys_total:过期key总数
redis_expired_stale_percentage:过期陈旧key占百分比
redis_expired_time_cap_reached_total:已达到总时间上限

redis_exporter_build_infor:redis_exporter信息
redis_exporter_last_scrape_connect_time_seconds:redis_exporter最后一次采集时间
redis_exporter_last_scrape_duration_seconds:redis_exporter次抓取持续时间秒
redis_exporter_last_scrape_error:redis_exporter次抓取错误
redis_exporter_scrape_duration_seconds_count:redis_exporter采集续时间秒数
redis_exporter_scrape_duration_seconds_sum:redis_exporter持续时间秒总和
redis_exporter_scrapes_total:redis_exporter抓取总数

redis_instance_info:实例信息
redis_keyspace_hits_total:键空间命中总数
redis_keyspace_misses_total:键空间未命中总数

redis_last_key_groups_scrape_duration_milliseconds:最后一个键组抓取持续时间毫秒
redis_last_slow_execution_duration_seconds:最后一个慢执行持续时间秒
redis_latest_fork_seconds:最新fork时间
redis_lazyfree_pending_objects:惰性删除或延迟释放的对象
redis_loading_dump_file:加载转储文件

redis_master_last_io_seconds_ago:master最后io过去时间
redis_master_repl_offset:主节点累加偏移量(判断主从是否同步)
redis_master_sync_in_progress:正在进行主同步

redis_mem_clients_normal:
redis_mem_clients_slaves:
redis_mem_fragmentation_bytes:内存碎片字节
redis_mem_fragmentation_ratio:内存碎片率
redis_mem_not_counted_for_eviction_bytes:内存不计入驱逐的字节数
redis_memory_max_bytes:内存最大字节
redis_memory_used_lua_bytes:lua脚本使用内存字节数
redis_memory_used_overhead_bytes:维护数据集的内部机制所需的内存开销
redis_memory_used_peak_bytes:内存使用峰值
redis_memory_used_rss_bytes:rss占用内存的字节数
redis_memory_used_scripts_bytes:脚本占用内存的字节数
redis_memory_used_startup_bytes:启动占用内存的字节数
redis_migrate_cached_sockets_total:
redis_net_input_bytes_total:网络input总数
redis_net_output_bytes_total:网络output总数
reids_process_id:进程号
redis_pubsub_channels:发布订阅频道
redis_pubsub_patterns:发布订阅模式

redis_rdb_bgsave_in_progress:
redis_rdb_changes_since_last_save:自上次保存以来的rdb更改
redis_rdb_current_bgsave_duration_sec:rdb当前bgsave持续时间
redis_rdb_last_bgsave_duration_sec:rdb上次bgsave持续时间
redis_rdb_last_bgsave_status:rdb上次bgsave状态
redis_rdb_last_cow_size_bytes:rdb上次cow的大小
redis_rdb_last_save_timestamp_seconds:rdb最后保存时间戳

redis_rejected_connections_total:拒绝的连接总数
redis_repl_backlog_first_byte_offset:复制起始偏移量
redis_repl_backlog_history_bytes:repl_backlog历史数据大小
redis_repl_backlog_is_active:repl_backlog是否开启
redis_replica_partial_resync_accepted:
redis_replica_partial_resync_denied:
redis_replica_resyncs_full:
redis_replication_backlog_bytes:
redis_second_repl_offset:
redis_slave_expires_tracked_keys:
redis_slave_info:从节点信息
redis_slave_priority:从节点优先级
redis_slave_repl_offset:从节点累加偏移量(判断主从是否同步)
redis_slowlog_last_id:慢查询日志最后一个的id
redis_slowlog_length:慢查询日志长度
redis_start_time_seconds:开始时间秒
redis_target_scrape_request_errors_total:
redis_up:运行时间
redis_uptime_in_seconds:正常运行时间
相关推荐
Cheney Pan5 小时前
第7篇 业务数据监控:SQL Exporter 与自定义业务指标
prometheus·exporter
Cheney Pan10 小时前
第4篇 Spring Boot 应用监控:Micrometer 与 JVM 指标
jvm·spring boot·后端·prometheus
飞鸟真人10 小时前
应用性能监测(APM)之 (四)Prometheus与Metrics集群存储
prometheus
陈陈CHENCHEN11 小时前
【Kubernetes】纯 IPv6 K8s 集群访问外部 IPv4 服务
云原生·容器·kubernetes
troy12812 小时前
如何在谷歌云(Google Cloud)上部署 Kubernetes 集群
云原生·容器·kubernetes
xiaoligangting12 小时前
太原岗亭款式齐全
云原生
Cheney Pan12 小时前
第09篇 告警体系设计:Alertmanager 路由与告警治理
prometheus
分布式存储与RustFS1 天前
升级 RustFS 二进制不停机:一条一条换,留一条退路
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
xiaoligangting1 天前
太原防火岗亭
云原生
蓝胖的四次元口袋1 天前
Prometheus+Grafana知识梳理(1)
grafana·prometheus