从零开始搭建Prometheus⾃动监控报警系统
从零搭建Prometheus监控报警系统
什么是Prometheus?
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使⽤Go语⾔开发,是Google BorgMon监控系统的开源版本。2016年由Google发起Linux基⾦会旗下的原⽣云基⾦会(Cloud Native Computing Foundation), 将Prometheus纳⼊其下第⼆⼤开源项⽬。
Prometheus⽬前在开源社区相当活跃。
Prometheus和Heapster(Heapster是K8S的⼀个⼦项⽬,⽤于获取集的性能数据。)相⽐功能更完善、更全⾯。Prometheus性能也⾜够⽀撑上万台规模的集。Prometheus的特点
多维度数据模型。
灵活的查询语⾔。
不依赖分布式存储,单个服务器节点是⾃主的。
通过基于HTTP的pull⽅式采集时序数据。
可以通过中间⽹关进⾏时序列数据推送。
通过服务发现或者静态配置来发现⽬标服务对象。
⽀持多种多样的图表和界⾯展⽰,⽐如Grafana等。
官⽹地址:
架构图
基本原理
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接⼝就可以接⼊监控。不需要任何SDK或者其他的集成过程。这样做⾮常适合做虚拟化环境监控系统,⽐如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接⼝被叫做exporter 。⽬前互
联⽹公司常⽤的组件⼤部分都有exporter可以直接使⽤,⽐如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、⽹络等等)。
服务过程
Prometheus Daemon负责定时去⽬标上抓取metrics(指标)数据,每个抓取⽬标需要暴露⼀个http服务的接⼝给它定时抓取。Prometheus⽀持通过配置⽂件、⽂本⽂件、Zookeeper、Consul、DNS SRV Lookup等⽅式指定抓取⽬标。Prometheus采⽤PULL的⽅式进⾏监控,即服务器可以直接通过⽬标PULL数据或者间接地通过中间⽹关来Push数据。
Prometheus在本地存储抓取的所有数据,并通过⼀定规则进⾏清理和整理数据,并把得到的结果存储到新的时间序列中。
Prometheus通过PromQL和其他API可视化地展⽰收集的数据。Prometheus⽀持很多⽅式的图表可视化,例如Grafana、⾃带的Promdash以及⾃⾝提供的模版引擎等等。
Prometheus还提供HTTP API的查询⽅式,⾃定义所需要的输出。
PushGateway⽀持Client主动推送metrics到PushGateway,⽽Prometheus只是定时去Gateway上抓取数据。
Alertmanager是独⽴于Prometheus的⼀个组件,可以⽀持Prometheus的查询语句,提供⼗分灵活的报警⽅式。
三⼤套件
Server 主要负责数据采集和存储,提供PromQL查询语⾔的⽀持。
Alertmanager 警告管理器,⽤来进⾏报警。
Push Gateway ⽀持临时性Job主动推送指标的中间⽹关。
本飞猪教程内容简介
1.演⽰安装Prometheus Server
2.演⽰通过golang和node-exporter提供metrics接⼝
3.演⽰pushgateway的使⽤
4.演⽰grafana的使⽤
5.演⽰alertmanager的使⽤
安装准备
这⾥我的服务器IP是10.211.55.25,登⼊,建⽴相应⽂件夹
mkdir -p /home/chenqionghe/promethues
mkdir -p /home/chenqionghe/promethues/server
mkdir -p /home/chenqionghe/promethues/client
touch /home/chenqionghe/promethues/l
chmod 777 /home/chenqionghe/promethues/l
下⾯开始三⼤套件的学习
⼀.安装Prometheus Server
通过docker⽅式
⾸先创建⼀个配置⽂件/home/chenqionghe/test/l
挂载之前需要改变⽂件权限为777,要不会引起修改宿主机上的⽂件内容不同步的问题
global:
scrape_interval:    15s # 默认抓取间隔, 15秒向⽬标抓取⼀次数据。
external_labels:
monitor: 'codelab-monitor'
# 这⾥表⽰抓取对象的配置
scrape_configs:
#这个配置是表⽰在这个配置内的时间序例,每⼀条都会⾃动添加上这个{job_name:"prometheus"}的标签  - job_name: 'prometheus'
scrape_interval: 5s # 重写了全局抓取间隔时间,由15秒重写成5秒
static_configs:
- targets: ['localhost:9090']
运⾏
docker rm -f prometheus
docker run --name=prometheus -d \
-p 9090:9090 \
-v /home/chenqionghe/promethues/l:/etc/l \ -v /home/chenqionghe/promethues/l:/etc/l \
prom/prometheus:v2.7.2 \
--config.file=/etc/l \
--able-lifecycle
启动时加上--able-lifecycle启⽤远程热加载配置⽂件
调⽤指令是curl -X POST
访问10.211.55.25:9090
我们会看到如下l界⾯
访问10.211.55.25:9090/metrics
在Graph选项已经可以看到监控的数据
⼆.安装客户端提供metrics接⼝
1.通过golang客户端提供metrics
mkdir -p /home/chenqionghe/promethues/client/golang/src
cd !$
export GOPATH=/home/chenqionghe/promethues/client/golang/
#克隆项⽬
git clone github/prometheus/client_golang.git
#安装需要FQ的第三⽅包
mkdir -p $GOPATH//x/
cd !$
git clone github/golang/net.git
git clone github/golang/sys.git
git clone github/golang/tools.git
#安装必要软件包
go get -u -v github/prometheus/client_golang/prometheus
#编译
cd $GOPATH/src/client_golang/examples/random
go build -o
运⾏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
然后把这两些接⼝再次配置到l, 重新载⼊配置curl -X POST
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秒
go语言安装教程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'
可以看到接⼝都⽣效了
prometheus还提供了各种exporter⼯具,感兴趣⼩伙伴可以去研究⼀下

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。