Splunk Observability CloudでSSL証明書の有効期限を監視 (Splunk Otel Collector編)
はじめに
以前、この記事で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
詳細はこちらです。
取得できる証明書関係のメトリクスとして以下があります。
- 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.dev
とhttps://www.splunk.com
の証明書を監視させてもらいましょうか。
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