🙆‍♀️

Splunk Observability CloudでSSL証明書の有効期限を監視 (Splunk Otel Collector編)

2023/10/11に公開

はじめに

以前、この記事でSSL証明書の有効期限を監視する方法を解説しました。
この記事ではPrometheus Exporterを使っていましたが、もっと簡単な方法がありましたのでそちらの紹介をしたいと思います。

Splunk Distribution of OpenTelemetry Collectorに含まれるsmartagent/http receiverを使います。

Splunk Distribution of OpenTelemetry Collector

こちらの記事でも解説していますがOpenTelemetry CollectorのContribをベースに、Splunkが独自機能を追加したバージョンです。
長いので以下ではSplunk Otel Collectorと書きます。

独自機能の一つにSmart Agentというものがあります。
Smart Agentとは、以前はSplunkが提供していたプロプライエタリなエージェントで、OpenTelemetry Collectorにはない様々な機能を有しています。
Splunk Otel CollectorにはSmart Agentが組み込まれており、その一つに今回のSSL証明書の有効期限を監視するためのreceiverであるsmartagent/httpがあります。

smartagent/http

詳細はこちらです。
https://docs.splunk.com/observability/en/gdi/monitors-hosts/http.html

取得できる証明書関係のメトリクスとして以下があります。

  • http.cert_expiry
    失効までの時間(秒)
  • http.cert_valid
    証明書が有効か

Otel Collectorでは通常のreceiverと同じように呼び出せます。

receivers:
  smartagent/http:
    type: http
    ... # Additional config

その他にもオプションとして任意のRequest HeaderやBody、Methodなどを指定できるなかなかの優れものです。
早速使ってみましょう。

設定

Splunk Otel Collectorインストール

Splunk Observability CloudのData Management > Add Integration > Deploy the Splunk OpenTelemetry Collector からインストールスクリプトを入手できます。

Linuxであれば:

curl -sSL https://dl.signalfx.com/splunk-otel-collector.sh > /tmp/splunk-otel-collector.sh && \
sudo sh /tmp/splunk-otel-collector.sh --realm <REALM> -- <ACCESS TOKEN> --mode agent --without-fluentd --without-instrumentation

Windowsであれば:

& {Set-ExecutionPolicy Bypass -Scope Process -Force; $script = ((New-Object System.Net.WebClient).DownloadString('https://dl.signalfx.com/splunk-otel-collector.ps1')); $params = @{access_token = "<ACCESS TOKEN>"; realm = "<REALM>"; mode = "agent"; with_fluentd = 0; with_dotnet_instrumentation = 0}; Invoke-Command -ScriptBlock ([scriptblock]::Create(". {$script} $(&{$args} @params)"))}

これだけでインストール完了です。

smartagent/http receiverの設定

コンフィグファイルに追加します。
https://zenn.devhttps://www.splunk.comの証明書を監視させてもらいましょうか。

/etc/otel/collector/agent_config.yaml
receivers:
  smartagent/http_zenn:
    type: http
    host: zenn.dev
    port: 443
    useHTTPS: true
  smartagent/http_splunk:
    type: http
    host: www.splunk.com
    port: 443
    useHTTPS: true

service:
  pipelines:
    metrics:
      receivers: [..., smartagent/http_zenn, smartagent/http_splunk]

再起動します。

sudo systemctl restart splunk-otel-collector

一応、設定が正しくちゃんと再起動できたか確認しておきましょう。

sudo systemctl status splunk-otel-collector

Splunk Observability Cloudで確認してみる

Metric finderでhttpで引っかけてみます。

色々取れていますね。
今回、関心があるのはhttp.cert_expiryですので開いてみます。

Plot Editorで不要なフィルタを削除して全ての対象のhttp.cert_expiryを表示するようにします。

Data tableを見るとzenn.devとsplunk.comの値が取れています。
Zennの方のValueは6,535,273で、時間経過につれ減少しています。失効までの秒っぽい雰囲気がでています。

日数に変換してみましょう。
Plot EditorのEnter formulaをクリックして

A/(60*60*24)と入れます。
Aの方の<●>アイコンをクリックして非表示にして

再度Data tableを見るとZennのValueは約75になりました。

この記事作成時点は10月11日、Zennの証明書期限は12月26日です。
開発者ツールを使いJavaScriptで計算してみました。約75になったのでだいたい合ってます。
Prometheusだと「失効日」しか取れず色々複雑なことをしていましたが、こちらだと超簡単にできました。

適当にいい感じの見た目にしましょう。

右上のSave as...からダッシュボードに保存できます。

Splunk Observability Cloudでアラートを仕込む

残り30日を切ったらアラートを上げるようにしたいと思います。

右上の🔔アイコン > New detector from chart をクリックします。

名前を付けます。

Alert conditionでStatic Thresholdを選択します。

Alert settingsでAlert when: Below, Threshold:30とします。

後はメッセージや通知方法を選択していけばOKです。

これで、いずれかのサイトの証明書が有効期限切れまで30日を切ったらアラートしてくれます。
もし管理者が分かれているようであればフィルタでURLを絞り個別にDetectorを作成して宛先をそれぞれ設定します。

まとめ

Splunk Otel Collectorの拡張機能の一つとしてSmart Agentがあり、その中のSSL証明書監視を使ってみました。なかなか便利ですね。

Discussion