blog.tkeo.info

prometheus, blackbox_exporter, komachi_heartbeat

最近Prometheusの導入に向けて検証中。 今日は外形監視の設定を試した。

外形監視にはblackbox_exporterを使う。 komachi_heartbeatを導入しているので、レスポンスとしてheartbeat:okが返ってくるかチェックできればよい。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# prometheus.yml
scrape_configs:
  - job_name: 'blackbox'
    metrics_path: /probe
    params:
      module: [http_komachi_heartbeat]
      path: ['/path/to/heartbeat']
    static_configs:
      - targets:
        - example.com
    relabel_configs:
      - source_labels: [__address__, __param_path]
        regex: (.*);(.*)
        target_label: __param_target
        replacement: http://${1}${2}
      - source_labels: []
        regex: .*
        target_label: __address__
        replacement: 127.0.0.1:9115  # blackbox_exporterが動いているIPアドレスにする
1
2
3
4
5
6
7
8
# blackbox.yml
modules:
  http_komachi_heartbeat:
    prober: http
    timeout: 5s
    http:
      fail_if_not_matches_regexp:
      - "heartbeat:ok"

複数あるwebサーバーそれぞれに対してリクエストを投げるのは以下のような感じ。

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
# prometheus.yml
scrape_configs:
  - job_name: 'blackbox'
    metrics_path: /probe
    params:
      module: [http_komachi_heartbeat]
      path: ['/path/to/heartbeat']
    ec2_sd_configs:
      - region: ap-northeast-1
        port: 9100
    relabel_configs:
      - source_labels: [__meta_ec2_tag_role]
        regex: web
        action: keep
      - source_labels: [__meta_ec2_tag_Name]
        regex: (.*)
        target_label: name
        replacement: ${1}
      - source_labels: [__param_target]
        regex: (.*)
        target_label: instance
        replacement: ${1}
      - source_labels: [__meta_ec2_public_ip, __param_path]
        regex: (.*);(.*)
        target_label: __param_target
        replacement: http://${1}${2}
      - source_labels: []
        regex: .*
        target_label: __address__
        replacement: 127.0.0.1:9115  # blackbox_exporterが動いているIPアドレスにする
1
2
3
4
5
6
7
8
9
10
# blackbox.yml
modules:
  http_komachi_heartbeat:
    prober: http
    timeout: 5s
    http:
      headers:
        Host: example.com
      fail_if_not_matches_regexp:
      - "heartbeat:ok"

監視したいドメインが複数ある場合、ドメインごとにblackbox.ymlの設定を増やしていかないといけないのが微妙かもしれない。