監視、モニタリング、サーバー管理

いわゆるSIer(BtoB受託開発がメインでプロパーは管理、パートナーが開発をやるような会社をここでは指す)からWeb系(BtoC自社サービス開発がメインで基本的にプロパーしかいないような会社をここでは指す)に転職して8か月ほど経ちましたが、自分が今までやったことなくてちょっと戸惑ったことに監視、モニタリング、サーバー管理といった運用系のタスクがあります。

前職ではコードを書くことはそれなりに多かったとはいえ客先常駐でちょっとしたプログラムを書くぐらいだったり、自社でパッケージ開発していたときもWebアプリじゃなくてスタンドアロンなので、Webサービスの運用というのを全くしたことがなかったわけです。なのでモニタリングしてくださいと言われても何をしていいのかさっぱりだったわけです。

まあ今でも本番Webサービスの運用をしているわけじゃなくちょっとしたイントラ内のサーバーの運用をしているぐらいですし、しかも全然できてないわけですが、入社当初に比べればそれなりに分かるようになってきたと思います。たぶん。それに自分でメトリクス追加してグラフ追加するのって面白いですね。

今日は監視、モニタリング、サーバー管理あたりについてつらつらと思うことを書いてみたいと思います。僕の環境では全部内製のクローズドなソフトを使っていることもあり具体的なことは書きません。あと最初に言っておくとオチは無いです。

まず監視、モニタリング、サーバー管理って具体的に何なのか?ってことですが、監視はデーモンが落ちていないか調べて落ちてたらアラートメール送るみたいなやつですね。ツールとしてはZabbixなんかがこれに該当すると思います。


モニタリングはCPU使用率、load average、メモリ使用量、ネットワークトラフィックといったメトリクスを記録してグラフ化して観察することです。ツールとしてはGanglia, Cacti, GrowthForecastなんかがそれに該当すると思います。監視と違うのは監視は0か1の世界ですがモニタリングはそうではないということです。プロセスが起動しているか否かなどは0か1の世界ですがモニタリングはそういうのではなくて連続的なものです。ある機能を追加したらCPU使用率が急上昇したのでコードを見直すとかそんなふうに使います。何か障害が起きたときにリソースの使用量をチェックするわけですが、モニタリングしていないメトリクスはチェックできません。そのためいろいろなメトリクスをモニタリングする必要があります。

CPU使用率やメモリ使用量などはサービス固有ではない汎用的なものですが、全体の使用率、使用量ではなくある特定のプロセスの値を取った方が良い場合もあります。僕の環境ではfluentdのCPU使用率、メモリ使用量をpsコマンドの結果をもとに取得してモニタリングしています。これによりfluentdを複数プロセスで起動することにより単体でのCPU使用率が下がったこと、fluentdでバッファ溢れがおきている場合にメモリ使用量が増大していること、が分かります。

fluentd関連だとプラグインもあるのでメッセージ送信数やバイト数はモニタリングしたほうが良いでしょう。

Hadoop, HBase関連だとJMXを使って各種メトリクスを取得できます。といってもメトリクスの種類があまりにも多すぎて何をどうチェックしていいのかいまだにさっぱりです。まあとりあえずHBaseでいうとregionserver-rpcのmultiAvgTimeはチェックしたほうがいいようです。HBaseのcoprocessorのpostPut部分のコードに問題があったときはputの性能が落ちてmultiAvgTimeが跳ね上がっていました。


最後にサーバー管理ですが、これは幅広くてマシンのスペックやネットワーク情報や役割などを一元管理できてAPIで取得できて(Mobageを支える技術 ~ソーシャルゲームの舞台裏~ (WEB+DB PRESS plus)の8章に出てくるAdmintoolのようなもの)、設定ファイルの配布やデプロイも自動化できるみたいな感じですが、まあ設定ファイルの配布やデプロイ自動化などができていれば良いと思います。今だとChefが流行ですね。以前だとPuppetで配布してデプロイはCapistranoとかFabricとかだったのかなと思います。


監視、モニタリング、サーバー管理といった辺りの運用系のタスクについては下記の本に少し書かれているので参考になると思います。ただこの本も出て5年経っているので若干古びている箇所があると思います。Chefとかfluentdの話題が無いし。まあそれでも素晴らしい本だと思います。

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)