当前位置: 首页 > news >正文

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

Prometheus是一个开源的的监控工具,而且还免费。这一次我们用Prometheus来对之前安装的所有服务,包括Mysql、Redis、系统状况等进行监控,并结合Grafana进行图形化展示

Prometheus下载和安装

下载地址(以下所有插件的官方下载地址都是这个):https://prometheus.io/download/

选择合适版本用wget进行下载:

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/

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 -xvzf /opt/prometheus-2.54.1.linux-amd64.tar.gz
mv prometheus-2.54.1.linux-amd64 prometheus-2.54.1

安装脚本

将以上过程,用shell脚本实现。并配置开机启动。

#!/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
EOFsystemctl 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

配置文件默认就在安装目录下,

[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安装。

#!/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是用来收集服务器信息的一个组件,该组件需要安装在被监控的机器上。我们来简单写一个安装脚本

#!/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

在目标主机上进行安装:

#!/bin/bash
#在指定范围主机上,批量安装node_exporter。需要准备好配置文件和安装文件start_ip=22
end_ip=24
network="192.168.32"for ip in $(seq ${start_ip} ${end_ip})
dotarget_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" << EOFtar -zxf /opt/node_exporter-1.8.2.linux-amd64.tar.gz -C /opt/mv /opt/node_exporter-1.8.2.linux-amd64 /opt/node_exportersystemctl daemon-reloadsystemctl start node_exportersystemctl enable node_exporter
EOFecho "${target_ip} 上的node_exporter配置完成..."
done

访问如下页面,如果能看到说明成功了(注意防火墙需要开放9100端口)

在这里插入图片描述

修改Prometheus的配置文件

在被监控主机端安装了node_exporter后,就可以在Prometheus的配置中,添加目标主机来进行监控了,修改配置文件如下所示:

#!/bin/bash
#修改配置文件,添加被监控主机# 目标主机 IP 范围
network="192.168.32"
start_ip=22
end_ip=24for ip in $(seq ${start_ip} ${end_ip})
dotarget_ip=${network}.${ip}echo "正在写入$target_ip的配置"cat >> /opt/prometheus-2.54.1/prometheus.yml << EOF- job_name: '$target_ip'      # 给被监控主机取个名字,我这里直接填的IPstatic_configs:- targets: ['$target_ip:9100']      # 被监控主机的IP和端口
EOFdone# 重启服务
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是用来做开机自动启动的
#!/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})
dotarget_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" << EOFtar -zxf /opt/mysqld_exporter-0.15.1.linux-amd64.tar.gz -C /opt/mv /opt/mysqld_exporter-0.15.1.linux-amd64 /opt/mysqld_exportersystemctl daemon-reloadsystemctl start mysqld_exportersystemctl enable mysqld_exporter# 开放端口firewall-cmd --permanent --add-port=9104/tcpfirewall-cmd --reload
EOFecho "正在写入$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:

#redis_exporter的安装配置wget -P "/opt" https://github.com/oliver006/redis_exporter/releases/download/v1.63.0/redis_exporter-v1.63.0.linux-amd64.tar.gzredis_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内主机上安装:

#!/bin/bash
#在指定主机范围安装redis_exporter,默认本机上已经有安装文件和service文件# 指定ip范围
start_ip=23
end_ip=24
network="192.168.32"# 在指定主机上分别配置
for ip in $(seq ${start_ip} ${end_ip})
dotarget_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" << EOFtar -zxf /opt/redis_exporter-v1.63.0.linux-amd64.tar.gz -C /opt/mv /opt/redis_exporter-v1.63.0.linux-amd64 /opt/redis_exportersystemctl daemon-reloadsystemctl start redis_exportersystemctl enable redis_exporter# 开放端口firewall-cmd --permanent --add-port=9121/tcpfirewall-cmd --reload
EOFecho "正在写入$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面板中进行图形化表示而已。至于详细的监控指标和报警设置,那又是另外一个话题了。我们下次再聊。

相关文章:

  • 《C++并发编程实战》笔记(五)
  • 学习C语言(21)
  • poetry安装
  • BUUCTF蜘蛛侠呀
  • Synchronized是怎么实现的?
  • [SwiftUI 开发] @dynamicCallable 与 callAsFunction:将类型实例作为函数调用
  • 力扣9.28
  • Python按照指定“字体大小以及字体格式”,批量更新Word文档内容(10)
  • 基于Java+SQL Server2008开发的(CS界面)个人财物管理系统
  • Python编码系列—Python备忘录模式:掌握对象状态保存与恢复技术
  • HTTP请求中GET与POST方法的核心区别与用途解析
  • VMware下的ubuntu显示文字太小的自适应显示调整
  • 力扣题解2286
  • 【高分系列卫星简介——高分五号卫星(GF-5)】
  • Jenkins入门:从搭建到部署第一个Springboot项目(踩坑记录)
  • JS 中的深拷贝与浅拷贝
  • [译]如何构建服务器端web组件,为何要构建?
  • 【跃迁之路】【735天】程序员高效学习方法论探索系列(实验阶段492-2019.2.25)...
  • 2017 年终总结 —— 在路上
  • angular2开源库收集
  • Apache的80端口被占用以及访问时报错403
  • Centos6.8 使用rpm安装mysql5.7
  • HomeBrew常规使用教程
  • 阿里中间件开源组件:Sentinel 0.2.0正式发布
  • 半理解系列--Promise的进化史
  • 检测对象或数组
  • 利用DataURL技术在网页上显示图片
  • 前端存储 - localStorage
  • 前端知识点整理(待续)
  • 使用Swoole加速Laravel(正式环境中)
  • 怎么将电脑中的声音录制成WAV格式
  • ​第20课 在Android Native开发中加入新的C++类
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #图像处理
  • (1)bark-ml
  • (6) 深入探索Python-Pandas库的核心数据结构:DataFrame全面解析
  • (Java)【深基9.例1】选举学生会
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (四) Graphivz 颜色选择
  • (一) springboot详细介绍
  • (转)linux自定义开机启动服务和chkconfig使用方法
  • .NET Core 发展历程和版本迭代
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .net反混淆脱壳工具de4dot的使用
  • @angular/cli项目构建--Dynamic.Form
  • @DS 多数据源 + @Transactional(rollbackFor = Exception.class) 导致@DS 多数据源没法使用
  • @select 怎么写存储过程_你知道select语句和update语句分别是怎么执行的吗?
  • [AI 大模型] 百度 文心一言
  • [Android Pro] Notification的使用
  • [boost]使用boost::function和boost::bind产生的down机一例
  • [BUUCTF NewStarCTF 2023 公开赛道] week3 crypto/pwn
  • [C# 开发技巧]实现属于自己的截图工具
  • [C#]winform利用seetaface6实现C#人脸检测活体检测口罩检测年龄预测性别判断眼睛状态检测