参考文章:从零搭建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监控报警系统相关推荐

  1. 从零搭建Prometheus监控报警系统

    从零开始搭建Prometheus自动监控报警系统 从零搭建Prometheus监控报警系统 什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据 ...

  2. 化整为零,一步一步教你搭建Prometheus监控报警系统

    什么是Prometheus? Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB).Prometheus使用Go语言开发,是Google BorgMon监控系统 ...

  3. Prometheus 监控报警系统 AlertManager 之邮件告警

    文章目录 1.Prometheus & AlertManager 介绍 2.环境.软件准备 3.启动并配置 Prometheus 3.1.Docker 启动 Prometheus 3.2.Do ...

  4. 基于docker - 单机版FastDFS搭建

    基于docker - 单机版FastDFS搭建 ###### 安装单机版 ###### # make docker container docker run -it -P -v /home/insun ...

  5. 基于VMware从零搭建Linux系统

    基于VMware从零搭建Linux系统 1.安装VMware和CentOS VMware官网 官方地址:https://www.vmware.com/cn.html 其地址:https://www.n ...

  6. 基于Docker和Golang搭建Web服务器

    1 场景描述 基于centos7的docker镜像搭建golang开发环境 在docker容器内,使用golang实现一个Web服务器 启动docker容器,并在容器内启动Web服务器 我购买了一个最 ...

  7. 搭建Prometheus监控报警

    基于上一篇博客继续进行部署 一.Prometheus & AlertManager 介绍 Prometheus 是一套开源的系统监控.报警.时间序列数据库的组合,最初有 SoundCloud ...

  8. 基于docker部署 opentsdb + grafana数据监控系统

    文章目录 0 前言 1 docker opentsdb部署 2 docker grafana部署 3 python client写入方案 4 数据持久化方案 5 云服务器部署踩坑事项 参考材料 0 前 ...

  9. VM虚拟机 - Docker - CentOS 7 - 快速使用Docker从零搭建Hadoop完全分布式集群详细教程(亲测有效,※吐血推荐※)(内含快速启动容器脚本)

    目录 阅读须知 最小安装(可跳) 安装VMware Tool(可直接安装) 关闭防火墙和Selinux 安装docker 迁移docker安装目录 docker安装CentOS 7 安装必要工具 安装 ...

  10. 基于docker+reveal.js搭建一个属于自己的在线ppt网站

    前言 最近热衷于Docker,由于这段时间使用Docker来折腾自己的服务器,越来越感觉这是一种极其被应该推广的技术,因此想在公司内部也做一次技术分享.当然,如果只是做的PPT,我就不写这文章了.既然 ...

最新文章

  1. viterbi维特比算法和隐马尔可夫模型(HMM)
  2. Linux的简单Nginx
  3. 今天的工作发现了4年前的“bug一枚”
  4. win10只有c盘怎么分区_电脑技巧分享:安装win10系统时系统盘C盘分区多大空间适合?...
  5. 每日一皮:当你感觉上升瓶颈的时候,不妨换个环境...
  6. linux测试怎样看,linux入门篇:如何查看centos版本
  7. UI设计实用素材|功能性图标ICON的作用
  8. mysql limitorderby
  9. 固定大小采样池中的随机采样证明
  10. Sublime Text快捷键
  11. virtuoso配合calibre进行电路后仿真
  12. c语言用分治法求最大最小值,C语言实现分治法实例
  13. 2-PHP代码审计——PHPCMSV9.6.0 sql注入漏洞
  14. 【R语言】——VennDiagram包绘制维恩图(保姆级教程)
  15. mt950报文解析_MT报文有两种格式
  16. 区块链技术在创造共享经济方面胜过互联网
  17. [Java]保留数值后2位的几种方法
  18. python实现excel表格按内容模块倒序排列
  19. kubectl常用命令大全详解
  20. 怎样在手机自带的邮件服务器,如何在手机上收发学校邮箱信件

热门文章

  1. 国税局验证码识别 | 不讲武德篇
  2. 如何获取腾讯应用appid
  3. Typora自制主题
  4. Jeston NX ubuntu 搜狗拼音输入法安装
  5. C. Mortal Kombat Tower(cf)dp
  6. 桌面计算机地址栏在哪,win10系统工具栏怎样添加桌面和地址栏选项【图文教程】...
  7. 本地iis部署之后网页无法打开
  8. TI | TM4C123Gx单片机之---ADC笔记
  9. 自制StartUp宏病毒专杀小工具
  10. 约束满足问题(Constraint Satisfaction Problems——CSPs):回溯操作,向前检验,约束传播,局部搜索