そーだいなるらくがき帳

そーだいが自由気侭に更新します。

Webサービスは振る舞いをモニタリングするべきって話

f:id:Soudai:20171008002903p:plain

って話を明日のPHPカンファレンスでする予定でした。

ここにあるとおり、雨の影響により、子供の運動会が延期になり、PHPカンファレンスと被ってしまいました。そこで色々悩んでいたところ、スタッフの方が気を利かせて連絡を先にくださり、キャンセルさせていただくことにしました。正直年に1度のお祭ですし、会いたい人も沢山いるイベントですから断腸の思いでした。しかも僕は今年各地のPHPカンファレンスに出れなかったので会えていないPHPerの方が多く居ます。そんな中、今年の僕の成長ポイントであるモニタリングの話をできなかったのは残念です。機会があれば別のPHPの場所で話したいですね。そんな喋れなかったネタですが資料は事前に作ってあったので公開します。
(まぁ我々PHPerの世界線では資料は事前に作り、素振りは3回はするはずですからね!!)

speakerdeck.com

なお、資料をつくるときに参考にしたエントリーがこちらです。

blog.shin1x1.com

というわけで資料について少し補足をしていきます。

モニタリングするってどういうこと?

つまりはシステムやサービスが自分の予想通りに動いているかを確認しましょうってことが最初の章の話です。例えばWebServerなら次のような点です。

  • アクセス数は想定数を捌けているか
  • アクセスをさばく時、load averageなどで詰まる傾向が見えていないか
  • トラフィックはバーストに耐えれそうなキャパシティプランニング出来ているか

このような深掘りをどんどんしていくとモニタリングすべき項目はどんどん増えていきます。その結果、ZabbixのテンプレートやMackerelのPluginのようなモニタリングの塊がミドルウェア毎に作られたりしてるわけです。逆にこれは先人の知恵とも言える部分ですので積極的に活用していくことが良いでしょう。また例えばクライアント側やインターネットは自分たちの意図した事とは別のトリガーで意図しない挙動(多くの場合は障害など)を生み出します。そこに気付くためには正常な状態をモニタリングしておくことが大切です。その結果、変化にいち早く気付くことができて初動に大きな影響を与えます。

振る舞いをモニタリングするってどういうこと?

これは私自身、はてなに入ってから、もっと言えばMackerelに携わるようになってから感じている視点です。それが今回の一つのテーマだったのですがシステムパフォーマンスはわかりやすいですよね。先日もLinuxOSのシステムパフォーマンスのモニタリングについても話をしました。

soudai.hatenablog.com

ではWebサービスとして見た時はどうでしょう?例えば昨今のWebサービスは外部のサービスと連携し合うのは当たり前ですし、自分たちのサービスが違うサービスによって影響を受けたり、影響を与えたりすることも当たり前になっています。更にサービスは常に機能を追加・変更・削除することで進化しているのですからモニタリングの対象も常に変化しているはずです。ですのでWebサービスとしてどのようにあるべきかというところがモニタリングの勘所となります。もう少し説明するとサービスはServerに紐付いていないがシステム全体に影響するメトリックもありますよね?それも勿論モニタリングしましょうということです。例をあげますと例えば自分が運営するWebサービスがブログ・サイトならユーザの投稿数やカテゴリ別のアクセス数、課金アイテムの利用数のグラフなどを見たくなるでしょう。これはWebサービスだけでなくゲームなどでも同じようにダウンロード数や課金数、インストールされているOSのバージョンなども見たくなるはずです。そういった所をモニタリングしてWebサービスの振る舞いを知ることで自分たちのサービスに対する変更でユーザにどのように影響を与え、さらにそれがシステムにどんな影響を与えるのかわかりますし。その結果、正しいキャパシティプランニングを計画することが可能になってきますし、正しい変更だったかどうかを判断することができるのです。

推測より計測、計測より観測

観測は id:y_uuki くんが言ってる言葉でそれをそのまま パクった お借りしました。

blog.yuuk.io

私も何度か神に祈りながら障害対応したことがあります。インターネットは多くの善意によって成り立っているので簡単に壊れます。

ちょっと本題から離れたので戻しますがメトリックを取得してグラフを作った。困ったときに見るでは駄目だというのがここの主旨です。例えば何らかのモニタリングツールで情報を集めて収集しました。満足!っで終わってしまうとサービスやシステムの変化を知ることはできません。ちゃんと定期的にグラフを見る(モニタリングする)ことが大事、つまりは観測しましょうというのが伝えたいことです。測るではなく、変化を知る、だから観測が大事だと考えています。例えばMackerelチームですと2週間に1回、チームのエンジニアを全員集めてPWGというモニタリングする機会を作っています。

mackerel.io

これによってアプリケーション側、インフラ側ともに自分たちがやったリリースによるシステムの変化を知りますし、次のアクションがより良くなります。このように観測することで多くの事実を知り、よって未来を予測できるようになるのです。

手を動かした者だけが世界を変えることができる

最近ずっと登壇の最後の締めには id:onishi さんの言葉を載せてます。私にとっても心のメモに深く刻まれてる言葉ですし、カンファレンスやセミナーに来る人にとってとても大事な言葉だと思っています。勉強会などに行くといい話を聞いて気持ちが高まります。でもアクションを起こさなければそれは昨日までと同じです。だからこそPHPカンファレンスのような素晴らしいイベントに参加して刺激を貰った人たちはその日から何らかのアクションを起こして欲しい、そういう想いを込めてお伝えしています。サービスも私達が何かアクションを起こすから変化するわけですし、成長するのです。それはサービスだけでなく、私達自身にも言えることです。自分自身を前に進めるためにもまず手を動かしましょう。

最後に

今回、私用な理由にも関わらず登壇のキャンセルを快諾いただいたPHPカンファレンス運営委員の皆様には感謝をしております。本当にありがとうございます。また私のセッションに期待されて居た方が居ましたら、その皆様にはこのブログもそうですが引き続き、アウトプットしていきますので今後も変わらぬご愛顧をどうぞよろしくお願いします。

最後になりましたが私が行きたくて行きたくて最後まで本当に悩んだPHPカンファレンスは明日開催で今からでも参加が可能です。なのでこのブログを読んだ人は是非、明日のPHPカンファレンスに行くというアクションをすることからオススメします!

phpcon.php.gr.jp

2017/10/08 追記

大盛況のPHPカンファレンスだったのことで僕としても嬉しいです。
来年こそは参加するぞ!!