详细介绍见官方网站:https://prometheus.io/docs/introduction/overview/
安装前准备
mkdir -p /data/docker/gpe/prometheus
cd /data/docker/gpe/prometheus
mkdir -p config/conf.d
mkdir -p config/rules
mkdir data
sudo chmod 777 data
config/
├── conf.d
│ └── host.json
├── prometheus.yml
└── rules
└── instance.yml
host.json
[
{
"targets": ["172.17.0.1:9100"],
"labels": {
"instance": "host-localhost"
}
}
]
instance.yml
groups:
- name: example
rules:
- alert: InstanceDown
expr: up == 0
for: 1m
labels:
severity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."
prometheus.yml
详细配置见:https://prometheus.io/docs/prometheus/latest/configuration/configuration/
global: # 全局设置,可以被覆盖
scrape_interval: 15s # 设定抓取数据的频率,默认为1min
evaluation_interval: 15s # 评估规则的频率,默认为1min
scrape_timeout: 15s # 设定抓取数据的超时时间,默认为10s
alerting:
alertmanagers:
- static_configs:
- targets:
- 172.17.0.1:9093 # # Alertmanager配置,设定alertmanager和prometheus交互的接口
rule_files:
- '/etc/prometheus/rules/*.yml' # 报警规则存放路径
scrape_configs:
- job_name: prometheus
scrape_interval: 15s # 抓取周期,默认采用global配置
static_configs:
- targets: ['172.17.0.1:9090'] # prometheus所要抓取数据的地址
labels: # 定义标签,便于区分
instance: prometheus
- job_name: pushgateway
- honor_labels: true
static_configs:
- targets: ['172.17.0.1:9091']
labels:
instance: pushgateway
- job_name: host
metrics_path: '/metrics'
file_sd_configs: # 基于文件的服务发现
- files:
- /etc/prometheus/conf.d/host.json
注意:
服务自动发现使用,比如我想新加一个主机节点的监控,我只需要修改host.json
文件即可,不需要重启prometheus服务
上述配置完成后,执行下面命令启动prometheus服务
注意从 2.0 开始,热加载功能是默认关闭的,添加--web.enable-lifecycle
:开启配置文件热加载,可以通过curl -X POST http://ip:port/-/reload
实现
docker run -d -h 172.17.0.1 --name prometheus -p 9090:9090 \
-v /data/docker/gpe/prometheus/config/:/etc/prometheus \
-v /data/docker/gpe/prometheus/data:/prometheus/data \
prom/prometheus:v2.19.0 \
--config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle
访问:http://localhost:9090,进入到如下界面
点击Alerts
,可以查看开始定义好的报警规则
查看instance
状态(两个down的还没有搭建)
docker run -d --net=host --name node-exporter -p 9100:9100 \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /:/rootfs:ro \
prom/node-exporter:v1.0.0
访问:http://localhost:9100/metrics
docker run -d -h 172.17.0.1 -p 9091:9091 --name pushgateway --restart=always prom/pushgateway:v1.2.0
访问:http://localhost:9091/
以钉钉报警为例
详细配置见:https://prometheus.io/docs/alerting/latest/configuration/
mkdir /data/docker/gpe/alertmanager
vim alertmanager.yml
alertmanager.yml配置如下:
global:
resolve_timeout: 5m # 在没有报警的情况下声明为已解决的时间
# # 配置邮件发送信息
# smtp_smarthost: 'smtp.test.com:465'
# smtp_from: 'your_email'
# smtp_auth_username: 'your_email'
# smtp_auth_password: 'email_passwd'
# smtp_hello: 'your_email'
# smtp_require_tls: false
# 设置报警的分发策略
route:
receiver: webhook # 发送警报的接收者的名称,默认的receiver
group_wait: 10s # 当一个新的报警分组被创建后,需要至少等待多久时间发送一组警报的通知
group_interval: 1m # 当第一个报警发送后,等待'group_interval'时间来发送新的一组报警信息
repeat_interval: 24h # 报警发送成功后,重新发送等待的时间
group_by: ['altername'] # 报警分组依据
# #子路由,使用email发送
# routes:
# - receiver: email
# match_re:
# serverity : email # label 匹配email
# group_wait: 10s
# 定义警报接收者信息
receivers:
- name: webhook # 与route匹配
webhook_configs:
- url: http://172.17.0.1:8060/dingtalk/webhook/send
send_resolved: true # 发送已解决通知
#- name: 'email'
# email_configs:
# - to: '[email protected]'
# send_resolved: true
# 抑制规则配置
#inhibit_rules:
# [ - ... ]
#target_match:
# [ : , ... ]
#target_match_re:
# [ : , ... ]
#source_match:
# [ : , ... ]
#source_match_re:
# [ : , ... ]
#[ equal: '[' , ... ']' ]
docker run -d -h 172.17.0.1 --name alertmanager -p 9093:9093 \
-v /data/docker/gpe/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
prom/alertmanager:v0.20.0 \
--config.file=/etc/alertmanager/alertmanager.yml
参考:https://theo.im/blog/2017/10/16/release-prometheus-alertmanager-webhook-for-dingtalk/
注意:不同版本的镜像,消息格式可能不一样
docker run -d --name webhook-dingtalk -p 8060:8060 \
timonwong/prometheus-webhook-dingtalk:v1.4.0 \
--ding.profile="webhook=https://oapi.dingtalk.com/robot/send?access_token=xxxxxxxx"
测试CPU报警,停止node-exporter服务:
docker stop node-exporter
查看prometheus Alerts显示的状态将变为PENDING
持续1分钟左右,状态变为FIRING
,此时将消息发送至alertmanager
查看alertmanager会显示接受到的alert信息,此时alertmanager将通过webhook转发至钉钉机器人
发送消息示例如下:
重启node-exporter服务后,将再次送一次RESOLVED
信息
补充:告警信息生命周期的3中状态
详细介绍见官方:https://grafana.com/docs/grafana/latest/
Grafana是开源的可视化和分析软件。它使您可以查询,可视化,警告和浏览指标,无论它们存储在哪里。用简单的英语,它为您提供了将时间序列数据库(TSDB)数据转换为精美的图形和可视化效果的工具。
安装前准备
mkdir -p /data/docker/gpe/grafana
cd /data/docker/gpe/grafana
mkdir data
sudo chmod 777 data
docker启动命令如下,可以通过GF_INSTALL_PLUGINS
预先安装一些指定插件
docker run -d --name grafana -p 3000:3000 \
-e GF_INSTALL_PLUGINS="grafana-piechart-panel" \
-v /data/docker/gpe/grafana/data:/var/lib/grafana \
grafana/grafana:7.0.0
访问:http://localhost:3000/,默认用户密码:admin/admin,注意:生产环境一定要修改密码
添加数据源,有多个类型,选择prometheus类型,进行如下配置然后点击Save & Test,没有问题即可
去官方查找node-exporter示例模板:https://grafana.com/grafana/dashboards?orderBy=name&direction=asc
导入:8919