目录
一、部署环境介绍
二、Prometheus部署
1、下载安装
2、添加系统服务,设置服务开机自启
3、开启防火墙端口
三、Prometheus登录
1、监控指标
2、监控界面
四、Prometheus参数配置
1、Prometheus配置文件
2、数据存储流程
五、安装监控节点
1、node_exporter安装配置
2、Prometheus添加node_exporter节点
3、查看已监听主机
六、Grafana部署
1、下载安装
2、添加系统服务
3、开启防火墙端口
七、Grafana登录
八、Prometheus集成Grafana可视化监控
1、创建数据源
2、导入监控面板
3、导入完成
九、alertmanager安装配置
1、Alertmanager介绍
2、下载安装
3、配置alertmanager告警方式(邮箱、钉钉、微信)
4、使用amtool检查配置
5、添加系统服务
6、Alertmanager登录
7、Prometheus配置
8、检查告警配置
主机角色 |
系统版本 |
IP地址 |
备注 |
Prometheus Server Grafana Server Alertmanager |
CentOS7.6 |
172.27.30.94 |
Prometheus服务器 Alertmanager服务 |
node_exporter |
CentOS7.6 |
172.27.30.92 |
被监控主机 |
node_exporter |
CentOS7.6 |
172.27.30.85 |
被监控主机 |
###下载安装包
[root@test tmp]# wget https://github.com/prometheus/prometheus/releases/download/v2.35.0-rc0/prometheus-2.35.0-rc0.linux-amd64.tar.gz[root@test tmp][root@test tmp]
###解压安装包
[root@test tmp]# tar xvf prometheus-2.35.0-rc1.linux-amd64.tar.gz -C /home/
[root@test home]# mv prometheus-2.35.0-rc1.linux-amd64 prometheus
###运行Prometheus
#第一种方法,传统启动(更新配置需重启服务生效)
[root@test prometheus]# ./prometheus --config.file=prometheus.yml
#第二种方法,热加载配置(更新配置不需重启服务)
[root@test prometheus]# ./prometheus --config.file=prometheus.yml --web.enable-lifecycle
[root@test ~]# curl -X POST http://localhost:9090/-/reload //更新配置后可使用此命令热加载
###创建启动文件
[root@test system]# vi /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus is service
[Service]
Type=simple
ExecStart=/home/prometheus/prometheus --config.file=/home/prometheus/prometheus.yml --web.enable-lifecycle
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
[root@test system]# systemctl daemon-reload
###启动服务
[root@test system]# systemctl restart prometheus
[root@test system]# systemctl enable prometheus
###防火墙开通9090端口
[root@test ~]# firewall-cmd --permanent --add-port=9090/tcp
[root@test ~]# firewall-cmd --reload
默认地址:http://172.27.30.94:9090/metrics
默认地址:http://172.27.30.94:9090/graph
[root@test ~]# cat /home/prometheus/prometheus.yml
# my global config
global:
scrape_interval: 15s # 默认15s 全局每次数据收集的间隔
evaluation_interval: 15s # 规则扫描时间间隔是15秒,默认不填写是 1分钟
#scrape_timeout: 5s #超时时间
#external_labels: # 用于外部系统标签的,不是用于metrics(度量)数据
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=` to any timeseries scraped from this config.
- job_name: "prometheus" //任务目标名,可以理解成分组,每个分组包含具体的target组员
# metrics_path defaults to '/metrics' //抓取路径,默认/metrics
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
[root@test ~]#
global: 全局配置(如果有内部单独设定,会覆盖这个参数)
alerting: 告警插件定义。主要是指定prometheus将报警规则推送到指定的alertManager实例地址rule_files: 告警规则。 按照设定参数进行扫描加载,用于自定义报警规则,其报警媒介和route路由由alertmanager插件实现。
scrape_configs:采集配置。配置数据源,包含分组job_name以及具体target。又分为静态配置和服务发现。prometheus的数据采集通过此片段配置
remote_writer:指定后端的存储的写入地址
remote_reader:指定后端的存储的读取api地址。
Prometheus运行后会生成“data”目录,Prometheus内存和硬盘都是以为KB为单位分块存储的。
在Prometheus的世界中,无论是内存还是磁盘,它都是以1KB单位分成块来操作的。
整体流程是 抓取数据 -> 写到head chunk,写满1KB,就再生成新的块,完成的块,是不可再变更的 -> 根据配置文件的设置,有一部份chunk会被保留在内存里,按照LRU算法,定期将块写进磁盘文件内。
[root@test prometheus]# tree /home/prometheus/data/
/home/prometheus/data/
├── chunks_head
│ └── 000001
├── queries.active
└── wal
├── 00000000
├── 00000001
└── 00000002
2 directories, 5 files
Node-exporter 可以采集机器(物理机、虚拟机、云主机)的监控指标数据,能够采集到的指标包括cpu、内存、磁盘、网络、文件数等信息。
###下载node_exporter包
[root@node ~]#wget https://github.com/prometheus/node_exporter/releases/download/v1.3.1/node_exporter-1.3.1.linux-amd64.tar.gz
[root@node ~]# tar xvf node_exporter-1.3.1.linux-amd64.tar.gz -C /home/
[root@node ~]# mv /home/node_exporter-1.3.1.linux-amd64 /home/node_exporter
###创建node_exporter启动文件
[root@node ~]# vi /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=prometheus node_exporter
[Service]
Type=simple
ExecStart=/home/node_exporter/node_exporter
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
MemoryLimit=300M //内存最大占用300M
CPUQuota=100% //最多占用一个CPU线程
[Install]
WantedBy=multi-user.target
"/usr/lib/systemd/system/node_exporter.service" [New] 15L, 266C written
####重新加载启动文件目录,并设置开机自启
[root@node ~]# systemctl daemon-reload
[root@node ~]# systemctl start node_exporter
[root@node ~]# systemctl enable node_exporter
注意:被控节点防火墙需要放通9100端口
[root@test node_exporter]# vi /home/prometheus/prometheus.yml
- job_name: "agent"
static_configs:
- targets: ["172.27.30.92:9100","172.27.30.85:9100"
[root@test node_exporter]# curl -X POST http://172.27.30.94:9090/-/reload
登录Prometheus,在Targets下可查看已监听到的主机
Grafana是一款用Go语言开发的开源数据可视化工具,可以做数据监控和数据统计,带有告警功能。
###官网下载较慢,在清华镜像站下载
[root@test ~]# wget --no-check-certificate https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-8.4.6-1.x86_64.rpm
###安装grafana
[root@test ~]# yum localinstall -y grafana-8.4.6-1.x86_64.rpm
###启动grafana,设置开机自启
[root@test ~]# systemctl start grafana-server
Warning: grafana-server.service changed on disk. Run 'systemctl daemon-reload' to reload units.
[root@test ~]# systemctl enable grafana-server
###开通防火墙3000端口
[root@test ~]# firewall-cmd --permanent --add-port=9100/tcp
grafana默认登录的管理员账号密码都是:admin 默认端口3000
Home——DATA SOURCE
添加配置Prometheus数据源,修改Prometheus的URL,保存提交
Grafana 官方和社区对已经做好了常用的 DashBoard,可以在官网通过下载json文件或copy id将其导入到自己grafana面板。(熟练后可以自己创建编辑模板)
官网:Dashboards | Grafana Labs
选择Prometheus数据源,根据需求搜索相关模板
复制DashBoard模板id
通过Grafana + 图标导入(import)。输入复制的DashBoard模板id,选择数据源保存即可。
Alertmanager是Prometheus的一个报警通知组件,需要结合Prometheus使用。Prometheus将监测到的异常事件发送给Alertmanager,Alertmanager发送异常事件的通知(邮件、钉钉、微信等)。
prometheus触发一条告警的过程:
prometheus—>触发阈值—>超出持续时间—>alertmanager—>分组|抑制|静默—>媒体类型—>邮件|钉钉|微信等。
Alert的三种状态:
pending:警报被激活,但是低于配置的持续时间。这里的持续时间即rule里的FOR字段设置的时间。改状态下不发送报警。
firing:警报已被激活,而且超出设置的持续时间。该状态下发送报警。
inactive:既不是pending也不是firing的时候状态变为inactive
[root@test ~]# wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.tar.gz
[root@test ~]# tar xvf alertmanager-0.24.0.linux-amd64.tar.gz -C /home/
[root@test ~]# mv /home/alertmanager-0.24.0.linux-amd64 /home/alertmanager
[root@test ~]# /home/alertmanager/alertmanager --version
alertmanager, version 0.24.0 (branch: HEAD, revision: f484b17fa3c583ed1b2c8bbcec20ba1db2aa5f11)
build user: root@265f14f5c6fc
build date: 20220325-09:31:33
go version: go1.17.8
platform: linux/amd64
配置邮箱告警
### global:全局配置,主要配置告警方式,如邮件、webhook等。
[root@grafana home]# cat /home/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m //处理超时,默认5min
smtp_smarthost: 'smtp.ssitg.com:25' //邮件发送服务器
smtp_from: '[email protected]' //邮件发送地址
smtp_auth_username: '[email protected]' //邮件发送地址用户名
smtp_auth_password: 'Qwer.com123' //邮件发送地址密码
smtp_require_tls: false //是否使用 tls,根据环境不同,来选择开启和关闭。
templates: //告警模板位置
- '*.tmp'
###路由分组
route: //设置报警的分发策略
group_by: ['alertname'] //用于分组聚合,对告警通知按标签(label)进行分组
group_wait: 30s //在组内等待所配置的时间,如果同组内30秒内出现相同报警,在一个组内出现。
group_interval: 5m //如果组内内容不变化,合并为一条警报信息,5m后发送。
repeat_interval: 1h //发送报警间隔,如果指定时间内没有修复,则重新发送报警。
receiver: 'email' //配置告警消息接收者,与下面配置的对应。例如常用的 email、wechat、slack、webhook 等消息通知方式。
receivers: //配置报警信息接收者信息
- name: 'email'
email_configs:
- to: '{{ template "email.to" . }}' //接收警报的email(调用模板文件中的)
html: '{{ template "email.to.html" . }}' //发送邮件的内容(调用模板文件中的)
send_resolved: true //故障恢复后通知
inhibit_rules: // 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)
- source_match: //源标签警报触发时抑制含有目标标签的警报,在当前警报匹配 status: 'High'
severity: 'critical'
target_match:
severity: 'warning' //目标标签值正则匹配,可以是正则表达式如: ".*MySQL.*"
equal: ['alertname', 'dev', 'instance'] // 确保这个配置下的标签内容相同才会抑制,也就是说警报中必须有这三个标签值才会被抑制。
创建邮箱模板
###创建邮箱模板配置
[root@grafana home]# vi /home/alertmanager/alert.tmp
{{ define "email.from" }}[email protected]{{ end }}
{{ define "email.to" }}[email protected]{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========
告警程序: prometheus_alert
告警级别: {{ .Labels.severity }} 级
告警类型: {{ .Labels.alertname }}
故障主机: {{ .Labels.instance }}
告警主题: {{ .Annotations.summary }}
告警详情: {{ .Annotations.description }}
触发时间: {{ .StartsAt.Format "2019-08-04 16:58:15" }}
=========end==========
{{ end }}
{{ end }}
[root@test alertmanager]# /home/alertmanager/amtool check-config /home/alertmanager/alertmanager.yml
Checking '/home/alertmanager/alertmanager.yml' SUCCESS
Found:
- global config
- route
- 1 inhibit rules
- 1 receivers
- 1 templates
SUCCESS
[root@test alertmanager]#
###创建启动文件
[root@test system]# vi /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager is service
[Service]
Type=simple
ExecStart=/home/alertmanager/alertmanager --config.file=/home/alertmanager/alertmanager.yml
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
[root@test system]# systemctl daemon-reload
###启动服务
[root@test system]# systemctl restart prometheus
[root@test system]# systemctl enable prometheus
默认地址:http://172.27.30.94:9093
修改Prometheus配置文件
###配置Prometheus配置文件
[root@grafana ~]# vi /home/prometheus/prometheus.yml
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 172.27.30.94:9093 //指定Alertmanager 的地址
rule_files: //指定报警规则文件
- rules/*.yml
###重新加载Prometheus配置
[root@grafana ~]# curl -X POST http://localhost:9090/-/reload
创建报警规则
###编辑报警规则文件
[root@grafana ~]# mkdir /home/prometheus/rules
[root@grafana ~]# vi /home/prometheus/rules/node_alived.yml
groups:
- name: 实例存活告警规则
rules:
- alert: 实例存活告警
expr: up == 0
for: 1m
labels:
user: prometheus
severity: warning
annotations:
summary: "主机宕机 !!!"
description: "该实例主机已经宕机超过一分钟了。"
- name: 内存报警规则
rules:
- alert: 内存使用率告警
expr: (1 - (node_memory_MemAvailable_bytes / (node_memory_MemTotal_bytes))) * 100 > 80
for: 1m
labels:
severity: warning
annotations:
summary: "服务器可用内存不足。"
description: "内存使用率已超过80%(当前值:{{ $value }}%)"
- name: CPU报警规则
rules:
- alert: CPU使用率告警
expr: 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[1m]) )) * 100 > 80
for: 1m
labels:
severity: warning
annotations:
summary: "CPU使用率正在飙升。"
description: "CPU使用率超过80%(当前值:{{ $value }}%)"
- name: 磁盘使用率报警规则
rules:
- alert: 磁盘使用率告警
expr: 100 - node_filesystem_free_bytes{fstype=~"xfs|ext4"} / node_filesystem_size_bytes{fstype=~"xfs|ext4"} * 100 > 80
for: 20m
labels:
severity: warning
annotations:
summary: "硬盘分区使用率过高"
description: "分区使用大于80%(当前值:{{ $value }}%)"
###重新加载配置文件
[root@grafana ~]# curl -X POST http://localhost:9090/-/reload
登陆prometheus的UI界面,查看Alerts规则
模拟服务器宕机