アルパカログ

アンチパターンからモダンなデザインパターンまで「入門 監視」まとめ

2019年3月18日
🔖読書メモ🔖クラウド・インフラ
監視とは、あるシステムやそのシステムのコンポーネントの振る舞いや出力を観察しチェックし続ける行為である。

「入門 監視」は、監視の基礎をアンチパターンから順にわかりやすく説明してくれます。

このエントリでは、「入門 監視」の内容をまとめます。

1章 監視のアンチパターン

監視ツールによくある間違い

成功したチームや会社は、ツールや手順によって成功したのだという間違った考え方によって、そういったチームや会社が使っているツールや手順を採用して、同じ方法で自分たちのチームを成功させようとしてしまうのです。

観察者効果は気にしない

観察者効果とは、監視する行為が監視対象を変化させてしまうこと。現代のシステムは負荷が増えても処理できるため観察者効果は気にしなくて良い。

リソース使用率が多いことが問題ではない

サービスによっては元々リソースをたくさん使うものもあるが問題ない。例えば、MySQLが継続的にCPU全部を使っていたとしても、レスポンスタイムが許容範囲に収まっていれば問題ないということ。

メトリクスの取得頻度

5分に1回しかメトリクスを取得しないのは、実質的に何も見ていないのと変わらない。最低でも60秒に1回メトリクスを取得する

2章 監視のデザインパターン

データ収集

データ収集の主な方法はプッシュとプルの2つ。 プッシュ型は冗長性に優れていて可用性の高い構成がとれる。

メトリクス

ログ

ログには構造化ログと非構造化ログの2つのタイプがある。

非構造化ログは順序が意味を持つ場合がよくあり、ログの量が少なく、grepやtailより複雑なツールを使う必要もなく、人間が読むだけなら、非構造化ログのままでよい。

データストレージ

時系列データは、通常は時系列データベース(TSDB、Time Series Database)に保存される。

よく使われているTSDBには、RRD(Round Robin Database)やGraphiteのWhisperがある。

TSDBの多くでは、一定期間後にデータの「間引き」(rollup)や「有効期限切れ」(ageout)が発生し、古くなったデータが1つのデータポイントにまとめられる。

可視化

GrafanaSmashingのようなダッシュボード製品やフレームワークが代表的。

時系列データの最も一般的な可視化方法は、折れ線グラフ(line graph、strip chartともいう)である。過程やトレンドといった情報が含まれていないという理由から、円グラフは使うべきではない。

分析とレポート

可用性は、ツーナイン(99%)やフォーナイン(99.99%)のように9の数で表す。

アラート

監視はアラートするためのものではない。アラートは結果の1つの形でしかないということ。

まずどこを監視するか

ユーザがアプリケーションとやり取りをするところにまず監視を追加すべきである。

HTTPレスポンスコード(特にHTTP 5xx番台)リクエスト時間(レイテンシとも言う)の2つが効果的である。

3章 アラート、オンコール、インシデント管理

アラートに手順書へのリンクを入れる

アラートに対象サービスの手順書へのリンクを入れておくことで、誰かがアラートに応答したとき、何が起こっているか、アラートがどんな意味を持つのかなどを理解できる。

アラートを送る前に自動復旧を試す

うるさいアラートは監視システムを信用無くし、無視されてしまうようになる。そのアラートが本当に必要なのか、必要であればまず自動復旧できないかを検討する。

オンコール担当

オンコール担当の役割に、前日に送られたすべてのアラートの一覧を作り、各アラートはどのように改善できるか、あるいはアラートを削除してしまえないかどうかの検討を追加すると良い。

可能であればFollow-the-Sun(FTS)ローテーション(タイムゾーンごとのローテーション分割)も検討すると良い。

シフト間隔をどのくらいにすべきか

通常のシフトでは1人3週間あけるのがおすすめ。

ソフトウェアエンジニアもオンコールのローテーションに入れる

ソフトウェアエンジニアリングにおける「丸投げ」を避けるため強く推奨する。

4章 統計入門

移動平均(moving average)

集合のすべてを使って平均を算出するのではなく、最近取得したデータポイント群で平均を計算する。スパイクの多いグラフを平滑化する効果がある。

パーセンタイル

帯域幅に対する課金やレイテンシのレポートによく使われる。帯域幅に対する課金にパーセンタイルを用いるのは、トラフィックはバーストする場合があるのは分かっているので、95パーセンタイルに対して課金する方が公平だという考え方から。

パーセンタイル値には含まれていないデータがあるので、パーセンタイルは平均できない。

標準偏差の落とし穴

正規分布している(normally distributed)データセットに対してしか、期待するような結果は出ない。

6章 フロントエンド監視

フロントエンド監視には、リアルユーザ監視(real user monitoring、RUM)とシンセティック監視(synthetic monitoring)の2つのアプローチがある。

Google AnalyticsはRUMの一種で、RUMとは監視のデータとして実際のユーザトラフィックを使うもののこと。

7章 アプリケーション監視

8章 サーバ監視

メモリ

システムにメモリを追加すべきかどうかを判断する時には、free コマンドを使い -/+buffers/cache: 行を確認する。

OOMKillerの呼び出しはシステムログを killed process で grep する。

ディスク

iostat-x コマンド

iostat コマンド(xオプションなし)

データの転送能力を増強(例えばディスクを増やす)する必要があるかを判断したり、一般的なパフォーマンス問題を特定するのに使われる。

ロードアベレージ

ロードの数値はシステムパフォーマンスを表しているわけではない。

しかし、ロードアベレージは代理指標(proxy metric)として役立つ。つまり、異常に高いロードアベレージは、他に問題があるかもしれないということ。

タグ