ブログ

Blackbox exporterとSysdigによるアベイラビリティメトリクスの監視

Google Cloudとコンテナの継続的なセキュリティ

本文の内容は、2021年6月24日にCarlos Tolonが投稿したブログ(https://sysdig.com/blog/blackbox-exporter-sysdig)を元に日本語に翻訳・再構成した内容となっております。

Prometheus Blackbox exporterは、HTTP(S)、DNS、TCP、ICMPなどの複数のプロトコルでエンドポイントを探索できます。このエクスポーターは、設定したターゲットに対して、一般的なエンドポイントのステータス、レスポンスタイム、リダイレクト情報、証明書の有効期限など、複数のメトリクスを生成します。

Blackbox Exporterは、外部からの可視性の詳細にのみ焦点を当てているため、アウトオブボックスで使用できます。より詳細なメトリクスを取得するには、アプリケーションをインスツルメンテーションする必要があります。

Blackbox Exporterは通常、コンテナ内のセルフホストサービスとして動作するため、Kubernetesクラスターに簡単にデプロイすることができます。

デフォルトでは、HTTPプローブを実行する際、このエクスポーターはターゲットを探索するためにGET HTTPメソッドを使用し、2xxに似たステータスコードを期待しています。この動作は、ベーシックまたはベアラトークンベースの認証、カスタムヘッダー、ターゲットへの接続にプロキシサーバーを使用するなど、他の動作とともに簡単に設定できます。

Blackbox exporterをSysdigと一緒に使うことができる興味深いユースケースは以下の通りです。

  • 証明書の期限切れを検知
  • 特定のターゲットのレイテンシーや、同じクラスターで動作するサービスのパスを分析する
  • エンドポイントの障害の検出
  • サードサービスなどの外部エンドポイントのレイテンシーと到達性の監視

KubernetesへのBlackbox exporterのインストールと設定

Helmを使ってKubernetesにBlackboxをインストールして設定することができます。

$ helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
$ helm repo update


configというパラメータの下に、プローブの設定を入れることができます。例えば、異なるシナリオのために複数のHTTPプローブを定義することができます。以下の設定は、"-f "フラグで提供されるHelm valuesファイルに含めることができます。

config:
  modules:
    http_2xx:
      prober: http
      timeout: 2s
      http:
        follow_redirects: true
    http_k8s:
      prober: http
      timeout: 2s
      http:
        follow_redirects: true
        bearer_token: /var/run/secrets/kubernetes.io/serviceaccount/token
        tls_config:
          ca_file: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt


http_2xxモジュールでは、ほとんどのオプションがデフォルトで維持されます。http_k8sの例では、カスタムCAとベアラートークンベースの認証が設定されています。

Helmの値を正しく設定したら、Blackboxエクスポーターをインストールします。

$ helm install [RELEASE_NAME] prometheus-community/prometheus-blackbox-exporter -f values.yaml [-n NAMESPACE]

SysdigエージェントによるBlackboxのスクレイピング

Blackboxエクスポーターは、Sysdig Agentで利用可能なネイティブPrometheusサービスディスカバリーを使って呼び出すことができます。

ネイティブのPrometheusサービスディスカバリーを使用するには、エージェントの設定に以下の行を追加して、prometheus.prom_service_discoveryの設定を有効にする必要があります:

prometheus:
  enabled: true
  prom_service_discovery: true


Blackbox エクスポーターのターゲット設定は、Prometheus relabel_configs を使って静的なスクレイプ設定で提供する必要があります。Sysdig Agentのprometheus.yamlファイルのパラメータとして、使用したいモジュールを含むターゲットのリストを含めることができます。

prometheus.yaml: |
  global:
    scrape_interval: 10s
  scrape_configs:
  - job_name: blackbox
    metrics_path: /probe
    params:
      module:
      - http_2xx
    relabel_configs:
    - source_labels:
      - __address__
      target_label: __param_target
    - source_labels:
      - __param_target
      target_label: instance
    - replacement: blackbox-service:9115	# Blackbox hostname:port
      target_label: __address__
    static_configs:
    - targets:
      - http://front-end.sock-shop.svc.cluster.local
      - https://docs.sysdig.com/
      - https://promcat.io
      - https://api.promcat.io/apps
      - https://my.failing.app


relabel_configsブロックでは、「blackbox-service:9115」をBlackboxエクスポーターのホスト名:ポートに置き換えます。Blackbox Kubernetes Serviceとポートを直接使用することができます。

静的な設定に加えて、クラスター内のサービスの自動検出を行い、Blackboxを使って "prometheus.io/probe: true "というアノテーションですべてのサービスをチェックするという共通のスニペットがあります。

prometheus.yaml: |
  global:
    scrape_interval: 10s
  scrape_configs:
  - job_name: kubernetes-services
    kubernetes_sd_configs:
    - role: service
    metrics_path: /probe
    params:
      module:
      - http_2xx
    relabel_configs:
    - action: keep
      regex: true
      source_labels:
      - __meta_kubernetes_service_annotation_prometheus_io_probe
    - source_labels:
      - __address__
      target_label: __param_target
    - replacement: blackbox-service:9115	# Blackbox hostname:port
      target_label: __address__
    - source_labels:
      - __param_target
      target_label: instance
    - action: labelmap
      regex: __meta_kubernetes_service_label_(.+)
    - source_labels:
      - __meta_kubernetes_namespace
      target_label: kubernetes_namespace
    - source_labels:
      - __meta_kubernetes_service_name
      target_label: kubernetes_name

利用可能なメトリクスの可視化とアラート

SysdigエージェントがBlackboxエクスポーターを使ってターゲットをプローブするように設定すると、Sysdigインスタンスにメトリクスが流れていきます:



probe_duration_seconds メトリクスは、プローブが完了するまでの時間を返します。以下のクエリーを使って、ターゲットごとのプローブ時間を分析することができます:

avg(probe_duration_seconds) by(instance)




アプリケーションがサードパーティのサービスを利用する場合、障害や誤ったコードの応答を検出することが重要です。このような情報は、probe_http_statusメトリクスで取得できます。


証明書の有効期限が切れると、サービス間のコミュニケーションに誤りが生じる可能性があります。probe_ssl_earliest_cert_expiryメトリクスは、証明書チェーンが有効でなくなるタイムスタンプを秒単位で提供します。

次のクエリーを使用して、すべてのエンドポイントの期限切れ時間を1つのダッシュボードに表示します。

probe_ssl_earliest_cert_expiry - time()




以下のPromQLクエリーを使用して、60日以内に期限切れとなる証明書に対するアラートを設定します:

probe_ssl_earliest_cert_expiry - time()


また、probe_successメトリクスを使用することで、プローブが失敗している状態を検出することができます:

sum(probe_success) by (instance) != 1


利用可能な情報に基づいて、すべてのターゲットの完全な概要を示す独自のダッシュボードを作成することができます。



この統合をお試しになりたい場合は、Sysdig Monitorの無料トライアルにお申し込みください!

Sysdigに関するお問い合わせはこちらから

最近の投稿

カテゴリー

アーカイブ

ご質問・お問い合わせはこちら

top