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と一緒に使うことができる興味深いユースケースは以下の通りです。
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]
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の無料トライアルにお申し込みください!