监控概述
- 监控的目的
- 报告系统运行状况,了解内容包括吞吐量、反应时间、使用率等
- 提前发现问题,提前解决问题
- 进行服务器性能调整前,知道调整什么
- 找出系统的瓶颈
- 监控的资源类别
- 公开数据
- Web、FTP、SSH、数据库等应用服务
- TCP或UDP端口
- 私有数据
- CPU、内存、磁盘、网卡流量等使用信息一用户、进程等运行信息
- 公开数据
- 自动化监控系统
- Cacti:基于SNMP协议的监控软件,强大的绘图能力
- Nagios: 基于Agent监控,强大的状态检查与报警机制插件极多,自己写监控脚本嵌入到Nagios非常方便-
- Zabbix 基于多种监控机制,支持分布式监控
- Prometheus支持多种监控机制、可擅于监控容器云
Zabbix简介
- 安装说明:https://www.zabbix.com/download?zabbix=6.0&os_distribution=rocky_linux&os_version=8&components=server_frontend_agent&db=mysql&ws=nginx
- 中文手册:https://www.zabbix.com/documentation/6.0/zh
- Zabbix是一个高度集成的监控解决方案可以实现企业级的开源分布式监控
- Zabbix通过C/S模式采集监控数据
- Zabbix通过B/S模式实现Web管理
Prometheus简介
- Prometheus是一个开源系统监控和警报工具包,最初由 SoundCloud构建。
- 也是一款监控软件,也是一个时序数据库。Prometheus 将其指标收集并存储为时间序列数据,即指标信息与记录时的时间戳以及称为标签的可选键值对一起存储。
- 主要用在容器监控方面,也可以用于常规的主机监控。
- 使用google公司开发的go语言编写。
- Prometheus是一个框架,可以与其他组件完美结合
环境准备
- 使用模板机克隆如下两台主机
- 确保两台主机可以连接外网
- 确保yum仓库可用
主机名 | IP地址 |
---|---|
prometheus | 192.168.8.100(vmnet8网络模式) |
node1 | 192.168.8.101(vment8网络模式) |
实验环境准备
使用模板机链接克隆prometheus、node1
prometheus主机操作(修改主机名及配置IP地址,网卡名不要照抄)
[root@template ~]# hostnamectl set-hostname prometheus
[root@prometheus ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.100/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes
[root@prometheus ~]# nmcli connection up ens160
[root@prometheus ~]# systemctl restart chronyd #重启时间同步服务
#prometheus在使用时需要是间同步
#chronyd时间同步服务可以和互联网中的时间服务器同步时间(前提虚拟机需要连接外网)
node1主机操作(修改主机名及配置IP地址,网卡名不要照抄)
[root@template ~]# hostnamectl set-hostname node1
[root@node1 ~]# nmcli connection modify ens160 ipv4.method manual ipv4.addresses 192.168.8.101/24 ipv4.gateway 192.168.8.254 ipv4.dns 192.168.8.254 connection.autoconnect yes
[root@node1 ~]# nmcli connection up ens160
[root@prometheus ~]# systemctl restart chronyd #重启时间同步服务
#prometheus在使用时需要是间同步
#chronyd时间同步服务可以和互联网中的时间服务器同步时间(前提虚拟机需要连接外网)
两台主机使WindTerm远程连接
2024-AI大模型Java全链路工程师环境资料/第四模块/prometheus_soft.tar.gz 压缩包拷贝至 promethues主机的/root 家目录下
部署prometheus服务
[root@prometheus ~]# tar -xf prometheus_soft.tar.gz
[root@prometheus ~]# cd prometheus_soft/
]# tar -xf prometheus-2.17.2.linux-386.tar.gz
]# mv prometheus-2.17.2.linux-386 /usr/local/prometheus
修改配置文件,让 promethues 自己监控自己
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
....
static_configs:
- targets: ['192.168.8.100:9090'] #修改 IP,指定自己监控自己
检查配置文件是否修改正确(\表示一行写不下,折行写)
[root@prometheus ~]# /usr/local/prometheus/promtool check config \ /usr/local/prometheus/prometheus.yml
SUCCESS: 0 rule files found
默认prometheus启动服务是很复杂的,如果想利用systemd更快速更方便的管理prometheus
服务,就需要编写服务文件,让 systemd 管理
[root@prometheus ~]# vim /usr/lib/systemd/system/prometheus.service #编辑服务配置文件
[Unit]
Description=Prometheus Monitoring System
Documentation=Prometheus Monitoring System
[Service]
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/usr/local/prometheus/data
[Install]
WantedBy=multi-user.target
[root@prometheus ~]# systemctl enable prometheus.service --now #设置为开启自启并立即启动服务
[root@prometheus ~]# systemctl status prometheus.service
[root@prometheus ~]# ss -ntulp | grep 9090 #Prometheus服务监听9090端口
tcp LISTEN 0 128 :::9090 :::* users:(("prometheus",pid=10885,fd=8))
查看及测试
- 通过浏览器访问 prometheus 的 web 监控页面,查看监控数据
- 访问:http://192.168.8.100:9090
- 如果用真机访问 prometheus 时,出现时差问题,可以使用systemctl restart chronyd同步最新时间(前提虚拟机可以连接网络);
- 若还不可以,则使用 prometheus 本机的浏览器访问测试,时差问题就可以解决。
[root@prometheus ~]# firefox http://192.168.8.100:9090
Promethues 被监控端
- 2024-AI大模型Java全链路工程师环境资料/第四模块/prometheus_soft.tar.gz 压缩包拷贝至 node1主机的/root 家目录下
部署被监控端(node1)
[root@node1 ~]# tar -xf prometheus_soft.tar.gz
[root@node1 ~]# cd prometheus_soft/
[root@node1 prometheus_soft]# tar -xf node_exporter-1.0.0-rc.0.linux-amd64.tar.gz
]# mv node_exporter-1.0.0-rc.0.linux-amd64 /usr/local/node_exporter
[root@node1 prometheus_soft]# ls /usr/local/node_exporter/
LICENSE node_exporter NOTICE
如果想更好更快的管理 node_exporter 导出器服务,需要编写 service 服务文件,让 systemd
进行管理
[root@node1 ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/node_exporter/node_exporter
[Install]
WantedBy=multi-user.target
[root@node1 ~]# systemctl enable node_exporter --now
[root@node1 ~]# systemctl status node_exporter
[root@node1 ~]# ss -ntulp | grep node_exporter
tcp LISTEN 0 128 :::9100 :::*
users:(("node_exporter",pid=11222,fd=3))
prometheus服务端修改监控端服务器配置
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
......
- job_name: 'node1' #定义监控任务名字,可以任意名称
static_configs:
- targets: ['192.168.8.101:9100'] #被监控端主机和端口
[root@prometheus ~]# systemctl restart prometheus #重启服务,再查看web页面信息
Grafana简介
- Grafana是一种开源的数据可视化和监控平台,用于实时分析和可视化大规模的指标数据。它提供了丰富的数据可视化工具和面板,可以轻松地创建交互式仪表板来监控、查询和分析多种数据源的数据。Grafana支持广泛的数据源,包括Graphite、InfluxDB、Prometheus、Elasticsearch、MySQL等。用户可以通过Grafana的灵活的查询编辑器和插件系统,自定义数据查询和展示方式,从而满足各种不同的数据分析和监控需求。Grafana还具有强大的告警功能,可以及时通知用户关于数据异常或者预先设定的指标阈值的超出情况。Grafana简单易用、功能强大,已经成为开源社区和企业中常用的数据可视化和监控平台之一。
部署 Grafana 服务器
- Grafana 可以在任意主机部署,本实验规划是在监控服务器 prometheus 上安装部署 Grafana
- Grafana默认端口:3000
[root@prometheus ~]# cd prometheus_soft/
[root@prometheus prometheus_soft]# ls
.....
grafana-6.7.3-1.x86_64.rpm
[root@prometheus prometheus_soft]# dnf -y install grafana-6.7.3-1.x86_64.rpm
[root@prometheus ~]# systemctl enable grafana-server --now
[root@prometheus ~]# systemctl status grafana-server
[root@prometheus ~]# ss -ntulp | grep grafana-server
- 在启动 grafana 服务后,可以通过浏览器访问 grafana 的 web 的页面,注意需要加上 3000 端
口访问,默认的的初始用户名:admin默认密码: admin,但浏览器如果和 Grafana 版本不兼容,我
们修改新密码就会失败 - 浏览器访问:http://192.168.8.100:3000
- 如果无法修改密码,就需要修改配置文件,设置成可以通过匿名访问的方式,再重新访问 Grafana 页面
[root@prometheus ~]# vim /etc/grafana/grafana.ini
304 [auth.anonymous]
306 enabled = true #启用匿名访问
312 org_role = Admin #以管理员的身份登录
[root@prometheus ~]# systemctl restart grafana-server #重启服务
修改数据源
- 如果需要 Grafana 能够显示 prometheus 监控的数据,通过数据绘制成图形,需要将prometheus 监控的数据作为数据源添加到 Grafana 里面
- 点击 Add data source,添加数据源
选择Prometheus作为数据源
给数据源进行命名,并设置为默认数据源,然后设置数据源来源地址,最后保存配置
- 保存成功之后,可以点击齿轮图标,选择 data sources,查看数据源,这样就有了数据的来源:
- 在有了数据源之后,想让 Grafana 通过数据绘制出图形,这个时候还需要导入数据模板,这
里 Grafana 也自带了一个模板,我们也可以尝试导入,然后查看绘制的图形,在这里也需要
知道,不同的数据模板最终绘制的图形以及显示的数据信息也都不一样
在有了数据源之后,想让 Grafana 通过数据绘制出图形,这个时候还需要导入数据模板,这
里 Grafana 也自带了一个模板,我们也可以尝试导入,然后查看绘制的图形,在这里也需要
知道,不同的数据模板最终绘制的图形以及显示的数据信息也都不一样
- 默认的模板无法查看被监控主机的信息;
- 如何还想查看被监控主机node1的node_exporter导出器采集的内存、CPU 等信息,这里也需要导入node_exporter 导出器的模板(模板文件可自己开发,也可到官网上下载):
最后可以将该面板保存下来
监控数据库
安装部署Mariadb
将 node1 主机搭建成 Mariadb 数据服务器,配置账户和密码
[root@node1 ~]# dnf -y install mariadb mariadb-server
[root@node1 ~]# systemctl enable mariadb --now #设置为开启自启,并立即启动服务
[root@node1 ~]# mysql
MariaDB [(none)]> GRANT ALL ON *.* TO tom@'127.0.0.1' IDENTIFIED BY '123';
MariaDB [(none)]> EXIT;
安装导出器
- 如果想让 prometheus 能够监控 node1 主机的数据库,就需要安装数据库相关的导出器,
- 安装 mysqld_exporter 导出器,并修改导出器的配置文件,指定数据库的用户名、密码、端
口、主机信息,这样导出器才能获取本机的数据库的状态信息 - mysqld_exporter默认端口号:9104
[root@node1 ~]# cd prometheus_soft/
[root@node1 prometheus_soft]# tar -xf mysqld_exporter-0.12.1.linux-amd64.tar.gz
]# mv mysqld_exporter-0.12.1.linux-amd64 /usr/local/mysqld_exporter
[root@node1 prometheus_soft]# ls /usr/local/mysqld_exporter/
LICENSE mysqld_exporter NOTICE
[root@node1 prometheus_soft]# vim /usr/local/mysqld_exporter/.my.cnf
[client]
host=127.0.0.1
port=3306
user=tom
password=123
[root@node1 ~]# vim /usr/lib/systemd/system/mysqld_exporter.service
[Unit]
Description=mysqld_exporter
After=network.target
[Service]
ExecStart=/usr/local/mysqld_exporter/mysqld_exporter \
--config.my-cnf=/usr/local/mysqld_exporter/.my.cnf
[Install]
WantedBy=multi-user.target
[root@node1 ~]# systemctl enable mysqld_exporter --now #设置开机自启,并立即启动服务
[root@node1 ~]# systemctl status mysqld_exporter
[root@node1 ~]# ss -nutlp | grep mysqld_exporter #默认监听9104
tcp LISTEN 0 128 :::9104 :::*
users:(("mysqld_exporter",pid=11807,fd=3))
修改 Prometheus服务端配置
- 如果要将 node1 的数据库进行监控,需要在 prometheus 上添加 node1 数据库监控相关的配
置
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
......
- job_name: 'node1_mysql'
static_configs:
- targets: ['192.168.8.101:9104'] #指定 node1 导出器服务端口和地址
[root@prometheus ~]# systemctl restart prometheus #重启服务让配置生效
Grafana配置
- 如果想在 Grafana 中展示 node1 的数据库监控状态信息,也需要在 Grafana 中导入数据库的
相关模板,用于展示数据库的状态信息
Alertmanager
概述
- Prometheus服务器中的告警规则向Alertmanager发送告警。然后,Alertmanager管理这些告警,包括静默、抑制、分组以及通过电子邮件、即时消息系统和聊天平台等方法发出通知。
- 设置告警和通知的主要步骤是:
- 设置和配置Alertmanager
- 配置Prometheus与Alertmanager对接
- 在普罗米修斯中创建告警规则
- 在Prometheus中一条告警规则主要由以下几部分组成:
- 告警名称:用户需要为告警规则命名
- 告警规则:告警规则实际上主要由PromQL进行定义,其实际意义是当表达式(PromQL)查询结果持续多长时间(During)后出发告警
Alertmanager特性
- Alertmanager处理客户端应用程序(如Prometheus服务器)发送的警报。它负责重复数据删除、分组,并将其路由到正确的接收方集成
- 分组:分组将性质相似的警报分类到单个通知中。这在较大的停机期间特别有用,此时许多系统同时发生故障,数百到数千个警报可能同时发出。
- 抑制:抑制是当某一告警发出后,可以停止重复发送由此告警引发的其它告警的机制。
- 静默提供了一个简单的机制可以快速根据标签对告警进行静默处理。如果接收到的告警符合静默的配置, Alertmanager则不会发送告警通知。静默设置需要在Alertmanager的Web页面上进行设置。
安装Alertmanager
[root@prometheus ~]# cd prometheus_soft/
[root@prometheus prometheus_soft]# tar -xf alertmanager-0.20.0.linux-386.tar.gz
]# mv alertmanager-0.20.0.linux-386 /usr/local/alertmanager
编写service文件
[root@prometheus prometheus_soft]# vim /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager System
[Service]
ExecStart=/usr/local/alertmanager/alertmanager \
--config.file=/usr/local/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
[root@prometheus ~]# systemctl daemon-reload
[root@prometheus ~]# systemctl enable alertmanager.service --now
访问[http://192.168.8.100:9093]可以访问web配置页面
配置文件
- Alertmanager的配置主要包含两个部分:路由(route)以及接收器(receivers)。所有的告警信息都会从配置中的顶级路由(route)进入路由树,根据路由规则将告警信息发送给相应的接收器。
- 在Alertmanager中可以定义一组接收器,比如可以按照角色(比如系统运维,数据库管理员)来划分多个接收器。接收器可以关联邮件,Slack以及其它方式接收告警信息。
- 目前配置文件中只设置了一个顶级路由route并且定义的接收器为default-receiver。因此,所有的告警都会发送给default-receiver。
- 因此在Alertmanager配置中一般会包含以下几个主要部分:
- 全局配置(global):用于定义一些全局的公共参数,如全局的SMTP配置
- 模板(templates):用于定义告警通知时的模板,如HTML模板,邮件模板等
- 告警路由(route):根据标签匹配,确定当前告警应该如何处理
- 接收器(receivers):接收器是一个抽象的概念,它可以是一个邮箱也可以是微信,Slack或者Webhook 等,接收器一般配合告警路由使用
- 抑制规则(inhibit_rules):合理设置抑制规则可以减少垃圾告警的产生
Prometheus与Alertmanager对接
prometheus主机操作,编辑prometheus.yml文件,修改alerting配置
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
...此处省略一万字...
8 alerting:
9 alertmanagers:
10 - static_configs:
11 - targets:
12 - localhost:9093
...此处省略一万字...
[root@prometheus ~]# systemctl restart prometheus.service
访问:http://192.168.8.100:9090/config,查看配置是否生效
配置Alertmanager通过邮件发送告警
[root@prometheus ~]# cp /usr/local/alertmanager/alertmanager.yml /opt #备份配置文件
[root@prometheus ~]# vim /usr/local/alertmanager/alertmanager.yml #修改配置文件
global:
smtp_from: '[email protected]' # 发件人地址
smtp_smarthost: 'localhost:25' # 邮件服务器地址
smtp_require_tls: false # 是否使用TLS安全连接
route:
group_by: ['alertname']
group_wait: 30s
group_interval: 5m
repeat_interval: 1h
receiver: 'default-receiver' # 接收器
receivers:
- name: 'default-receiver' # 配置接收器为邮件
email_configs:
- to: '[email protected]'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
定义规则文件
- 创建规则目录/usr/local/prometheus/rules/
- 2024-AI大模型Java全链路工程师环境资料/第四模块/hoststats-alert.rules上传至 promethues主机的/usr/local/prometheus/rules/
[root@prometheus ~]# mkdir /usr/local/prometheus/rules/
[root@prometheus ~]# ls /usr/local/prometheus/rules/
hoststats-alert.rules
在prometheus中声明规则文件位置
[root@prometheus ~]# vim /usr/local/prometheus/prometheus.yml
...略...
15 rule_files:
16 - /usr/local/prometheus/rules/*.rules
...略...
安装并启动邮件服务
[root@prometheus ~]# dnf -y install postfix mailx
[root@prometheus ~]# systemctl enable postfix --now
[root@prometheus ~]# ss -nutlp | grep :25
测试警告
[root@node1 ~]# shutdown -h now #将node1关机
[root@prometheus ~]# mail #查看邮件
Heirloom Mail version 12.5 6/20/10. Type ? for help.
"/var/spool/mail/root": 1 message
> 1 [email protected] Sun Oct 22 23:30 227/12706 "[FIRING:2] InstanceDown "
&
总结
- 掌握Prometheus使用场景及工作原理
- 掌握Prometheus部署方式
- 掌握exporter作用
- 掌握Prometheus监控服务器硬件及数据库服务
- 掌握Grafana可视化工具
- 掌握Alertmanager邮件告警