Grafana+Prometheus+第三方Exporter 监控系统架构
架构:
Grafana + Prometheus + 第三方Exporter
Grafana:查询数据,通过面板展示监控项,统一展示。Prometheus:配置不同的job,获取多方面监控指标数据,供Grafana查询获取展示。第三方Exporter:获取相关数据,供Prometheus获取存储。比如:node_exporter、blackbox_exporter、redis_exporter、postgres_exporter、nginx-module-vts
大概流程:
1.部署第三方Exporter,可以获取相应的指标,比如:
node_exporter可以获取系统内存,CPU,磁盘,负载等数据;blackbox_exporter:允许通过 HTTP、HTTPS、DNS、TCP、ICMP 和 gRPC 对端点进行黑盒探测。redis_exporter:获取Redis相关指标postgres_exporter:获取PostgreSQL数据库相关指标nginx-module-vts:Nginx第三方模块,编译Nginx的时候添加,可以通过接口获取Nginx相关指标,5xx请求数,200请求数,连接数等;
2.部署Prometheus,配置job,请求不同Exporter获取指标,按照时间序列数据存储
3.部署Grafana,添加Prometheus数据源,进行查询指标,展示数据,告警监控,统一面板展示所有监控项
注意:
这里仅提供一个架构大概流程的说明,详细步骤需要自己完善。
一.部署第三方Exporter
可以通过Prometheus 出口商和集成,查看获取第三方Exporter,一些常用的Exporter都在其中展示。也可以通过自己开发Exporter获取指标。
根据自己需要监控什么项目,根据对应的Exporter官方文档部署即可,常用的Exporter
比如安装node_exporter,默认监听 9100 端口
docker run -d \
--net="host" \
--pid="host" \
-v "/:/host:ro,rslave" \
quay.io/prometheus/node-exporter:latest \
--path.rootfs=/host二.部署Prometheus采集指标
在 Docker 上运行 Prometheus 非常简单docker run -p 9090:9090 prom/prometheus。这将使用示例配置启动 Prometheus,并将其公开在端口 9090 上。
根据自己的需求定制部署Prometheus,比如挂载配置文件,挂载数据存储目录,映射端口等
# 挂载配置文件
docker run \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
prom/prometheus
# 保存Prometheus数据
# Create persistent volume for your data
docker volume create prometheus-data
# Start Prometheus container
docker run \
-p 9090:9090 \
-v /path/to/prometheus.yml:/etc/prometheus/prometheus.yml \
-v prometheus-data:/prometheus \
prom/prometheus配置prometheus采集数据
prometheus.yml配置文件示例
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 监控主机信息
- job_name: 'node_exporter'
file_sd_configs:
- refresh_interval: 1m
files:
- ./conf/node.yml
# 监控docker容器
- job_name: 'cadvisor'
file_sd_configs:
- refresh_interval: 1m
files:
- ./conf/docker.yml
# 监控指定http地址状态
- job_name: 'blackbox-http'
metrics_path: /probe
params:
module: [http_2xx]
file_sd_configs:
- refresh_interval: 1m
files:
- ./conf/http.yml
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.10000.15:9115
# 通过blackbox监控tcp地址的状态
- job_name: 'blackbox-tcp'
metrics_path: /probe
params:
module: [tcp_connect]
file_sd_configs:
- refresh_interval: 1m
files:
- ./conf/tcp.yml
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 192.168.10000.15:9115
# 监控Nginx指标
- job_name: 'nginx-vts'
metrics_path: /status/format/prometheus
static_configs:
- targets: ['192.168.10000.51:12584']
# 监控Redis指标
- job_name: 'redis'
static_configs:
- targets: ['192.168.10000.15:12586','192.168.10000.100:12586']
# 监控Postgres数据库指标
- job_name: 'postgresql'
file_sd_configs:
- refresh_interval: 10s
files:
- ./conf/postgres.yml这里有两种指定后端节点的方式
1.通过file_sd_configs指定,基于文件的服务发现提供了一种更通用的方法来配置静态目标,并用作插入自定义服务发现机制的接口。
files文件格式为
- targets:
[ - '<host>' ]
labels:
[ <labelname>: <labelvalue> ... ]示例
- targets:
- http://192.168.100.10:10100
labels:
name: eureka
- targets:
- http://192.168.100.10:8080/v1/healthcheck
labels:
name: gateway2.通过static_configs指定,static_config 允许指定目标列表以及目标的通用标签集。它是在刮擦配置中指定静态目标的典型方法。
# The targets specified by the static config.
targets:
[ - '<host>' ]
# Labels assigned to all metrics scraped from the targets.
labels:
[ <labelname>: <labelvalue> ... ]三.部署Grafana进行监控
参考Grafana官方安装文档安装即可,提供多种方式
比如Docker安装
docker run -d --name=grafana -p 3000:3000 grafana/grafana-enterprise:12.0.0-ubuntu四.添加监控面板
可以通过Grafana模板库查询对应exporter和对应数据源的dashboard,进行添加和调整。
1.登录Grafana
2.添加Prometheus数据源
3.添加面板,通过查询语句查询数据
4.添加监控项,alert rule
5.配置联络点,警报策略,警报模板等