Prometheus 部署 redis 以及 mysql 监控
本篇文章部分内容与我前一篇文章衔接,看不明白的可以参考我前一篇文章
- Centos7下搭建Prometheus+Grafana并部署基础监控
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
- 打开 SELinux 的配置文件
sudo vi /etc/selinux/config
- 在打开的配置文件中,找到
SELINUX
这一行。这一行可能设置为enforcing
(强制模式)或permissive
(宽容模式)。如果你想要将 SELinux 设置为宽容模式,确保这一行的值是permissive
:
SELINUX=permissive
- 保存并关闭文件。如果你使用的是 vi 编辑器,按
Esc
,然后输入:wq
并按Enter
来保存并退出。 - 为了让新的 SELinux 配置生效,你需要重启你的系统:
sudo reboot
- 或者,你也可以尝试使用
setenforce
命令临时将 SELinux 设置为宽容模式,但这只是临时的,重启后 SELinux 会恢复到配置文件中的设置:
sudo setenforce 0
注意:node端(也就是被监控的)安装MySQL和redis
安装 mysql
- 下载 MySQL 安装包
yum install wget
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
- 安装 rpm 包
使用 rpm 命令安装下载的 rpm 包
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
- 安装 MySQL 社区版
使用 yum 安装 MySQL 社区版
yum -y install mysql-community-server --nogpgcheck
这里使用--nogpgcheck
参数忽略 gpg 检查。 4. 启动 MySQL 服务
使用 service 命令启动 MySQL 服务
service mysqld start
- 查看 MySQL 状态
systemctl status mysqld
- 登录 MySQL 并修改密码
查看 MySQL 的临时密码
grep 'temporary password' /var/log/mysqld.log
登录 MySQL
mysql -uroot -p
输入临时密码
修改 MySQL 的 root 用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
注意,为了安全起见,新密码应该足够复杂并难以猜测。
- (可选)修改 MySQL 密码安全校验强度
如果设置的密码简单,可能需要将 MySQL 的密码安全校验强度改为低风险
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_length=4;
安装 mysqld_exporter
以下在 node 端执行
- 下载安装 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
- 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
- 使用 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 端执行
- 修改 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
- 重启 Prometheus 和 grafana
systemctl restart prometheus
systemctl restart grafana-server
进入 prometheus 的 web 界面,再次选择 targets, 可以看到新加的 mysql 端点
然后导入 mysql 的监控大盘
安装 redis
以下在 node 端执行
- 由于 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
- 进入安装目录 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
- 查看是否启动成功
ps aux|grep redis
- 在系统服务目录里创建 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
- 使用 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']
- 重启 Prometheus 和 grafana
systemctl restart prometheus
systemctl restart grafana-server
进入 prometheus 的 web 界面,再次选择 targets, 可以看到新加的 redis 端点
在 grafana 中导入监控大盘