SysdigでBlackbox Exporterを(無理やり)使って監視する


目的

SysdigはSaaS型のモニタリングサービスです。IBM CloudではIBM Cloud Monitoring with Sysdigサービスとして利用することができます。

一方Blackbox ExporterはPrometheusのためのエクスポーターです。指定したURLやホストのHTTPレベルやソケットレベルでの死活監視を行うことができます。

Sysdigは専用のエージェントでメトリクスを収集しますが、Prometheus形式のメトリクスにも対応しています。今回はBlackbox Exporterによる外部サービスの死活監視結果をSysdigに(無理やり)表示してみます。

手順

Sysdigのセットアップ

Sysdigはすでにオーダー済とします。

https://docs.sysdig.com/en/setting-up-the-environment.html

エージェントをデプロイする際に、次の環境変数をenvに追加します。

- name: ADDITIONAL_CONF
  value: "prometheus:\n  enabled: true"

Blackbox Exporterを実行

次のようなマニフェストでPodをデプロイします。ここでのポイントは2つです。

  • Blackbox ExporterはデフォルトでIPv6での通信をしてしまうのでIPv4に変更
  • Sysdigがスクレイプしてくれるようアノテーションを追加
  • prometheus.io/pathtarget=監視対象&モジュール名を指定
apiVersion: v1
kind: ConfigMap
metadata:
  name: blackbox-config
data:
  config.yml: |
    modules:
      http_2xx:
        prober: http
        http:
          preferred_ip_protocol: ipv4 # 追加
      http_post_2xx:
        prober: http
        http:
          method: POST
      tcp_connect:
        prober: tcp
      pop3s_banner:
        prober: tcp
        tcp:
          query_response:
          - expect: "^+OK"
          tls: true
          tls_config:
            insecure_skip_verify: false
      ssh_banner:
        prober: tcp
        tcp:
          query_response:
          - expect: "^SSH-2.0-"
      irc_banner:
        prober: tcp
        tcp:
          query_response:
          - send: "NICK prober"
          - send: "USER prober prober prober :prober"
          - expect: "PING :([^ ]+)"
            send: "PONG ${1}"
          - expect: "^:[^ ]+ 001"
      icmp:
        prober: icmp
---
apiVersion: v1
kind: Pod
metadata:
  annotations:
    prometheus.io/path: /probe?target=https://www.google.com/&module=http_2xx # 監視対象
    prometheus.io/port: "9115"
    prometheus.io/scrape: "true"
  name: blackbox-exporter
spec:
  containers:
  - name: blackbox-exporter
    image: prom/blackbox-exporter
    volumeMounts:
    - name: blackbox-config
      mountPath: /etc/blackbox_exporter/
      readOnly: true
  volumes:
  - name: blackbox-config
    configMap:
      name: blackbox-config

Sysdigダッシュボードで確認

スクレイプされるまで数分待ちます。その後ダッシュボードでパネルを追加し、Blackbox Exportのメトリクスであるprobe_successが選択できるようになっていればOKです。0は失敗、1は成功ですね。

考慮点

Prometheusに詳しい方なら気づいたと思いますが、この方式では監視対象ごとにBlackbox ExporterのPodを起動する必要があります。Prometheusの場合は監視対象がいくつあってもBlackbox Exporterは1つあればいいので。Sysdigで外部サービスの死活監視をしたい場合の苦肉の策と理解ください(もっといい方法があれば教えてください)。