轻松搭建Prometheus监控容器服务
Posted Friends of the wind
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了轻松搭建Prometheus监控容器服务相关的知识,希望对你有一定的参考价值。
目录
环境
角色 | 主机名 | IP | 组件 |
---|---|---|---|
管理端 | repository01 | 172.16.0.154 | NodeEXporter、cAdvisor、Prometheus Server、Grafana、AlertManager |
被管理节点 | repository02 | 172.16.0.155 | NodeEXporter、cAdvisor |
被管理节点 | repository03 | 172.16.0.145 | NodeEXporter、cAdvisor |
描述
全部关闭防火墙,禁用selinux
组件功能:
Prometheus Server: 普罗米修斯的主服务器。
NodeEXporter: 负责收集Host硬件信息和操作系统信息。
cAdvisor: 负责收集Host上运行的容器信息。
Grafana: 负责展示普罗米修斯监控界面。
AlertManager:根据规则,触发之后发送报警信息到指定介质。
一、它是什么?
Prometheus是由SoundCloud开发的开源监控系统的开源版本。2016年,由Google发起的Linux基金会(Cloud Native Computing Foundation,CNCF)将Prometheus纳入其第二大开源项目。
优点:
高效:单一Prometheus可以处理数以百万的监控指标;每秒处理数十万的数据点。
易于伸缩:通过使用功能分区(sharing)+联邦集群(federation)可以对Prometheus进行扩展,形成一个逻辑集群;Prometheus提供多种语言的客户端SDK,这些SDK可以快速让应用程序纳入到Prometheus的监控当中。
良好的可视化:Prometheus除了自带有Prometheus UI,Prometheus还提供了一个独立的基于Ruby On Rails的Dashboard解决方案Promdash。另外最新的Grafana可视化工具也提供了完整的Proetheus支持,基于Prometheus提供的API还可以实现自己的监控可视化UI。
二、搭建Prometheus服务
1.repository01操作
1)部署node-EXporter
载入镜像
启动容器:
注意:这里使用了- -net=host,这样Prometheus Server可以直接与Node-EXporter通信。
docker run -d -p 9100:9100 --name exporter -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
验证:打开浏览器验证结果。http://172.16.0.154:9100
显示节点出口的各项指标:
2)部署cAdvisor
载入镜像
启动容器:
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
验证:打开浏览器验证结果。http://172.16.0.154:8080
显示容器节点信息:
3)部署Prometheus Server
思路:需要对它的配置文件进行修改,所以先运行一个容器,先将其配置文件拷贝出来。
载入镜像
运行容器:
docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
拷贝配置文件:./代表当前路径,即配置文件拷贝到当前
docker cp prometheus:/etc/prometheus/prometheus.yml ./
编辑配置文件:
注意:指定prometheus的监控项(IP加端口),包括它也会监控自己收集到的数据。
vim prometheus.yml
删除掉前面开启的prometheus容器,因为我们已经得到配置文件并按照实际修改了,后面需要重新开启新的容器
docker rm -f prometheus
重新运行prometheus容器
docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
验证:打开浏览器验证结果。http://172.16.0.154:9090/targets
4)部署grafana
创建目录
mkdir grafana-storage
赋权
chmod 777 -R grafana-storage/
载入镜像
运行容器:
docker run -d -p 3000:3000 --name grafana -v /grafana-storage:/var/lib/grafana -e “GF_SECURITY_ADMIN_PASSWORD=123.com” grafana/grafana
验证:打开浏览器登录验证。http://172.16.0.154:3000/login
用户名:admin
密码:123.com
设置Grafana,添加数据来源(prometheus)
点击“DATA SOURCES”-“Add data source”
选择“Prometheus”
Name 选择Prometheus
URL 填写http://172.16.0.154:9090
点击 右下方 Save & Test
5)添加模板
虽然grafana收集到了数据,但怎么显示它,仍然是个问题,grafana支持自定义显示信息,不过要自定义起来非常麻烦,grafana官方为我们提供了模板。
grafana官网: https://grafana.com/
第一种方式:通过JSON文件使用模板。
下载完成之后,来到grafana控制台
http://172.16.0.154:3000/datasources
点击左侧“+”,import ,upload JSON file
第二种导入模板的方式:
直接通过模板的ID 号。
2.repository02操作
同repository01部署NodeEXporter、cAdvisor
3.repository03操作
同repository01部署NodeEXporter、cAdvisor
三、AlertManager 配置邮件告警
1.AlertManager简介
默认配置文件为 alertmanager.yml,在容器内路径为/etc/alertmanager/alertmanager.yml
docker cp alertmanager:/etc/alertmanager/alertmanager.yml /root/
简单介绍主要配置的作用:
- global: 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。
- route: 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。
- receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。
- inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。
2.配置 Email 方式通知报警信息
-
配置QQ邮箱之前,需要登录QQ邮箱,打开SMTP服务,并获取授权码。
-
启动 AlertManager,拷贝配置文件
docker run --name alertmanager -d -p 9093:9093 prom/alertmanager:latest
拷贝文件
docker cp alertmanager:/etc/alertmanager/alertmanager.yml ./
留一份副本
cp alertmanager.yml alertmanager.ymlbak -
AlertManager 默认启动的端口为 9093,启动完成后,浏览器访问 http://:9093 可以看到默认提供的 UI 页面,
http://172.16.0.154:9093 -
修改配置:以上模板中涉及的QQ邮箱换成自己的即可,授权码也一样。
[root@repository01 ~]# vim alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '709961989@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '709961989@qq.com'
smtp_auth_password: 'zyrcurfgywwnmsubdbb'
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: '709961989@qq.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
- 删除拷贝配置文件的容器
docker rm -f alertmanager - 运行新容器
docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml prom/alertmanager - Prometheus 配置 AlertManager 告警规则
mkdir -p 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 规则文件
rule_files 为容器内路径,需要将本地 node-up.rules 文件挂载到容器内指定路径,修改 Prometheus 启动命令如下,并重启服务。
vim prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.1.100:9093
rule_files:
- "/usr/local/prometheus/rules/*.rules"
- 删除容器prometheus
docker rm -f prometheus - 重新启动一个容器
docker run -d -p 9090:9090 -v /root/prometheus.yml:/etc/prometheus/prometheus.yml -v /root/prometheus/rules:/usr/local/prometheus/rules --name prometheus --net=host prom/prometheus
验证:在prometheus主页上可以看到相应规则
- 触发报警发送 Email
命令停掉容器,查收报警信息
以上是关于轻松搭建Prometheus监控容器服务的主要内容,如果未能解决你的问题,请参考以下文章