zlj2023

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

使用prometheus的特性
易管理性
Prometheus核心部分只有一个单独的二进制文件,可直接在本地工作,不依赖于分布式存储

不依赖分布式存储,单服务器节点是自治的

高效

单一Prometheus可以处理数以百万的监控指标;每秒处理数十万

的数据点

易于伸缩

Prometheus提供多种语言 的客户端SDK,这些SDK可以快速让应用程序纳入到Prometheus的监控当中

通过服务发现或静态配置发现目标

良好的可视化

除了自带的可视化web界面,还有另外最新的Grafana可视化工具也提供了完整的Proetheus支持,基于 Prometheus提供的API还可以实现自己的监控可视化UI

docker搭建prometheus监控
环境:

全部关闭防火墙,禁用selinux

主机 IP 安装组件
machine 172.16.46.111 NodeEXporter、cAdvisor、 Prometheus Server、Grafana
node01 172.16.46.112 NodeEXporter、cAdvisor
node02 172.16.46.113 NodeEXporter、cAdvisor

安装prometheus组件说明:

1
2
3
4
5
Prometheus Server: 普罗米修斯的主服务器,端口号9090
NodeEXporter: 负责收集Host硬件信息和操作系统信息,端口号9100
cAdvisor:负责收集Host上运行的容器信息,端口号占用8080
Grafana:负责展示普罗米修斯监控界面,端口号3000
altermanager:等待接收prometheus发过来的告警信息,altermanager再发送给定义的收件人

  

部署node-EXporter,收集硬件和系统信息

1
2
#3台主机都要安装
docker run -d -p 9100:9100 <br>-v /proc:/host/proc <br>-v /sys:/host/sys <br>-v /:/rootfs <br>--net=host prom/node-exporter <br>--path.procfs /host/proc <br>--path.sysfs /host/sys <br>--collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"

PS:注意,为了网络的高效率,我们的网络使用的是host

验证收集效果

部署安装cAdvisor,收集节点容器信息

1
2
#3台都要安装
docker run -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -p 8080:8080 --detach=true --name=cadvisor --net=host google/cadvisor

  

验证收集效果传递

 

部署prometheus-server服务

部署prometheus-server服务
先启动一个prometheus服务,目的是复制他的配置文件,修改配置文件,prometheus挂载这个文件

1
2
3
4
5
6
mkdir /prometheus
docker run -d --name test -P prom/prometheus
docker cp test:/etc/prometheus/prometheus.yml /prometheus
#编辑prometheus配置文件,在static_configs下面修改为
#以下添加的ip都将会被监控起来
- targets: ['localhost:9090','localhost:8080','localhost:9100','172.16.46.112:8080','172.16.46.112:9100','172.16.46.113:8080','172.16.46.113:9100']

重新运行prometheus服务

收集cAdvisor和nodexporter的信息到prometheus

1
2
docker rm -f test
docker run -d --name prometheus --net host -p 9090:9090 -v /prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus


访问测试

进入首页会看到

 

 

 

 在这里会出现简单的图形展示,和显然,这样看的话还得根据条件筛选着看,而且界面很简单,所以我们还要接入grafana

 

 

 

在prometheus服务器上部署grafana
grafana主要概念

  • 插件:扩展功能作用,完成不能完成的事
  • 数据源:连接数据源,通过数据源提供数据 来出图
  • dashboard:展示面板,出什么样的图

grafana在zabbix应用参考: https://blog.csdn.net/weixin_43815140/article/details/106109605

grafana

1
2
3
mkdir /grafana
chmod 777 -R /grafana
docker run -d -p 3000:3000 --name grafana -v /grafana:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana

 

 

 访问测试
默认的用户名和密码:admin/123.com

 

 

看到以上说明连接成功,不过还需要dashboard来展示图案

prometheus提供3种自带的方案

 

 

 

 

grafana官网提供了更多的模板让我们选择 官网模板根据我们的需求可以在官网挑选一款合适自己环境的模板不是很难。

 

 

 

 

 

不过这只是监控的宿主机资源信息,如果我们想看docker容器的信息

在官网查找与docker有关的模板导入并使用

找到一款全部适合的(ID:11600)

 

 

 

配置Alertmanager报警
启动 AlertManager 来接受 Prometheus 发送过来的报警信息,并执行各种方式的报警。

alertmanager与prometheus工作流程如下

 

 

 

  • prometheus收集监测的信息
  • prometheus.yml文件定义rules文件,rules里包括了告警信息
  • prometheus把报警信息push给alertmanager ,alertmanager里面有定义收件人和发件人
  • alertmanager发送文件给邮箱或微信

 

告警等级

 

 

 

同样以 Docker 方式启动 AlertManager

同prometheus一样,先启动一个test容器,拷贝下来alertmanager的配置文件

1
2
3
4
mkdir /alertmanager
docker run -d --name test -p 9093:9093 prom/alertmanager
docker cp test:/etc/alertmanager/alertmanager.yml /alertmanager
cp alertmanager.yml alertmanager.yml.bak<br>//AlertManager 默认配置文件为 alertmanager.yml,在容器内路径为<code>/etc/alertmanager/alertmanager.yml</code>

这里 AlertManager 默认启动的端口为 9093,启动完成后,浏览器访问http://:9093 可以看到默认提供的 UI 页面,不过现在是没有任何告警信息的,因为我们还没有配置报警规则来触发报警

 

 

 

配置alertmanager邮箱报警

查看alertmanager的配置文件

 

1
2
3
4
5
简单介绍一下主要配置的作用:简单介绍一下主要配置的作用:
global: 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。
route: 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。
receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。
inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的报警(目标)。

配置邮箱报警,首先我们邮箱需要开启SMTP服务,并获取唯一标识码

 

 

编辑alertmanager.yml文件

编辑报警媒介等相关信息

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
global:
  resolve_timeout: 5m
  smtp_from: 'Sunny_lzs@foxmail.com'  #定义发送的邮箱
  smtp_smarthost: 'smtp.qq.com:465'
  smtp_auth_username: 'Sunny_lzs@foxmail.com'
  smtp_auth_password: 'iwxrdwmdgofdbbdc'
  smtp_require_tls: false
  smtp_hello: 'qq.com'
route:
  group_by: ['alertname']
  group_wait: 5s
  group_interval: 5s
  repeat_interval: 5m
  receiver: 'email'
receivers:
- name: 'email'
  email_configs:
  - to: 'Sunny_lzs@foxmail.com' #定义接收的邮箱
    send_resolved: true
inhibit_rules:
  - source_match:
      severity: 'critical'
    target_match:
      severity: 'warning'
    equal: ['alertname''dev''instance']

重启alertmanager容器

1
2
docker rm -f test
docker run -d --name alertmanager -p 9093:9093 -v /alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager

接下来,我们需要在 Prometheus 配置 AlertManager 服务地址以及告警规则,新建报警规则文件 node-up.rules 如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mkdir /prometheus/rules
cd /prometheus/rules
vim node-up.rules
groups:
- name: node-up
  rules:
  - alert: node-up
    expr: up{job="prometheus"} == 0
    for: 15s
    labels:
      severity: 1
      team: node
    annotations:
      summary: "{{ $labels.instance }} 已停止运行超过 15s!"

  

 

 

修改prometheus.yml文件,添加rules规则

 
1
PS:这里 rule_files 为容器内路径,需要将本地 node-up.rules 文件挂载到容器内指定路径,修改 Prometheus 启动命令如下,并重启服务。
1
2
docker rm -f prometheus
docker run -d --name prometheus -p 9090:9090 -v /prometheus/prometheus.yml:/etc/prometheus/prometheus.yml -v /prometheus/rules:/usr/local/prometheus/rules --net host prom/prometheus

  在prometheus上查看相应的规则

触发报警发送邮件

关掉其中一个服务就ok

1
2
3
4
5
6
[root@docker02 ~]# docker ps
CONTAINER ID        IMAGE                COMMAND                  CREATED             STATUS              PORTS               NAMES
8d1cc177b58e        google/cadvisor      "/usr/bin/cadvisor -…"   4 hours ago         Up 4 hours                              cadvisor
b2417dbd850f        prom/node-exporter   "/bin/node_exporter …"   4 hours ago         Up 4 hours                              gallant_proskuriakova
[root@docker02 ~]# docker stop 8d1cc177b58e
8d1cc177b58e

  

 

 

Alertmanager自定义邮件报警

上面虽然已经可以做出报警,但是我们想让报警信息更加直观一些

alertmanager支持自定义邮件模板的

首先新建一个模板文件 email.tmpl

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
mkdir /alertmanager/template
vim email.tmpl
{{ define "email.from" }}Sunny_lzs@foxmail.com{{ end }}
{{ define "email.to" }}Sunny_lzs@foxmail.com{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警级别: {{ .Labels.severity }} 级<br>
告警类型: {{ .Labels.alertname }}<br>
故障主机: {{ .Labels.instance }}<br>
告警主题: {{ .Annotations.summary }}<br>
触发时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }} <br>
=========end==========<br>
{{ end }}
{{ end }}

修改alertmanager文件

 

重建altermanager

1
2
[root@docker01 ~]# docker rm -f alertmanager
[root@docker01 ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /alertmanager/template:/etc/alertmanager-tmpl prom/alertmanager

posted on   JJlin777  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
 
点击右上角即可分享
微信分享提示