从零开始搭建Prometheus自动监控报警系统(企业级)
从零搭建Prometheus监控报警系统什么是Prometheus?Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。 Prometheus的特点
官网地址:https://prometheus.io/ 架构图基本原理Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。 服务过程
三大套件
本飞猪教程内容简介
安装准备这里我的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/server/rules.yml chmod 777 /home/chenqionghe/promethues/server/rules.yml 下面开始三大套件的学习 一.安装Prometheus Server通过docker方式 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/server/prometheus.yml:/etc/prometheus/prometheus.yml -v /home/chenqionghe/promethues/server/rules.yml:/etc/prometheus/rules.yml prom/prometheus:v2.7.2 --config.file=/etc/prometheus/prometheus.yml --web.enable-lifecycle 启动时加上--web.enable-lifecycle启用远程热加载配置文件 访问http://10.211.55.25:9090 访问http://10.211.55.25:9090/metrics 我们配置了9090端口,默认prometheus会抓取自己的/metrics接口 二.安装客户端提供metrics接口1.通过golang客户端提供metricsmkdir -p /home/chenqionghe/promethues/client/golang/src cd !$ export GOPATH=/home/chenqionghe/promethues/client/golang/ #克隆项目 git clone https://github.com/prometheus/client_golang.git #安装需要FQ的第三方包 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提供metricsdocker 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工具,感兴趣小伙伴可以去研究一下 三.安装pushgatewaypushgateway是为了允许临时作业和批处理作业向普罗米修斯公开他们的指标。 mkdir -p /home/chenqionghe/promethues/pushgateway cd !$ docker run -d -p 9091:9091 --name pushgateway prom/pushgateway 访问http://10.211.55.25:9091 已经pushgateway运行起来了 接下来我们就可以往pushgateway推送数据了,prometheus提供了多种语言的sdk,最简单的方式就是通过shell
echo "cqh_metric 3.14" | 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里边,重载配置 四.安装Grafana展示Grafana是用于可视化大型测量数据的开源程序,它提供了强大和优雅的方式去创建、共享、浏览数据。 我们使用docker安装 docker run -d -p 3000:3000 --name grafana grafana/grafana 默认登录账户和密码都是admin,进入后界面如下 我们添加一个数据源 把Prometheus的地址填上 导入prometheus的模板 打开左上角选择已经导入的模板会看到已经有各种图 我们来添加一个自己的图表 指定自己想看的图标和关键字,右上角保存 看到如下数据 到这里我们就已经实现了数据的自动收集和展示,下面来说下prometheus如何自动报警 五.安装AlterManagerPormetheus的警告由独立的两部分组成。
创建和配置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地址 groups: - name: cqh rules: - alert: cqh测试 expr: dead_lift > 150 for: 1m labels: status: warning annotations: summary: "{{$labels.instance}}:硬拉超标!lightweight baby!!!" description: "{{$labels.instance}}:硬拉超标!lightweight baby!!!" 这条规则的意思是,硬拉超过150公斤,持续一分钟,就报警通知 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配置,规则就已经生效 然后我们点击prometheus的Alert模块,会看到已经由绿->黄-红,触发了报警 然后我们再来看看提供的webhook接口,这里的接口我是用的golang写的,接到数据后将body内容报警到钉钉 钉钉收到报警内容如下 到这里,从零开始搭建Prometheus实现自动监控报警就说介绍完了,一条龙服务,自动抓取接口+自动报警+优雅的图表展示,你还在等什么,赶紧high起来! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- centos7编译安装Zabbix-4.2.4及配置文件修改
- 为ARM体系结构编译Linux程序 – 在主机操作系统上运行
- linux – 无法使用sysctl更改每个进程的最大打开文件数
- linux – 首次登录时构建用户chroot
- 详细解析用Squid实现反向代理的方法(2)
- linux – 临时重命名/ tmp然后创建一个tmp符号链接到另一个
- stdin / stdout / stderr上的跨平台(linux / Win32)非阻塞C
- linux – 如何在BIND中为Active Directory服务器正确委派域
- linux – 所有可能的cp退出代码
- 在Linux集群上安装R`preview`包:编译问题?
- SPOJ 2798 QTREE3 - Query on a tree again!
- linux – UBUNTU服务器11.04上的USB网络摄像头到
- linux – 如何在Raspberry Pi上安装FreeRTOS?
- ESXi 5.5下的新Linux VM是否应该使用discard选项
- rsync –remove-source-files的安全性如何?
- linux – KVM主机的最佳内核配置和补丁
- 壳牌与grep,sed,awk在windows中
- linux – 具有不同大小磁盘的多设备BTRFS文件系统
- 关于linux系统下CRONTAB运行python脚本不生效
- linux – 修改Beaglebone Black的设备树