created: 2019-05-19T06:19:54.000Z
入門監視の読書メモ
後から見返したり、おぼえておきたいことをメモ
OSのメトリクスだけを対象にしたアラートは意味が薄い
- メトリクスが悪くなってもサービスに影響を与えているとは限らない
- サービスを監視したい場合は、OSのメトリクスではなくてサービスを監視する
- もちろんOSのメトリクスが原因であることもあるが、サービスを監視するほうが直接的でシンプル
メトリクスは高頻度で取得して良い
- 最低でも1分に1回取得する
- 0.02 QPS (1分に1回) で負荷が上がるシステムはきょうびないはず
- とったメトリクスの保管期限/情報の圧縮方法は検討する必要がある
たとえば AWS EC2の可用性は99.95%
- AWS EC2 はインフラのインフラと呼べる部分
- それでも年間4時間のダウンタイムは許容している
- これ以上の可用性を普通のサービスに求めるのは不合理と言える
ユーザ側のコンポーネントから監視する
- サービスはユーザのためのものなので、ユーザに近いところが監視の優先順位は高い
- たとえば、DBのIOPSではなくHTTPのステータスコードから監視する
障害対応時の役割には名前がある
- 現場指揮官
- リスクとトレードオフを鑑みて決断をするのが仕事
- システムの設計を理解しているエンジニアが担当する
- スクライブ (書記)
- 起こったことを記録する
- 誰が何をしたのか
- 誰が何を決断したのか
- 起こったことを記録する
- コミュニケーション調整役
- ステークホルダーに説明をする
- マネージャが担当する
- SME (subject matter expert)
- 実際に障害対応をする人
- 当該コンポーネントに詳しいエンジニアが行う
ビジネスKPIを監視する
たとえば
- ログイン成否の比率
- 購入失敗 / 購入のレイテンシ
- サイトに滞在しているユーザ数
ユーザのサイト内での行動の成否とそのレイテンシはビジネスKPIとなりうる
フロントエンドのNavigationTimingAPI
いくつかあるが重要なもの
- navigationStart
- サイトへのリクエストを開始したタイミング
- URLを入れてエンターを押したタイミング
- 途中のリダイレクトよりも前
- DNS, TCPコネクションよりも前
- サイトへのリクエストを開始したタイミング
- domLoading
- html、DOMのレスポンスが返ってき終わったところ
- ブラウザが最初に受け取った HTML ドキュメントのバイトの解析を開始する時点
- domInteractive
- 受け取ったhtmlをもとにブラウザがDOMを生成できた時点
- domContentLoaded
- DOMが構築できて、かつjsの実行ができるようになった時点
- CSSの描画/計算が残ってるとjsは実行できない
- DOMが構築できて、かつjsの実行ができるようになった時点
- domComplete
- 画像などのページ内のリソースがすべて表示できたタイミング
- ブラウザの読み込み中のマークの回転が止まった状態
参考
データベースサーバの基本的な監視
- コネクション数 (MySQLだとスレッド数)
- 秒間クエリ数 (QPS)
- IOPS
- DBにとってディスクが健全なのかは基本的な監視
セキュリティ監視
ふたつのツールが紹介されていた
- auditd
- sudoの記録、ファイルの変更などを監視
- rkhunter
- rootkitが何かしてたら検知するソフトウェア
healthエンドポイント
- httpでシステムの状態を返してくれるパスを用意しておくのは良いアイデア
- CNCFではOpenMetrics(Prometheusの形式)という仕様のプロジェクトを持っている
- Health Check Response Format for HTTP APIs という標準仕様が議論中