【普罗米修斯】使用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"}
Screen Shot 2021-07-04 at 23.44.54.png

监控nginx的响应体内容

probe_success{job="nginx-body"}
Screen Shot 2021-07-05 at 17.36.57.png

请提供以下的本土中文的表述:

    • Prometheus : Blackbox exporter

 

    Prometheusのrelabel_configでメトリクスにオレオレなラベルを付与する
广告
将在 10 秒后关闭
bannerAds