How To Check SSL Certificate Expiration with Grafana(Part1)
GrafanaでSSL証明書の有効期限をチェックする方法ー第一章
この記事では、モダンなモニタリングツールを使ってSSL証明書の有効期限を調べる方法について説明しています。長い記事なので2回に分けてお届けします。今回は第一回目です。
完全なモニタリングソリューションを設定する場合、SSL証明書を伴った異なるパーツをセキュアにしなければいけない場面がよくあると思います。
最近、私が行ったPrometheus or Telegrafなどのチュートリアルのセットアップにおいて、我々は、そういったエージェントとGrafana間のコミュニケーションがセキュアなものであることを確認するためにSSL証明書を生成する必要がありました。しかし、時間が経つにつれ、それらのSSL証明書の有効期限は切れます。そして、データを可視化できないようになります。
もし、SSL証明書の有効期限を確認する方法や証明書の有効期限が近づいていることを事前に知らせてくれる方法があったとすればどうでしょうか?今日はその方法をご紹介したいと思います。
今回は、簡単にGrafanaでSSL証明書の有効期限をチェックする方法をお話したいと思います。そしてそ後で、SSL証明書のためのダッシュボードを設計し、どの証明書の有効期限が切れそうなのかを確認できるアラートも設計します。
目次
- I — 今回学ぶ内容
- II –Prometheus と Grafanaのインストール
- III — Prometheus へのnode-cert exporterのインストール
- a –node-cert exporterのダウンロード
- b –サービスとしてnode-cert exporterをインストールする
- c — Prometheus へ exporterを結びつける
- IV –Grafana ダッシュボードの生成
- a –Grafana ダッシュボードのインポート
- b — SSL証明書の有効期限のためにPromQL クエリを書く
- c — 閾値レベルをカスタマイズする
- V — SSL証明書の有効期限が切れた時にアラートを鳴らす
- a –ルール・ファイルの生成
- b — アラートマネージャー ルール・ファイルの生成
- c — Slack 上でアラートマネージャー アラートを持つ
- VI — その他の選択肢
I –今回学ぶ内容
最後までこのチュートリアルを最後まで読んでいただけると次のようなことを学んでいただけます。
- PrometheusとGrafanaの簡単な設定方法
- SSL証明書をモニタリングするためにnode-cert exporter とインストールする方法
- SSL証明書の有効期間を可視化するためのGrafanaダッシュボードの設計
- SSL証明書の有効期限が近づいている時にアラートを発動させる方法
少し長くなりますが、始めましょう。
II –Prometheus と Grafanaのインストール
完全なPrometheus と Grafanaのインストールについは、以前他の記事に書きました。その記事では、 Prometheus モニタリング インスタンスの設定の方法と、HTTPSを使ってセキュアにする方法と、Grafanaとそのインスタンスを安全に結びつける方法をご紹介しました。
リバースプロキシ(逆プロキシ)の手順は飛ばしていただいても大丈夫です。しかし、セキュリティ面を考慮するのであれば、NGINXリバースプロキシを設定しておくことをおすすめします。
これが済めばステップ2へ進みます。
III — Prometheus へのnode-cert exporterのインストール
III — Prometheus へのnode-cert exporterのインストールさて、Prometheus とGrafanaのスタックの準備が整いました。次は、node-cert exporterのインストールをします。
node-cert exporterは、定期的にファイルシステムパスのセットが得られるSSL証明書をチェックするエクスポーターです。SSL証明書を/etc/ssl フォルダーの中に保存することを強くおすすめしますが、他の場所に保存してもかまいません。
a –node-cert exporterのダウンロード
node-cert exporterをダウンロードするには、シンプルにwgetコマンドを走らせるだけで大丈夫です。
$ wget https://github.com/amimof/node-cert-exporter/releases/latest/download/node-cert-exporter-linux-amd64
node-certを使いたいのであれば、 amimof’s work on Githubに確実にスターを付けます。
すると、自分のインスタンス上でnode-cert-exporterが実装できる状態になっていると思います。
この実行可能なものを/usr/local/binフォルダーに移動し、(少なくともファイルの所有者のために)実行します。
$ sudo mv node-cert-exporter-linux-amd64 /usr/local/bin$ sudo chmod u+x /usr/local/bin/node-cert-exporter-linux-amd64
node-cert exporterにユーザーを生成します。
$ sudo useradd -rs /bin/false node-cert-exporter
node-cert exporterユーザーをexporter実行可能にできる所有者にします。
$ sudo chown node-cert-exporter:node-cert-exporter /usr/local/bin/node-cert-exporter-linux-amd64
これが、binフォルダーの中身にならないといけません。
b–サービスとしてnode-cert exporterをインストールする
いつものように、サービスとしてnode-cert exporterをインストールします。
バックグラウンドプロセスとしてexportersを走らせることでexportersが壊れてしまう可能性が非常に高くなります。さらに、 systemd servicesをモニターすることもでき、落ちてしまった時に気づきます。
いつものように/lib/systemd/systemいつものようにフォルダーに行き、node-certサービスファイルをそこでつくってください。
$ cd /lib/systemd/system$ sudo touch node-cert-exporter.service
node-cert exporterは証明書が自分のシステムのどこにあるのかを特定するためにパスフラグを使います。
私の場合、自分の証明書が /etc/ssl/certsフォルダーにあると仮定します。
自分のSSLパスに対してのパスフラグを必ず微調整してください。
ここにサービスファイルのコンテンツを用意しました。
[Unit]Description=Node Cert ExporterWants=network-online.targetAfter=network-online.target[Service]Type=simpleUser=node-cert-exporterGroup=node-cert-exporterExecStart=/usr/local/bin/node-cert-exporter-linux-amd64 \--path=/etc/ssl/certsRestart=always[Install]WantedBy=multi-user.target
サービスを有効にして、スタートしてください。
$ sudo systemctl enable node-cert-exporter$ sudo systemctl start node-cert-exporter
すばらしいです!
node-cert exporterによってエクスポーズされたメトリックを見てみましょう。
$ sudo lsof | grep LISTEN | grep node-cert
前の記事の情報を参考にすれば、ポート9117上のnode-cert exposesメトリックを見ることができます。
それがメトリックを正確に集めているかどうかを確認するためにcurlコマンドを使ってみましょう。
$ curl http://localhost:9117/metrics
「ssl_certificate_expiry_date」という名前のメトリックを確認できたら、おめでとう!成功です!
node-cert exporterが正しくインストールされています。
c — Prometheus へ exporterを結びつける
node-cert exporterが正しく走っています。次は、Prometheusと結びつける作業に入ります。
そのためには、 Prometheus コンフィグレーション ファイルまで移動し、以下のターゲットを追加するために編集し始めます。
$ cd /etc/prometheus$ sudo vi prometheus.yml
自分のコンフィグレーションファイルの static_configsパートの中では、cert exporterのために新しいエントリーを追加します。
static_configs:- targets: ['localhost:9090', 'localhost:9117']
変更のために Prometheusをリスタートしてください。
$ sudo systemctl restart prometheus
Prometheusが新しいターゲットをどんどんスラップしていることを忘れずに確認するようにしてください。
(もしPrometheus と Grafanaのチュートリアルを読んでみたい方は)http://localhost:1234/targets このリンクを見てみてください。
exporterがアップされて走っています。
それでは、次回の第二章ではGrafanaでSSL証明書を確認する方法を解説します。
Orangesys.ioでは、kuberneteの運用、DevOps、監視のお手伝いをさせていただいています。ぜひ私たちにおまかせください。