Prometheus是一个开源的的监控工具,而且还免费。这一次我们用Prometheus来对之前安装的所有服务,包括Mysql、Redis、系统状况等进行监控,并结合Grafana进行图形化展示
Prometheus下载和安装
下载地址(以下所有插件的官方下载地址都是这个):https://prometheus.io/download/
选择合适版本用wget进行下载:
bash
wget -P "/opt" https://github.com/prometheus/prometheus/releases/download/v2.54.1/prometheus-2.54.1.linux-amd64.tar.gz
可以看到下载默认是从gayhub上下载的,如果没有代理的话,下载速度十分感人。所以我这边使用国内镜像https://mirrors.tuna.tsinghua.edu.cn/github-release/prometheus/prometheus/
bash
wget -P "/opt" https://mirrors.tuna.tsinghua.edu.cn/github-release/prometheus/prometheus/2.54.1%20_%202024-08-27/prometheus-2.54.1.linux-amd64.tar.gz
接下来进行解压和安装,顺便把文件夹改个名字:
bash
tar -xvzf /opt/prometheus-2.54.1.linux-amd64.tar.gz
mv prometheus-2.54.1.linux-amd64 prometheus-2.54.1
安装脚本
将以上过程,用shell脚本实现。并配置开机启动。
bash
#!/bin/bash
#Prometheus安装和配置脚本
#下载
wget -P "/opt" https://mirrors.tuna.tsinghua.edu.cn/github-release/prometheus/prometheus/2.54.1%20_%202024-08-27/prometheus-2.54.1.linux-amd64.tar.gz
# 解压
tar -zxf /opt/prometheus-2.54.1.linux-amd64.tar.gz -C /opt/
mv /opt/prometheus-2.54.1.linux-amd64 /opt/prometheus-2.54.1
# 创建用户和组
# groupadd prometheus
# useradd -g prometheus -s /sbin/nologin prometheus
# 创建目录
mkdir -p /opt/prometheus-2.54.1/data
# 修改权限
# chown -R prometheus:prometheus /opt/prometheus-2.54.1/
# 配置开机启动
cat > /etc/systemd/system/prometheus.service << EOF
[Unit]
Description=Prometheus
Documentation=https://prometheus.io
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=root
Group=root
ExecStart=/opt/prometheus-2.54.1/prometheus \
--config.file=/opt/prometheus-2.54.1/prometheus.yml \
--storage.tsdb.path=/opt/prometheus-2.54.1/data
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl start prometheus.service
systemctl status prometheus.service
systemctl enable prometheus.service
接下来,我们就可以从浏览器访问了,http://192.168.32.21:9090/注意打开防火墙9090端口。
我们点击status-target,就可以默认看到本机。如下图所示:
配置文件
各配置文件的意义可以参考这个链接,
https://www.cnblogs.com/liwenchao1995/p/16895710.html
配置文件默认就在安装目录下,
bash
[root@node21 prometheus-2.54.1]# cat /opt/prometheus-2.54.1/prometheus.yml
#全局配置 (如果有内部单独设定,会覆盖这个参数)
global:
#告警插件定义。这里会设定alertmanager这个报警插件。
alerting:
#告警规则。 按照设定参数进行扫描加载,用于自定义报警规则,其报警媒介和route路由由alertmanager插件实现。
rule_files:
#采集配置。配置数据源,包含分组job_name以及具体target。又分为静态配置和服务发现
scrape_configs:
#用于远程存储写配置
remote_write:
#用于远程读配置
remote_read:
Grafana安装
Grafana是一个可视化的平台,它可以采用Prometheus的数据源,来对服务器的监控实现图形化展示。所以经常搭配使用。我们下载rpm文件,然后使用yum安装。
bash
#!/bin/bash
# Grafana安装配置
# 下载
wget -P "/opt" https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/Package/grafana-enterprise-10.1.0-1.x86_64.rpm
yum localinstall /opt/grafana-enterprise-10.1.0-1.x86_64.rpm -y
# 设置开机启动
systemctl enable grafana-server
# 启动
systemctl start grafana-server
# 开放端口
firewall-cmd --permanent --add-port=3000/tcp
firewall-cmd --reload
安装后可以使用ip+端口进行访问,默认账号密码都是admin。注意更改密码。
Prometheus+Grafana监控MySQL
参考了如下链接:https://www.cnblogs.com/easydb/p/14151866.html
整个服务的架构如下:
安装node_exporter
node_exporter是用来收集服务器信息的一个组件,该组件需要安装在被监控的机器上。我们来简单写一个安装脚本
bash
#!/bin/bash
# mysql监控组件node_exporter和mysqld_exporter
# 下载,没找到国内下载源,下载速度很慢。建议用scp发送到其他机器。
wget -P "/opt" https://github.com/prometheus/node_exporter/releases/download/v1.8.2/node_exporter-1.8.2.linux-amd64.tar.gz
#scp "/opt/node_exporter-1.8.2.linux-amd64.tar.gz" root@"$target_ip":/opt/
# 解压
tar -zxvf /opt/node_exporter-1.8.2.linux-amd64.tar.gz -C /opt/
# 改名
mv /opt/node_exporter-1.8.2.linux-amd64 /opt/node_exporter
# 设置开机启动
cat > /etc/systemd/system/node_exporter.service << EOF
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
ExecStart=/opt/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 启动
systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
在目标主机上进行安装:
bash
#!/bin/bash
#在指定范围主机上,批量安装node_exporter。需要准备好配置文件和安装文件
start_ip=22
end_ip=24
network="192.168.32"
for ip in $(seq ${start_ip} ${end_ip})
do
target_ip=${network}.${ip}
scp "/opt/node_exporter-1.8.2.linux-amd64.tar.gz" root@"$target_ip":/opt/
scp "/etc/systemd/system/node_exporter.service" root@"$target_ip":/etc/systemd/system/
echo "正在 ${target_ip} 安装node_exporter..."
ssh root@"$target_ip" << EOF
tar -zxf /opt/node_exporter-1.8.2.linux-amd64.tar.gz -C /opt/
mv /opt/node_exporter-1.8.2.linux-amd64 /opt/node_exporter
systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporter
EOF
echo "${target_ip} 上的node_exporter配置完成..."
done
访问如下页面,如果能看到说明成功了(注意防火墙需要开放9100端口)
修改Prometheus的配置文件
在被监控主机端安装了node_exporter后,就可以在Prometheus的配置中,添加目标主机来进行监控了,修改配置文件如下所示:
bash
#!/bin/bash
#修改配置文件,添加被监控主机
# 目标主机 IP 范围
network="192.168.32"
start_ip=22
end_ip=24
for ip in $(seq ${start_ip} ${end_ip})
do
target_ip=${network}.${ip}
echo "正在写入$target_ip的配置"
cat >> /opt/prometheus-2.54.1/prometheus.yml << EOF
- job_name: '$target_ip' # 给被监控主机取个名字,我这里直接填的IP
static_configs:
- targets: ['$target_ip:9100'] # 被监控主机的IP和端口
EOF
done
# 重启服务
systemctl stop prometheus.service
systemctl start prometheus.service
systemctl status prometheus.service
再次访问,已经可以看到我们添加的这几台机器了,如下所示
安装mysqld_exporter
监控mysql服务需要安装mysqld_exporter组件,我们使用如下脚本在目标主机上安装。顺便添加开机启动和配置文件:
简单说明下,我们需要准备两个配置文件
- mysqld_exporter.cnf用来指定连接mysql的用户名和密码
- 另一个mysqld_exporter.service是用来做开机自动启动的
bash
#!/bin/bash
#在指定范围主机上,批量安装node_exporter。需要准备好配置文件和安装文件
# wget -P "/opt/" https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.1/mysqld_exporter-0.15.1.linux-amd64.tar.gz
# 准备配置文件,用来指定mysql的用户,建议是建一个专门的监控用户
cat > /opt/mysqld_exporter.cnf << EOF
[client]
user=root
password=Abc@1234
# host=127.0.0.1:3306
EOF
# 准备开机启动的配置文件
cat > /opt/mysqld_exporter.service << EOF
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
Type=simple
ExecStart=/opt/mysqld_exporter/mysqld_exporter \
--config.my-cnf /etc/mysqld_exporter.cnf \
--collect.slave_status \
--collect.slave_hosts \
--log.level=error \
--collect.info_schema.processlist \
--collect.info_schema.innodb_metrics \
--collect.info_schema.innodb_tablespaces \
--collect.info_schema.innodb_cmp \
--collect.info_schema.innodb_cmpmem
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 指定ip范围
start_ip=22
end_ip=23
network="192.168.32"
# 在指定主机上分别配置
for ip in $(seq ${start_ip} ${end_ip})
do
target_ip=${network}.${ip}
scp "/opt/mysqld_exporter-0.15.1.linux-amd64.tar.gz" root@"$target_ip":/opt/
scp "/opt/mysqld_exporter.cnf" root@"$target_ip":/etc/
scp "/opt/mysqld_exporter.service" root@"$target_ip":/etc/systemd/system/
echo "正在 ${target_ip} 安装mysqld_exporter..."
ssh root@"$target_ip" << EOF
tar -zxf /opt/mysqld_exporter-0.15.1.linux-amd64.tar.gz -C /opt/
mv /opt/mysqld_exporter-0.15.1.linux-amd64 /opt/mysqld_exporter
systemctl daemon-reload
systemctl start mysqld_exporter
systemctl enable mysqld_exporter
# 开放端口
firewall-cmd --permanent --add-port=9104/tcp
firewall-cmd --reload
EOF
echo "正在写入$target_ip的配置"
cat >> /opt/prometheus-2.54.1/prometheus.yml << EOF
- job_name: 'mysql$ip'
static_configs:
- targets: ['$target_ip:9104']
EOF
done
# 重启服务
systemctl stop prometheus.service
systemctl start prometheus.service
systemctl status prometheus.service
然后启动后,访问ip+9104端口,如果看到如下界面,说明安装成功了
回到Prometheus界面,刷新也可以看到监控的mysql了
设置Grafana可视化
这个挺简单的,请参考原链接。我就不截图了,简单来说就是下面这个步骤
- 在添加Prometheus数据源
- 在dashboard导入模版11074
- 导入后即可查看详细
最终效果如下所示:
Mysql数据可视化
mysql的可视化和上面类似,导入对应的模版即可。比如7362。
还有一种方式是直接去Github上下载json文件,然后从Grafana的web界面导入。下载地址是:https://github.com/percona/grafana-dashboards 然后找到dashboard的mysql那个文件夹,下载kson文件,后面就不多介绍了。
效果如下:
监控Redis
redis的监控和上面的流程差不多,简单来说就是如下步骤
- 安装redis_exporter
- 在Prometheus中添加配置
- 在Grafana中添加模版,比如12776,https://grafana.com/grafana/dashboards/11835-redis-dashboard-for-prometheus-redis-exporter-helm-stable-redis-ha/。当然也可以用别的dashboard模版
用到的脚步如下:
首先是在本机上安装redis_expoeter:
bash
#redis_exporter的安装配置
wget -P "/opt" https://github.com/oliver006/redis_exporter/releases/download/v1.63.0/redis_exporter-v1.63.0.linux-amd64.tar.gz
redis_pwd=Abc@1234
# 解压和安装
tar -zxf /opt/redis_exporter-v1.63.0.linux-amd64.tar.gz -C /opt/
mv /opt/redis_exporter-v1.63.0.linux-amd64 /opt/redis_exporter
# 开放端口,redis_exporter默认使用9121端口
firewall-cmd --permanent --add-port=9121/tcp
firewall-cmd --reload
# 准备配置文件
cat > /etc/systemd/system/redis_exporter.service << EOF
[Unit]
Description=redis_exporter
After=network.target
[Service]
Type=simple
ExecStart=/opt/redis_exporter/redis_exporter -redis.addr 127.0.0.1:6379 -redis.password $redis_pwd
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
# 启动
systemctl daemon-reload
systemctl start redis_exporter
systemctl enable redis_exporter
# 写入Prometheus配置
cat >> /opt/prometheus-2.54.1/prometheus.yml << EOF
- job_name: 'redis_192.168.32.21'
static_configs:
- targets: ['192.168.32.21:9121']
EOF
# 重启Prometheus
systemctl restart prometheus
在指定范围的Ip内主机上安装:
bash
#!/bin/bash
#在指定主机范围安装redis_exporter,默认本机上已经有安装文件和service文件
# 指定ip范围
start_ip=23
end_ip=24
network="192.168.32"
# 在指定主机上分别配置
for ip in $(seq ${start_ip} ${end_ip})
do
target_ip=${network}.${ip}
scp "/opt/redis_exporter-v1.63.0.linux-amd64.tar.gz" root@"$target_ip":/opt/
scp "/etc/systemd/system/redis_exporter.service" root@"$target_ip":/etc/systemd/system/
echo "正在 ${target_ip} 安装redis_exporter..."
ssh root@"$target_ip" << EOF
tar -zxf /opt/redis_exporter-v1.63.0.linux-amd64.tar.gz -C /opt/
mv /opt/redis_exporter-v1.63.0.linux-amd64 /opt/redis_exporter
systemctl daemon-reload
systemctl start redis_exporter
systemctl enable redis_exporter
# 开放端口
firewall-cmd --permanent --add-port=9121/tcp
firewall-cmd --reload
EOF
echo "正在写入$target_ip的redis配置"
cat >> /opt/prometheus-2.54.1/prometheus.yml << EOF
- job_name: 'redis_$ip'
static_configs:
- targets: ['$target_ip:9121']
EOF
done
# 重启服务
systemctl stop prometheus.service
systemctl start prometheus.service
systemctl status prometheus.service
最终效果如下
总结
至此,我们实现了用Prometheus监控系统信息、Mysql、Redis。本次实践只是单纯的获取了信息源,可以在Grafana面板中进行图形化表示而已。至于详细的监控指标和报警设置,那又是另外一个话题了。我们下次再聊。