需求背景
在日常工作中,生产环境上面的服务一般都会有专门的预警,这样可以在服务异常的时候,提前感知,这个很重要,不然服务挂逼了,你还在睡大觉,怎么赚钱。
最近我们的韭盾公众号的流量上来了,因为比较干货而且在试运营阶段,保证服务的稳定运行成了重中之重,于是干脆整一个预警系统,保证用户的良好体验。以下无偿分享一下一些容易踩坑的地方,便于后续有搞自己事情的铁子们避坑。
本篇篇幅较长,但是非常有用。可以三连 + 收藏。
1、安装grafana的镜像
docker pull grafana/grafana:9.3.2
**注意:**这里的版本号根据你自己的需要下载即可,如果需要下载最新版本,使用如下命令
docker pull grafana/grafana
2、安装prometheus
依次执行如下命令:
docker pull prom/node-exporter;
docker pull prom/prometheus;
3、查看是否安装成功
docker images
4、启动 prom/node-exporter
docker run -d -p 9100:9100 -v "/proc:/host/proc:ro" -v "/sys:/host/sys:ro" -v "/:/rootfs:ro" prom/node-exporter
温馨提醒: 在命令尾部的prom/node-exporter代表镜像名称,也可以使用镜像ID,如果有不清楚的,可以先熟悉一下docker运行容器的相关命令,有的朋友是刚刚接触或者对docker相关的命令不熟悉,可以先自行查阅。
查看9100端口是否正常被监听
netstat -pantu | grep 9100
如图所示,表示服务正常启动,也可以通过如下命令查询docker容器是否启动
通过浏览器网页访问查看
http://IP:9100/metrics
**注意:**如果你用的是云服务器的话,这里的IP用公网IP,然后云服务器需要进行防火墙开放9100端口,同时安全组规则也要开放9100端口,这两个地方开放后,正常情况下你可以看到如下的效果:
5、编辑prometheus的配置文件
**说明:**进行这一步的目的是为了prometheus可以收集到服务的数据,比如Linux主机、SpringBoot服务实例等等,以下是大致的配置内容,先配置基础的linux和prometheus的信息
# 1、创建宿主机的文件目录
mkdir /opt/prometheus
# 2、进入目录
cd /opt/prometheus/
# 3、编辑文件内容
vim prometheus.yml
# 4、配置如下内容
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
- job_name: linux
static_configs:
- targets: ['IP:9100']
labels:
instance: localhost
注意:代码块中的IP,如果你用的是云服务器,直接用公网IP即可
参数说明:
● scrape_interval:表示 Prometheus 将定期(每隔 60 秒)从目标(例如应用程序、数据库、服务器等)获取指标数据。这是一个全局设置,适用于所有被监控的目标。你可以根据需要调整此值。
● evaluation_interval:表示 Prometheus 将每隔 60 秒评估一次警报规则。警报规则定义了在满足特定条件时触发警报的条件。这个设置也是全局的,影响所有警报规则。
6、运行prom/node-prometheus
docker run -d -p 9090:9090 -v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
**说明:**这里运行容器的过程,-v /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml 的命令主要是为了把容器内的文件映射到宿主机目录,这样我们编辑配置文件的时候,就不需要进入到容器内部去编辑,这一点很重要。
拓展
如果没有映射的话,要进入宿主机,命令如下, demo如下:
docker exec -it 容器ID /bin/bash,
**注意事项:**大多数时候,容器内很多命令都无法使用,在容器内使用vi的命令,会显示权限不足,这时候需要以管理员的身份进入容器,命令如下:
docker exec -it --user root 容器ID /bin/bash
这样你就可以正常地编辑并且保存你的配置。
7、打开浏览器预览效果
访问 : http:// 你的IP :9090/targets, 会出现如下的页面,因为我这边已经接入了SpringBoot服务,所以会显示服务,这个你们可以忽略。
8、启动 grafana
(1)创建宿主机映射文件
mkdir /opt/grafana-storage
(2)设置文件权限
chmod 777 -R /opt/grafana-storage
(3)运行grafana
docker run -d --restart unless-stopped -p 3000:3000 --name=grafana-9.3.2 -v /opt/grafana-storage:/var/lib/grafana grafana/grafana:9.3.2
参数解释
9、访问grafana网页
打开浏览器:http://你的IP:3000, 出现以下界面就安装成功了
**温馨提醒:**grafana的初始账号密码:admin/admin ,默认密码登录则提示修改密码 可以skip。
10、Grafana配置监控面板
(1)选择左下角的添加数据源
(2)添加数据源
(3)选择你需要的数据源,比如我这里选择普罗米修斯
(4)输入URL:http://你的IP:9090 ,其他暂时都可以不用填
填写ip地址后,拉到最下面点击:sava&test 。
11、下载可视化模板
**说明:**grafana是一个展示面板,数据收集是由prometheus负责收集。这个关系要先梳理清楚。grafana官网提供了很多的展示模板,你根据你自己的需求先去官网下载对应的模板,这里对于新手而言比较陌生,下面讲一下大致的流程:
(1)模板官网地址
https://grafana.com/grafana/dashboards/
(2)下载模板
在grafana中导入模板
选择下载好的模板后,点击确定即可
13、得到监控页面如下:
自此,你就可以看到自己的服务器概况了。
14、配置邮件提醒
我们接入监控的主要目的,还是为了在系统异常的时候能够及时或者提前发出通知,grafana的预警方式有几种,像企业微信机器人预警,飞书,钉钉以及邮件提醒都可以支持,我这里只演示一下邮件的配置。
上面我们已经把grafana服务跑起来了,接下来需要在grafana中配置邮件的相关信息。
(1)找到配置文件
注意:用管理员身份登录
docker exec -it --user root 容器ID /bin/bash
使用vi命令编辑即可,找到SMTP关键词。
配置完之后,保存,然后重启一下grafana容器,这样邮件配置就配置好了,下面演示一下在grafana面板中如何配置,进行邮件的提醒。
参数解释
enabled = true #默认是false
host = smtp.mxhichina.com:465 #smtp服务器的地址和端口,我用的是阿里云的企业邮箱。465加密端口25非加密端口
user = test@xxx.com #你登录邮箱的账号
password = xxxxxxx #你邮箱账号的密码
from_address = test@xxx.com #发邮件的账号
from_name = Grafana #自定义的名字
ehlo_identity = dashboard.example.com #无关紧要的一个标示
注意:host后面一定要带上端口号!!!
注意:host后面一定要带上端口号!!!
注意:host后面一定要带上端口号!!!
重要的事情说三遍
15、grafana配置邮件通知
(1)首先配置具体的通知方式
(2)填写配置信息
(3)点击test看看配置是否生效
收到邮件通知,表示这个配置是对的,后续如果没有收到邮件,只有一个原因,你的预警规则没有触发你的设置条件。
16、配置SpringBoot节点信息
打开前面配置的prometheus.yml文件,添加SpringBoot服务的信息,按照我的Demo即可,注意job_name和targets要配置对,targets中的IP是公网的IP
**注意:**不知道SpringBoot如何接入prometheus的可以私信留言或者自行百度即可,这里篇幅太长就不赘述了,只讲比较容易踩坑的地方。
17、配置邮件对应的服务
我们监控的目的,很多时候不同触发同一个邮件通知,一般多个服务会配置不同的邮件通知,这里简单理解就是这个意思,比如CPU飙高,我选择配置1,服务宕机,选择配置2,这个触发预警规则的时候,他会自动发送消息给对应的邮箱。
18、配置具体的预警规则
19、设置完成,达到预警规则的时候就会发送邮件
说明:像我这里firing就是表示会发送邮件的状态,这里的state一般有三种状态
(1)normal: 状态正常,不会触发预警
(2)pending: 触发了规则,进行轮询,如果一段时间后,还是会触发规则,则状态会变成firing
(3) firing : 触发规则,发送邮件
写在最后
以上就是今天分享的内容,干货满满。篇幅较长,要想弄好需要花点时间,耐心阅读。分享不易,不要白嫖哦,帮忙一键三连,持续关注“安前码后”公众号,更多干货持续输出中。下期再见。