Watch

HealthCheck: ソフトウェア監視を徹底

HealthCheck: ソフトウェア監視を徹底

システムコンポーネントソフトウェアをお客様にリリースすると、すぐに監視方法を検討し始めます。目標は、できるだけ早く、そして常にお客様よりも先に問題を発見することです。

私たちはディスク、メモリ、CPU負荷といった基本的な部分から始めます。しかし、開発する製品の複雑さゆえに、システムが故障し、数時間後にそのことを知らされるなど、問題が発生する例は数え切れないほどあります。

ソフトウェアの挙動監視が真に価値をもたらすのは、より詳細なシステムメトリクスを取得し、それを分析することで、運用面およびビジネス面における興味深い洞察を得られる場合のみです。こうした高度な主要業績評価指標を測定するには、内部コンポーネントと複雑なデータへのアクセスが必要です。外部監視では通常、十分な深度でシステムにアクセスできないため、以下のような疑問に答えることができません。

—オンラインショッピングシステムでは、過去1時間にどれくらいの注文がありましたか?これは平均的な1日と比べて大きな違いがありますか?

—出版システムの場合、記事を投稿してから公開されるまでにどれくらいの時間がかかりますか?異常な急増はありますか?

—患者登録システムの場合、キューには何件のメッセージが入っていますか?メッセージの平均待ち時間はどれくらいですか?

—オンライン実験システムの場合、実験結果の計算にはどれくらいの時間がかかりますか?トラフィック予測を考慮すると、この遅延は許容できないほど大きくなることはありますか?

—POSシステムの場合、決済ゲートウェイにデータを送信するのに何回再試行が必要ですか?その回数は異常でしょうか?

要約すると、高度なシステム統計を「システムは健全か?」という1つの質問に対する明確かつ実用的な答えにまとめる方法が必要です。

健康パブリッシャー向けソーシャルプラットフォームを構築しているWetpaintでは、すべてのシステムに特別な/healthcheck URLが付与されています。このエンドポイントは、高度なチェックに使用している外部監視システムNagiosの主要な資産です。応答がまったくないか、許容できない応答があった場合、システムは正常ではありません。運用担当者にはアラートが、開発者には連絡が入ります。チームは協力して、問題の調査を開始します。システムにログインすると、同じ/healthcheckエンドポイントから詳細なレポートが生成され、問題がある場合は、トラブルシューティングのための具体的な手順が提供されます。

私たちはシステムを自己監視するように構築しました。スケジュールされたFacebookの投稿やツイートの送信にかかる時間、過去24時間に送信に失敗した投稿の数、パートナーからのコンテンツの取り込みが正常に機能し最新の状態かどうか、データ分析や統計ジョブの計算完了にかかる時間など、数え切れないほどの指標を把握しています。このアプローチにより、信頼性に関する懸念は、本来あるべきエンジニアリングチームに完全に移行されました。これにより運用業務が簡素化され、「監視アラートが届いた。開発者に連絡する必要があるのか​​?」という常に重要な質問への回答が得られるようになりました。

それぞれのチェックを構築する際、私たちは次のことを自問しました。

—この状況を体系的に 防ぐことはできるのでしょうか?

—将来、このような状況を早期に検知できるようになるのでしょうか?そのためにはどのようなデータを収集する必要があるのでしょうか?

—サポートエンジニアが問題を解決するために実行すべき、明確で実用的な一連の手順はありますか?これらの手順は自動化できますか?

これらの疑問を解決するには、システムの設計を大幅に変更する必要がありました。/healthcheckが何らかの不具合を確定的に検出できるよう、あらゆる機能が十分な機能の痕跡を残すようにしました。そのために、私たちは2つの重要な要件に焦点を当てました。

1) 誤検知を排除する精度とアラートに対する「狼少年」アプローチ

2) 実用的な洞察。重要なのは、目の前の問題を解決するための具体的なロードマップを提供することです。夜中にアラートで誰かを起こしてしまったのですから、少なくとも問題解決に必要な情報を提供することはできるはずです。

時間をかけて、お客様に何かが見えるようになるずっと前に、問題の兆候をいち早く察知し、より重要なビジネス上の課題に集中できる設計にたどり着きました。「ヘルスチェックレッド」アラートを受信した場合、/healthcheck がグリーンに変わるまで問題への対応を中断せず、直ちに重大な中断として記録し、追跡しています。

システムがどこで障害を起こす可能性があるかを発見する旅は長く退屈ですが、価値があり、重要です。重要なのは、絶対的な完璧さを求めるのではなく、徹底的かつ包括的な監視と早期検知によって壊滅的な障害から身を守ることです。

実際の医療と同様に、問題を早期に発見し、病気の根本原因を体系的に排除することが治療を成功させる鍵となります。

ドミトリー・フレンケルはWetpaintのソフトウェア開発ディレクターです。以前はMicrosoftに勤務し、Dellではヘルスケア製品ラインの開発を率いていました。Twitter @dimafr、 LinkedIn 、Google+でドミトリーをフォローしてください。