查看原文
其他

手把手教你搭建一个监控告警平台

ImportNew 2022-11-11

The following article is from 不高兴就喝水 Author 不高兴就喝水

试想下面的场景:


在一个惬意的周六下午,小水带着他的老婆大人正吃着火锅唱着歌,嗨着呢。然而这时候,老板突然给他打了个电话,说线上服务不可用了,不想下周一被开除的话,就在5分钟之内给我解决!就这样,一个愉快的周末没了。



出现这个现象的原因是啥?


毫无疑问是系统出问题之前没能及时监控预警,等用户发现系统出了问题,反馈给老板之后小水才知道。这段黄金抢救时间被小水错过了啊。


所以监控是整个运维乃至整个产品生命周期中非常重要的一环。及时预警可以减少故障影响面的扩大,防止事态严重。如果有监控预警的话,小水就可以风轻云淡的偷偷重启一下。诶,用户毫无感知,更不用提老板会知道了,嘿嘿嘿……



下面我们来看一下,感动中国十大优秀员工——老水同志的示范:如何一步步搭建一个花里胡哨的监控报警平台。


1. 安装 Prometheus


Prometheus(普罗米修斯)是一个系统和服务的监控系统。它以在给定的时间间隔从配置的目标收集指标数据,评估规则表达式,显示结果。并且可以在观察到指定条件时触发警报。


Prometheus 于 2016 年加入云原生云计算基金会(CNCF),成为继 Kubernetes 之后的第二个项目,是当下容器监控的主流方案。


Prometheus 是由 Go 语言编写而成,采用 pull 方式获取监控的数据信息,并提供了多维度的数据模型和灵活的查询接口。不仅可以通过静态文件配置监控对象,还支持自动发现机制,能够通过 Kubernetes、Consul、DNS等多种方式动态获取监控对象。


在数据采集方面,借助 Go 语言的高并发特性,单机 Prometheus 可以采集数百个节点的监控数据。


在数据存储方面,随着本地时序数据库的不断优化,单机 Prometheus 每秒可以采集一千万个指标,如果需要存储大量的历史监控数据,则还支持远端存储。


来看看它的架构图:



下面我们来安装一下:


步骤1. 下载地址:https://prometheus.io/download/


步骤2. 上传到服务器并解压:


tar -zxvf prometheus-2.29.1.linux-amd64.tar.gz

步骤3. 文件夹名字太长,重命名一下:


mv prometheus-2.29.1.linux-amd64 prometheus-2.29.1

步骤4. 启动prometheus:


cd prometheus-2.29.1./prometheus --config.file="/data/prometheus/prometheus-2.29.1/prometheus.yml" &

步骤5. 检测是否启动成功:


//有以下三种方式可以检测//1.查看端口情况ss -naltp |grep 9090//2.curl命令查看curl http://localhost:9090///3.浏览器访问http://公网ip:9090/

2. 安装 Grafana


Grafana 是一个可视化面板,用来搭配 Prometheus 使用,有着非常漂亮的图表和布局展示、功能齐全的度量仪表盘和图形编辑器,支持Graphite、zabbix、InfluxDB、Prometheus 和 OpenTSDB 等等作为数据源,还可以设置钉钉、邮件报警。


步骤1. wget 方式下载安装包:


wget https://dl.grafana.com/oss/release/grafana-8.1.2-1.x86_64.rpm

步骤2. 安装 rpm 包:


sudo yum install grafana-8.1.2-1.x86_64.rpm

步骤3. 启动 grafana:


service grafana-server start

步骤4. 访问 grafana 网址:


//初始账号密码:admin/adminhttp://公网ip:3000/

3. 监控服务器各项指标


这一步需要利用 node_exporter ,它用于服务器各项指标的监控,是一个使用 Go 语言编写的收集器。


步骤1. 下载 node_exporter:


wget https://github.com/prometheus/node_exporter/releases/download/v1.2.2/node_exporter-1.2.2.linux-amd64.tar.gz

步骤2. 解压:


tar -zxvf node_exporter-1.2.2.linux-amd64.tar.gz

步骤3. 由于文件名太长,改个名:


mv node_exporter-1.2.2.linux-amd64 node_exporter

步骤4. 赋予执行权限:


chmod 777 /data/prometheus/node_exporter/node_exporter &
5. 后台运行:

nohup ./node_exporter --web.listen-address=":9100"&
6. 检测是否运行成功:


ss -naltp |grep 9100
7. 修改 Prometheus 的配置文件,增加如下配置:


- job_name: '节点名称' static_configs: - targets: ['机器ip:9100']
8. 杀掉原 Prometheus 服务,重新启动,让配置生效:
pkill prometheus./prometheus --config.file="/data/prometheus/prometheus-2.29.1/prometheus.yml" &
9. 访问 Prometheus 网址。可以看到,已经检测到刚添加的节点已经处于 up 状态:



10. 在 grafana 中添加 prometheus 数据源




步骤11. grafana提供了面板生态,上面有一些开箱即用的模版。我们可以直接拿来用,不用自己去配置自定义面板:


https://grafana.com/grafana/dashboards?search=node_exporter


搜索 node_exporter,这里我们选第一个,拿到对应的 id:8919。




导入dashboard模版,id:8919。






到这一步面板就添加好了,进入面板就可以看到如下花里胡哨的监控大盘:



其他:除了监控服务器的各项指标,也可以监控 MySQL、ES、Redis 等等中间件。只需要去下载安装对应的收集器即可。


当然也可以整合 Spring Boot 监控 JVM 的各项指标,这里就不详细讲如何操作了。


效果如下图所示:



4. 钉钉报警


接下来我们就来讲讲:如何设置内存达到一定阀值时进行钉钉报警吧。


步骤1:找到你要接收报警的钉钉群,添加一个机器人:



步骤2: 将 webhook 的 URL 地址复制出来,在 grafana 控制台,左边栏“Alerting”模块,新建一个通知渠道。



步骤3. 新建一个自定义的 dashboard 和 panel ,进入编辑模式。



先填入计算内存百分比的 PromQL,然后配置报警规则后保存。




步骤4. 到这里警报就配置完了。开启警报后,当内存使用达到 70% 以上时就会收到钉钉机器人的报警了。



- EOF -

推荐阅读  点击标题可跳转

1、图解微服务的性能监控、压测和调优

2、Java代码中,如何监控MySQL的binlog?

3、MyBatis 版本升级引发的线上告警回顾及原理分析


看完本文有收获?请转发分享给更多人

关注「ImportNew」,提升Java技能

点赞和在看就是最大的支持❤️

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存