Prometheus+Grafana联邦监控系统

简介

Prometheus 是由 SoundCloud 开源监控告警解决方案,从 2012 年开始编写代码,再到 2015 年 github 上开源以来,已经吸引了 9k+ 关注,以及很多大公司的使用;2016 年 Prometheus 成为继 k8s 后,第二名 CNCF(Cloud Native Computing Foundation) 成员。

作为新一代开源解决方案,很多理念与 Google SRE 运维之道不谋而合。

功能

  • 多维 数据模型(时序由 metric 名字和 k/v 的 labels 构成)。
  • 灵活的查询语句(PromQL)。
  • 无依赖存储,支持 local 和 remote 不同模型。
  • 采用 http 协议,使用 pull 模式,拉取数据,简单易懂。
  • 监控目标,可以采用服务发现或静态配置的方式。
  • 支持多种统计数据模型,图形化友好

核心组件

  • Prometheus Server, 主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 配置管理。
  • client libraries,用于对接 Prometheus Server, 可以查询和上报数据。
  • 各种汇报数据的 exporters ,例如汇报机器数据的 node_exporter, 汇报 MongoDB 信息的 MongoDB exporter 等等。
  • 用于告警通知管理的 alertmanager

官方架构图

官方就是透明png,我也不知道为什么

大致使用逻辑如下:

  1. Prometheus server 定期从静态配置的 targets 或者服务发现的 targets 拉取数据。
  2. 当新拉取的数据大于配置内存缓存区的时候,Prometheus 会将数据持久化到磁盘(如果使用 remote storage 将持久化到云端)。
  3. Prometheus 可以配置 rules,然后定时查询数据,当条件触发的时候,会将 alert 推送到配置的 Alertmanager。
  4. Alertmanager 收到警告的时候,可以根据配置,聚合,去重,降噪,最后发送警告。
  5. 可以使用 API, Prometheus Console 或者 Grafana 查询和聚合数据。

特点

  • Prometheus 属于一站式监控告警平台,依赖少,功能齐全。
  • Prometheus 支持对云或容器的监控,其他系统主要对主机监控。
  • Prometheus 数据查询语句表现力更强大,内置更强大的统计函数。
  • Prometheus 在数据存储扩展性以及持久性上没有 InfluxDB,OpenTSDB,Sensu 好。

项目拓扑

image-20220617220106291

各个组件介绍:

  • 联邦集群: 由master定期向各个节点拉取数据,节点包括多个不同局域网的prometheus.
  • prometheus节点,各节点根据配置文件,定期向监控的target(exporters)pull监控数据
  • alertmanager作为统一的告警处理点,当prometheus拉取到的数据触发了rules配置的规则,则将信息发送给alertmanager,由alertmanager负责处理告警信息,包括通过什么发送告警,是否分组,是否静默,如何抑制等.
  • prom-wx/prom-dingding: 第三方告警发送程序,本项目主要通过这两个程序发送告警,主要发送微信,根据项目需求,在本来的源代码上增加了一些修改,实现根据项目分发给各个管理员,而dingding则是专门监控prom-wx,当prom-wx由于各种原因down掉,告警则通过prom-dingding发送给管理员.prom-wx有代码修改,prom-dingding则是直接使用原作者的代码.两者会在下文有详细说明.
  • blackbox-exporter: 网络探测用的exporter,可以探测http/https/icmp等多种网络协议,目前在内网和阿里云上各部署一个节点.
  • blackupjob-exporter: 使用prometheus官网python客户端包开发的exporter,主要功能是定时读取备份工作结果文件,获取(0/1)成功与否的结果供prometheus获取.
  • process-exporter: 进程监控用的exporter,主要作用是监控prom-wx的进程是否存活.
  • grafana: 通过promql获取prometheus数据,实现可视化.

以上各个组件都将在下文根据项目实际情况逐一讲解

Prometheus Server

安装启动

主程序

开箱即用

官网下载最新版的prometheus tar包,解压,即可使用

二进制可执行文件: prometheus

帮助说明: ./prometheus -h

启动方式: 可使用nohup &的方式放置后台运行

常用选项参数:

  • –storage.tsdb.path=/path/to/somewhere : 数据存放位置,默认是./data

  • –web.enable-lifecycle: 开启接受web请求热重启功能,开启后,可以通过以下命令让prometheus重新加载配置文件

    1
    curl -X POST http://prometheus-server-ip:9090/-/reload
  • –config.file=: 指定配置文件,默认为./prometheus.yml

  • –storage.tsdb.retention.time=30d: 数据保存时间

  • –web.enable-admin-api: 开启管理api接口,开启后可以通过api删除过时的时序数据等管理操作

  • –web.external-url=http://…: 指定prometheus-server的url,api的调用就根据这个指定的url来.

配置检查工具

随包附送的配置文件检查工具: promtool

1
./promtool check config ./prometheus.yml

UI界面

访问http://prome-server-ip:9090即可看到prometheus server的图形界面,通过该图形界面可以执行查询数据,查看配置,查看规则,查看targets等操作

图片源自网络

PromQL

PromQL (Prometheus Query Language) 是 Prometheus 自己开发的数据查询 DSL 语言,语言表现力非常丰富,内置函数很多,在日常数据可视化以及rule 告警中都会使用到它。要使用它,首先要理解prometheus的数据格式:

Prometheus 存储的是时序数据,而它的时序是由名字和一组标签构成的.

监控的时序数据中名字,一般就是exporter中定义的metrics,类似于zabbix的监控项概念.而标签则是由系统生成的默认表情+用户在配置文件中定义的标签组成.例如,通过prometheus的webUI查到的某条时序数据类似如下显示:

图片源自网络

其中,up是exporter定义的metrics名,{}里面的就是用户定义的所有标签,用户可以通过metrics和标签筛选想要查询的数据.

更多promql使用方式以及函数等使用,请参考:

promql是prometheus使用中的核心技能,必须加深理解,否则下面的操作将难以开展

配置文件说明

主配置文件prometheus.yml

全局配置

全局配置包含以下4个属性,均有默认值

  • scrape_interval: 拉取 targets 的默认时间间隔。默认15s
  • scrape_timeout: 拉取一个 target 的超时时间。默认10s
  • evaluation_interval: 执行 rules 的时间间隔。默认15s
  • external_labels: 额外的标签,会添加到拉取的数据并存到数据库中。默认为空,本属性用于联邦集群拉取子节点信息时,可统一往所有数据中加上一个自定义标签.

本项目中联邦主的全局配置如下

1
2
3
global:
scrape_interval: 30s
evaluation_interval: 15s

本项目中联邦节点的全局配置如下(内网节点做例子)

1
2
3
4
5
global:
scrape_interval: 15s
evaluation_interval: 15s
external_labels:
zone: '内网'

告警配置

本块配置主要用于指向alertmanager的地址

1
2
3
4
5
alerting:
alertmanagers:
- static_configs:
- targets:
- 10.18.39.208:9093

rules规则配置

本块配置主要用于指向自定义的规则配置文件,可以使用通配符

1
2
3
4
rule_files:
- ./rules/*.yml
- ./rules/linux-rules/*.yml
- ./rules/windows-rules/*.yml

具体规则配置文件范例如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 规则可以分组,下面的-name定义组名
groups:
- name: RedisAlert
# rules关键字表示下面定义详细规则
rules:
#告警名
- alert: Redis is down
#告警表达式基于promql
expr: redis_up != 1
#for表示满足表达式持续多长时间就告警
for: 1m
#此处的lablels是告警时候会添加上的标签,跟targets中的标签不冲突
labels:
zone: 内网
type: redis-alert
severity: critical
## 下面就是告警时候要发送的说明文字,summary标题,description详细描述
annotations:
# {{ $labels.xxx }}是模版变量,可以通过它调用实例的标签的值,
# 另外{{ $value }}可以调用表达式获取到的值
summary: "redis实例 {{ $labels.instance }} 停止服务"
description: "redis实例 {{ $labels.instance }} 停止服务"

- alert: Redis create connections too fast
expr: irate(redis_connections_received_total[1m]) > 10
for: 1m
labels:
zone: 内网
type: redis-alert
severity: warning
annotations:
summary: "redis实例 {{ $labels.instance }} 单位时间内新建连接数太过频繁"
description: "redis实例 {{ $labels.instance }} 单位时间内新建连接数太过频繁"

监控对象配置

本块配置即指明prometheus需要监控的具体目标(target),以job归类,均属于scrape_config块,包含的参数有:

  • job_name:任务名称
  • honor_labels: 用于解决拉取数据标签有冲突,当设置为 true, 以拉取数据为准,否则以服务配置为准
  • params:数据拉取访问时带的请求参数
  • scrape_interval: 拉取时间间隔
  • scrape_timeout: 拉取超时时间
  • metrics_path: 拉取节点的 metric 路径
  • scheme: 拉取数据访问协议
  • sample_limit: 存储的数据标签个数限制,如果超过限制,该数据将被忽略,不入存储;默认值为0,表示没有限制
  • relabel_configs: 拉取数据重置标签配置
  • metric_relabel_configs:metric 重置标签配置

以上是静态配置的参数,例子如下

1
2
3
4
5
6
7
scrape_configs:
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
- job_name: 'node'
static_configs:
- targets: ['localhost:9100']

本项目实际生产中主要使用prometheus的文件发现功能来配置监控对象,例子如下:

1
2
3
4
5
6
7
- job_name: 'file_ds'
file_sd_configs:
# refresh_interval是指每隔多长时间重新读取配置文件内容,默认是5m
- refresh_interval: 1m
files:
# 此处指定监控目标配置文件路径,支持通配符
- ./conf.d/ds/*.yml

指定的配置文件支持json和yaml的格式,项目使用的均为yaml格式,例子如下:

1
2
3
4
5
6
7
8
9
10
11
12
# 本项目约定必须要有环境和管理员两个标签(env/admin),实例名instance约定为: targets_项目名英文缩写大写_{用途描述|组件描述}
- targets: ['x.x.x.x:9100']
labels:
env: "开发环境"
admin: "陈xx"
instance: "x.x.x.x:9100_xx_开发环境服务器"

- targets: ['x.x.x.x:9100']
labels:
env: "联调环境"
admin: "陈xx"
instance: "x.x.x.x:9100_xx_单点登录_tomcat"

特殊配置项目

某些exporter需要独特的配置,例如blackbox-expoter等,但是都符合prometheus的配置语法格式

relable机制

prometheus具有标签重写机制,称为relable.默认情况下,当Prometheus加载Target实例完成后,这些Target时候都会包含一些默认的标签:

  • __address__ : 当前target实例的访问地址:
  • _scheme_ : 采集目标服务访问地址的http scheme, HTTP或HTTPS
  • _metrics_path_ : 采集目标服务反问地址的访问路径
  • __param_: 采集任务目标服务中包含的请求参数

以上是静态采集目标的默认标签,文件发现的默认标签,以及不同版本prometheus的默认标签也许会有出入,但是原理不变.我们可以利用relabel机制,将某个job下的所有metrics的某个标签改成自己想要的,或者增加不存在的标签.以blackbox的配置作例子说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
- job_name: 'Http_Post_Monitor'
metrics_path: /probe
# 这是blackbox需要的参数
params:
module: [http_post_2xx]
static_configs:
- targets:
# targets下可以写多个监控对象
- http://xxxxxx.cn
- http://xxxxxx.cn
# 每个targets下可以自定义labels,生效范围为本targets下所有对象
labels:
job: 财务核算系统_FC
admin: 何德滨
- targets:
- https://xxxxxxx.com
# relable_configs及使用relabel机制的配置块,生效范围为本job的所有targets
relabel_configs:
# 以下两行表示将__address__源标签的值赋给目标标签__param_target,以下同理
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
# target_label+replacement可以实现标签重写或者新增标签
- target_label: __address__
replacement: 127.0.0.1:9115
# 标签不存在就会自动创建
- target_label: env
replacement: 生产环境

联邦集群配置

联邦主节点通过pull方式定期拉取子节点的监控信息,配置与静态配置类似,例子如下

1
2
3
4
5
6
7
8
9
10
- job_name: '阿里云gitlab-federate'
honor_labels: true
metrics_path: '/federate'
params:
# match支持正则,表示只拉取符合正则的metric
'match[]':
- '{job=~".+"}'
static_configs:
- targets:
- 'x.x.x.x:9090'

Recoding Rules机制

通过PromQL可以实时对Prometheus中采集到的样本数据进行查询,聚合以及其它各种运算操作。而在某些PromQL较为复杂且计算量较大时,直接使用PromQL可能会导致Prometheus响应超时的情况。这时需要一种能够类似于后台批处理的机制能够在后台完成这些复杂运算的计算,对于使用者而言只需要查询这些运算结果即可。Prometheus通过Recoding Rule规则支持这种后台计算的方式,可以实现对复杂查询的性能优化,提高查询效率。

recoding rules的配置方式与一般rules的方式一致,在主配置文件中通过rule_files:指定yaml格式的文本文件即可读取,范例如下:

1
2
3
4
5
groups:
- name: example
rules:
- record: job:http_inprogress_requests:sum
expr: sum(http_inprogress_requests) by (job)

以上配置相当于把http_inprogress_requests这个metrics做根据job标签的sum聚合操作后的得到的序列,另外建立一条新的序列,在做数据量大的统计或操作时,这个机制可以有效减低系统资源消耗.

alertmanager

安装启动

同样开箱即用

官网下载最新版的alertmanager tar包,解压,即可使用

二进制可执行文件: alertmanager

帮助说明: ./alertmanager -h

启动方式: 可使用nohup &的方式放置后台运行

alertmanager也支持不少参数,但是都用默认值即可

WebUI界面

启动后,默认监听9093端口,访问它即可看到webui

图片源自网络

配置文件说明

主配置文件alertmanager.yml

全局配置

用于定义一些全局的公共参数,如全局的SMTP配置,Slack配置等内容,本项目告警均使用webhook发送,因此全局配置只有如下一行:

1
2
3
global:
#定义了当Alertmanager持续多长时间未接收到告警后标记告警状态为resolved(已解决)
resolve_timeout: 2m

告警路由

根据标签匹配,确定当前告警应该如何处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
route:
receiver: 'to-wx'
#按标签alertname和instance分组
group_by: ['alertname', 'instance']
#告警重复时间间隔
repeat_interval: 8h
#组等待时间
group_wait: 30s
group_interval: 5m
#具体告警路由,以下配置意思是符合match中定义的标签的告警,就发送给名为to-dingding的接收人
routes:
- receiver: 'to-dingding'
match:
instance: "x.x.x.x:9256_processes-exporter"

接收人

接收人是一个抽象的概念,它可以是一个邮箱也可以是微信,Slack或者Webhook等,接收人一般配合告警路由使用,本项目均使用webhook作为接收人

1
2
3
4
5
6
7
8
9
10
receivers:
- name: 'to-wx'
webhook_configs:
- url: http://127.0.0.1:5000/alert_to_wechat
#以下参数表示是否发送恢复通知
send_resolved: true
- name: 'to-dingding'
webhook_configs:
- url: http://x.x.x.x:8060/dingtalk/ops_dingding/send
send_resolved: true

抑制规则

当某个prometheus子节点发生故障,会引发山洪/雪崩效应,子节点下的所有targets也会一并告警,合理配置抑制规则,可以避免这类情况

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
inhibit_rules:
- source_match:
level: 'critical'
target_match:
level: 'warning'
equal: ['alertname', 'instance']

- source_match:
alertname: nodeAliveAlert
instance: 10.18.40.34:9090
target_match:
zone: 内网

- source_match:
alertname: nodeAliveAlert
instance: 10.19.3.88:9090
target_match:
zone: 阿里云

说明:当已经发送的告警通知匹配到source_match规则,当有新的告警规则如果满足target_match和target_match_re或者定义的匹配规则,并且以发送的告警与新产生的告警中equal定义的标签完全相同,则启动抑制机制,新的告警不会发送。

Grafana

安装启动

参考官网

启动管理

1
systemctl {status|start|stop} grafana-server

安装插件

本项目用到两个插件,一个是node-exporter的饼图插件grafana-piechart-panel,还有一个k8s集群的kubernetes-app

1
2
grafana-cli plugins install grafana-piechart-panel
grafana-cli plugins install kubernetes-app

日常操作

都是图形界面操作,请参考官网或自行google

prom-wx

日常管理

github上的第三方项目,用于为alertmanager提供webhook,将告警发送到微信工作号,提供翻译,格式化文本等功能,源项目地址:simanchou/prometheus_alert_wechat

根据项目需求,在源代码的基础上进行修改,增加了日志,根据项目发送对应负责人,输出格式修改等功能添加.

组件部署在联邦主节点,路径如下:

1
/prometheus/prometheus_alert_wechat

默认监听5000端口,编写了启动和停止脚本,分别为组件路径下的run.sh和stop.sh.

1
2
3
4
5
6
7
# 手动启动,先进入虚拟环境,先启动receiver再启动sender
source ./venv/bin/activate
python receiver.py
python sender.py
# 脚本启动or停止,无需进入虚拟环境,直接执行脚本
./run.sh
./stop.sh

运行环境: python3.6.8,虚拟环境路径:

1
/prometheus/prometheus_alert_wechat/venv

正常情况下可以用以下命令grep出两个python进程,一个为sender.py,一个为receiver.py

1
ps -ef | grep python

配置文件

以下为配置文件说明: /prometheus/prometheus_alert_wechat/prom_alert_wechat.conf,由于服务器在内网,url通过nginx正向代理实现转发.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
# 请正确填写如下各项信息,如还没有注册企业微信将无法使用本程序
# 关于企业微信开发文档请参考http://qydev.weixin.qq.com/wiki/index.php
# 或自行搜索相关信息
[weixin]
# 获取token的url
token_url = http://172.18.4.138:8888
# 发送消息的url
send_msg_url = http://172.18.4.138:8888/send
# 企业号中的企业id。
corpid = xxxxxxxxxx
# 企业号中的应用secret。
secret = xxxxxxxxxxxxx
# 企业号中的应用id。
agentid = 1000021
# 企业号中的部门id,群发时使用。
toparty =
# 企业号中的用户帐号(消息接收者,多个接收者用‘|’分隔,最多支持1000个)。特殊情况:指定为@all,则向该企业应用的全部成员发送。
# 等号左边是自定义的项目名,右边是该项目对应的接收人员,接收人员填eip账号id,|分割。
# 如果告警中的项目不存在本配置中,默认发送所有成员ALL。
[jobs]
#这一行请勿更改
ALL = ex_panwj3
#项目名 = 接收人
prometheus模块_modules = linzj3|ex_luks|ex_panwj3
Icmp_Gateway = ex_luks
新成本系统_NCS = caolei5
统一报表平台_URP = zengxc4
全面预算系统_CBS = chenda
...

[mq]
host = 127.0.0.1
port = 5672
user = admin
password = xxxxxx
heartbeat_interval = 300

[webserver]
# 绑定主机IP
host = 0.0.0.0
# 监听端口
port = 5000
# 用于请求的uri,配置到Alertmanager的配置文件中的web_hook选项
uri = /alert_to_wechat

[lang-cn]
# 如果收到告警消息内容中冒号左边有没翻译的英文,按下面的格式添加即可实现翻译
status = 状态
alertname = 标题
env = 环境
...

rabbitmq

该组件会使用rabbitmq作为信息队列,rabbitmq需要自行安装配置,配置好后信息填写到上文的配置文件中的[mq]配置块内

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
# 下载rpm包
wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm
# 安装依赖
yum -y install erlang
erl --version
yum -y install socat
# 安装时注意rabbitmq和erlang相互会有版本要求
# 安装rpm
rpm -Uvh rabbitmq-server-3.6.10-1.el7.noarch.rpm
# 管理
systemctl {status|stop|start|enable} rabbitmq-server
# 启动webUI,默认端口15672
rabbitmq-plugins enable rabbitmq_management

日常管理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#添加用户
sudo rabbitmqctl add_user admin pwd
#设置用户角色
sudo rabbitmqctl set_user_tags admin administrator
#tag(administrator,monitoring,policymaker,management)
#设置用户权限(接受来自所有Host的所有操作)
sudo rabbitmqctl set_permissions -p "/" admin '.*' '.*' '.*'
#查看用户权限
sudo rabbitmqctl list_user_permissions admin
#查看当前用户列表
rabbitmqctl list_users
#列出当前队列
rabbitmqctl list_queues
#清空队列,需要重新创建用户账号
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

另外,建议删除guest账号,可以使用webUI图形界面操作,也可命令行.

prom-dingding

由于项目初期,prom-wx组件修改代码后经常出现不稳定现场,于是额外使用process-exporter监控peom-wx,该告警则通过prom-dingding作为发送的webhook,项目后期prom-wx已经足够稳定,保留该组件只是为了以防万一.

项目地址: timonwong/prometheus-webhook-dingtalk

同样部署联邦主节点10.18.39.208,默认监听端口8060

1
/prometheus/prometheus-webhook-dingtalk-0.3.0

启动命令

下文中的url为钉钉机器人的webhook地址,由于在内网,所以做了转发

1
2
3
4
5
# 命令行启动
./prometheus-webhook-dingtalk --ding.profile=ops_dingding=http://172.18.4.138:8888/dingding
# 脚本启动
./run.sh
# 关闭组件,直接kill进程

Exporters

下面列举介绍本项目用到的一些配置部署可能有点特殊的exporters

blackupjob-exporter

简介

由于项目需求,需要额外开发一个exporter,定时读取备份任务结果输出文件,0=成功,1=失败,于是使用prometheus官方python-sdk做开发,每15s读一次结果输出文件,供prometheus捉取.

sdk地址: prometheus/client_python

组件部署在10.18.50.173,监听端口9111,运行环境python3.6.8,组件路径:

1
/prometheus/diy-exporter.py

运行

1
2
source /prometheus/py36-venv/bin/activate
python diy-exporter.py

配置

组件监听的结果文件路径写在脚本头的两个字典内,字典的key为metrics的前缀,value为监听文件的路径,如有需要添加新的结果文件,只需要添加进该字典并重启进程即可,注意使用绝对路径

1
2
3
4
5
6
7
8
9
10
backupjob_file = {
'4a': '/home/backup/monitor/4a_binlog.sign',
'cms': '/home/backup/monitor/cms_binlog.sign',
...
}
#
recoverjob_file = {
'mysql': '/home/backup/monitor/mysqlrecover.sign',
'rds': '/home/backup/monitor/rdsrecover.sign'
}

blackbox-exporter

简介

本exporter负责探测网络情况,支持多种协议.内网子节点和阿里云子节点均有部署,默认端口为9115

项目地址: prometheus/blackbox_exporter

部署路径:

1
/prometheus/blackbox_exporter-VERSION

prometheus配置

需要在主配置文件中加入形如如下的配置,类似配置在上文有描述,请结合起来看

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- job_name: 'Http_Post_Monitor'
metrics_path: /probe
params:
#使用blackbox的模块,在blackbox配置文件中有定义
module: [http_post_2xx]
static_configs:
- targets:
#- http://
labels:
job: 财务核算系统_FC
admin: 何德滨
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: 127.0.0.1:9115
- target_label: env
replacement: 生产环境

blackbox配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
modules:
# module名,供prometheus配置文件中引用
http_2xx:
#协议等其他参数
prober: http
http_post_2xx:
prober: http
http:
method: POST
tcp_connect:
prober: tcp
pop3s_banner:
prober: tcp
tcp:
query_response:
- expect: "^+OK"
tls: true
tls_config:
insecure_skip_verify: false
ssh_banner:
...

启动

所有参数默认即可

1
./blackbox-exporter

mysql-exporter

简介

项目地址: prometheus/mysqld_exporter

默认监听端口: 9104

部署方式

1
2
3
4
5
6
7
8
# 先创建mysql账号
CREATE USER 'exporter'@'127.0.0.1' IDENTIFIED BY 'Midea2019' WITH MAX_USER_CONNECTIONS 3;
# WITH MAX_USER_CONNECTIONS 3参数部分版本的mysql不支持,可去掉
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'127.0.0.1';
flush privileges;
# 添加环境变量
vim /etc/profile
export DATA_SOURCE_NAME='exporter:Midea2019@(127.0.0.1:3306)/'

启动

参数默认即可

1
./mysqld_exporter

oracledb-exporter

简介

项目地址: iamseth/oracledb_exporter

默认监听端口: 9161

部署方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 安装oracle实例客户端
rpm -ivh oracle-instantclient18.5-basic-18.5.0.0.0-3.x86_64.rpm
# oracle启动tns
vim /oracle安装目录/tnsnames.ora
oracledb-exporter =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = <本机ip>)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = xxx)
)
)
# 配置环境变量
vim /etc/profile
export LD_LIBRARY_PATH=/usr/lib/oracle/18.5/client64/lib:$LD_LIBRARY_PATH
export DATA_SOURCE_NAME=system/passwd@实例名(tns名)

启动

需要切换到oracle的用户,随包有默认metrics的定义文件,default-metrics.toml,可直接使用

1
./oracledb_exporter log.level error web.listen-address :9161 default.metrics ./default-metrics.toml

其他exporter

请参考官方文档

有官方推荐的第三方exporter


Prometheus+Grafana联邦监控系统
http://example.com/2022/06/17/Prometheus-Grafana-Monitor-System/
作者
Peter Pan
发布于
2022年6月17日
许可协议