👁️

【要約】入門監視

2021/11/29に公開

https://www.oreilly.co.jp/books/9784873118642/

監視のアンチパターン

  • ツールに依存する
    • 万能なツールはない
  • 監視が役割になっている
    • 監視は役割ではなくスキルであり、全員がやるべき
    • 監視するのは PDCA を回すため
  • チェックボックス監視
    • これを監視してます、と言うためだけの監視
    • 形が先行すると非効率なものが出来上がる
  • 誤検知が多いのでアラートを常に無視するようになる
    • メトリクスは取っているが、システムがダウンした理由はわからない
    • 5分間隔など、長すぎるインターバルで監視してる
  • 監視を支えにする
    • 監視してるから壊れてもいいわけではないし、壊れたからといって監視を増やせばいいわけでもない
  • 手動設定

監視のデザインパターン

監視サービスのコンポーネント

  • データ収集
    • プッシュ型とプル型
      • プル型は中央サーバーが必要なのでスケールしにくい
    • メトリクス
      • カウンタとゲージ
  • データストレージ
    • 間引き
    • 古いデータを詳細に見たいことはまずないので、分単位のデータを時間単位に集約するなどして間引く
  • 可視化
    • ダッシュボード
    • 理解できない情報が表示されていても無駄
    • grafanasmashing など
  • 分析とレポート
    • SLAの監視レポート
    • 標本化定理
      • 2分間のダウンタイムを計測するには1分間隔でデータを収集する必要がある
    • コンポーネントが組み合わさって一つのサービスとなっている場合は複雑性が増す
      • 内部のコンポーネントごとの可用性を出し、それから全体の可用性を出す方が正確だが、複雑だし費用対効果は悪い
      • サービス全体で算出した方が簡単だし欲しい値になることが多い
    • 依存コンポーネントの可用性に依存することに注意
      • 例えば EC2 は99.95%なので、シングルAZ構成なら、そこで稼働するサービスはそれ以上の可用性は定義できない
  • アラート

どこから始めるか

  • まずはユーザーに近いところから始める
  • ユーザーが叩くエンドポイントが正しいステータスを返すか
  • いきなり CPU やサーバーメモリの監視をしてもメリットがない
    • CPU が90%だからといって、それが悪いとは限らない

作るのではなく買う

  • 買った方がコストが安い
  • 我々は監視ツールを作る専門家ではない
  • プロダクトのフォーカス
  • 大抵のことはSaasS でできる
  • 著名な企業も数年かけて監視ツールを醸成させてきたはずで、一朝一夕でできるものではない

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

アラート

  • アラートは、それを受け取った人に緊急性があり、すぐに対応する必要があることを認識させるもの
  • アラートにメールを使うのはやめる
    • メールというのは基本的に非同期で目を通すもの
    • 緊急性があるものは SMS など、すぐに気づけるものに送るべき
  • アラートには対応手順を含める
  • 固定の閾値のみに依存しない
    • 例えばディスク利用率が90%になったら、みたいな設定だと10%から80%に急上昇した、みたいな異常値を見逃しかねない
    • 変化量、グラフの傾きもウォッチする
  • 不必要なアラートは削除する
    • アラートが多すぎると無視するようになる
    • アラート疲れが起こる前にチューニングする
    • アラートに対応するのに時間を浪費するのではなく、システムの安定性をあげることに時間を使おう
  • メンテ時はアラートを切っておく
  • アラート対象の異常を自動復旧できないか検討する
    • 自動復旧できない時だけアラートを送る

オンコール

  • 待機
  • 上手にローテーションさせる
    • 規模が大きければタイムゾーンごとにオンコールを置く、 Follow The Sun ローテーションが組める

インシデント管理

  • 発生した問題を扱う正式かつ自社に最適な手順を確立しておく
  • ITIL が有名
  • インシデントが長期化する場合、適切にロールを割り振って対処する
    • 指揮官、書記、コミュニケーター、対応者
  • 起きた後はポストモーテムを行い、振り返りをすることが大切
    • 避難せず、問題の本質を明らかにする

統計入門

  • mean と average
    • 算術平均
    • 平準化すると識別しやすい滑らかnデータセットを得られるが、スパイク値などの重要かもしれないデータポイントを失う可能性もある
  • 中央値
  • 周期生
  • 分位数
    • パーセンタイル
      • 極端な値を弾ける
  • 標準偏差
    • 正規分布しているデータセットのみに有効

ビジネス KPI

  • 月次計上収益
  • 顧客あたりの収益
  • 課金顧客の収益
  • 顧客生涯価値
  • 顧客あたりのコスト
  • 顧客獲得単価
  • 顧客の解約数
  • アクティブユーザー数
  • バーンレート
  • ランレート
  • TAM(total addressable market)
  • 粗利
  • etc...

ウォッチすべき値は必ずあるはず

フロントエンド監視

  • SPA が普及し、http エラーが起きてないのに js エラーが発生してるなんてことも
  • フロント監視のゴールは、動き続けることよりも速く動くこと
    • ページロードが1秒遅くなると、pv が11%、cv が7%、顧客満足度が16%下がると言われている
  • リアルユーザー監視
    • GA など
  • シンセティック監視
  • Navigation Timing API でいくつかの有用なメトリクスが取れる
    • domComplete - navigationStart = ページの総ロード時間
    • domInteractive - navigationStart = ページがロードされたとユーザーが体感する時間
  • ユーザーの体感速度を測るには Speed_index の値を見てみると良い

アプリケーション監視

  • そもそもアプリケーションが生きている、とはを定義する
  • ディスクに書くか、ネットワーク越しに送るべきか
    • まずはファイルに書いて、それをネットワークで送る
    • 一回一回コネクションを張るのは高コスト
    • 非同期でやる
  • マイクロサービスの監視には分散トレーシングを活用する
    • Distributed Tracing
    • 外からのリクエストに一意の ID を振り、そのリクエストがどのサービスにどれぐらい滞留したかを測る
    • 非常に複雑で根気がいるので、スタッフ不足、疲労気味のチームには向かない

サーバー監視

  • CPU
  • メモリ
    • free コマンドは二行目を見る
    • OOMKiller の実行回数を監視するという手
  • ネットワーク
  • ディスク
  • ロードアベレージ

web サーバー

  • スループット指標としての重要なのが request per second
  • http status code
  • connection 数は keep alive 設定に依存することに注意

DB サーバー

  • コネクション数
    • MySQL ではスレッドと表現されることに注意
  • 秒間クエリ数
    • サーバーへの負荷を測るいい指標となる
  • スロウクエリ
  • レプリカ同期遅延
  • IOPS

メッセージキュー

  • キューの長さ
  • キューの消費率

キャッシュ

  • キャッシュヒット率

ネットワーク監視

むずい
SNMP が辛い

セキュリティ監視

  • コンプラ目的の監視要求は見た目よりも simple なことも多いが、easy とは限らない
  • auditd を使ったユーザー、コマンド、ファイルシステム監視
  • ホストレベルの侵入検知は難しい場合があるが、rkhunter から始めるのが良い
  • ファイアウォールは十分ではない
    • fw は真n湯させないための仕組みだが、侵入された後に気づける仕組みも必要
    • NIDS を使ってより多くの情報を得る

監視 SaaS

SaaS選定時に考えること

  • 課題を見つける
    • 自分達のサービスの課題を定義する
  • 機能要件を精査する
    • そもそも運用しているサーバーにインスコ可能か
    • 欲しいメトリクスは取れるか
    • インターネットに出れない構成でも使えるか
    • etc
  • 組み合わせて使う
  • 運用をサービスに合わせる
  • ハッカビリティを備えているか
  • 外部の力を活用できるか
    • テクニカルサポートやコミュニティの活発度、ネット上の情報量

Discussion