使用Prometheus进行系统监控,包括Mysql、Redis,并使用Grafana图形化表示

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组件,我们使用如下脚本在目标主机上安装。顺便添加开机启动和配置文件:

简单说明下,我们需要准备两个配置文件

  1. mysqld_exporter.cnf用来指定连接mysql的用户名和密码
  2. 另一个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可视化

这个挺简单的,请参考原链接。我就不截图了,简单来说就是下面这个步骤

  1. 在添加Prometheus数据源
  2. 在dashboard导入模版11074
  3. 导入后即可查看详细

最终效果如下所示:

Mysql数据可视化

mysql的可视化和上面类似,导入对应的模版即可。比如7362。

还有一种方式是直接去Github上下载json文件,然后从Grafana的web界面导入。下载地址是:https://github.com/percona/grafana-dashboards 然后找到dashboard的mysql那个文件夹,下载kson文件,后面就不多介绍了。

效果如下:

监控Redis

redis的监控和上面的流程差不多,简单来说就是如下步骤

  1. 安装redis_exporter
  2. 在Prometheus中添加配置
  3. 在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面板中进行图形化表示而已。至于详细的监控指标和报警设置,那又是另外一个话题了。我们下次再聊。

相关推荐
wkj00110 分钟前
php操作redis
开发语言·redis·php
武子康15 分钟前
大数据-231 离线数仓 - DWS 层、ADS 层的创建 Hive 执行脚本
java·大数据·数据仓库·hive·hadoop·mysql
黑色叉腰丶大魔王19 分钟前
《MySQL 数据库备份与恢复》
mysql
Ljw...27 分钟前
索引(MySQL)
数据库·mysql·索引
菠萝咕噜肉i41 分钟前
超详细:Redis分布式锁
数据库·redis·分布式·缓存·分布式锁
OpsEye1 小时前
MySQL 8.0.40版本自动升级异常的预警提示
数据库·mysql·数据库升级
Ljw...1 小时前
表的增删改查(MySQL)
数据库·后端·mysql·表的增删查改
登云时刻2 小时前
Kubernetes集群外连接redis集群和使用redis-shake工具迁移数据(二)
redis·容器·kubernetes
Dlwyz5 小时前
redis-击穿、穿透、雪崩
数据库·redis·缓存
工业甲酰苯胺7 小时前
Redis性能优化的18招
数据库·redis·性能优化