【普罗米修斯】使用blackbox_exporter进行外部监视
目录
- [目次] Prometheusで監視システムを作る with Docker
简述
blackbox_exporter可以监控各种协议的运行状态。
它可以监视各种端口、http的GET、POST请求等行为,以及基本身份验证检查等等。
本次将编写一个监视SSH的22号端口的示例,以及检查http响应主体内容的示例。
黑盒子导出器
使用以下链接:
https://github.com/prometheus/blackbox_exporter
前提 tí)
假设您已经按照以下步骤在Prometheus、Grafana环境中进行了构建:使用Docker搭建Prometheus + AlertManager + Grafana + Node Exporter。
服务器配置
Blackbox-exporter执行对受监视端口的检查,并将结果转化为指标,并发送给Prometheus,因此可以得到如下的服务器架构。
因此,我认为最好将其安装在已经安装了Prometheus的服务器上,而不是在要监视的服务器上安装。(虽然可以将其安装在要监视的服务器上并使用,但配置会变得冗长,所以不推荐这样做。)
blackbox-exporter ├──> 監視対象001
├──> 監視対象002
└──> 監視対象003
目录结构
.
├── docker-compose.yaml
└── blackbox-exporter
└── config.yaml
Docker-compose:使用Docker容器编排工具。
黑匣子导出器(blackbox-exporter)的容器定义。
version: '3'
services:
blackbox-exporter:
image: prom/blackbox-exporter
container_name: blackbox-exporter
ports:
- 127.0.0.1:9115:9115
volumes:
- ./blackbox-exporter:/etc/blackbox_exporter
entrypoint: ['/bin/blackbox_exporter', '--config.file=/etc/blackbox_exporter/config.yaml']
restart: always
config.yaml 的配置文件
创建blackbox-exporter/config.yaml文件。
modules:
ssh_banner:
prober: tcp
tcp:
query_response:
- expect: "^SSH-2.0-"
nginx_banner:
prober: http
http:
method: GET
# 以下の文字列がなければアラートとする
fail_if_body_not_matches_regexp:
- '"nginx": "ok"'
“ssh_banner.tcp.query_response.expect”的“^SSH-2.0-”是通过Go语言的TCP请求返回内容的一部分。(blackbox_exporter是用Go语言编写的)
请参考以下文章,我在其中介绍了一种快速创建Go的TCP客户端的方法,如果需要的话,可以使用它来检查每个端口的响应内容是怎样的。
参考资料:如何在Go中秒速创建TCP客户端
导出器的启动
$ sudo docker-compose up -d --build
普罗米修斯的设置
在Prometheus服务器的prometheus.yaml文件中添加以下配置。
在config文件的relabel_configs.replacement字段中指定包含blackbox-exporter的服务器主机。
在static_configs.targets字段中定义一个用于监控22号端口的服务器主机。
(blackbox-exporter和targets的服务器可以相同也可以不同。)
scrape_configs:
- job_name: port-ssh
metrics_path: /probe
params:
module: [ssh_banner]
static_configs:
- targets:
- target-server01.com:22
- target-server02.com:22
labels:
env: development
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter-server.com:9115
- job_name: nginx-body
metrics_path: /probe
params:
module: [nginx_banner]
static_configs:
- targets:
- target-server01.com:80
- target-server02.com:80
labels:
env: development
relabel_configs:
- source_labels: [__address__]
target_label: __param_target
- source_labels: [__param_target]
target_label: instance
- target_label: __address__
replacement: blackbox-exporter-server.com:9115
将设置应用
$ sudo docker-compose restart prometheus
PromQL是用于查询和分析Prometheus时间序列数据的查询语言。
只要下列的 PromQL 每个返回值为 1,则表示一切正常。
监控SSH端口
probe_success{job="port-ssh"}
监控nginx的响应体内容
probe_success{job="nginx-body"}
请提供以下的本土中文的表述:
-
- Prometheus : Blackbox exporter
- Prometheusのrelabel_configでメトリクスにオレオレなラベルを付与する