経緯
先日、iOS向けプッシュ通知用SSL証明書の有効期限が切れており、
慌てて証明書の再作成と監視の実装を行いました。
意外にも、iOS向けプッシュ通知用SSL証明書の有効期限監視の情報出てこなくて困りました。
なので、備忘兼/誰かのお役に立てればと…。
ちなみに、プッシュ通知用のサーバに以下のログが出ており、
ログ監視していたおかげで気づくことができました。危なかった…。
※いや手遅れだったのだけれども。。。
ERROR: Unable to connect to 'ssl://gateway.push.apple.com:2195'
前提(2015/10/13追記)
Appleのプッシュ通知サーバとやり取りするサーバに下記が入っていること。
- プッシュ通知用SSL証明書
- bcコマンド、exprコマンド
- opensslコマンド
- nrpe(Nagiosを使用する場合)
- slack通知用のスクリプト(slackへの通知をする場合)
Nagiosサーバがあること(Nagiosで監視する場合のみ)
監視方法(概要)
SSL証明書の有効期限監視?そんなのNagiosのcheck_httpプラグインでチョロいっす!
…と言いたいところですが、今回監視したいのはAppleのプッシュ通知サーバとやり取りするための証明書の有効期限。
WEBサーバのSSL証明書の有効期限ではないので、check_httpでは監視できません。。
なので、
- opensslコマンドで有効期限を引っ張る。
- dateコマンドでUNIX_TIMEに変換。
- 引き算&割り算して残り何日か計算し、if文で判定して結果をNagiosに返す。
というスクリプトを作成しました。
拙作なサンプルスクリプト
参考にさせていただいた記事
監視方法詳細
1.opensslコマンドで証明書の有効期限を引っ張ります。
# openssl x509 -in <証明書ファイルのパス> -text |sed -e '/Not After/{s/^.* : //;p};d'
Jun 13 09:50:42 2016 GMT
#
2.後で残り何日?って計算したいので、UNIX_TIMEに変換します。
# date '--date=Jun 13 09:50:42 2016 GMT' +%s
1465811442
#
3.現在の日付を取得してUNIX_TIMEに変換します。
# date +%s
1444651962
#
4.bcコマンドで引き算して、残り日数(秒数)を求めます。
※後から気づいたけど、ここもexprで良い気がする。最初違うやり方でやろうとしてた際の名残ですね。。。
# echo 1465811442 - 1444651701|bc
21159741
#
5.有効期限(秒数)を日数に変換します。
# expr 21159741 / 86400
244
#
6.後はお決まりのif文で判定して、nagiosが判定出来るように終了コードを返してやれば終わりです。
-
2015/10/12 21:34追記
-
蛇足ですが、nagiosは以下のようにステータス判定します。
終了コード0…正常
終了コード1…warning
終了コード2…critical
その他…unknown
最後、駆け足になってしまいましたが、こんな感じです。
もっとスマートなやり方等あれば、是非ご指摘ください。
通知をslackに飛ばしたい時(2015/10/13追記)
Nagiosとか立ててないよ!って場合には、以下のような感じでslackにでも飛ばしてあげましょう。
### Main Routine
if [ "${DAYS_LEFT}" -le 15 ]; then
./slack.sh "NG" "NG - ${CERT_FILE} is remind ${DAYS_LEFT} days. Expire Date is ${JST_DATE}"
exit 2;
elif [ "${DAYS_LEFT}" -le 30 ]; then
./slack.sh "NG" "NG - ${CERT_FILE} is remind ${DAYS_LEFT} days. Expire Date is ${JST_DATE}"
exit 1;
else
./slack.sh "OK" "OK - ${CERT_FILE} is remind ${DAYS_LEFT} days. Expire Date is ${JST_DATE}"
exit 0;
fi
slack通知のサンプルスクリプト
https://github.com/koitatu/zabbix_scripts/blob/master/slack.sh
分かりやすいslack通知導入の記事
http://codenote.net/slack/2768.html (2015/11/01 修正 inncoming Webhookなのでこっちでしたorz)
http://lab.aratana.jp/entry/2014/12/05/124822 (incomming Webhookじゃないならこっち)
Nagiosとの連携だけど、非常に分かりやすい記事です。