前言

项目中发现现场的运维没有监控措施,对于现场出的问题感知度比较低,因此决定搭建一套监控体系,提供给运维人员使用;同时因为项目是物联网设备采集相关,业务上也可以同步进行使用,对比了zabbix与prometheus,基于业务场景考虑还是选择后者(这块后续也会说),此文从最开始的搭建开始,一步一步逐步引导到业务上的设备监控,前期也参考了很多文章,因此有雷同的地方勿怪

prometheus告警生命周期/流程简单介绍

prometheus定时采集指标数据
prometheus定时计算是否指标触发规则
触发规则的指标告警状态转为pending,当持续时间超过for指定的时间后,转换为firing,并将告警发送到alertmanager
alertmanager收到告警后,等待一段分组时间,到时间后发送告警;如果该分组又持续收到了告警,会等待一个分组告警间隔时间后,再次为该分组发送告警
如果该告警一直存在,alertmanager会按照重发间隔来重复发送告警

环境搭建篇

Docker 搭建环境

使用docker搭建环境比较简单,配置好docker后运行命令即可

prometheus 启动

prometheus有参数配置,根据业务的场景注意启动参数的使用

docker run -d -p 19090:9090 --name prom -v /data/prometheus/data:/data prom/prometheus --config.file=/data/prometheus.yml
#带参数启动
docker run -d -p 29090:9090 --name base_prom_2 -v /data/base_prometheus/data:/data  prom/prometheus --config.file=/data/prometheus.yml --web.enable-lifecycle --storage.tsdb.retention=90d --rules.alert.for-outage-tolerance=1h

# --restart=always 还可以设置自动重启容器
#  -d  --detach=false, 指定容器运行于前台还是后台,默认为false
# --net 网络模式,host网络互通模式
# --storage.tsdb.retention tsdb数据保存天数
# rules.alert.for-outage-tolerance 这个标志指定了 Prometheus 对宕机的容忍时间。所以如果 Prometheus 宕机时间超过了这个 flag 中设置的时间,那么报警的状态就不会恢复。所以一定要根据你的需要改变 flag 的值,或者让 Prometheus 尽快起来!
# --web.enable-lifecycle  热更新,用于后续配置过规则变更后不用重启服务
# -v 给容器挂载存储卷,挂载到容器的某个目录(宿主机目录:/docker目录),注意本地需要要该文件
# 解决docker中时区与宿主机不一致问题
cp /usr/share/zoneinfo/Asia/Shanghai base_prom_2:/etc/localtime

grafana

grafana启动比较简单,没有什么特殊的配置

docker run -d -p 3000:3000 grafana/grafana

liunx安装prometheus

创建 Prometheus 用户

$ useradd -m -s /bin/false prometheus

创建配置目录

$ mkdir /etc/prometheus
$ mkdir /var/lib/prometheus
$ chown prometheus:prometheus /var/lib/prometheus/

解压文件

$ tar -zxpvf prometheus-2.39.1.linux-amd64.tar.gz
$ cd prometheus-2.39.1.linux-amd64
$ cp prometheus  /usr/local/bin
$ cp promtool  /usr/local/bin
$ cp prometheus.yml /etc/prometheus/

开放 Prometheus 端口

$ firewall-cmd --add-port=9090/tcp --permanent
$ firewall-cmd --reload

创建 Prometheus 服务,创建服务文件,以便以服务方式运行 Prometheus

$ vi /etc/systemd/system/prometheus.service

[Unit]
Description=Prometheus Time Series Collection and Processing Server
Wants=network-online.target
After=network-online.target

[Service]
User=prometheus
Group=prometheus
Type=simple

ExecStart=/usr/local/bin/prometheus \
    --config.file /etc/prometheus/prometheus.yml \
    --storage.tsdb.path /var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries \
    --web.enable-lifecycle --storage.tsdb.retention=90d \
    --rules.alert.for-outage-tolerance=1h


[Install]
WantedBy=multi-user.target

启动服务

$ systemctl daemon-reload
$ systemctl start prometheus
$ systemctl enable prometheus
$ systemctl status prometheus

netstat -tunlp |grep 9090

liunx离线安装grafana

离线下载

官网下载rpm包,这里我下载的版本是grafana-9.3.2.rpm

# yum install --downloadonly --downloaddir=/home/rpm/grafana-9.3.2-1.x86_64.rpm  
# rpm -ivh grafana-9.3.2-1.x86_64.rpm   //查看rpm依赖包

下载依赖包fontconfig、urw-fonts,和grafana-9.3.2-1.x86_64.rpm放入一个文件夹,提供离线安装使用

#yum install --downloadonly --downloaddir=/home/rpm/ fontconfig
#yum install --downloadonly --downloaddir=/home/rpm/ urw-fonts

离线安装

1) 上传grafana离线包,上传离线包到/usr/local/grafana-rpm目录

# mkdir -p /usr/local/grafana-rpm

2) 安装

cd /usr/local/grafana-rpm/
yum clean all ; yum localinstall –y --skip-broken ./*

grafana 查询命令修改label_docker

grafana-server -v //查看版本

grafana 查询命令修改label_docker_02

配置文件

vim /etc/grafana/grafana.ini
grep -n '^'[[a-Z] /etc/grafana/grafana.ini  //查看配置内容方便
systemctl restart grafana-server   //重启
systemctl enable grafana-server   //加入开机启动
systemctl status grafana-server    //查看启动状态

**浏览器访问:http://XXX:3000,**默认账号/密码:admin/admin

免登陆查看配置

免登录配置是为了方便grafana一些图表可以给所有人员直接查看,不需要进行登录,方便现场运维给开发人员使用

在Grafana的配置文件 /etc/grafana/grafana.ini 中,找到 [auth.anonymous] 配置块,将其下的匿名访问控制 enabled 设置为 true,组织权限设置为 Viewer。

[auth.anonymous]
# enable anonymous access
enabled = true
# specify organization name that should be used for unauthenticated users
org_name = Main Org.

# specify role for unauthenticated users
org_role = Viewer

[auth.basic]
enabled = false