$30 off During Our Annual Pro Sale. View Details »

アプリケーションエンジニアこそ「監視」だよね!と私が考える訳 #phpkansai

アプリケーションエンジニアこそ「監視」だよね!と私が考える訳 #phpkansai

PHPカンファレンス関西2024での発表資料です
https://fortee.jp/phpcon-kansai2024/proposal/42712995-5f3e-4c68-a951-39584eac95a1

hideki kinjyo

February 11, 2024
Tweet

More Decks by hideki kinjyo

Other Decks in Programming

Transcript

  1. 自己紹介 • 金城秀樹 / きんじょうひでき • GitHub:@o0h / Twitter:@o0h_ •

    好きなFWはCakePHP • アイコンは 
 美味しい鮭親子丼の写真です 
  2. 色々と分かる ≒ 何も分からない • ただ「雑多に集めただけ」のデータは、何も語ってくれません • 使えないデータは存在しないに等しい • 参考: データと情報の違い

    https://ja.wikipedia.org/wiki/データ • 「数字」の裏にある「なぜ?」を想像するためのデータ収集 • 「物語」を読み取れるか?が、監視と仲良くなるためのポイント!! 
  3. 「かぼちゃを監視する」(例え話) あなたなら、 
 どの項目で「南瓜信頼性Pumpkin-Reliability」を測る!? • 匂い • 味 • 形

    • 黄色さ • 大きさ • 重さ • 糖度 • 収穫後日数 • 水分量 • 感触 • 弾力 • カロリー かぼちゃの「状態」を表すのには、どんな項目があるでしょう? 
  4. なぜ監視を行うのか • システムの提供したい「目的」を果たせているか?を監視する • 「CPU使用率」や「全APIの平均返答時間」を一生懸命眺めても・・ • これらのデータ自体には、意味が生まれにくい • こうした項目を理解すること!!!が、「監視を始める一歩」ではない •

    「いま使っているユーザーに何が起きている?」という物語 
 にこそ価値がある • 「サーバーの処理が追いつかなそう」 
 「いつもは早い応答が鈍っている」ことに気づくことが必要 • 数値や変化を可視化したら、その意味(=影響)を考える 
  5. 分解して考えると・・・ • 1つ1つは凄く単純なデータになる • 変化の有無、量が判断しやすい • 「重かったり、動きが変になっているのはどこ?」の目線 • コンポーネントでの分解 •

    アプリケーションサーバー?データベース?ストレージ?etc • 範囲での分解 • 全体?特定ページやユーザー? • 最大値の異常?平均?最小? 
  6. 複雑さにどう立ち向かうか?というのが大事 • 組み合わせるから「複雑」が生まれる • ある要素が、それ以外の要素に対して反応する関係性/作用が生まれる • 「DBが重くなって、レスポンスも遅くなっている」 • 単純と複雑を行き来しながら、物語を語れると勝ち! •

    いま起きている問題は何?どこで?を考えて、その発生要因をつきとめる! • 「DBが重くなったのは、CPU負荷が上がったからっぽい」 
 「リクエストや接続数の増加はない」「実行時間が長いクエリが増えている」 
 「さっき複雑な集計機能を出したからだ!」 
  7. 例えば② 遅いページを調べてみたら、ランキングの奥深くだったぞ  TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD

     TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD 
  8. 例えば② (ほとんどのユーザーが見ないページだから、気にしすぎなくて良いかな〜)  TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD

     TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD 
  9. 例えば②  TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD 

    TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD  TVUFLJQSPEVDUSBOLJOH QBHF TFD コレを踏まえた監視としては・・ • 応答速度について、 
 「トップページの基準」と「サイト全体の基準」を分けよう • トップページ = どんなユーザーにも影響を与える箇所(の例) • トップページは「サイト全体平均」よりも厳し目にする 
  10. 監視におけるアプリケーションの貢献 • アプリケーションのロジックが、複雑さに与えている影響は大きい • 「このクエリなんですか?」「それは、◯◯のページです」 • つまり、機能を作った人が 
 「これはこういう負荷をかけるかも」 


    「正常な動作をしていれば、そんなに負荷が上がるはずは・・?」 
 という予見を持てると最高になれるという話に • 設計・実装の予見 • リリース後、障害発生時の分解・掘り下げ 
  11. 監視★マインド • アプリケーションを作っている時に、 
 「動くものを」「役に立ちますように」の気持ちがあるはず • デプロイした後、運が良ければ予想通りに動くかも知れないし、 
 運が悪ければ動かなかったり問題を引き起こしたりする •

    「動くコードを書く」のと「書いたものが動くか見届ける」のは 
 非常に近い領域の話ではないかな、と考えます • しかも、それを他の人よりも上手くやれる可能性が高いんだぜ・・・とも 
 
  12. 「次の1歩」に★オススメ • 「インフラ系の知識」という意味では、↓の要素は抑えましょう • どうしたらCPUの利用率が上がるのか • どんな処理をしたら、メモリを消費するのか • ネットワーク越しのデータ量(転送量)って? •

    が!! 
 結局これは「ロジックの書き方」「データの扱い方」と直結するもの • 言い換えると、あんまりインフラインフラしていなくても、身につけたいことです 
  13. 参考書籍 • 個人的に、非常に強い影響を受けてるのが「入門 監視」です • 「ユーザー目線の監視」を始め、監視についての自分のコアになる概 念をいくつも提供されました • 「ユーザー目線の監視」「アラートは誰かを叩き起こすもの」「監視はスキル」 などが、特に好きな概念

    • 今回の発表よりは少し難しい(監視の実戦経験がある初級 者〜なイメージ)かも知れませんが、文量も多すぎずとっ つきやすい1冊だと思います “ հ “ “ “ 入門 監視 ―モダンなモニタリングのためのデザインパターン 
 オライリージャパン 
 Mike Julian (著), 松浦 隼人 (翻訳)
  14. 関連資料 監視周りで、自分が過去に発表した内容も貼っておきます 
 (必ずしも、今回の発表と対象者が同じものではありません) • 入門 入門 監視 (2019) https://speakerdeck.com/o0h/reading-practical-monitoring

    • やさしい監視ミートアップ vol.1 (2019) https://speakerdeck.com/o0h/monitoring-at-ease • 関連記事: https://tech.connehito.com/entry/monitoring-at-ease • やさしい監視ミートアップ vol.2 (2019) https://speakerdeck.com/o0h/monitoring-at-ease-2 • 監視と平和 (2019) https://speakerdeck.com/o0h/practical-monitoring-for-server-side-devs • エラーと向き合い、自信を持って サービス開発に取り組み、前に進む (2022) https://speakerdeck.com/o0h/phpcon-2022 • 関連記事: https://daisuki.nichiyoubi.land/entry/2020/07/01/123616