blackbox_exporterで複数のmoduleを実行する

blackbox_exporterでDNSの監視をしているのですが前回の記事のキャッシュサーバーのダウンを検知出来ませんでした.
使っていた設定とアラートはこんな感じです.

 1  - job_name: blackbox_dns
 2    metrics_path: /probe
 3    params:
 4      module: [internal_dns, external_dns, cache_dns]
 5    static_configs:
 6      - targets:
 7        - ns.local
 8    relabel_configs:
 9      - source_labels: [__address__]
10        target_label: __param_target
11      - source_labels: [__address__]
12        target_label: instance
13      - target_label: __address__
14        replacement: blackbox_exporter:9115

アラート

 1groups:
 2  - name: general
 3    rules:
 4      - alert: DNSServiceDown
 5        expr: probe_success{job="blackbox_dns"} == 0
 6        for: 5m
 7        labels:
 8          severity: critical
 9        annotations:
10          summary: "DNSService {{ $labels.instance }} down"
11          description: "{{ $labels.instance }} が5分間ダウンしました"

paramsで指定できるmoduleは1つみたいですね.
設定時にきちんとblackbox_exporterのログを確認すれば良かったのですがきちんと見てませんでした.
blackbox_exporterは動作してるポートにアクセスするとRecent Probesから直近のログを確認することができます.
ここ見てようやく1つしかmoduleが実行されていないことに気付きました.

複数個jobを作れば解決しますが今回はラベルのリライトで同一job上でmoduleを切り替えます

 1  - job_name: blackbox_dns
 2    metrics_path: /probe
 3    params:
 4      module: [internal_dns]
 5    static_configs:
 6      - targets:
 7        - ns.local|internal_dns
 8        - ns.local|external_dns
 9        - ns.local|cache_dns
10    relabel_configs:
11      - source_labels: [__address__]
12        regex: (.*?)\|(.*)
13        target_label: __param_target
14        replacement: ${1}
15      - source_labels: [__address__]
16        regex: (.*?)\|(.*)
17        target_label: __param_module
18        replacement: ${2}
19      - source_labels: [__address__]
20        regex: (.*?)\|(.*)
21        target_label: instance
22        replacement: ${2}
23      - target_label: __address__
24        replacement: blackbox_exporter:9115

「|」で区切ってそれを正規表現で抽出し適宜replaceする感じですね.
ルールの方は問題ないのでそのまま前回記事の方法でわざと色々落としてみて動作確認して終了.

参考記事