継続的テストとしての監視実装例

その昔hbstudyで @kazuho さんは言いました

「監視は継続的なテストである」

というわけでこんにちはCTOの馬場です。 今回は弊社で実際に適用しているテストケースを紹介します。

ハートビーツと監視システム

ハートビーツでは永らくNagiosを使って2拠点から同内容の監視をしています。

最適な監視を実現するためにはNagiosの監視の実体である Nagiosプラグインを自作する必要があり、 ハートビーツでは特に別途費用をいただかず必要なNagiosプラグインを実装しています。

ソースコードは社のGitLabで管理していて、 hb-nagios-plugins グループ配下には100近いリポジトリがあり、 さらにこの他にも案件固有の監視項目用に個別のリポジトリがあります。 要するにたくさんですね。

さきほどざっと hb-nagios-plugins グループ配下のファイル数を確認してみたところ以下のとおりでした。

  • Shell 52
  • Python 44
  • Go 5
  • Perl 5

さっと作るとShellScriptが多くなってしまいますが、 ここ数年はSehllScriptは書捨て用のみとし、 1.Python 2.Go を公式推奨プログラミング言語としています。 そんなわけで最近はこの2種類が増えてきました。

別途開発チームや開発担当者がいるわけではなく、 運用にあたるエンジニア自身がプログラミングしているのも珍しいかもしれません。 エンジニアなら自分の課題は自分で解決しないとね、という感じですね。

それではいくつか紹介します。

メールが送れているか監視する

check_mail_arrive というNagiosプラグインを作って利用しています。

  1. 送信側で定期的にメールを送る。その際本文などに送信操作実施日時を書く
  2. 受信側(弊社メールサーバなど)でメールが届いているか、遅延していないかを監視

能動的にメールを送信する、送信操作日時をもとに遅延を検証するのがミソです。

なおたくさんのサーバで実装しつづけてきた結果、 弊社メールサーバ側の負荷がキビシくなってきたので改良版を作成中です。

同じ発想で lsyncdで同期できているか、遅延していないか監視する check_lsync_delay というNagiosプラグインもあります。

仕組みは check_mail_arrive と同じで、同期元で定期的にファイルに日時を記入し、 同期先でファイルの中身を見て日時をもとに遅延を検証します。

サイト上に広告がきちんと表示できているか監視する

サイトの意図した位置に意図した数の広告が表示されているか監視します。

よくあるHTTP監視の手法だと1発のHTTPレスポンスまでが対象なのですが、 この監視ではSeleniumとPhantomJSを使ってJavaScript実行まで実行しているのが特徴です。

N台のサーバで設定ファイルの差異がないか監視する

最近始めたサービスであればAnsibleなどプロビジョニングツールで管理してますが、 そうばっかりでもないのが現実の世の中ですよね。

とはいえN台のサーバがあった場合設定ファイルは同一であってほしいことがほとんどなわけで、 意図しない差は異常事態です。というわけで監視対象です。

  1. 設定ファイルを収集し比較する
  2. 1.の仕組みが動いていること、結果として差がないことを監視

という仕組みです。

いい感じにログを監視する

check_log_ng というNagiosプラグインをつくりました。 これはGitHubで公開しています。

heartbeatsjp/checklogng: Log file regular expression based parser plugin for Nagios.

特徴は以下のとおりです( Wiki より抜粋 )。

  • 検知文字列のパターンを正規表現で指定できます。
  • 検知除外文字列のパターンが指定できます。これも正規表現で指定できます。
  • 複数のログファイルを一括してチェックすることができます。もちろん、ログローテーションされたファイルもチェックできます。
  • ログファイル毎にどこまでチェックしたかを記録するseekファイルを利用しているため、前回チェックからの差分だけをチェックできます。
  • 複数行に渡って同時に出力されたログメッセージを結合してからチェックすることができます。これにより、検知除外文字列の効果が発揮できるでしょう。
  • check_log3.plの後方互換性を持っています。現在指定しているオプションをそのまま使えます。

というわけで

Nagiosプラグインは監視項目やサーバをまたいだ動作が苦手なので、 いろいろと合わせ技で対処しているようすを紹介しました。

それもこれも、安心して運用するための工夫なのです。

Nagiosプラグインシリーズは続く予定です。 次は社員が思い入れのあるNagiosプラグインを紹介するかもしれません。