Prometheus-07 blackbox

blackbox的部署和使用

内省对于收集关于系统的数据是非常宝贵的,但是有时我们需要从系统用户的角度进行度量。在这种情况下,探测是模拟用户交互的一个很好的选择。由于探测是在外部进行的,并且不了解系统内部的工作情况,因此将其归类为黑河监视

1.黑盒导出器

blackbox_exporters是普罗米修斯生态系统中所有现有出口商中最奇特的一家。它的使用模式是巧妙的,通常,新来的人会感到困惑。我们将深入研究这个出口商,希望尽可能直接地利用它。

blackbox_exporter服务暴露两个主要的端点:

  • /metrics:暴露自己的度量
  • /probe:正式查询端点启用了blackbox探测,以Prometheus显示格式返回它们的结果。

除了前面的两个端点之外,/ 服务还提供了有价值的信息,包括执行探测的日志。

blackbox导出器支持通过各种各样的本地协议探测端点,比如TCP、ICMP、DNS、HTTP(版本1和2),以及大多数探测上的TLS。此外,他还支持脚本化的基于文本的协议,如IRC、IMAP或SMTP,通过TCP连接并撇脂应该发送哪些消息和需要哪些响应;即使是普通的HTTP也可以编写脚本,但是由于HTTP探测是如此常见的用例,它已经内置了。

尽管如此,这个出口商并不能满足所有blackbox类型的监视需求。对于这些情况,可能需要编写自己的出口商。例如,你不能使用blackbox_exports来从头到尾地测试一个Kafka主题,所以你可能需要寻找一个能够生成一条消息给Kafka并将其消费掉的出口商:

2.blackbox_exporter部署

useradd --system blackbox_exporter
tar zxf blackbox_exporter-0.19.0.linux-amd64.tar.gz -C /usr/bin --strip-components=1 --wildcards */blackbox_exporter
install -d -m 0755 -o blackbox_exporter -g blackbox_exporter /etc/blackbox_exporter
vim blackbox.yml
modules:
  http_2xx:
    prober: http
    timeout: 30s
    http:
      valid_http_vcaersions: ["HTTP/1.1","HTTP/2"]
      valid_status_codes: []
      method: GET
      headers:
        Content-Type: application/json
      no_follow_redirects: false
      fail_if_ssl: false
      fail_if_not_ssl: false
      tls_config:
        insecure_skip_verify: false
      preferred_ip_protocol: ip4
      ip_protocol_fallback: false

  http_simple_get:
    prober: http
    timeout: 5s
    http:
      valid_http_versions: ["HTTP/1.1", "HTTP/2"]
      valid_status_codes: []  # Defaults to 2xx
      method: GET
      no_follow_redirects: false
      tls_config:
        insecure_skip_verify: false
      preferred_ip_protocol: "ip4" # defaults to "ip6"
      ip_protocol_fallback: false  # no fallback to "ip6"

install -m 0644 -D blackbox.yml /etc/blackbox_exporter/blackbox.yml

vim blackbox_exporter.service
[Unit]
Description=blackbox_exporter
After=network.target

[Service]
User=blackbox_exporter
Group=blackbox_exporter
ExecStart=/usr/bin/blackbox_exporter \
    --config.file=/etc/blackbox_exporter/blackbox.yml \
    --web.listen-address=:9115
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target


install -m 0644 blackbox_exporter.service /etc/systemd/system/

# ICMP probe requires access to raw sockets 
setcap cap_net_raw+ep /usr/bin/blackbox_exporter

vim prometheus.yml
- job_name: 'blackbox-http'
    metrics_path: /probe
    params:
      module: [http_2xx]
    static_configs:
    - targets:
      - https://baidu.com
      - http://192.168.1.102:80
      labels:
          group: wind-app
    relabel_configs:
      - source_labels: [__address__]
        target_label: __param_target
      - source_labels: [__param_target]
        target_label: instance
      - target_label: __address__
        replacement: 192.168.1.121:9115

systemctl daemon-reload
systemctl enable blackbox_exporter
systemctl start blackbox_exporter
systemctl status blackbox_exporter

promtool check config prometheus.yml
systemctl restart prometheus

3.创建Prometheus作业

在下面的单元文件片段中,我们可以看到blackbox_exporter服务所需的所有参数,包括配置文件的路径:

ExecStart=/usr/bin/black_exporter --config.file=/etc/blackbox_exporter/blackbox.yml --web.listen-address=:9115

我们为示例定制的配置可以在以下代码片段中找到:

modules:
  http_2xx:
    prober: http
    http:
      preferred_ip_protocol: ip4

Prometheus的实例中,我们添加了以下工作:

# 探测网站
- job-name: 'blackbox-http'
  metrics_path: /probe
  params:
    module: [http_2xx]
  static_configs:
    - targets:
      - http://example.com
      - https://example.com:443
  relabel_configs:
    - source_labels: [__address__]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - target_label:  __address__
      replacement: 192.168.1.121:9115

# 探测icmp
- job-name: 'blackbox-icmp'
  metrics_path: /probe
  params:
    module: [icmp]
  static_configs:
    - targets:
      - http://example.com
      - https://example.com:443
  relabel_configs:
    - source_labels: [__address__]
      target_label: __param_target
    - source_labels: [__param_target]
      target_label: instance
    - target_label:  __address__
      replacement: 192.168.1.121:9115

验证结果如下:

如前所述,/targets页面不会告诉您探测是否成功。这需要在表达式浏览器中通过查询probe_success 度量来验证:

可以从blackbox_importer收集到的一些有趣的度量(关于导出器本身和探测)是:

blackbox_exporter_config_last_reload_successful,这将暴露出口商的配置文件是否在SIGHUP后成功重新加载

posted on 2021-11-25 21:28  jueyuanfengsheng  阅读(606)  评论(0编辑  收藏  举报