基于Docker从零搭建Prometheus监控报警系统
参考文章:从零搭建Prometheus监控报警系统
一.安装Prometheus Server
具体参考《基于docker搭建Prometheus+Grafana监控报警系统_风情客家__的博客-CSDN博客》中Prometheus的安装。
二.安装客户端提供metrics接口
1.通过golang客户端提供metrics
mkdir -p /home/chenqionghe/promethues/client/golang/src
cd !$
export GOPATH=/home/chenqionghe/promethues/client/golang/
#克隆项目
git clone https://github.com/prometheus/client_golang.git
#安装需要翻墙的第三方包
mkdir -p $GOPATH/src/golang.org/x/
cd !$
git clone https://github.com/golang/net.git
git clone https://github.com/golang/sys.git
git clone https://github.com/golang/tools.git
#安装必要软件包
go get -u -v github.com/prometheus/client_golang/prometheus
#编译
cd $GOPATH/src/client_golang/examples/random
go build -o random main.go
运行3个示例metrics接口
./random -listen-address=:8080 &
./random -listen-address=:8081 &
./random -listen-address=:8082 &
2.通过node exporter提供metrics
docker run -d \
--name=node-exporter \
-p 9100:9100 \
prom/node-exporter
然后把这两些接口再次配置到prometheus.yml, 重新载入配置curl -X POST http://localhost:9090/-/reload
global:scrape_interval: 15s # 默认抓取间隔, 15秒向目标抓取一次数据。external_labels:monitor: 'codelab-monitor'
rule_files:#- 'prometheus.rules'
# 这里表示抓取对象的配置
scrape_configs:#这个配置是表示在这个配置内的时间序例,每一条都会自动添加上这个{job_name:"prometheus"}的标签 - job_name: 'prometheus'- job_name: 'prometheus'scrape_interval: 5s # 重写了全局抓取间隔时间,由15秒重写成5秒static_configs:- targets: ['localhost:9090']- targets: ['http://10.211.55.25:8080', 'http://10.211.55.25:8081','http://10.211.55.25:8082']labels:group: 'client-golang'- targets: ['http://10.211.55.25:9100']labels:group: 'client-node-exporter'
可以看到接口都生效了
prometheus还提供了各种exporter工具,感兴趣小伙伴可以去研究一下
三.安装pushgateway
pushgateway是为了允许临时作业和批处理作业向普罗米修斯公开他们的指标。
由于这类作业的存在时间可能不够长, 无法抓取到, 因此它们可以将指标推送到推网关中。
Prometheus采集数据是用的pull也就是拉模型,这从我们刚才设置的5秒参数就能看出来。但是有些数据并不适合采用这样的方式,对这样的数据可以使用Push Gateway服务。
它就相当于一个缓存,当数据采集完成之后,就上传到这里,由Prometheus稍后再pull过来。
我们来试一下,首先启动Push Gateway
使用Pushgateway原因:
Prometheus采用pull模式,可能由于不在一个子网或防火墙导致无法直接拉取各target数据
需要将不同数据汇总后,再由Prometheus统一收集
其缺点:
pushgateway宕机影响范围会更大。
prometheus拉取状态up只针对pushgateway,无法做到对每个节点有效。
pushgateway可以持久化推送给它的所有监控数据
3.1 运行pushgateway
docker run -d \
--name pushgateway
-p 9091:9091 \
prom/pushgateway# pushgateway默认是不持久化数据的,如果需要,则可以通过启动时加入参数 :
"-persistence.file=push_file"
访问http://10.211.55.25:9091 可以看到pushgateway已经运行起来了
3.2 使用API向Pushgateway推数据
prometheus提供了多种语言的sdk,最简单的方式就是通过shell
- 向pushgateway推送数据:
1. 使用Client SDK
2. 直接使用API
3.2.1 直接使用API进行数据推送:
echo "some_metric 3.14" | curl --data-binary @- http://localhost:9091/metrics/job/some_job
发送更复杂的数据,可以还上instance,表示来源位置:
cat <<EOF | curl --data-binary @- http://localhost:9091/metrics/job/some_job/instance/some_instance# TYPE some_metric counter
some_metric{label="val1"} 42# TYPE another_metric gauge
# HELP another_metric Just an example.
another_metric 2398.283EOF
删除数据:如果某个监控数据不再需要,则只有手动删除才生效,否则仍然采集的为旧值
// 删除某个组下某个实例的所有数据
curl -X DELETE http://localhost:9091/metrics/job/some_job/instance/some_instance// 删除某个组下的所有数据
curl -X DELETE http://localhost:9091/metrics/job/some_job
- 推送一个指标
echo "cqh_metric 100" | curl --data-binary @- http://ubuntu-linux:9091/metrics/job/cqh
- 推送多个指标
cat <<EOF | curl --data-binary @- http://10.211.55.25:9091/metrics/job/cqh/instance/test
# 锻炼场所价格
muscle_metric{label="gym"} 8800
# 三大项数据 kg
bench_press 100
dead_lift 160
deep_squal 160
EOF
然后我们再将pushgateway配置到prometheus.yml里边,重载配置
看到已经可以搜索出刚刚推送的指标了
3.2.3 使用Client SDK向Pushgateway推数据
通过Client SDK推送metric信息到Pushgateway:
1.添加pom依赖:
<dependency><groupId>io.prometheus</groupId><artifactId>simpleclient_pushgateway</artifactId><version>0.6.0</version>
</dependency>
2.添加配置:在Prometheus的配置文件中配置,让其从Pushgateway上进行数据采集,这里0.51.14.23:9091
为我Pushgateway的地址端口。配置完后需要重启使其配置生效
scrape_configs:- job_name: 'pushgateway'static_configs:- targets: ['10.51.14.23:9091']labels:instance: "pushgateway"
3.代码:
@Test
public void pushToGateWay() throws Exception {CollectorRegistry registry = new CollectorRegistry();Gauge duration = Gauge.build().name("my_batch_job_duration_seconds").help("Duration of my batch job in second").register(registry);Gauge.Timer durationTimer = duration.startTimer();try {Gauge lastSuccess = Gauge.build().name("my_batch_job_last_success").help("Last time my batch job successed, in unixtime").register(registry);lastSuccess.setToCurrentTime();} finally {durationTimer.setDuration();PushGateway pg = new PushGateway("localhost:9091");pg.pushAdd(registry, "my_batch_job");}
}
四.安装Grafana展示
具体参考《基于docker搭建Prometheus+Grafana监控报警系统》中Grafana的安装。
五.安装AlterManager
Pormetheus的警告由独立的两部分组成。
Prometheus服务中的警告规则发送警告到Alertmanager。
然后这个Alertmanager管理这些警告。包括silencing, inhibition, aggregation,以及通过一些方法发送通知,例如:email,PagerDuty和HipChat。
建立警告和通知的主要步骤:
- 创建和配置Alertmanager
- 启动Prometheus服务时,通过-alertmanager.url标志配置Alermanager地址,以便Prometheus服务能和Alertmanager建立连接。
创建和配置Alertmanager
mkdir -p /home/chenqionghe/promethues/alertmanager
cd !$
创建配置文件alertmanager.yml
global:resolve_timeout: 5m
route:group_by: ['cqh']group_wait: 10s #组报警等待时间group_interval: 10s #组报警间隔时间repeat_interval: 1m #重复报警间隔时间receiver: 'web.hook'
receivers:- name: 'web.hook'webhook_configs:- url: 'http://10.211.55.2:8888/open/test'
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']
这里配置成了web.hook的方式,当server通知alertmanager会自动调用webhook http://10.211.55.2:8888/open/test
下面运行altermanager
docker rm -f alertmanager
docker run -d -p 9093:9093 \
--name alertmanager \
-v /home/chenqionghe/promethues/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml \
prom/alertmanager
访问http://10.211.55.25:9093
接下来修改Server端配置报警规则和altermanager地址
修改规则/home/chenqionghe/promethues/server/rules.yml
groups:- name: cqhrules:- alert: cqh测试expr: dead_lift > 150for: 1mlabels:status: warningannotations:summary: "{{$labels.instance}}:硬拉超标!lightweight baby!!!"description: "{{$labels.instance}}:硬拉超标!lightweight baby!!!"
这条规则的意思是,硬拉超过150公斤,持续一分钟,就报警通知
然后再修改prometheus添加altermanager配置
global:scrape_interval: 15s # 默认抓取间隔, 15秒向目标抓取一次数据。external_labels:monitor: 'codelab-monitor'
rule_files:- /etc/prometheus/rules.yml
# 这里表示抓取对象的配置
scrape_configs:#这个配置是表示在这个配置内的时间序例,每一条都会自动添加上这个{job_name:"prometheus"}的标签 - job_name: 'prometheus'- job_name: 'prometheus'scrape_interval: 5s # 重写了全局抓取间隔时间,由15秒重写成5秒static_configs:- targets: ['localhost:9090']- targets: ['10.211.55.25:8080', '10.211.55.25:8081','10.211.55.25:8082']labels:group: 'client-golang'- targets: ['10.211.55.25:9100']labels:group: 'client-node-exporter'- targets: ['10.211.55.25:9091']labels:group: 'pushgateway'
alerting:alertmanagers:- static_configs:- targets: ["10.211.55.25:9093"]
重载prometheus配置,规则就已经生效
接下来我们观察grafana中数据的变化
然后我们点击prometheus的Alert模块,会看到已经由绿->黄-红,触发了报警
然后我们再来看看提供的webhook接口,这里的接口我是用的golang写的,接到数据后将body内容报警到钉钉
钉钉收到报警内容如下
到这里,从零开始搭建Prometheus实现自动监控报警就说介绍完了,一条龙服务,自动抓取接口+自动报警+优雅的图表展示!
基于Docker从零搭建Prometheus监控报警系统相关推荐
- 从零搭建Prometheus监控报警系统
从零开始搭建Prometheus自动监控报警系统 从零搭建Prometheus监控报警系统 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据 ...
- 化整为零,一步一步教你搭建Prometheus监控报警系统
什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus使用Go语言开发,是Google BorgMon监控系统 ...
- Prometheus 监控报警系统 AlertManager 之邮件告警
文章目录 1.Prometheus & AlertManager 介绍 2.环境.软件准备 3.启动并配置 Prometheus 3.1.Docker 启动 Prometheus 3.2.Do ...
- 基于docker - 单机版FastDFS搭建
基于docker - 单机版FastDFS搭建 ###### 安装单机版 ###### # make docker container docker run -it -P -v /home/insun ...
- 基于VMware从零搭建Linux系统
基于VMware从零搭建Linux系统 1.安装VMware和CentOS VMware官网 官方地址:https://www.vmware.com/cn.html 其地址:https://www.n ...
- 基于Docker和Golang搭建Web服务器
1 场景描述 基于centos7的docker镜像搭建golang开发环境 在docker容器内,使用golang实现一个Web服务器 启动docker容器,并在容器内启动Web服务器 我购买了一个最 ...
- 搭建Prometheus监控报警
基于上一篇博客继续进行部署 一.Prometheus & AlertManager 介绍 Prometheus 是一套开源的系统监控.报警.时间序列数据库的组合,最初有 SoundCloud ...
- 基于docker部署 opentsdb + grafana数据监控系统
文章目录 0 前言 1 docker opentsdb部署 2 docker grafana部署 3 python client写入方案 4 数据持久化方案 5 云服务器部署踩坑事项 参考材料 0 前 ...
- VM虚拟机 - Docker - CentOS 7 - 快速使用Docker从零搭建Hadoop完全分布式集群详细教程(亲测有效,※吐血推荐※)(内含快速启动容器脚本)
目录 阅读须知 最小安装(可跳) 安装VMware Tool(可直接安装) 关闭防火墙和Selinux 安装docker 迁移docker安装目录 docker安装CentOS 7 安装必要工具 安装 ...
- 基于docker+reveal.js搭建一个属于自己的在线ppt网站
前言 最近热衷于Docker,由于这段时间使用Docker来折腾自己的服务器,越来越感觉这是一种极其被应该推广的技术,因此想在公司内部也做一次技术分享.当然,如果只是做的PPT,我就不写这文章了.既然 ...
最新文章
- viterbi维特比算法和隐马尔可夫模型(HMM)
- Linux的简单Nginx
- 今天的工作发现了4年前的“bug一枚”
- win10只有c盘怎么分区_电脑技巧分享:安装win10系统时系统盘C盘分区多大空间适合?...
- 每日一皮:当你感觉上升瓶颈的时候,不妨换个环境...
- linux测试怎样看,linux入门篇:如何查看centos版本
- UI设计实用素材|功能性图标ICON的作用
- mysql limitorderby
- 固定大小采样池中的随机采样证明
- Sublime Text快捷键
- virtuoso配合calibre进行电路后仿真
- c语言用分治法求最大最小值,C语言实现分治法实例
- 2-PHP代码审计——PHPCMSV9.6.0 sql注入漏洞
- 【R语言】——VennDiagram包绘制维恩图(保姆级教程)
- mt950报文解析_MT报文有两种格式
- 区块链技术在创造共享经济方面胜过互联网
- [Java]保留数值后2位的几种方法
- python实现excel表格按内容模块倒序排列
- kubectl常用命令大全详解
- 怎样在手机自带的邮件服务器,如何在手机上收发学校邮箱信件
热门文章
- 国税局验证码识别 | 不讲武德篇
- 如何获取腾讯应用appid
- Typora自制主题
- Jeston NX ubuntu 搜狗拼音输入法安装
- C. Mortal Kombat Tower(cf)dp
- 桌面计算机地址栏在哪,win10系统工具栏怎样添加桌面和地址栏选项【图文教程】...
- 本地iis部署之后网页无法打开
- TI | TM4C123Gx单片机之---ADC笔记
- 自制StartUp宏病毒专杀小工具
- 约束满足问题(Constraint Satisfaction Problems——CSPs):回溯操作,向前检验,约束传播,局部搜索