用 Prometheus + Grafana 组合拳轻松监控服务状态
前言
应该是在去年的时候,部门的老师和我提过 Zabbix 和 Prometheus ,当时没有什么监控的需求就只是大概看了一下,到了今年 6 月的时候,因为正好新增了对象存储 MinIO ,这个要想看具体状态就需要 Prometheus ,本来是想装 Zabbix 的,但是成功被它的最低配置要求劝退了😂,于是就准备上 Prometheus 咯
Prometheus 和 Grafana 安装是非常简单的,莫要害怕
安装 Prometheus
下载地址:https://prometheus.io/download/ ,生产环境建议安装 LTS
的稳定版本
下载并解压 Prometheus |
防火墙放开相关端口(默认 9090 )
浏览器访问 IP:9090/targets?search=
应当看到如下页面
如果有需要可以加认证措施如 Basic Auth ,请有需要的同学网上学习,这里不表
安装 Grafana
访问 Grafana 官网下载对应平台的包安装:https://grafana.com/grafana/download?pg=graf&platform=linux&plcmt=deploy-box-1
如有需要,可使用清华镜像源:https://mirrors.tuna.tsinghua.edu.cn/grafana/
下载并安装,设置开机自启
wget https://dl.grafana.com/enterprise/release/grafana-enterprise-10.0.3-1.x86_64.rpm |
防火墙放通相关端口(默认 3000 )
浏览器访问 IP:3000
应当看到如下页面
默认登录密码为:admin/admin
,登录后会提示修改
右上角 头像-个人资料
里面可以设置时区并选择简体中文语言
对接 Prometheus 和 Grafana
Grafana 菜单-管理-数据源-Add new data source
如下图设置,然后最下面 Save & Test
监控 MinIO
监控 MinIO 需要使用 mc
客户端不是辣个mc
需要先设置一个 alias (添加自己的 MinIO 平台,设置别名,可参照官方文档),然后确认可以看到自己的存储
PS C:\> .\mc.exe alias list |
然后即可添加 Prometheus 监控
S C:\> .\mc.exe admin prometheus generate LuckyOSS |
复制配置到 Prometheus.yml ,然后重启,就能在 target 里面看到这个配置
然后在 Grafana 里面用 ID 添加 MinIO 官方提供的仪表盘:https://grafana.com/grafana/dashboards/13502-minio-dashboard/
就能够看到非常详细的 MinIO 状态啦
(图片里面只展示了部分,想看更多不妨自己搭一套试试康,我的仪表盘很大你忍一下)
监控 PVE
Prometheus 的话,基本上就是本体加上一堆 Exporter ,PVE 的话,我们需要这个:https://github.com/prometheus-pve/prometheus-pve-exporter ,Python 写的,直接用 pip 装上即可
python3 -m pip install prometheus-pve-exporter |
在 PVE 里面,我们创建一个有审计权限的账号(角色:PVEAuditor),认证领域:pve(和 root 的 pam 是不一样的)
pve-exporter 的 yml 这么写
default: |
Prometheus 里面的 yml 这么写
# PVE exporter. |
相应的仪表盘是这个:https://grafana.com/grafana/dashboards/10347-proxmox-via-prometheus/
(同样,图片里面只展示了部分,想看更多不妨自己搭一套试试康,我的仪表盘很大你忍一下)
奇淫技巧:用 SQL 生成监控指标
对于开发时没有考虑到做 Exporter ,当然也要办法在不改动代码的前提下把指标监控起来,就是这个,锵锵!
https://github.com/albertodonato/query-exporter
只要我们有数据库就可以写 SQL 去导数据作为监控指标
安装
演示采用 Docker 安装,首先安装 Docker 环境,同时使用了我写的 NoaHandler 综合业务网关,各位可以准备自己的程序来做测试
yum install -y docker |
准备配置文件 config.yaml
mkdir -p /opt/query-exporter/ && cd /opt/query-exporter/ |
该 YAML 文件的详细讲解如下
# 数据库字段 |
配置完成后将服务跑起来
docker run --restart=always -p 9560:9560/tcp -v "/opt/query-exporter/config.yaml:/config.yaml" -it adonato/query-exporter:latest |
观察输出结果,没有问题可 Ctrl+C ,也可在浏览器观察,打开 IP:9560/metrics
token_number{app="noaHandler",database="noa",region="Dev"} 4.0 |
能够获取到当前数据库中通用业务流的 token 数量为4(截图时已经搭建完成并创建了4个 token)
对接 Prometheus
修改 Prometheus 的配置文件 prometheus.yml 并重启 Prometheus
该部分的配置如下:
- job_name: "query-exporter" |
之后可以在 Prometheus 的 Target 下看到 query-exporter 的 Endpoint
验证:在 Grafana 创建仪表盘并观察监控情况
在 Grafana 创建新仪表盘,Metric 指标选择刚刚创建的 token_number
,job 选择 query-exporter
唯一选出该指标
而后执行 ./noaHandler gt normal
生成 token ,我们能够观察 token_number
指标不断增加,我们成功的采集到了该项业务指标!如果需要告警则配置 Grafana 的警告规则,如邮件告警等