[インフラエンジニア向け]運用・保守性の考え方


運用の検討事項

一般的な検討事項は以下の通り
・サービス提供時間はいつにするのか?
・バックアップの頻度と保存期間
・システム監視は何をどのように行うのか?
・運用をどこまで自動化するか?
・運用体制はどのようにするか?
・保守作業でのシステム停止時間はどのような時間帯で実施するのか?

これらについて掘り下げて見てみましょう。

サービス提供時間

システムによって定義するサービス提供時間は異なります。
例えばWEBサイトなど24時間ずっと動き続けなければいけないシステムは24時間365日(24H365D)がサービス提供時間になりますし
業務で日中の営業時間しか使わないようなシステムであれば定時に前後プラス2時間くらいが提供時間で良いものもあります。

ここを定義することで、運用体制やコストが大きく変わってくるので、まずはサービス提供時間を定義しましょう。

バックアップ

バックアップはシステムを運用する中で、とても重要になります。
障害が発生した際に、いつの時点まで戻せるのか、はシステムによりますのできっちり定義しておく必要があります。

バックアップには主に以下の3種類があります。
・システムバックアップ
・ログのバックアップ
・データのバックアップ

システムに障害が発生した場合、システムをバックアップから復旧させる際にシステムバックアップは必要となります。
このシステムバックアップの取得頻度によって、いつの時点に戻すことができるのか、が変わってきます。
リアルタイムでバックアップを取得することも可能ですが、システム負荷も上がりますし、バックアップデータも膨大になってしまいます。

バックアップ設計はユーザーと「障害発生時はいつのポイントに復旧する必要があるのか」の要件をしっかりと合意しておく必要があります。
また、障害解析の観点からも保存期間は最低1ヶ月、可能であれば3ヶ月分は欲しいところです。

データバックアップの観点では、例えば何らかのデータを誤って消してしまった場合、数日前の状態に戻したい!ということを言われることがあります。
このような事態を避けるために、あらかじめユーザーとは「何日前のデータまで戻せるようにするか」を合意しておく必要があります。
データバックアップは基本容量を食ってしまうので、ディスク容量にも気をつけながら設計する必要があります。

ログのバックアップについては、主に障害解析と監査目的で使われることがほとんどです。
障害解析の観点では1ヶ月〜3ヶ月、理想は半年ほどあれば良いと思います。
監査の観点では法律や制度で定められているものはそれに従うとして、基本的には3〜5年ほどは保存が必要になります。
大抵ログはアーカイブとして圧縮した状態で長期保存をするのでI/O処理性能が求められるディスクは必要ないです。

システム監視

システムは障害が発生するものです。
その前提に立って、何をどのように監視するのかを設計していきます。
主な監視の種類としては以下が挙げられます。
・リソース監視
・プロセス監視
・メッセージ監視
・ハードウェア監視
・ジョブ監視

これらを監視する際は、多くの企業では監視ソフトウェアを利用して監視を行います。

プロセス監視

アプリケーションが動作するには、裏でプロセスが動いています。
プロセスに異常が起きると、システムが使えなくなるので、プロセス監視は必須です。

リソース監視

CPUやメモリの使用率、ディスクのI/Oなどが基準値を超えていないか監視します。
ただ、単純にCPU使用率が90%を超えたらアラームが鳴る、としている場合
たまたま瞬間的に負荷が上がっただけなのか、それとも恒常的に高い状態が続いていて90%を超えてきたのか、アラームに至るまでの状態も加味した対応が必要となります。
ですので、あらかじめ「○%以上でかつ○%以上が5分間続いた状態であれば、対応Aを実施する」など障害対応の定義を決めておいた方が、障害対応が俗人化しなくて済みます。

メッセージ監視

ログに含まれるメッセージでアラートを上げる監視方法です。
例えばerrやattentionなども文字列で引っ掛けるなど。
ただ、この方法は場合によって検知しすぎてしまうことがよくあります。
検知した中でも実際には対応不要のものが含まれていたりします。
この辺りの匙加減は実際に運用していく中で微調整が必要な部分です。

ハードウェア監視

いわゆる死活監視です。
ハードウェアに異常がないか継続的に確認します。

ジョブ監視

バッチ処理など定期的にスケジュール実行されている処理が、
正常に始まって、正常に終了しているかを監視します。
また、動いてはいるが通常よりも時間がかかっている場合も検知する必要があります。
例えばAバッチが終わった後にBバッチを実行する、という連続性がある処理の場合、
前段の処理が遅延してしまうと、後続の処理が実行されない、あるいは実行してしまってエラーとなってしまうケースがあります。

運用・保守はどこまで求められるのか

運用保守で何をどこまで実施するのかは、あらかじめ定義しておく必要があります。
これをしっかりやっておかないと、障害が発生したときや何かトラブルが起きた際に、
「それは運用保守でやってくれる範囲だろう?」
「いえ、それは範囲外となるので別途費用がかかります」
などという不毛なやりとりが発生してしまいます。。。。

特に費用が発生する/しない、という点は結構揉めるところでもあるので、可能な限り運用設計のなかで定義するようにしましょう。