Centos7下Prometheus+Grafana部署 redis 以及 mysql 监控

本文详细介绍了如何在Centos7环境中部署Prometheus,配置redis和mysql的exporter,以及在Prometheus中添加相应的监控作业,最终实现对Redis和MySQL的实时监控,并通过Grafana进行可视化展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Prometheus 部署 redis 以及 mysql 监控

本篇文章部分内容与我前一篇文章衔接,看不明白的可以参考我前一篇文章

Redis 监控

对于 Redis 的监控,Prometheus 可以收集多种指标,包括但不限于:

  • 命令统计:如每个命令的调用次数、执行时间等。
  • 内存使用情况:包括已使用的内存量、内存碎片等。
  • 客户端连接数:当前连接到 Redis 服务器的客户端数量。
  • 键空间统计:如键的总数、过期键的数量等。

为了实现 Redis 的监控,通常需要使用 Redis 的 INFO 命令来获取这些指标,并通过一个 exporter(如 redis_exporter)将这些指标转换为 Prometheus 可以理解的格式。这个 exporter 会定期运行 INFO 命令并解析输出,然后将结果暴露给 Prometheus 服务器。

MySQL 监控

对于 MySQL 的监控,Prometheus 同样可以收集丰富的指标,包括:

  • 查询性能:如查询的响应时间、慢查询的数量等。
  • 连接统计:当前活动的连接数、尝试失败的连接数等。
  • 存储引擎状态:如 InnoDB 的缓冲区使用情况、锁的状态等。
  • 系统和进程信息:如 MySQL 服务器的 CPU 和内存使用情况。

为了监控 MySQL,通常会使用 mysql_exporter 这样的工具。这个 exporter 会连接到 MySQL 服务器,使用性能模式(Performance Schema)或其他机制来获取指标,并将它们暴露给 Prometheus 服务器。

配置和集成

在配置了 Redis 和 MySQL 的 exporter 之后,你需要在 Prometheus 的配置文件中添加对应的作业(job),以便 Prometheus 能够定期从这些 exporter 拉取指标。一旦配置完成并重启 Prometheus,它就会开始收集并存储这些指标,然后你可以使用 Prometheus 的查询语言(PromQL)来查询和分析这些指标,或者使用 Grafana 这样的工具来进行可视化。

准备

  • 两台虚拟机
192.168.100.125  Prometheus端
192.168.100.126  node端
  • 开放防火墙端口

更改防火墙

在两台机器执行
请运行以下命令以开放端口

firewall-cmd --zone=public --add-port=9104/tcp --permanent
firewall-cmd --zone=public --add-port=9121/tcp --permanent
firewall-cmd --zone=public --add-port=6379/tcp --permanent
firewall-cmd --reload
  1. 打开 SELinux 的配置文件

    sudo vi /etc/selinux/config
    
  2. 在打开的配置文件中,找到SELINUX这一行。这一行可能设置为enforcing(强制模式)或permissive(宽容模式)。如果你想要将 SELinux 设置为宽容模式,确保这一行的值是permissive

    SELINUX=permissive
    
  3. 保存并关闭文件。如果你使用的是 vi 编辑器,按Esc,然后输入:wq并按Enter来保存并退出。

  4. 为了让新的 SELinux 配置生效,你需要重启你的系统:

    sudo reboot
    
  5. 或者,你也可以尝试使用setenforce命令临时将 SELinux 设置为宽容模式,但这只是临时的,重启后 SELinux 会恢复到配置文件中的设置:

    sudo setenforce 0
    

注意:node端(也就是被监控的)安装MySQL和redis

安装 mysql

  1. 下载 MySQL 安装包
yum install wget
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
  1. 安装 rpm 包
    使用 rpm 命令安装下载的 rpm 包
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
  1. 安装 MySQL 社区版
    使用 yum 安装 MySQL 社区版
yum -y install mysql-community-server --nogpgcheck

这里使用--nogpgcheck参数忽略 gpg 检查。 4. 启动 MySQL 服务
使用 service 命令启动 MySQL 服务

service mysqld start
  1. 查看 MySQL 状态
systemctl status mysqld
  1. 登录 MySQL 并修改密码
    查看 MySQL 的临时密码
grep 'temporary password' /var/log/mysqld.log

登录 MySQL

mysql -uroot -p

输入临时密码
修改 MySQL 的 root 用户密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

注意,为了安全起见,新密码应该足够复杂并难以猜测。

  1. (可选)修改 MySQL 密码安全校验强度
    如果设置的密码简单,可能需要将 MySQL 的密码安全校验强度改为低风险
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_length=4;

安装 mysqld_exporter

以下在 node 端执行

  1. 下载安装 mysqld_exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
tar -zvxf mysqld_exporter-0.14.0.linux-amd64.tar.gz  -C /usr/local/
cd /usr/local/
mv mysqld_exporter-0.14.0.linux-amd64 mysqld_exporter
cd /usr/local/mysqld_exporter

下载慢尝试

wget https://githubfast.com/prometheus/mysqld_exporter/releases/download/v0.14.0/mysqld_exporter-0.14.0.linux-amd64.tar.gz
  1. mysqld_exporter 配置

进入数据库创建账号

CREATE USER 'exporter'@'%' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON _._ TO 'exporter'@'%';

使用环境变量方式配置一下数据库连接认证信息并启动 Exporter

export DATA_SOURCE_NAME='exporter:password@(localhost:3306)/'
cd /usr/local/mysqld_exporter
nohup ./mysqld_exporter &

使用配置文件,在当前机器~/.my.cnf 配置文件中增加配置信息,注意修改自己实际情况参数。注意这个.my.cnf 在 exporter 所在机器创建就行,和 mysql 实际自己的配置文件 my.cnf 没有一点关系

vi ~/.my.cnf
[client]
   host=127.0.0.1
   port=3306
   user=exporter
   password=password
  1. 使用 systemctl 管理 mysqld_exporter
vi /usr/lib/systemd/system/mysqld_exporter.service

写入

[Unit]
Description=mysqld_exporter for Prometheus monitoring
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/usr/local/mysqld_exporter/
ExecStart=/usr/local/mysqld_exporter/./mysqld_exporter
Restart=always

[Install]
WantedBy=multi-user.target

mysqld_exporter 启动成功后,默认端口是 9104, 访问 ip:9104/metrics 即可查看 mysql 相关指标

以下在 Prometheus 端执行

  1. 修改 Prometheus 的配置文件 prometheus.yml 增加 mysql 相关 exporter job
vi  /usr/local/prometheus/prometheus.yml

在最后添加

  - job_name: 'mysql'
    static_configs:
     - targets: ['192.168.100.126:9104']
       labels:
          instance: mysql
  1. 重启 Prometheus 和 grafana
systemctl restart prometheus
systemctl restart grafana-server

进入 prometheus 的 web 界面,再次选择 targets, 可以看到新加的 mysql 端点
mysql 端点

然后导入 mysql 的监控大盘
导入 mysql 的监控大盘
导入 mysql 的监控大盘

导入 mysql 的监控大盘

导入 mysql 的监控大盘

安装 redis

以下在 node 端执行
  1. 由于 Redis 是用 C 语言编写,所以编译时需要 gcc
yum install gcc-c++
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
tar -zxvf redis-5.0.0.tar.gz -C ~
cd ~/redis-5.0.0/
make install PREFIX=/usr/local/redis
  1. 进入安装目录 bin 下,修改配置文件
cd /usr/local/redis/bin
cp /root/redis-5.0.0/redis.conf /usr/local/redis/bin
vi /usr/local/redis/bin/redis.conf
在大约69行修改daemonize no为daemonize yes
在大约136行修改bind 127.0.0.1为bind 0.0.0.0

执行如下命令启动 redis:

cd /usr/local/redis/bin
./redis-server ./redis.conf
  1. 查看是否启动成功
ps aux|grep redis
  1. 在系统服务目录里创建 redis.service 文件
vi /etc/systemd/system/redis.service

写入以下内容:

[Unit]
Description=redis-server
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/redis/bin/redis-server /usr/local/redis/bin/redis.conf
PrivateTmp=true

[Install]
WantedBy=multi-user.target

重载系统服务:

systemctl daemon-reload
systemctl start redis.service

redis_exporter

wget https://github.com/oliver006/redis_exporter/releases/download/v1.36.0/redis_exporter-v1.36.0.linux-amd64.tar.gz
tar -zxvf redis_exporter-v1.36.0.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
mv redis_exporter-v1.36.0.linux-amd64 redis_exporter
cd /usr/local/redis_exporter
nohup ./redis_exporter --redis.password=123456 &

下载慢尝试

wget https://githubfast.com/oliver006/redis_exporter/releases/download/v1.36.0/redis_exporter-v1.36.0.linux-amd64.tar.gz
  1. 使用 systemctl 管理 redis_exporter
vi /usr/lib/systemd/system/redis_exporter.service

写入

[Unit]
Description=Redis Exporter for Prometheus
After=network.target

[Service]
ExecStart=/usr/local/redis_exporter/redis_exporter
Restart=always
User=root
Group=root
StandardOutput=append:/usr/local/redis_exporter/redis_exporter.log
StandardError=inherit
LogLevel=info

[Install]
WantedBy=multi-user.target

访问 http://ip:9121/metrics

以下在 Prometheus 端操作

在 prometheus.yml 中添加 redis_exporter 的配置, 要注意 yml 文件的语法规范

vi /usr/local/prometheus/prometheus.yml

在最后写入

  - job_name: "redis"
    static_configs:
    - targets: ['192.168.100.126:9121']
  1. 重启 Prometheus 和 grafana
systemctl restart prometheus
systemctl restart grafana-server

进入 prometheus 的 web 界面,再次选择 targets, 可以看到新加的 redis 端点

redis 端点

在 grafana 中导入监控大盘

redis 端点监控大盘

redis 端点监控大盘
redis 端点监控大盘

redis 端点监控大盘
参考文档:
https://blog.youkuaiyun.com/yichen0429/article/details/123819489
https://www.cnblogs.com/hxun/p/11075755.html

### Prometheus 监控 Redis 内存使用量的指标与配置 在 Prometheus 监控 Redis 的场景中,内存使用情况是一个关键性能指标。以下详细说明如何查看和配置 Redis 内存使用量的监控指标。 #### 1. Redis 内存使用量的主要指标 Prometheus 通过 Redis 提供的 `INFO memory` 数据获取内存相关指标。以下是常用的内存监控指标: - **`redis_memory_used`**:表示 Redis 实例当前使用的内存量(以字节为单位)。该指标直接反映 Redis 的内存占用情况[^1]。 - **`redis_memory_peak`**:表示 Redis 实例的历史峰值内存使用量(以字节为单位)。用于评估 Redis 的最大内存需求。 - **`redis_memory_rss`**:表示 Redis 进程从操作系统的视角所占用的实际物理内存大小(以字节为单位)。它通常大于或等于 `redis_memory_used`,因为还包括了 Redis 自身的内存开销。 #### 2. 配置 Prometheus 抓取 Redis 内存指标 为了使 Prometheus 能够抓取 Redis 的内存指标,需要确保以下配置正确: - 在 Redis 配置文件中启用 `INFO` 命令,并确保 Prometheus 可以访问 Redis 提供的指标接口。 - 修改 Prometheus 的配置文件 `prometheus.yml`,添加 Redis 的抓取目标。例如: ```yaml scrape_configs: - job_name: 'redis' static_configs: - targets: ['localhost:6379'] metrics_path: '/metrics' relabel_configs: - source_labels: [__address__] target_label: instance ``` 上述配置定义了一个名为 `redis` 的任务,Prometheus 将定期从指定地址抓取 Redis 的指标数据[^3]。 #### 3. 查询 Redis 内存使用量的 PromQL 示例 通过 Prometheus 的查询语言 PromQL,可以灵活地分析 Redis 的内存使用情况。以下是一些常见的查询示例: - 查询当前 Redis 实例的内存使用量: ```promql redis_memory_used{instance="localhost:6379"} ``` - 计算 Redis 内存使用率(假设总内存为固定值): ```promql (redis_memory_used / 1024 / 1024) * 100 ``` - 比较 Redis 的实际内存占用 (`redis_memory_rss`) 和分配的内存 (`redis_memory_used`): ```promql redis_memory_rss - redis_memory_used ``` #### 4. 设置告警规则 为了及时发现 Redis 内存使用异常,可以设置告警规则。例如,当 Redis 内存使用量超过 80% 时触发告警: ```yaml groups: - name: redis_memory_alerts rules: - alert: RedisMemoryUsageHigh expr: (redis_memory_used / 1024 / 1024) > 80 for: 5m labels: severity: critical annotations: summary: "Redis memory usage is above 80%" description: "Instance {{ $labels.instance }} has exceeded the memory threshold." ``` 上述规则会在 Redis 内存使用量持续 5 分钟高于 80 MB 时触发告警[^4]。 #### 5. 结合 Grafana 可视化内存趋势 为了更直观地监控 Redis 的内存使用趋势,可以通过 Grafana 创建仪表盘。具体步骤包括: - 在 Grafana 中添加 Prometheus 数据源。 - 使用 PromQL 查询 Redis 的内存指标。 - 创建折线图或柱状图展示内存使用量随时间的变化。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值