スキップしてメイン コンテンツに移動

書籍レビュー『オライリー 入門 監視』(著者:Mike Julian)

書籍名:『オライリー 入門 監視』(著者:Mike Julian)
日時:2019年3月7日~3月31日

Before

監視はインフラエンジニアが片手間でするようなものだろうか?
NWエンジニア、DBエンジニアはいるのに監視エンジニアはなぜいない?
そもそも監視を学べる機会・本が少ない。など、色々な悩みを抱えていた時に、『オライリー 入門 監視』を手にした。
今まで自分がやってきた監視が正しいのか、間違いだったのか、この本で見極めようと思う。 
    気づき


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

    • アンチパターンとは、一見よいアイデアだが実装すると手痛いしっぺ返しをくらうものをいう。
    • ツール依存になっていないか。
    • 監視とは複雑な問題をひとくくりにしたもの、専門化されたツールが複数あって良い。
      • 監視Agentは詳細な情報をもたらしてくれる。
    • 小さく何かに特化したツールなら作る選択肢も。pythonコードのスクリプトなど。
    • 役割をもつ全員が監視に責任を持つべき
      • アプリエンジニアはソースコードのどこに監視のポイントがあるか、ネットワークエンジニアならネットワーク監視の勘所が一番詳しいはず。
    • 「動いている」かを監視する。リクエストが200 OKか?文字列は正しいか?レイテンシは増大していないか?
    • アラートに関してはOSのメトリクスはあまり意味がない。CPU使用率が99%でも、正しく動いていれば良い。ただし分析・診断には必要。
    • メトリクスは高頻度(最低でも60秒)で取らないと意味がない。保存期間に応じてデータの間引き設定を忘れないように。
    • 監視設定にも手動ではなく、自動化を。
    • 従来型環境は個別に何かを監視していたが、クラウドは集合体(複数システムのまとまり)として監視するよう変わってきた。
    • まとめ
      • ツールに依存しても、監視の仕組みは良くならない。
      • 監視は全員がやるべき仕事。チームや部署内での役割ではない。
      • 素晴らしい監視は、チェックボックスに「これは監視しています」とチェックを入れるだけで済むものではない。
    2章 監視のデザインパターン

    • 組み合わせ可能な監視⇒専門化されたツールを複数使い、監視プラットフォームを作ること。
      • 代表的なものGraphite, Sensu, logstash, collectd
    • 監視サービス5つの要素
      • データ収集
      • データストレージ
      • 可視化
      • 分析とレポート
      • アラート
    • 何か問題が起きた時にアラートを出すことが監視ではない、監視は質問を投げかける為にある。
    • 監視はできるだけユーザに近いところから始める。
    • レスポンス監視は何が問題なのか教えてくれないが、何かが問題で、それがユーザに影響を与えていることを知らせてくれる。
    • メトリクス監視はユーザへ影響を与えているかどうかで必要有無を判断する。
    3章 アラート、オンコール、インシデント管理

    • 監視とは、あるシステムやそのコンポーネントの振る舞いや出力を観察しチェックし続ける行為である。
    • アラート
      • 誰かを叩き起こす為のアラート
      • 参考情報(FYI)としてのアラート
    • アラート通知にメールではない方法を選択する。
      • すぐに応答かアクションが必要なアラート
        • SMS、PagerDutyなどのページャーを使う
      • 注意が必要だがすぐにアクションする必要がないアラート
        • Chatなどに送りつけ、レビューなどで参照する。
      • 履歴や診断の為に保存しておくアラート
    • 良い手順(runbook)は以下の問に答えられる。
      • 何のサービスで、何をするものか。
      • 誰が責任か。
      • どんな依存性をもっているか。
      • インフラの構成はどのようなものか。
      • どんなメトリクスやログを送っていて、それらはどういう意味か。
      • どんなアラートが設定されていて、その理由は。
    • コピペで済むような手順書は自動化する。手順書とは問題を解決する為に人の判断と診断が必要。
    • アラートのノイズを減らす(アラート疲れをなくすし、重要なアラートに注力)。
      • そのアラートはすぐに人が対応しなければいけないアラートか。
      • 1ヶ月の推移を見たとき不要なアラート、閾値を変更できるアラートはないか。
      • アラートを無くす為に自動化はできないか。
      • 自動復旧で問題が修復できないならアラートを送る。
      • 前日のアラート一覧を眺め、カイゼンできないか考える
    4章 統計入門

    • average、中央値、周期性、分位数、標準偏差の利点と欠点を認識し利用する。
    5章 ビジネスを監視する

    • 事業(経営層)に影響があるか「サービスは動いているか、ユーザへの影響は?」を監視する。
    • ビジネスKPI
      • 顧客はサービスを使えているか。
      • 儲かっているか。
      • 事業が成長しているか。
      • どれくらい利益がでているか(でていないか)。
      • 顧客は喜んでいるか。
        • 月次経常収益
        • 顧客あたりの収益
        • 課金顧客数
        • ネットプロモータスコア
        • 顧客生涯価値
        • 顧客あたりのコスト
        • 顧客獲得単価
        • 顧客の解約数
        • アクティブユーザ数(1日、1週間、1ヶ月などの単位で)
    • サービスによってKPIは異なる。正解を見つけるには人と話し何が知りたい(KPI)かを得ること。
    6章 フロントエンド監視

    • ページロードが1秒遅くなると、顧客満足度が16%下がる。
    • リアルユーザ監視(real user monitoring、RUM)
      • 実際のユーザのブラウザよりメトリクスを監視。
      • 例)Google Analytics(ページにJavascriptのスニペットを入れる)
      • ブラウザはNavigation Timing APIでパフォーマンスメトリクスを公開。
      • ツール Graphite, StatsD
    • シンセティック監視
      • ダミーのリクエストによる監視。
      • 例)curlリクエストなど
      • 代表的なサービス:WebpageTest
    7章 アプリケーション監視

    • ページロードが1秒遅くなると、顧客満足度が16%下がる。
    • ビルドとリリースのパイプラインを監視
    • healthエンドポイントパターン→正常性確認を行えるスクリプトを用意する。カナリアテスト、ステータスエンドポイントとも呼ぶ。
    • 分散トレーシング⇒マイクロサービス間のやり取りを監視。(分散トレーシングシステム:Zipkin)ただし大規模向け。
    8章 サーバ監視

    • サーバ監視でSNMPやめよう。collectd, Telefraf, Diamondなどのプッシュ型へ。
    • スケジュールジョブの監視:デッドマン装置
    • ログ解析ツール:Splunk、ELK
    9章 ネットワーク監視

    • ネットワーク機器でも構成管理をRANSID
    10章 セキュリティ監視

    • auditd(Linu) Linuxカーネルへ直接フックする為、最後まで動作し続けることができる。
    • SaaSの利用:CloudPassage, Threat Stack
    • RootKit対策:rkhunter
    11章 監視アセスメント

    • 今までの総復習、ビジネスKPI、メトリクス、ログ、セキュリティ監視、アラート(ページロード時間の増加やレイテンシの増加)
    付録

    • 監視は開発者自身が自主的に行うべきもので、属人的な権威があってはならない。
    • 監視とは「システムに対する高速健康診断」
    • 監視とは継続的なテストである。
    • ヘルスチェックの共通フォーマット"Health Check Response Format for HTTPS APIs"
      • https://tools.ietf.org/id/draft-inadarei-api-health-check-02.html
      • https://github.com/inadarei/rfc-healthcheck
        ToDo

         すべてのエンジニア(アプリ・インフラ問わず)に読んでもらいたい一冊。
        監視は「インフラエンジニアが片手間で行っていて、昔からのやり方を踏襲している」そんな人達が、この本を読むと目からウロコの一冊だろう。
        読んだ瞬間から、書いてあることを実践したくなる。


          コメント

          このブログの人気の投稿

          sendmailでの転送設定

          某システムにてメールを配信する機能を開発へ依頼。 受け取った後、PHPの mb_send_mail はsendmailが無いと動かない事実を伝えられる。 うちのメールサーバはPostfixですよ。。。 Σ(|||▽||| ) 仕方が無いので、WEBサーバにsendmailを立て DMZ 内のpostfixへリレーするようする。 意外と内部のメールサーバに転送する文献がなかったので、備忘録として残すことにした。 ■sendmail-cf-8.13.8-8.el5.i386.rpmのインストール 設定ファイルをコンパイルするm4コマンドを使う為に必要。     ・モジュールの確認           # rpm -qa | grep sendmail         sendmail-8.13.8-8.el5         sendmail-cf-8.13.8-8.el5         「sendmail-cf-8.13.8-8.el5」がインストールされていなければ以下を実施     ・パッケージのインストール           # rpm -ivh sendmail-cf-8.13.8-8.el5.i386.rpm     ・再度モジュールの確認           # rpm -qa | grep sendmail         sendmail-8.13.8-8.el5         sendmail-cf-8.13.8-8.el5 ■hostsファイルの確認           ・hostnameの確認           # hostname        ...

          Android端末の操作を自動化する

          システムの運用保守をやってると、必ず実機確認(サービス正常性確認)というモノをやらされる訳であります。 スマホアプリ操作なんかだと、複雑なうえに素早く実施しないとイケない。 はっきり言って、アラフォー男子には限界があります。そこで 自動化 を思いつきます。 FRep - Finger Replayer が有力そうだけど、Root化しないとイケない?業務端末では無理です!! 有償で良さ気なソフトもありそうですが、まずは自力でチャレンジ。調べて見るとadbコマンドを使ってタップやスワイプのイベントを端末に送信できることがわかりました。早速、作業に取り掛かります。 2015/05/05 時点でリリースされている最新版を使って開発環境を構築します。 開発環境となるPCのOSはWindows7 Professional SP1 64bit。 作業は全て管理者権限が付与されたユーザで実施しています。 1. Android SDK をインストール ここ からAndroid SDKをダウンロードします。 サイトの下の方に「SDK Tools Only」があるので、そこから[installer_r24.2-windows.exe]をダウンロードしてインストールします。 次にシステム環境変数の中の[Path]変数を編集し、以下のパスを登録します。 "C:\android-sdk-windows\platforms" "C:\android-sdk-windows\tools"    ※"C:\"はご自身のインストール先によって異なります。 2. PCにAndroid端末を繋げる ①Android端末本体の「設定」から「アプリケーション」>「開発」>「USBデバッグ」にチェック。 ②Android端末をUSBでPCに接続。 ③コマンドプロンプトを立ち上げ、adbコマンドで端末の接続を確認。  > adb devices 以上で準備が整いました。 3. 画面キャプチャを撮って、座標を調べる 次に画面を操作する為、座標を調べます。画面キャプチャをペイント等のアプリで開いてみましょう。図の左下に座標が表示されます。ここではFace...