監視とは、あるシステムやそのシステムのコンポーネントの振る舞いや出力を観察しチェックし続ける行為である。
「入門 監視」は、監視の基礎をアンチパターンから順にわかりやすく説明してくれます。
このエントリでは、「入門 監視」の内容をまとめます。
成功したチームや会社は、ツールや手順によって成功したのだという間違った考え方によって、そういったチームや会社が使っているツールや手順を採用して、同じ方法で自分たちのチームを成功させようとしてしまうのです。
観察者効果とは、監視する行為が監視対象を変化させてしまうこと。現代のシステムは負荷が増えても処理できるため観察者効果は気にしなくて良い。
サービスによっては元々リソースをたくさん使うものもあるが問題ない。例えば、MySQLが継続的にCPU全部を使っていたとしても、レスポンスタイムが許容範囲に収まっていれば問題ないということ。
5分に1回しかメトリクスを取得しないのは、実質的に何も見ていないのと変わらない。最低でも60秒に1回メトリクスを取得する
データ収集の主な方法はプッシュとプルの2つ。 プッシュ型は冗長性に優れていて可用性の高い構成がとれる。
ログには構造化ログと非構造化ログの2つのタイプがある。
非構造化ログは順序が意味を持つ場合がよくあり、ログの量が少なく、grepやtailより複雑なツールを使う必要もなく、人間が読むだけなら、非構造化ログのままでよい。
時系列データは、通常は時系列データベース(TSDB、Time Series Database)に保存される。
よく使われているTSDBには、RRD(Round Robin Database)やGraphiteのWhisperがある。
TSDBの多くでは、一定期間後にデータの「間引き」(rollup)や「有効期限切れ」(ageout)が発生し、古くなったデータが1つのデータポイントにまとめられる。
GrafanaやSmashingのようなダッシュボード製品やフレームワークが代表的。
時系列データの最も一般的な可視化方法は、折れ線グラフ(line graph、strip chartともいう)である。過程やトレンドといった情報が含まれていないという理由から、円グラフは使うべきではない。
可用性は、ツーナイン(99%)やフォーナイン(99.99%)のように9の数で表す。
監視はアラートするためのものではない。アラートは結果の1つの形でしかないということ。
ユーザがアプリケーションとやり取りをするところにまず監視を追加すべきである。
HTTPレスポンスコード(特にHTTP 5xx番台)とリクエスト時間(レイテンシとも言う)の2つが効果的である。
アラートに対象サービスの手順書へのリンクを入れておくことで、誰かがアラートに応答したとき、何が起こっているか、アラートがどんな意味を持つのかなどを理解できる。
うるさいアラートは監視システムを信用無くし、無視されてしまうようになる。そのアラートが本当に必要なのか、必要であればまず自動復旧できないかを検討する。
オンコール担当の役割に、前日に送られたすべてのアラートの一覧を作り、各アラートはどのように改善できるか、あるいはアラートを削除してしまえないかどうかの検討を追加すると良い。
可能であればFollow-the-Sun(FTS)ローテーション(タイムゾーンごとのローテーション分割)も検討すると良い。
通常のシフトでは1人3週間あけるのがおすすめ。
ソフトウェアエンジニアリングにおける「丸投げ」を避けるため強く推奨する。
集合のすべてを使って平均を算出するのではなく、最近取得したデータポイント群で平均を計算する。スパイクの多いグラフを平滑化する効果がある。
帯域幅に対する課金やレイテンシのレポートによく使われる。帯域幅に対する課金にパーセンタイルを用いるのは、トラフィックはバーストする場合があるのは分かっているので、95パーセンタイルに対して課金する方が公平だという考え方から。
パーセンタイル値には含まれていないデータがあるので、パーセンタイルは平均できない。
正規分布している(normally distributed)データセットに対してしか、期待するような結果は出ない。
フロントエンド監視には、リアルユーザ監視(real user monitoring、RUM)とシンセティック監視(synthetic monitoring)の2つのアプローチがある。
Google AnalyticsはRUMの一種で、RUMとは監視のデータとして実際のユーザトラフィックを使うもののこと。
システムにメモリを追加すべきかどうかを判断する時には、free
コマンドを使い -/+buffers/cache:
行を確認する。
OOMKillerの呼び出しはシステムログを killed process
で grep
する。
iostat-x
コマンド
iostat
コマンド(x
オプションなし)
データの転送能力を増強(例えばディスクを増やす)する必要があるかを判断したり、一般的なパフォーマンス問題を特定するのに使われる。
ロードの数値はシステムパフォーマンスを表しているわけではない。
しかし、ロードアベレージは代理指標(proxy metric)として役立つ。つまり、異常に高いロードアベレージは、他に問題があるかもしれないということ。