前言
项目中发现现场的运维没有监控措施,对于现场出的问题感知度比较低,因此决定搭建一套监控体系,提供给运维人员使用;同时因为项目是物联网设备采集相关,业务上也可以同步进行使用,对比了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-server -v //查看版本
配置文件
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