Edited at

システム監視の設計まとめ

More than 3 years have passed since last update.

どうやら仕事で説明する必要が出てきたので、備忘録的に知っている事をまとめてみる。

即興、オレオレなので違和感のあるところはごめんなさい。


監視でできること


エージェントレス監視

サーバやサービスの外側からアクセスをして、その動作状況を確認します。基本的にクライアントアクセスを模すため、成否とレスポンスタイムが得られる結果。外部ネットワークから行うと、サービス全体の死活判断。内部ネットワークから行うと、個別のサーバ(サービス)の死活判断に使えます。


よく使うエージェントレス監視

上位サービスが落ちると下位サービスも落ちるので、下位サービスをきっちり拾っておけば上位サービス分も拾えますが、切り分けに時間を要しやすくなるので、一通り取るのがお勧め。

名称
概要
対応コスト
備考

ICMP監視
Ping等によりノードの死活を判断する

TCP監視
TCP Portがオープンしているかを判断する

DNS監視
対象FQDNを正しく名前解決できるかを判断する

DB監視
DBに所定の方法で接続して、意図したクエリ結果を返しているかを判断する
中~高
利用する監視システムで対応していないと厄介

HTTP監視
Webアクセスをして、意図したレスポンス(時間含む)を返しているかを判断する
中~高
認証がある等、操作が複雑になると厄介


エージェント監視

サーバにインストールされたエージェントを通じて動作状況を確認する。代表的なのはSNMPやJMX等で、得られるのは取得項目に対応した値。ものによっては成否だったり、数値だったり、文字列だったり何でも。グラフ化される事も多い。また、エージェントからDB接続等をすれば外形監視も出来たりする。


よく使うエージェント監視

挙げるとキリがないので、代表的なものを。サーバに何か入れてる時点で、基本的には頑張れば何でも取れるので、あくまで目安程度に。(例えばSNMPで全てを強引に取りに行くこともできる。面倒だけれど)

名称
代表的なエージェント
概要
対応コスト
備考

リソース使用状況監視
SNMP
CPU, MEM等のリソースの使用状況を取得する

性能監視の鉄板

OS状況監視
SNMP
ホスト名やカーネルのバージョン、uptime等

予期せぬ障害で意外と役立つ

プロセス監視
Zabbix
プロセスの起動状況を取得する

Javaプロセス監視
JMX
JavaのヒープやGCの発生状況を取得する

レプリケーション監視
Zabbix
レプリケーションの遅延や、そもそものデータずれ等を監視する

内容により要スクリプト

ログ監視
Zabbix
ログを取得し、特定文字列の出現状況などを判断する


監視対象の考え方

基本的にはフルコースでやって、なおかつ見る人のスキルが高ければ、一通りの場面に対応できる。とはいえ、それでは元も子もないですね。


最も重要なのは?

ユーザアクセスを模した監視。Webサービスの場合なら、内部的にRDBを使っていようが、KVSを使っていようが、HTTP監視ということになる。コレがしっかりしていると、障害対応やメンテナンス後の回復確認の信頼度が上がるし、そもそもこれが無くて「サービス落ちてるんだけど…」とユーザに言われるのは、究極的に恥ずかしい。

とはいえ難しいところもあって、例えばシャーディングしているシステムの場合だと、特定シャードのみの障害ということもありえる。そういった場合は、他の監視を併用する必要があるので、過信は禁物。


次に重要なのは?

実際に障害対応するのはサーバやシステムサービス単位なので、それ単位で監視する。MySQLを使っていれば、サービス自体もそうですが、レプリケーション等も使っている場合には監視が必要。基本的には、監視内容と障害対応手順が紐付く形になるはず。


その他は?

システムの改善や原因調査などに必要になるので、自分たちがそういった作業をするときに必要になる項目を取得しましょう。例えば、JavaアプリケーションでGCログを見たりしているのであれば、JMXで一通り取得してしまう等。個人的にはdstat愛好家なので、dstat -fに相当するものは入っていて欲しかったり。

その逆、極論、wしてLoad Average見るくらいしか出来ないのであれば、それしか採らなくていいと思う。活用出来ない値を採るのは無駄なので。というわけで、チームの技術力に合わせた値を。ZabbixやMuninみたいなテンプレに頼らず取得できるようなものが、実際に役に立つ値でしょう。


まとめ

だいぶ長くなったので、まとめる


  1. 外部ネットワークからの監視は確実に!

  2. 内部ネットワークからの監視は、定型(想定した)障害対応オペレーション毎に漏れなく

  3. リソース等の監視は、自分たちの使える値を漏れなく、手間かけ過ぎず


参考

今の監視が足りなかったらここいらを使おう


エージェントレス監視

Pingdom

https://www.pingdom.com/

Uptime Robot

https://uptimerobot.com/


エージェント監視

Mackerel

https://mackerel.io/ja/

Sensu

https://sensuapp.org/

Zabbix

http://www.zabbix.com/jp/

Icinga(Nagios派の方へ)

https://www.icinga.org/