一、Prometheus 基础介绍1.1 基本概念Prometheus 是SoundCloud 开源的监控报警解决方案使用Go 语言开发。自身属于时序数据库专门存储时序数据数据格式metric name{label namelabel value, ...}每条数据自带时间标签。适用场景主打容器监控同时也可监控常规物理/虚拟主机。特性说明优先保证高可用不追求 100% 数据精准、完整对数据细节要求极高的场景不推荐使用。默认服务端口9090。Prometheus 原生仅提供简易Web UI只做查询、指标浏览无专业可视化、大屏、告警视图无法满足日常监控大屏需求。主流搭配方案Grafana行业首选图表丰富、模板多、易配置专门用来渲染 Prometheus 监控数据。补充Prometheus 自身UI仅作临时查询/调试生产环境几乎都会配合 Grafana 使用。Prometheus基于模块化设计功能拆成独立组件可单独替换 / 扩展互不强绑定Prometheus Server核心模块Retrieval抓取模块从 Jobs/exporters 和 Pushgateway 拉取指标数据从 Service discovery 获取要监控的目标列表TSDB时序数据库时序数据读写、压缩、保留HTTP server查询、图表、配置管理生态扩展模块可插拔Pushgateway短生命周期任务如批处理主动推送指标Alertmanager独立告警模块去重、分组、路由、通知邮件/企业微信Service DiscoveryK8s、Consul、AWS 等自动发现 TargetGrafana独立可视化模块并非专门为Prometheus设计但可以对接 Prometheus 做仪表盘1.2 环境规划基于模板机克隆两台虚拟机使用 WindTerm 远程连接主机规划如下可复用之前的主机但要注意kill掉zabbix的所有进程并将/etc/rc.d/rc.local文件中的内容注释掉注意本实验博主做了两次使用的第二个实验环境为Prometheus192.168.8.10/24node1192.168.8.11/24第一次实验忘记截图所以使用的是第二次实验的截图部分截图的IP会和文本有差异但不影响阅读和操作因为两次实验的操作流程和配置完全一致所以涉及IP的内容和配置一定不要照抄参照自己实际的实验环境来二、部署 Prometheus 监控端192.168.8.1002.1 软件解压部署将prometheus_soft.tar.gz压缩包拷贝至 promethues主机的/root 家目录下Prometheus 为解压即安装类型类似 Tomcat常规源码放置目录/usr/local/软件名下。# 拷贝压缩包至 /root 后执行解压操作[rootprometheus ~]# tar -xf prometheus_soft.tar.gz# 进入解压目录[rootprometheus ~]# cd prometheus_soft/# 解压 Prometheus 程序包[rootprometheus prometheus_soft]# tar -xf prometheus-2.17.2.linux-386.tar.gz# 移动并重命名到标准目录[rootprometheus prometheus_soft]# mv prometheus-2.17.2.linux-386 /usr/local/prometheus2.2 基础配置监控自身修改主配置文件prometheus.yml实现 Prometheus 监控自身注意 YAML 文件严格缩进。[rootprometheus ~]# vim /usr/local/prometheus/prometheus.yml# 配置监控自身节点23 - job_name:prometheus#任务名称如何命名对任务无影响24 25# metrics_path defaults to /metrics26# scheme defaults to http.2728 static_configs:29 - targets:[192.168.8.100:9090]#写监控目标的IP2.3 配置文件语法检查使用自带工具promtool校验配置文件语法[rootprometheus ~]# /usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml# 输出 SUCCESS 代表语法无误Checking /usr/local/prometheus/prometheus.yml SUCCESS:0rule files found2.4 配置 Systemd 系统服务原生启动命令复杂建议编写 systemd 单元文件实现服务统一管理、开机自启。推荐使用ai辅助生成相关模板。# 编辑 systemd 服务文件[rootprometheus ~]# vim /usr/lib/systemd/system/prometheus.service服务文件内容[Unit] DescriptionPrometheus Monitoring System DocumentationPrometheus Monitoring System [Service] ExecStart/usr/local/prometheus/prometheus \ --config.file/usr/local/prometheus/prometheus.yml \ --storage.tsdb.path/usr/local/prometheus/data [Install] WantedBymulti-user.target重新加载 systemd 守护进程 的配置[rootprometheus ~]# systemctl daemon-reload #重新加载配置2.5 启动服务并验证# 重载系统服务、开机自启并立即启动 Prometheus[rootprometheus ~]# systemctl enable prometheus.service --now# 查看服务运行状态[rootprometheus ~]# systemctl status prometheus.service# 查看 9090 端口监听状态[rootprometheus ~]# ss -ntulp | grep 9090端口监听结果示例tcp LISTEN 0 128 *:9090 *:* users:((prometheus,pid4637,fd5))2.6 Web 页面访问与测试浏览器访问地址http://192.168.8.100:9090功能验证进入Status - Targets可查看当前监控节点状态UP代表正常采集数据。进入Graph页面输入监控指标如go_memstats_alloc_bytes_total点击Execute查询并生成图表。点击Graph -- 搜索监控项 -- 点击Execule点击Graph可以查看图形页面时差警告解决若页面出现时间相关黄色警告虚拟机联网后执行时间同步systemctl restart chronyd如果用真机访问 prometheus 时出现时差问题会提示黄色的Warning警告 可以使用systemctl restart chronyd同步最新时间前提虚拟机可以连接网络三、部署被监控端node1 192.168.8.1013.1 部署 node_exporter主机硬件监控导出器node_exporter用于采集服务器 CPU、内存、磁盘、网络等硬件指标默认端口9100。3.1.1安装硬件监控导出器将prometheus_soft.tar.gz软件包导入node1主机这个导出器是用来监控硬件的如果想监控nginx或者其他的服务/软件可以在官网找对应的导出器# 解压软件包[rootnode1 ~]# tar -xf prometheus_soft.tar.gz# 进入目录[rootnode1 ~]# cd prometheus_soft/# 安装node_exporter导出器[rootnode1 prometheus_soft]# tar -xf node_exporter-1.0.0-rc.0.linux-amd64.tar.gz# 移动至标准目录[rootnode1 prometheus_soft]# mv node_exporter-1.0.0-rc.0.linux-amd64 /usr/local/node_exporter# 查看目录文件[rootnode1 prometheus_soft]# ls /usr/local/node_exporter/LICENSE node_exporter NOTICE3.1.2 配置 Systemd 服务如果想更好更快的管理 node_exporter 导出器服务需要编写Unit文件让 systemd进行管理[rootnode1 ~]# vim /usr/lib/systemd/system/node_exporter.service服务文件内容[Unit] Descriptionnode_exporter Afternetwork.target [Service] Typesimple ExecStart/usr/local/node_exporter/node_exporter [Install] WantedBymulti-user.target重新加载 systemd 守护进程 的配置[rootprometheus ~]# systemctl daemon-reload #重新加载配置3.1.3 启动服务并验证# 开机自启立即启动[rootnode1 ~]# systemctl enable node_exporter --now# 查看服务状态[rootnode1 ~]# systemctl status node_exporter# 查看 9100 端口[rootnode1 ~]# ss -utnlp | grep node_exporter端口结果示例tcp LISTEN 0 128 *:9100 *:* users:((node_exporter,pid14151,fd3))3.2 Prometheus 配置监控 node1回到 Prometheus 监控端修改主配置文件新增监控任务严格注意 YAML 缩进。[rootprometheus ~]# vim /usr/local/prometheus/prometheus.yml追加配置内容30 - job_name:node1_expoter31 static_configs:32 - targets:[192.168.8.101:9100]上文的配置就是一个监控主机的任务。要监控几个主机就增加几个相同的配置重启 Prometheus 使配置生效[rootprometheus ~]# systemctl restart prometheus.service3.3 验证监控状态刷新 Prometheus Web 页面Status - Targets可看到node1_expoter任务状态为UP代表硬件指标采集正常。同时可在Graph页面查询load15、内存、磁盘等系统指标。注意如果linux主机和Windows主机的时间不一致会有报错四、部署 Grafana 可视化面板Prometheus 自带基础 Web 界面但可视化能力有限。生产环境中通常搭配Grafana等第三方工具实现丰富的监控图表和仪表盘展示。4.1 Grafana 简介Grafana 是跨平台开源度量分析、数据可视化工具支持折线图、热图、图表等多种展示形式。支持主流数据源Graphite、InfluxDB、OpenTSDB、Prometheus、Elasticsearch 等。本次部署在 Prometheus 主机192.168.8.100Grafana默认端口3000。需注意Grafana并非为Prometheus专门定制的Grafana数据来源可以有很多种4.2 安装 Grafana使用 RPM 包安装# 进入软件目录[rootprometheus ~]# cd prometheus_soft/# 使用 dnf 安装 rpm 包[rootprometheus prometheus_soft]# dnf -y install grafana-6.7.3-1.x86_64.rpm# 开机自启并启动服务[rootprometheus ~]# systemctl enable grafana-server --now# 查看服务状态[rootprometheus ~]# systemctl status grafana-server# 查看 3000 端口[rootprometheus ~]# ss -utnlp | grep grafana-server4.3 Web 登录与密码设置访问地址http://192.168.8.100:3000默认账号密码admin / admin首次登录强制修改密码示例新密码123456。密码修改失败解决方案开启匿名管理员访问个别浏览器会出现不兼容的情况此时可以更换浏览器重新尝试若仍无法解决问题需要开启匿名访问。# 编辑 Grafana 主配置文件[rootprometheus ~]# vim /etc/grafana/grafana.ini修改对应配置项304 [auth.anonymous] 306 enabled true # 启用匿名访问 312 org_role Admin # 匿名身份为管理员重启服务生效[rootprometheus ~]# systemctl restart grafana-server4.4 配置 Prometheus 数据源首页点击Add data source选择数据源类型为Prometheus。自定义数据源名称填写 Prometheus 地址http://192.168.8.100:9090开启Default设置为默认数据源。点击Save Test出现Data source is working代表数据源对接成功。可通过Configuration - Data Sources查看已配置数据源。4.5 导入监控模板在有了数据源之后想让 Grafana 通过数据绘制出相应数据的图形还需要导入数据模板.Grafana 也自带了一个模板我们也可以尝试导入然后查看绘制的图形。不同的数据模板最终绘制的图形以及显示的数据信息不一样4.5.1 导入 Prometheus 自身模板在设置–数据源详情页Dashboards中找到Prometheus 2.0 Stats点击Import导入可查看 Prometheus 自身运行状态。4.5.2 导入 node_exporter 主机监控模板默认模板无法查看被监控主机硬件信息需导入主机监控模板首页点击Create - Import。导入 node_exporter 导出器的模板模板文件运维工程师无法自己编写涉及到开发如果想要其他模板需要到官网上下载搜索时建议加入CN使用中文页面的仪表盘选择已配置的 Prometheus 数据源点击Import完成导入。进入面板查看主机 CPU、内存、磁盘、网络等监控图表最后点击Save保存面板。注意这里保存是将当前主机的此模板保存到左上角的模板列表之中点击左上角就可以查看保存的模板列表可以在Home看到我们加入的所有的模板4.5.3 多个监控主机切换在Home中选择对应的模板进入仪表盘左上角切换主机4.5.4 多个监控模板切换点击左上角出现模板列表点击对应模板即可快速切换4.5.5 删除监控模板点击图形页面右上角的齿轮按钮点击下面的红色按钮进行删除五、监控 Mariadb 数据库Prometheus借助Grafana监控mariadb数据库的简略流程1.在被监控端部署mariadb服务2.创建数据库用户便于导出器使用此用户检索数据3.在监控端修改prometheus.yml嘉能可被监控端的mysql_exporter4.在grafana导入相应监控数据的模板文件根据监控数据自动绘制图形5.1 在 node1 部署 Mariadb 数据库将node1主机搭建成Mariadb数据库服务器配置账号和密码授权连接数据库的用户名和密码用户名tom密码123# 安装 Mariadb 服务[rootnode1 ~]# yum -y install mariadb mariadb-server# 开机自启并启动服务[rootnode1 ~]# systemctl enable mariadb --now# 登录数据库[rootnode1 ~]# mysql数据库内执行授权语句创建监控专用账号# 创建用户 tom密码 123允许本地连接并授权所有权限仅允许从本机127.0.0.1登录MariaDB[(none)]GRANTALLON*.*TOtom127.0.0.1IDENTIFIEDBY123;# 退出数据库MariaDB[(none)]EXIT;5.2 部署 mysqld_exporter数据库导出器如果想让 prometheus 能够监控 node1 主机的数据库就需要安装数据库相关的导出器mysqld_exporter默认端口号9104安装数据库导出器mysqld_exporter导出器用于采集数据库信息mysqld_exporter端口号9104# 进入软件目录[rootnode1 ~]# cd prometheus_soft/# 解压数据库导出器[rootnode1 prometheus_soft]# tar -xf mysqld_exporter-0.12.1.linux-amd64.tar.gz# 移动至标准目录[rootnode1 prometheus_soft]# mv mysqld_exporter-0.12.1.linux-amd64 /usr/local/mysqld_exporter# 查看文件[rootnode1 prometheus_soft]# ls /usr/local/mysqld_exporter/LICENSE mysqld_exporter NOTICE5.3 配置数据库连接文件修改导出器的配置文件指定数据库的用户名、密码、端口、主机信息使导出器可以获取本机的数据库的状态信息配置文件/usr/local/mysqld_exporter/.my.cnf.开头的文件属于隐藏文件[rootnode1 prometheus_soft]# vim /usr/local/mysqld_exporter/.my.cnf配置内容[client] host127.0.0.1 port3306 usertom password1235.4 配置 mysqld_exporter Systemd 服务[rootnode1 ~]# vim /usr/lib/systemd/system/mysqld_exporter.service服务文件内容[Unit] Descriptionmysqld_exporter Afternetwork.target [Service] ExecStart/usr/local/mysqld_exporter/mysqld_exporter \ --config.my-cnf/usr/local/mysqld_exporter/.my.cnf [Install] WantedBymulti-user.target[rootnode1 ~]# systemctl daemon-reload #重新加载配置5.5 启动服务并验证端口# 开机自启启动服务[rootnode1 ~]# systemctl enable mysqld_exporter --now# 查看服务状态[rootnode1 ~]# systemctl status mysqld_exporter# 查看 9104 端口[rootnode1 ~]# ss -nutlp | grep mysqld_exporter端口结果tcp LISTEN 0 128 :::9104 :::* users:((mysqld_exporter,pid11807,fd3))5.6 Prometheus 配置监控数据库编辑 Prometheus 主配置文件新增数据库监控任务[rootprometheus ~]# vim /usr/local/prometheus/prometheus.yml追加配置33 - job_name:mysqld_exporter34 static_configs:35 - targets:[192.168.8.101:9104]重启 Prometheus 生效[rootprometheus ~]# systemctl restart prometheus5.7 Grafana 导入数据库监控模板访问 Grafanahttp://192.168.8.100:3000进入Import页面。上传 MySQL 专用模板文件mysql-overview_rev5.json选择 Prometheus 数据源。导入完成后查看数据库连接数、查询性能、缓存、慢查询等指标最后保存面板。选择信息源点击导入即可随后就进入监控图形页面六、部署 Alertmanager 告警系统本节内容以了解为主着重理解报警机制的原理。6.1 Alertmanager 概述工作流程Prometheus 根据告警规则生成告警信息发送至 AlertmanagerAlertmanager 统一处理告警支持静默、分组、抑制并通过邮件、即时通讯等渠道推送通知。部署步骤修改 Alertmanager 配置文件设置收件人和发件人对接 Prometheus 与 Alertmanager编写 Prometheus 的告警规则。Prometheus 中一条告警规则由以下几个部分组成告警名称 用户需要为告警规则命名告警规则告警规则实际上主要由PromQL进行定义其实际意义是当表达式PromQL查询结果持续多长时间During后触发告警Alertmanager 核心特性Alertmanager处理客户端应用程序(如Prometheus服务器)发送的警报。它负责重复数据删除、分组并将其路由到正确的接收方集成分组将同类告警合并为一条通知避免大量告警刷屏抑制主告警触发后屏蔽关联的衍生告警减少无效通知静默临时屏蔽指定标签的告警可在 Web 页面配置。去重消除重复告警通知避免同一故障反复刷屏轰炸运维HA 多实例部署时保证同一条告警只发一次消息。Alertmanager 默认端口9093。6.2 安装 AlertmanagerAlertmanager 默认端口9093。部署在 Prometheus 监控端# 进入软件目录[rootprometheus ~]# cd prometheus_soft/# 解压程序包[rootprometheus prometheus_soft]# tar -xf alertmanager-0.20.0.linux-386.tar.gz# 移动至标准目录[rootprometheus prometheus_soft]# mv alertmanager-0.20.0.linux-386 /usr/local/alertmanager6.3 配置 Systemd 服务[rootprometheus prometheus_soft]# vim /usr/lib/systemd/system/alertmanager.service服务文件内容[Unit] Descriptionalertmanager System [Service] ExecStart/usr/local/alertmanager/alertmanager \ --config.file/usr/local/alertmanager/alertmanager.yml [Install] WantedBymulti-user.target重载服务并启动[rootprometheus ~]# systemctl daemon-reload[rootprometheus ~]# systemctl enable alertmanager.service --nowWeb 访问验证http://192.168.8.100:9093。6.4 Alertmanager 配置文件结构Alertmanager的配置主要包含两个部分路由(route)以及接收器(receivers)。所有的告警信息都会从配置中的顶级路由(route)进入路由树根据路由规则将告警信息发送给相应的接收器。在Alertmanager中可以定义一组接收器比如可以按照角色(比如系统运维数据库管理员)来划分多个接收器。接收器可以关联邮件Slack以及其它方式接收告警信息。目前配置文件中只设置了一个顶级路由route并且定义的接收器为default-receiver。因此所有的告警都会发送给default-receiver。主配置文件alertmanager.yml核心模块global全局配置如 SMTP 邮件服务参数templates告警通知模板邮件、HTML 样式等route告警路由匹配标签并转发至对应接收器receivers告警接收器邮箱、Webhook、聊天工具等配合告警路由使用inhibit_rules告警抑制规则减少垃圾告警的产生。6.5 Prometheus 对接 Alertmanager修改 Prometheus 主配置文件指定 Alertmanager 地址[rootprometheus ~]# vim /usr/local/prometheus/prometheus.yml修改alerting模块7# Alertmanager configuration8 alerting:9 alertmanagers:#指定Alertmanager 地址10 - static_configs:11 - targets:12-localhost:9093#修改此处重启 Prometheus[rootprometheus ~]# systemctl restart prometheus.service如果报错可以使用/usr/local/prometheus/promtool check config prometheus.yml检查一下语法有没有错误验证访问http://192.168.8.100:9090/config查看配置是否加载成功。6.6 配置 Alertmanager 邮件告警6.6.1 备份并修改 Alertmanager 配置# 备份原配置文件[rootprometheus ~]# cp /usr/local/alertmanager/alertmanager.yml /opt# 编辑告警配置[rootprometheus ~]# vim /usr/local/alertmanager/alertmanager.yml接下来配置增加发件人和收件人地址接收器名称等邮件告警完整配置global:smtp_from:testtest.com# 发件人邮箱smtp_smarthost:localhost:25# 本地邮件服务地址端口smtp_require_tls:false# 关闭 TLS 安全链接加密route:group_by:[alertname]# 按告警名称分组group_wait:30s# 首次等待 30s合并同组告警group_interval:1m# 同组告警间隔 1 分钟发送一次repeat_interval:1h# 同一告警持续 1 小时重复推送receiver:default-receiver# 指定接收器名称receivers:-name:default-receiver# 接收器名称email_configs:-to:rootlocalhost.localdomain# 收件人邮箱inhibit_rules:# 告警抑制静默规则-source_match:severity:criticaltarget_match:severity:warningequal:[alertname,dev,instance]6.7 配置 Prometheus 告警规则文件6.7.1 创建规则目录并上传规则文件创建规则目录**/usr/local/prometheus/rules/**将hoststats-alert.rules上传至/usr/local/prometheus/rules/# 创建规则存放目录[rootprometheus ~]# mkdir /usr/local/prometheus/rules/# 上传规则文件 hoststats-alert.rules 至该目录[rootprometheus ~]# ls /usr/local/prometheus/rules/hoststats-alert.rules6.7.2 在 Prometheus 中声明规则路径编辑prometheus.yml加载规则文件[rootprometheus ~]# vim /usr/local/prometheus/prometheus.yml添加规则配置15 rule_files:16-/usr/local/prometheus/rules/*.rules规则文件hoststats-alert.rules示例内容groups:-name:examplerules:# 节点宕机告警采集状态为 0 持续 5 分钟触发告警宕机5分钟就触发告警-alert:InstanceDownexpr:up 0for:5mlabels:severity:warnannotations:summary:Instance {{ $labels.instance }} downdescription:{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.# 内存使用率超过 85% 告警持续 1 分钟触发-alert:hostMemUsageAlertexpr:(node_memory_MemTotal-node_memory_MemAvailable)/node_memory_MemTotal0.85for:1mlabels:severity:warnannotations:summary:Instance {{ $labels.instance }} MEM usgae high6.7.3 安装本地邮件服务 Postfix# 安装邮件服务与客户端[rootprometheus ~]# dnf -y install postfix mailx# 开机自启并启动[rootprometheus ~]# systemctl enable postfix --now# 查看 25 端口[rootprometheus ~]# ss -nutlp | grep :256.8 告警功能测试模拟故障关闭被监控端 node1[rootnode1 ~]# shutdown -h now在 Prometheus 主机查看邮件[rootprometheus ~]# mail #查看邮件Heirloom Mail version12.56/20/10. Type ?forhelp./var/spool/mail/root:1message1testtest.com Wen Jun2223:30227/12706[FIRING:2] InstanceDown 将告警邮件内容从复制粘贴到一个文件中如文件名为alert.html用浏览器打开可以得到以下页面浏览器访问http://192.168.8.100:9093可以查询当前告警状态6.8.1 告警验证由于虚拟机环境邮件推送延迟较高本实验的邮件延迟将会非常久几分钟到数小时不等所以配置完迟迟收不到邮件也是正常情况。但在生产环境延迟极低我们可以通过ip:9090的自带视图查看规则是否生效解读Firing(1)正在触发的告警图中有 2 条 InstanceDown 告警处于 FIRING 状态告警的文件路径/usr/local/prometheus/rules/hoststats-alert.rules正是我们设置的告警文件路径说明我们的告警规则已生效七、整体知识点总结PrometheusGo 语言开发的时序型监控系统解压安装通过exporter采集各类指标依赖 PromQL 查询数据。Exporter 导出器被监控端组件不同服务对应专属导出器node_exporter监控主机、mysqld_exporter监控数据库负责采集指标并对外暴露接口。Grafana可视化工具对接 Prometheus 数据源通过模板生成精美监控图表直观展示监控数据。Alertmanager告警组件对接 Prometheus实现告警分组、抑制、静默支持邮件等多渠道推送告警通知。完整监控链路被监控服务 → Exporter → Prometheus采集规则判断→ Grafana可视化/ Alertmanager告警推送
#Linux监控与安全Day03:Prometheus全套部署与基础操作,Prometheus与Grafana,数据库监控,Alertmanager 监控报警机制
发布时间:2026/6/18 16:46:58
一、Prometheus 基础介绍1.1 基本概念Prometheus 是SoundCloud 开源的监控报警解决方案使用Go 语言开发。自身属于时序数据库专门存储时序数据数据格式metric name{label namelabel value, ...}每条数据自带时间标签。适用场景主打容器监控同时也可监控常规物理/虚拟主机。特性说明优先保证高可用不追求 100% 数据精准、完整对数据细节要求极高的场景不推荐使用。默认服务端口9090。Prometheus 原生仅提供简易Web UI只做查询、指标浏览无专业可视化、大屏、告警视图无法满足日常监控大屏需求。主流搭配方案Grafana行业首选图表丰富、模板多、易配置专门用来渲染 Prometheus 监控数据。补充Prometheus 自身UI仅作临时查询/调试生产环境几乎都会配合 Grafana 使用。Prometheus基于模块化设计功能拆成独立组件可单独替换 / 扩展互不强绑定Prometheus Server核心模块Retrieval抓取模块从 Jobs/exporters 和 Pushgateway 拉取指标数据从 Service discovery 获取要监控的目标列表TSDB时序数据库时序数据读写、压缩、保留HTTP server查询、图表、配置管理生态扩展模块可插拔Pushgateway短生命周期任务如批处理主动推送指标Alertmanager独立告警模块去重、分组、路由、通知邮件/企业微信Service DiscoveryK8s、Consul、AWS 等自动发现 TargetGrafana独立可视化模块并非专门为Prometheus设计但可以对接 Prometheus 做仪表盘1.2 环境规划基于模板机克隆两台虚拟机使用 WindTerm 远程连接主机规划如下可复用之前的主机但要注意kill掉zabbix的所有进程并将/etc/rc.d/rc.local文件中的内容注释掉注意本实验博主做了两次使用的第二个实验环境为Prometheus192.168.8.10/24node1192.168.8.11/24第一次实验忘记截图所以使用的是第二次实验的截图部分截图的IP会和文本有差异但不影响阅读和操作因为两次实验的操作流程和配置完全一致所以涉及IP的内容和配置一定不要照抄参照自己实际的实验环境来二、部署 Prometheus 监控端192.168.8.1002.1 软件解压部署将prometheus_soft.tar.gz压缩包拷贝至 promethues主机的/root 家目录下Prometheus 为解压即安装类型类似 Tomcat常规源码放置目录/usr/local/软件名下。# 拷贝压缩包至 /root 后执行解压操作[rootprometheus ~]# tar -xf prometheus_soft.tar.gz# 进入解压目录[rootprometheus ~]# cd prometheus_soft/# 解压 Prometheus 程序包[rootprometheus prometheus_soft]# tar -xf prometheus-2.17.2.linux-386.tar.gz# 移动并重命名到标准目录[rootprometheus prometheus_soft]# mv prometheus-2.17.2.linux-386 /usr/local/prometheus2.2 基础配置监控自身修改主配置文件prometheus.yml实现 Prometheus 监控自身注意 YAML 文件严格缩进。[rootprometheus ~]# vim /usr/local/prometheus/prometheus.yml# 配置监控自身节点23 - job_name:prometheus#任务名称如何命名对任务无影响24 25# metrics_path defaults to /metrics26# scheme defaults to http.2728 static_configs:29 - targets:[192.168.8.100:9090]#写监控目标的IP2.3 配置文件语法检查使用自带工具promtool校验配置文件语法[rootprometheus ~]# /usr/local/prometheus/promtool check config /usr/local/prometheus/prometheus.yml# 输出 SUCCESS 代表语法无误Checking /usr/local/prometheus/prometheus.yml SUCCESS:0rule files found2.4 配置 Systemd 系统服务原生启动命令复杂建议编写 systemd 单元文件实现服务统一管理、开机自启。推荐使用ai辅助生成相关模板。# 编辑 systemd 服务文件[rootprometheus ~]# vim /usr/lib/systemd/system/prometheus.service服务文件内容[Unit] DescriptionPrometheus Monitoring System DocumentationPrometheus Monitoring System [Service] ExecStart/usr/local/prometheus/prometheus \ --config.file/usr/local/prometheus/prometheus.yml \ --storage.tsdb.path/usr/local/prometheus/data [Install] WantedBymulti-user.target重新加载 systemd 守护进程 的配置[rootprometheus ~]# systemctl daemon-reload #重新加载配置2.5 启动服务并验证# 重载系统服务、开机自启并立即启动 Prometheus[rootprometheus ~]# systemctl enable prometheus.service --now# 查看服务运行状态[rootprometheus ~]# systemctl status prometheus.service# 查看 9090 端口监听状态[rootprometheus ~]# ss -ntulp | grep 9090端口监听结果示例tcp LISTEN 0 128 *:9090 *:* users:((prometheus,pid4637,fd5))2.6 Web 页面访问与测试浏览器访问地址http://192.168.8.100:9090功能验证进入Status - Targets可查看当前监控节点状态UP代表正常采集数据。进入Graph页面输入监控指标如go_memstats_alloc_bytes_total点击Execute查询并生成图表。点击Graph -- 搜索监控项 -- 点击Execule点击Graph可以查看图形页面时差警告解决若页面出现时间相关黄色警告虚拟机联网后执行时间同步systemctl restart chronyd如果用真机访问 prometheus 时出现时差问题会提示黄色的Warning警告 可以使用systemctl restart chronyd同步最新时间前提虚拟机可以连接网络三、部署被监控端node1 192.168.8.1013.1 部署 node_exporter主机硬件监控导出器node_exporter用于采集服务器 CPU、内存、磁盘、网络等硬件指标默认端口9100。3.1.1安装硬件监控导出器将prometheus_soft.tar.gz软件包导入node1主机这个导出器是用来监控硬件的如果想监控nginx或者其他的服务/软件可以在官网找对应的导出器# 解压软件包[rootnode1 ~]# tar -xf prometheus_soft.tar.gz# 进入目录[rootnode1 ~]# cd prometheus_soft/# 安装node_exporter导出器[rootnode1 prometheus_soft]# tar -xf node_exporter-1.0.0-rc.0.linux-amd64.tar.gz# 移动至标准目录[rootnode1 prometheus_soft]# mv node_exporter-1.0.0-rc.0.linux-amd64 /usr/local/node_exporter# 查看目录文件[rootnode1 prometheus_soft]# ls /usr/local/node_exporter/LICENSE node_exporter NOTICE3.1.2 配置 Systemd 服务如果想更好更快的管理 node_exporter 导出器服务需要编写Unit文件让 systemd进行管理[rootnode1 ~]# vim /usr/lib/systemd/system/node_exporter.service服务文件内容[Unit] Descriptionnode_exporter Afternetwork.target [Service] Typesimple ExecStart/usr/local/node_exporter/node_exporter [Install] WantedBymulti-user.target重新加载 systemd 守护进程 的配置[rootprometheus ~]# systemctl daemon-reload #重新加载配置3.1.3 启动服务并验证# 开机自启立即启动[rootnode1 ~]# systemctl enable node_exporter --now# 查看服务状态[rootnode1 ~]# systemctl status node_exporter# 查看 9100 端口[rootnode1 ~]# ss -utnlp | grep node_exporter端口结果示例tcp LISTEN 0 128 *:9100 *:* users:((node_exporter,pid14151,fd3))3.2 Prometheus 配置监控 node1回到 Prometheus 监控端修改主配置文件新增监控任务严格注意 YAML 缩进。[rootprometheus ~]# vim /usr/local/prometheus/prometheus.yml追加配置内容30 - job_name:node1_expoter31 static_configs:32 - targets:[192.168.8.101:9100]上文的配置就是一个监控主机的任务。要监控几个主机就增加几个相同的配置重启 Prometheus 使配置生效[rootprometheus ~]# systemctl restart prometheus.service3.3 验证监控状态刷新 Prometheus Web 页面Status - Targets可看到node1_expoter任务状态为UP代表硬件指标采集正常。同时可在Graph页面查询load15、内存、磁盘等系统指标。注意如果linux主机和Windows主机的时间不一致会有报错四、部署 Grafana 可视化面板Prometheus 自带基础 Web 界面但可视化能力有限。生产环境中通常搭配Grafana等第三方工具实现丰富的监控图表和仪表盘展示。4.1 Grafana 简介Grafana 是跨平台开源度量分析、数据可视化工具支持折线图、热图、图表等多种展示形式。支持主流数据源Graphite、InfluxDB、OpenTSDB、Prometheus、Elasticsearch 等。本次部署在 Prometheus 主机192.168.8.100Grafana默认端口3000。需注意Grafana并非为Prometheus专门定制的Grafana数据来源可以有很多种4.2 安装 Grafana使用 RPM 包安装# 进入软件目录[rootprometheus ~]# cd prometheus_soft/# 使用 dnf 安装 rpm 包[rootprometheus prometheus_soft]# dnf -y install grafana-6.7.3-1.x86_64.rpm# 开机自启并启动服务[rootprometheus ~]# systemctl enable grafana-server --now# 查看服务状态[rootprometheus ~]# systemctl status grafana-server# 查看 3000 端口[rootprometheus ~]# ss -utnlp | grep grafana-server4.3 Web 登录与密码设置访问地址http://192.168.8.100:3000默认账号密码admin / admin首次登录强制修改密码示例新密码123456。密码修改失败解决方案开启匿名管理员访问个别浏览器会出现不兼容的情况此时可以更换浏览器重新尝试若仍无法解决问题需要开启匿名访问。# 编辑 Grafana 主配置文件[rootprometheus ~]# vim /etc/grafana/grafana.ini修改对应配置项304 [auth.anonymous] 306 enabled true # 启用匿名访问 312 org_role Admin # 匿名身份为管理员重启服务生效[rootprometheus ~]# systemctl restart grafana-server4.4 配置 Prometheus 数据源首页点击Add data source选择数据源类型为Prometheus。自定义数据源名称填写 Prometheus 地址http://192.168.8.100:9090开启Default设置为默认数据源。点击Save Test出现Data source is working代表数据源对接成功。可通过Configuration - Data Sources查看已配置数据源。4.5 导入监控模板在有了数据源之后想让 Grafana 通过数据绘制出相应数据的图形还需要导入数据模板.Grafana 也自带了一个模板我们也可以尝试导入然后查看绘制的图形。不同的数据模板最终绘制的图形以及显示的数据信息不一样4.5.1 导入 Prometheus 自身模板在设置–数据源详情页Dashboards中找到Prometheus 2.0 Stats点击Import导入可查看 Prometheus 自身运行状态。4.5.2 导入 node_exporter 主机监控模板默认模板无法查看被监控主机硬件信息需导入主机监控模板首页点击Create - Import。导入 node_exporter 导出器的模板模板文件运维工程师无法自己编写涉及到开发如果想要其他模板需要到官网上下载搜索时建议加入CN使用中文页面的仪表盘选择已配置的 Prometheus 数据源点击Import完成导入。进入面板查看主机 CPU、内存、磁盘、网络等监控图表最后点击Save保存面板。注意这里保存是将当前主机的此模板保存到左上角的模板列表之中点击左上角就可以查看保存的模板列表可以在Home看到我们加入的所有的模板4.5.3 多个监控主机切换在Home中选择对应的模板进入仪表盘左上角切换主机4.5.4 多个监控模板切换点击左上角出现模板列表点击对应模板即可快速切换4.5.5 删除监控模板点击图形页面右上角的齿轮按钮点击下面的红色按钮进行删除五、监控 Mariadb 数据库Prometheus借助Grafana监控mariadb数据库的简略流程1.在被监控端部署mariadb服务2.创建数据库用户便于导出器使用此用户检索数据3.在监控端修改prometheus.yml嘉能可被监控端的mysql_exporter4.在grafana导入相应监控数据的模板文件根据监控数据自动绘制图形5.1 在 node1 部署 Mariadb 数据库将node1主机搭建成Mariadb数据库服务器配置账号和密码授权连接数据库的用户名和密码用户名tom密码123# 安装 Mariadb 服务[rootnode1 ~]# yum -y install mariadb mariadb-server# 开机自启并启动服务[rootnode1 ~]# systemctl enable mariadb --now# 登录数据库[rootnode1 ~]# mysql数据库内执行授权语句创建监控专用账号# 创建用户 tom密码 123允许本地连接并授权所有权限仅允许从本机127.0.0.1登录MariaDB[(none)]GRANTALLON*.*TOtom127.0.0.1IDENTIFIEDBY123;# 退出数据库MariaDB[(none)]EXIT;5.2 部署 mysqld_exporter数据库导出器如果想让 prometheus 能够监控 node1 主机的数据库就需要安装数据库相关的导出器mysqld_exporter默认端口号9104安装数据库导出器mysqld_exporter导出器用于采集数据库信息mysqld_exporter端口号9104# 进入软件目录[rootnode1 ~]# cd prometheus_soft/# 解压数据库导出器[rootnode1 prometheus_soft]# tar -xf mysqld_exporter-0.12.1.linux-amd64.tar.gz# 移动至标准目录[rootnode1 prometheus_soft]# mv mysqld_exporter-0.12.1.linux-amd64 /usr/local/mysqld_exporter# 查看文件[rootnode1 prometheus_soft]# ls /usr/local/mysqld_exporter/LICENSE mysqld_exporter NOTICE5.3 配置数据库连接文件修改导出器的配置文件指定数据库的用户名、密码、端口、主机信息使导出器可以获取本机的数据库的状态信息配置文件/usr/local/mysqld_exporter/.my.cnf.开头的文件属于隐藏文件[rootnode1 prometheus_soft]# vim /usr/local/mysqld_exporter/.my.cnf配置内容[client] host127.0.0.1 port3306 usertom password1235.4 配置 mysqld_exporter Systemd 服务[rootnode1 ~]# vim /usr/lib/systemd/system/mysqld_exporter.service服务文件内容[Unit] Descriptionmysqld_exporter Afternetwork.target [Service] ExecStart/usr/local/mysqld_exporter/mysqld_exporter \ --config.my-cnf/usr/local/mysqld_exporter/.my.cnf [Install] WantedBymulti-user.target[rootnode1 ~]# systemctl daemon-reload #重新加载配置5.5 启动服务并验证端口# 开机自启启动服务[rootnode1 ~]# systemctl enable mysqld_exporter --now# 查看服务状态[rootnode1 ~]# systemctl status mysqld_exporter# 查看 9104 端口[rootnode1 ~]# ss -nutlp | grep mysqld_exporter端口结果tcp LISTEN 0 128 :::9104 :::* users:((mysqld_exporter,pid11807,fd3))5.6 Prometheus 配置监控数据库编辑 Prometheus 主配置文件新增数据库监控任务[rootprometheus ~]# vim /usr/local/prometheus/prometheus.yml追加配置33 - job_name:mysqld_exporter34 static_configs:35 - targets:[192.168.8.101:9104]重启 Prometheus 生效[rootprometheus ~]# systemctl restart prometheus5.7 Grafana 导入数据库监控模板访问 Grafanahttp://192.168.8.100:3000进入Import页面。上传 MySQL 专用模板文件mysql-overview_rev5.json选择 Prometheus 数据源。导入完成后查看数据库连接数、查询性能、缓存、慢查询等指标最后保存面板。选择信息源点击导入即可随后就进入监控图形页面六、部署 Alertmanager 告警系统本节内容以了解为主着重理解报警机制的原理。6.1 Alertmanager 概述工作流程Prometheus 根据告警规则生成告警信息发送至 AlertmanagerAlertmanager 统一处理告警支持静默、分组、抑制并通过邮件、即时通讯等渠道推送通知。部署步骤修改 Alertmanager 配置文件设置收件人和发件人对接 Prometheus 与 Alertmanager编写 Prometheus 的告警规则。Prometheus 中一条告警规则由以下几个部分组成告警名称 用户需要为告警规则命名告警规则告警规则实际上主要由PromQL进行定义其实际意义是当表达式PromQL查询结果持续多长时间During后触发告警Alertmanager 核心特性Alertmanager处理客户端应用程序(如Prometheus服务器)发送的警报。它负责重复数据删除、分组并将其路由到正确的接收方集成分组将同类告警合并为一条通知避免大量告警刷屏抑制主告警触发后屏蔽关联的衍生告警减少无效通知静默临时屏蔽指定标签的告警可在 Web 页面配置。去重消除重复告警通知避免同一故障反复刷屏轰炸运维HA 多实例部署时保证同一条告警只发一次消息。Alertmanager 默认端口9093。6.2 安装 AlertmanagerAlertmanager 默认端口9093。部署在 Prometheus 监控端# 进入软件目录[rootprometheus ~]# cd prometheus_soft/# 解压程序包[rootprometheus prometheus_soft]# tar -xf alertmanager-0.20.0.linux-386.tar.gz# 移动至标准目录[rootprometheus prometheus_soft]# mv alertmanager-0.20.0.linux-386 /usr/local/alertmanager6.3 配置 Systemd 服务[rootprometheus prometheus_soft]# vim /usr/lib/systemd/system/alertmanager.service服务文件内容[Unit] Descriptionalertmanager System [Service] ExecStart/usr/local/alertmanager/alertmanager \ --config.file/usr/local/alertmanager/alertmanager.yml [Install] WantedBymulti-user.target重载服务并启动[rootprometheus ~]# systemctl daemon-reload[rootprometheus ~]# systemctl enable alertmanager.service --nowWeb 访问验证http://192.168.8.100:9093。6.4 Alertmanager 配置文件结构Alertmanager的配置主要包含两个部分路由(route)以及接收器(receivers)。所有的告警信息都会从配置中的顶级路由(route)进入路由树根据路由规则将告警信息发送给相应的接收器。在Alertmanager中可以定义一组接收器比如可以按照角色(比如系统运维数据库管理员)来划分多个接收器。接收器可以关联邮件Slack以及其它方式接收告警信息。目前配置文件中只设置了一个顶级路由route并且定义的接收器为default-receiver。因此所有的告警都会发送给default-receiver。主配置文件alertmanager.yml核心模块global全局配置如 SMTP 邮件服务参数templates告警通知模板邮件、HTML 样式等route告警路由匹配标签并转发至对应接收器receivers告警接收器邮箱、Webhook、聊天工具等配合告警路由使用inhibit_rules告警抑制规则减少垃圾告警的产生。6.5 Prometheus 对接 Alertmanager修改 Prometheus 主配置文件指定 Alertmanager 地址[rootprometheus ~]# vim /usr/local/prometheus/prometheus.yml修改alerting模块7# Alertmanager configuration8 alerting:9 alertmanagers:#指定Alertmanager 地址10 - static_configs:11 - targets:12-localhost:9093#修改此处重启 Prometheus[rootprometheus ~]# systemctl restart prometheus.service如果报错可以使用/usr/local/prometheus/promtool check config prometheus.yml检查一下语法有没有错误验证访问http://192.168.8.100:9090/config查看配置是否加载成功。6.6 配置 Alertmanager 邮件告警6.6.1 备份并修改 Alertmanager 配置# 备份原配置文件[rootprometheus ~]# cp /usr/local/alertmanager/alertmanager.yml /opt# 编辑告警配置[rootprometheus ~]# vim /usr/local/alertmanager/alertmanager.yml接下来配置增加发件人和收件人地址接收器名称等邮件告警完整配置global:smtp_from:testtest.com# 发件人邮箱smtp_smarthost:localhost:25# 本地邮件服务地址端口smtp_require_tls:false# 关闭 TLS 安全链接加密route:group_by:[alertname]# 按告警名称分组group_wait:30s# 首次等待 30s合并同组告警group_interval:1m# 同组告警间隔 1 分钟发送一次repeat_interval:1h# 同一告警持续 1 小时重复推送receiver:default-receiver# 指定接收器名称receivers:-name:default-receiver# 接收器名称email_configs:-to:rootlocalhost.localdomain# 收件人邮箱inhibit_rules:# 告警抑制静默规则-source_match:severity:criticaltarget_match:severity:warningequal:[alertname,dev,instance]6.7 配置 Prometheus 告警规则文件6.7.1 创建规则目录并上传规则文件创建规则目录**/usr/local/prometheus/rules/**将hoststats-alert.rules上传至/usr/local/prometheus/rules/# 创建规则存放目录[rootprometheus ~]# mkdir /usr/local/prometheus/rules/# 上传规则文件 hoststats-alert.rules 至该目录[rootprometheus ~]# ls /usr/local/prometheus/rules/hoststats-alert.rules6.7.2 在 Prometheus 中声明规则路径编辑prometheus.yml加载规则文件[rootprometheus ~]# vim /usr/local/prometheus/prometheus.yml添加规则配置15 rule_files:16-/usr/local/prometheus/rules/*.rules规则文件hoststats-alert.rules示例内容groups:-name:examplerules:# 节点宕机告警采集状态为 0 持续 5 分钟触发告警宕机5分钟就触发告警-alert:InstanceDownexpr:up 0for:5mlabels:severity:warnannotations:summary:Instance {{ $labels.instance }} downdescription:{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.# 内存使用率超过 85% 告警持续 1 分钟触发-alert:hostMemUsageAlertexpr:(node_memory_MemTotal-node_memory_MemAvailable)/node_memory_MemTotal0.85for:1mlabels:severity:warnannotations:summary:Instance {{ $labels.instance }} MEM usgae high6.7.3 安装本地邮件服务 Postfix# 安装邮件服务与客户端[rootprometheus ~]# dnf -y install postfix mailx# 开机自启并启动[rootprometheus ~]# systemctl enable postfix --now# 查看 25 端口[rootprometheus ~]# ss -nutlp | grep :256.8 告警功能测试模拟故障关闭被监控端 node1[rootnode1 ~]# shutdown -h now在 Prometheus 主机查看邮件[rootprometheus ~]# mail #查看邮件Heirloom Mail version12.56/20/10. Type ?forhelp./var/spool/mail/root:1message1testtest.com Wen Jun2223:30227/12706[FIRING:2] InstanceDown 将告警邮件内容从复制粘贴到一个文件中如文件名为alert.html用浏览器打开可以得到以下页面浏览器访问http://192.168.8.100:9093可以查询当前告警状态6.8.1 告警验证由于虚拟机环境邮件推送延迟较高本实验的邮件延迟将会非常久几分钟到数小时不等所以配置完迟迟收不到邮件也是正常情况。但在生产环境延迟极低我们可以通过ip:9090的自带视图查看规则是否生效解读Firing(1)正在触发的告警图中有 2 条 InstanceDown 告警处于 FIRING 状态告警的文件路径/usr/local/prometheus/rules/hoststats-alert.rules正是我们设置的告警文件路径说明我们的告警规则已生效七、整体知识点总结PrometheusGo 语言开发的时序型监控系统解压安装通过exporter采集各类指标依赖 PromQL 查询数据。Exporter 导出器被监控端组件不同服务对应专属导出器node_exporter监控主机、mysqld_exporter监控数据库负责采集指标并对外暴露接口。Grafana可视化工具对接 Prometheus 数据源通过模板生成精美监控图表直观展示监控数据。Alertmanager告警组件对接 Prometheus实现告警分组、抑制、静默支持邮件等多渠道推送告警通知。完整监控链路被监控服务 → Exporter → Prometheus采集规则判断→ Grafana可视化/ Alertmanager告警推送