「入門 監視」読書会レポート vol.8

株式会社リゾーム システム企画・開発部 第4グループの尾古(@patorash)です。

入門監視 読書会の第8回目のレポートです。 第7回目のレポートは、こちらになります。

tech.rhizome-e.com

8回目レポート

今回は、「8章 サーバ監視」で、参加者は5名でした。

感想・意見交換

OSの標準的なメトリクス

  • メトリクスは取るが、アラートは設定しない。確かに狼少年になってしまう。数値ではなく、意味の方が大事。
  • 適切なインスタンスサイズを選ぶには、CPUやメモリの使用量を意識する必要がある。
  • topコマンドはよく使うが、freeコマンドは使ったことがなかった。topでもメモリの使用率はわかる。
    • オプションを使いこなさないと!
  • OOMkillerの呼び出しを監視するのは、なるほどと思った。
  • IOPSは下がったらディスクパフォーマンスに問題あり。
    • AWSだったらburst balanceを見ればいいはず。

SSL証明書

  • HerokuだとHerokuが面倒見てくれるので意識せずともよい。現在は特に監視していないが、以前はMackerelの外形監視でSSL証明書の有効期限を監視していた。
  • ドメイン更新・サーバー管理用のアカウントなども含め、お客様が契約した環境で動かす管理体制だと特にあるある。
    • 契約の段階でどちらがどこに責任を持つのかハッキリさせるのは勿論、通知が機能するようにチェックしておくことも必要。
  • 有効期限切れはゾッとする。特にワイルドカード証明書は範囲が広いので怖い。
  • SSL証明書の期限は監視しているが、更新方法がわからないのでやり方を共有してほしい。
    • => 読書会の後、共有されました。

SNMP

  • 使うのはやめましょう、と書いてあるので使うことはなさそう。

Webサーバ

  • ステータスコードが大事。エラーが起きまくっているとしたら、何かがおかしい。
  • 秒間リクエスト数やリクエスト時間を見る。
  • 大体エラーになってから問い合わせが入るので、事前に検知できて修正できていれば、問い合わせを減らせるかもしれない。

データベースサーバ

  • スロークエリは時々チェックしている。これはAPMツールを使っていたら教えてくれるからわかりやすいんだけれど、だからといってどう高速化できるか?キャッシュする等はよくやっている。
  • 実践ハイパフォーマンスMySQLはDB勉強会でもよく紹介されていたと思うけれど、普段PostgreSQLを使っているからあまりチェックしていない。
  • スロークエリはアプリケーション側の修正の話になる。
    • BulletでN+1は拾えているが、countよりsize、不要なオブジェクトを生成しない等、意識して行わなければならない。
  • RDSでクレジットが枯渇してIOPSが下がっていることがあった。
  • RDSを使っているならクレジットの監視もしたほうがいい気がする。
  • RDSだとPerformance Insights、New RelicだとAPMで遅いクエリを検出することができる。
  • DBのパフォーマンスチューニング難しい

メッセージキュー

  • ActiveJobのキューの数とかを見ればいいのかな?Sidekiqとか。
  • SC BASE *1 では帳票作成などの普通のJobに失敗すると、 Amazon SQS の デッドレターキュー (DLQ) から AWS Lambda に通知が行き、ログ保存した後に Amazon SNS を経て開発者向けの通知が飛ぶ仕組み。基本的にAWSに任せる感じ。

キャッシュ

DNS

  • 大昔に自宅サーバ立ててた頃にBind触ったなぁ
  • 自社では運用していない
  • Route53でほとんど運用している

スケジュールジョブの監視

  • バックアップが動いてなかったなどがあってはならないので監視すべきと。なるほど。
  • デッドマン装置は知らなかったが、タイムリミットを過ぎてもちゃんと動作していなさそうだったらアラートをあげる感じか?
  • BOND GATE *2 では、主にRundeckを使用
    • エラー通知はRundeckがやってくれるので便利
  • cronを使用している環境もある
    • エラーの監視が厄介
      • エラー発生→ログに出力→Mackerelでログ監視→エラー通知
    • ログを出力しないタスクもあるので、本に記載のような、コマンドがエラーになるとログを出力する方式はいいなと思った。

ロギング

  • syslogデーモンのドキュメントを読みましょう→はい。
  • ログをsyslogサーバに送ると二度と見なくなるからログ管理システムへ送りましょう。そうですね。
  • ログ分析にElasticStackが紹介されていた。取り組むかー。

まとめ

サーバ監視で何を監視したらいいか、メトリクスは取るがアラートは設定しない等、様々な学びがありました。結局はそのメトリクスの値に意味を与えるのは我々なので、メトリクスを取り、数値と向き合えということなのでしょう…。

SSL証明書の期限については、更新の仕方がわからないという話の後にすぐに更新の仕方が書かれているWikiのURLが共有されたので、非常によかったなと思います。

今回も監視するべき項目が明確になってきたなと感じました。

次回は「9章 ネットワーク監視」です。

*1: 売上管理業務をはじめとした、これからのSC運営に必要な機能を搭載した次世代SCクラウドサービス(ホームページ商品説明引用)

*2: BOND GATEは直観的で使いやすい、店長支援のためのSC・専門店向けコミュニケーションウェアです。(ホームページ商品説明引用)

「入門 監視」読書会レポート vol.7

株式会社リゾーム システム企画・開発部 第4グループの萩原です。

読書会の第7回目のレポートです。 第6回目のレポートは、こちらになります。

tech.rhizome-e.com

読書会の題材

前回に引き続き 入門 監視 ―モダンなモニタリングのためのデザインパターン を題材としています。

7回目レポート

今回は、「7章 アプリケーション監視」で、参加者は5名でした。

それぞれの感想・意見交換

メトリクスでアプリケーションを計測する
  • クエリの実行時間や応答時間以外に、何を計測するべきか。
  • アプリケーションパフォーマンス監視(APM)
    • そのままでも小綺麗な滝グラフ、それっぽいグラフは出るけれど、言われてみれば確かに。
    • APMを追加しだけでは何のコンテキストも把握していないというのは、そりゃそうだよなぁと思った。
    • 自分たちが計測したいものと向き合う必要がある。
  • 7章全体を通して StatsD の説明が多い。
    • StatsD を利用すれば、Logger などのように必要な箇所に追加しておくだけで良い。
      かなり細かい部分までデータ収集できそう。
    • 確かにメトリクスの組み込みは、病みつきになりそうな予感がした。
    • 自分たちのモチベーションに繋がるメトリクス取得ができると良い気がする。
      反応が得られないとやりがいを見出しにくい。
    • New Relic ではどう取り扱えばよいか確認しておきたいところ。
  • StatsD は聞いたことがない……。
    • CloudWatch エージェント、カスタムメトリクスでCPU使用率を取得していた。
    • 思い出すまでにいくらか時間がかかってしまったが、気付かないうちに恩恵を受けているのだな。
  • StatsD よりも Prometheus の方が良いという意見も……。
    • StatsDはドット区切りの記法になるので、書き方がバラける可能性がある。
    • StatsD が古株だからではないか。後発の技術の方が融通が効く。
ビルドとリリースのパイプラインの監視
  • パイプラインの監視・ログ出力は行っているが、得た情報を上手く利用できていない。
    • 現状、エラー時のトラブルシューティング程度にしか活用できていない。
      何かあった時に見る程度。
    • Webistrano でデプロイ情報を確認できるが、これらの情報を元に更に何かアクションを起こすことはない。
    • Heroku で誰がデプロイしたか記録されているし、Rundeck の方も時間の記録はされているが、やはり活用はできていない。
    • これやったの誰? が起きると困るから、誰が何をしたかも必要なんだろうなと。
      AWS では AWS CloudTrail がこれに当たると思われる。
  • デプロイ前後でアプリケーションがどう変わったかの監視は十分にできていないかも。
    • デプロイ前後で仕様変更にない部分に変化が発生したら異常ではあるが、問題はそれをどう把握すれば良いのかということ。
      メールやアラートの閾値を様々なものに付けるのは現実的ではないので、監視サービスのダッシュボードなどを流し見するような形になるのだろうか。
  • 本当に役立つのはアプリケーションやインフラのメトリクスと共に利用するメタ情報。
    • デプロイ履歴が監視サービス上で追跡できることは、パフォーマンスの向上・低下の確認や、障害調査時の原因特定に有用かもしれない。
    • 環境全体が動作しているかの確認は、どこに問題が発生しているか一目で分かるので便利。
  • メトリクスにデプロイタイミングをラベルとして付けておくと、その前後でどうなったかが一目瞭然で凄い。
    • New Relic ではデプロイによるパフォーマンス変化を追跡できるらしい。
  • SC BASE *1 では一部環境のデプロイに Rundeck を利用している。 現在進捗何パーセントか、成功・失敗したか、どのくらいの時間がかかったかが分かるようになっている。
healthエンドポイントパターン
  • ヘルスチェック用APIを作っておくのは良さそう。
  • 以前、バージョンとステータス一覧を表示させるページを用意し、異常を発見した場合は報告を上げるようにしようというやり取りをしたことがある。これを自動化するイメージかな。
  • エンドポイントにアクセスが可能なアドレスは限定する。
    • ですよね。その通りだと思う。
    • New Relic Synthetics の場合、IPアドレスが公開されている(Syntheticsモニター パブリックミニオンIP)。 これを利用してアクセス制限をかければOK(だと思う)。
  • 外形監視としてこのエンドポイントを利用しているが、よくある考え方だったのか。
    • ロードバランサーのヘルスチェックに使う一般的なURL名だと思っていた。
    • 確かにデータベースやデータストアにアクセスできなければアプリは使用できない状態なので、これらの情報もあった方がいいと思う。
  • データストアや外部APIを使用している場合これらも確認するとよいらしい。
    • やり過ぎるとエラーが返ってきた時に調査範囲が広くなってしまい面倒なような。
    • 複数のエンドポイントを用意するのがいいんだろうか?
  • 改めてHTTPステータスコードは正しく使おうと思った。
    そして構造化ログとして必要な情報をきちんと載せるようにする。
  • BOND GATE *2 では本で紹介している内容と同じく、データベースに接続して1レコード SELECT し、成功すればHTTPステータスコード200を返す処理を行っている。
アプリケーションロギング
  • syslog 正直あんまりよく分かってない。rsyslog もよく分かってない。
  • Ruby on Rails の Lograge が紹介されていた。
    デフォルトの production.log は見にくいので、導入しても良いかもしれない。
  • Ruby on Rails の複数行にまたがったログを、まとまった情報として見られるようになればいいのに。
  • ログ出力する場合は、ログをパースしていい感じに表示する環境・サービスがあれば、そっちの方がいいのかもしれない。
メトリクスにすべきか、ログにすべきか
  • ログエントリとして情報をデータベースに保存しておけば、後からこれらを加工・統計処理して使用することも可能なように見える。
  • メトリクスの方が良い場合とは?
    • メトリクスの方がシンプルだが、いくつも送るようならログの方が良さげ。
何のログを取るべきか
  • 何でもかんでも取りましょう! でなくて良かった。
    • 書いてあることにほぼ同意。
      ツールの問題なら一次情報を多く保存しておいた方が良いと思う。
    • 問題があった部分を探す時間を短くするためにも取捨選択は必要。
      ログが肥大化してしまい、拾ってこれない・検索しづらい状況はある。
    • 必要なログを選定するためにも、目的を見失わないようにすることが大事。
      ログを取得することばかりに気を取られるのではなく、ログの中身を見ておかないといけない。
    • 今までは障害発生時にアラートを出す意味で監視していたが、この本を通じて他の意味を持つログを出力する重要性も理解した。
      一方でログ出力にも一定のコストがかかる訳で、単に量を増やすのではなく、必要なログを必要なだけ取らないといけない。
      これは程度の問題になるので判断に迷うところではないだろうか。
  • 俺たちは何を取ればいいんだ?
    • ログインにかかる時間の計測から少しずつ追加していけば良いのではないか。
    • BOND GATE であればバッチ処理の時間? Rundeck で動かしているので取得はできている。
      例えば日付単位のメトリクスを New Relic 上で確認できるようにすれば、日に日に遅くなっているかを確認することができるようになるのでは。
    • 時間のかかる処理、失敗しやすい処理には、細かめのログがあった方がいいのかもしれない。
      失敗した場合に画面やデータベースを調査しないと分からない状態だと、気付くにしても調査にしても時間がかかってしまう。
  • BOND GATE では操作ログを取っているので、調査する時など便利ではある。
    問題はデータ量が多すぎる点。迂闊にSQLを投げることができないし、ディスク容量を圧迫するので何とかしたい。
ディスクに書くべきか、ネットワーク越しに送るべきか
  • ログをディスク上のファイルに書き込む方が良い。
    定期的に外部にデータを送る機能があるサービスも組み合わせられる。
    • Logstorage を利用しているプロジェクトを見たことがある。
    • ログの転送・AWS S3 での保管対応を行ったことがある。
      ログサイズが大きすぎるとフローの途中で詰まることがあり、小さくすると今度は AWS S3 に分割されたログが出力されて料金コストがかかる結果に。
    • 1ヶ月程度の期間、New Relic 上で確認できるようにしておくのが良さそう。
  • データベースに保存しておくと、データ中継やバックアップはしやすそう。
    • NoSQLデータベース? Elasticsearch?
    • データベースバックアップにかかる時間や、データベース自体の容量が増えそう。
    • Django Admin が管理画面の操作ログを取得しているが、ログの量が膨大なため Heroku の無料枠を超えることも。一長一短はあると思う。
マイクロサービスアーキテクチャを監視する
  • マイクロサービスは監視の問題も含めてだが、先進的過ぎるような気が。
  • サーバレス・マイクロサービス・分散トレーシングは、そもそもよく分からない……。
  • 分散トレーシングの仕組みは理解できるが、実際の実装・設定はリクエストIDの受け渡しが常に付いて回る訳で。
    • AWS X-Ray や New Relic のようなサービスを利用するのが良いんだろうか。
  • Zipkin は勉強会で聞いたことがあるけれど、マイクロサービスから縁遠い生活を送っているので、どこの世界の話や……みたいな気分だったのを覚えている。
  • マイクロサービスにすると1つ1つはシンプルだけど、異なるところで複雑さが生まれてくるよなぁ……と思う。
  • これもまた慣れの問題かもしれない。Zipkin に慣れていたら、どうということはない的な。でもやっぱり複雑。
  • マイクロサービスアーキテクチャの採用は、成熟した組織でないと厳しいのではないだろうか。
    • 技術選定や設計の段階からモノリシックなアプリケーションとは異なる。
    • 新しい技術に臆さず知識を吸収していけるようなスキルは必要に思う。

まとめ

healthエンドポイントの利用やStatsDによるメトリクスの取得など、あまり『監視』を意識せずその恩恵にあずかっていたようです。
既製のサービスをそのまま利用していると、自分たちが計測したいこと・アプリケーションのコンテキストを反映せずに使用してしまうことも……。今後は『自分たちのアプリケーションでは何を監視したいのか・監視すべきなのか』を更に意識して利用していきたいと思います。

エンドポイントによるヘルスチェックや、ログの収集・送信など基本的な部分はどのプロジェクトも問題なく実施できている様子。 今の方法が基本から逸れていないことを再確認できました。

一方で取得後のデータを活用し切れていないのではないか、という課題も浮き彫りになりました。 リリース後のパフォーマンス追跡、操作ログの管理方法など、当書を通じて改善すべき点を見出すことができました。

次回は「8章 サーバ監視」です。

*1: 売上管理業務をはじめとした、これからのSC運営に必要な機能を搭載した次世代SCクラウドサービス(ホームページ商品説明引用)

*2: BOND GATEは直観的で使いやすい、店長支援のためのSC・専門店向けコミュニケーションウェアです。(ホームページ商品説明引用)

「入門 監視」読書会レポート vol.6

株式会社リゾーム システム企画・開発部 第3グループの渡邉です。
読書会の第6回目のレポートです。 第5回目のレポートは、こちらになります。
tech.rhizome-e.com

読書会の題材

前回に引き続き 入門 監視 ―モダンなモニタリングのためのデザインパターン を題材としています。

6回目レポート

今回は、「6章 フロントエンド監視」で、参加者は6名でした。

それぞれの感想・意見交換

フロントエンドのパフォーマンス・監視について
  • フロントエンドのパフォーマンスについては気にはしているが、監視をするという考えはなかった。
  • JavaScriptはbody閉じタグの直前で読み込め」とか、「CSSはheadで読み込ませるけど書く場所はなるべくまとめる」とか、「アセットパイプラインで全部ひとまとめにしてやる」とか、「なるべく圧縮した方がいや使用頻度が高いならCDNを使え」とか、そんな話もあったなどと懐古。
  • 以前はチャッチャとできるくらいは高速化に取り組んでたりしたけど、そっち専業ではないので、最近はあまりキャッチアップできてない。
    • PageSpeed Insightsを使ったりしていたくらい。
  • 去年やった社内ISUCONを思い出しつつ読んだ。当時はN+1の改善に注力していたが、画像サイズが大きいとかの問題もあったな。
  • ゴール=動き続ける×=素早くロードされる○
遅いアプリケーションのコスト
  • 早くすることでページビューやコンバージョンの改善につながるというのは、そうだろうなと思う。
    • やはり「遅いから使いたくない」とか言われたら負けだと思う。
  • フロントエンドのパフォーマンスチューニングは、沼なので、ずっとそればっかりやってもいられないのだが、頃合いを見ては取り組む、というのはやっていくべきだろう。
  • ECサイトはパフォーマンスの影響がかなり大きそう
    • 人によっては買い物でストレス発散したりするぐらいだから。(ECサイトが遅く)気分が良くないと買い物する気にならなそう
  • 担当サービスでも、ページ表示が遅いと言われることがある。
    • ほとんどはSQLが遅いので、改善できる箇所は積極的に改善していきたい。
  • 遅い事が悪いと直感的に理解している
    • 調べ物してて読込遅いサイトに行くと、すぐ別のサイトに切り替えるなあ
DOM
  • scriptタグがあると、そこでDOMのパースを停止してしまう。昨今は、async属性をつけて非同期にロードすればいい。
    • なるほど。やってたような。
  • 大量のscriptをロードせずに、少しにしたほうがよい、と書いてあるが、最近は多分事情が違って、HTTP2やHTTP3を使って小さいファイルを並列でロードしろっていう方向だと思う。
    • webpackでよく「JSのファイルサイズがデカすぎるよ!」て警告出てるし。1つのファイルにするのって、ファイルサイズが大きくなるため、初回ロードがかなり遅くなる。2回目以降はキャッシュが効くからいいんだけど。
    • 昔はJSをモジュールにできなかったのでバンドルせざるをえなかったが、モダンブラウザだとデフォルトでimportをサポートしているものもあるので、そろそろバンドルするなっていう流れになるんかなとか思う。
  • Reactの仮想DOMとjQueryのDOM操作のように、同じDOMでもライブラリによって仕組みが違うこともある。
パフォーマンスのメトリクス・監視/計測サービス
  • Google Analytics、名前はよく聞くけど、何かは分かっていない...
  • Google Analyticsアクセス解析などの目的で用いるものというイメージが強かったが、調べてみるとサイトの速度などフロントエンド側のデータ収集や可視化なども行ってくれているようなので、下手に自分であれこれするよりは任せてしまった方が良いと思われる。
  • Navigation Time API
    • 開発者ツールのネットワークタブに出てくるあれかな。
    • 使い方はあまり理解していないので確認する。
  • Speed Index
    • B-PARKのサイト作成の時に色々確認してた
      • 特にホーム画面のところが重かったからlazysizes導入してページ下部の写真は遅延読み込みさせたりした
  • PageSpeed Insightsなどの計測サイトは利用したことがあり、指標の部分にSpeed Indexも出てくるが、その程度の利用。
シンセティック監視
  • 単なる外形監視ではなく、サービスのロード時間とか表示時間とかをビジュアルで教えてくれるっぽい。WebpageTestを軽く動かしてみたら、そんな感じだった。
  • パフォーマンスへの影響をCIで計測できるのは便利
  • 自動テストで継続的にパフォーマンスを測定するのはありだと思う。

まとめ

フロントエンド側のパフォーマンスについては、過去に実施した手法や教訓の話、PageSpeed Insights等の計測サイトを用いたパフォーマンス計測の話が挙がりました。
継続的な監視・パフォーマンス計測については、あまり実施できていませんでしたが、Google AnalyticsやNew Relicを用いたログやメトリクスの取得・CIでの計測等、実践できそうな様々なヒントを得られることができました。
また、(主に私が)Google Analyticsについてあまり詳しく知らなかったのですが、実際にGoogle Analyticsを使用している例を見せてもらい、活用方法や取得できるメトリクス等について知ることができました。

次回は、「7章 アプリケーション監視」です。楽しみですね!

「入門 監視」読書会レポート vol.5

株式会社リゾーム システム企画・開発部 第4グループの平松です。

読書会の第5回目のレポートです。 第4回目のレポートは、こちらになります。

tech.rhizome-e.com

読書会の題材

前回に引き続き 入門 監視 ―モダンなモニタリングのためのデザインパターン を題材としています。

5回目レポート

今回は、5章「ビジネスを監視する」で、参加者は5名でした。

それぞれの感想・意見交換

ビジネスKPI

  • KPIはメトリクスって言われたら確かに。
  • これらのメトリクスはサービスを作るときに取得できるように設計しておかないと、次の打ち手を考えるときのデータがない。
  • 月次での推移とか作ってみたら良さそう。解約数とか、アクティブユーザー数とか。
  • 結局、お客様が儲かるシステムを作らないと、現在進行系で困るし先も続かない。
  • お金について語れると強い。
  • 「お客様は喜んでいるか」これを開発側が意識する機会が不足している。
  • ビジネスKPIを確認できるダッシュボードがあれば開発以外の人がよく見てくれる場所になるかも。
  • ビジネスKPIになるうる指標は営業と開発の橋渡しになりそう
ネットプロモータースコア
  • ツールやアプリを使用している時やアンケートで出てくる問いにはこのような意味があったのか。
    • この手のコストが関与しないアンケートが、どの程度信頼できるデータなのか疑問に思っている。
  • アプリを使っていて「評価してね」って出るのはこれの関係か。
  • NewRelicだとApdexスコア?
  • 開発としてもどこに満足しているかなど知っておきたい
顧客生涯価値(LTV)
  • これはSC業界でやっていそうな視点
顧客獲得単価(CAC)
  • SC BASE*1だと、お客様の環境へ導入するまでに、一定の期間やコストがかかっている話は度々聞く。
    • それは現在の運用を補うための機能追加や修正コストであったり、関わる人数が多く施設全体への周知コストがかかるであったり、導入時の機器設置や初期設定であったり。
    • これらを集計・グラフ化する術というのはあるのか。数字としては出ていそう。
  • 契約が増えればいいというわけではない
    • 採算が取れるかという意味でも大事だと思う
ランレート
  • 貯金残高を月々の支出で割って一喜一憂するあれの会社版だろうか。
    • 円安の影響なども考えると実際の計算はより複雑そう。
アクティブユーザ数
  • ユーザ数に加えて、いつ使われているか、どの機能を使っているかなど詳細がわかれば開発や改善の優先度を決めやすい

2つの事例

  • 事例から想像できるだけでも、いろんなメトリクスが取れる。
    • SC GATE*2で考えてみると、検索実行回数、各機能のビュー数、アクティブユーザー数、Excel出力回数(機能ごと)とかはいけるかもしれない。
  • もしページ毎のアクセス数や操作の流れを集計・分析していれば、客観的な数字から改善点を求めることができて良いのでは。
    • ある操作をメニュー経由で頻繁に繰り返しているなら、ショートカットを設置するだけで便利になる可能性があるなど。
  • 気づきを得るための監視。
    • 正常よりエラーをよく見たり、エラーとユーザー利用の相関性を見ることが大事
  • BOND GATE*3だと、ショップのログイン回数や各機能のアクセス数とかのメトリクスを取るのが良さそう。
  • Google Analyticsでいろいろわかる

ビジネスKPIを技術指標に結び付ける

  • レイテンシをつけておくのは良さそう。
  • 失敗率やレイテンシに関するメトリクスも重要、なるほど。
  • ここで言われている失敗率は何を含んでいるのか
    • ユーザー側の設定ミスなども含めるのか等

自分のアプリケーションにそんなメトリクスはないという時は

  • ないなら作れってことだよな...
  • 出すように変更しましょう

会社のビジネスKPIを見つける

  • ビジネスKPIを定義して、社員がいつでも確認できるようにしてみたい
  • スプリントレビューで責任者とリーダーが隔週で3時間割いてくれるので、各々の情報や知見の共有もできている。
  • 専門外の人と話をするというのは大事だと感じた
    • どうしても枝葉の方ばかり気にして議論してしまうことがある
    • 広い視点を得るためには専門外の人と話すのが良い
    • 大事な見落としにも気づくはず

まとめ

ビジネスの観点から監視を行うという内容で各々ツールやアプリを使っていて経験したこと、また担当しているサービスに絡めた話などで議論しました。 この章では事業責任者からの質問に答えるための方法を学ぶというものでしたがこれらの知識を得ることで開発側から経営層や営業へのアプローチも可能になってくるのではないかと思いました。
開発者という立場からビジネスについて考える機会があまりなかっただけに今回の読書会は会社のビジネス面に対して開発側ができることについて深掘りすることができたのではないかと思います。
次回は「6章 フロントエンド監視」です。

*1:売上管理業務をはじめとした、これからのSC運営に必要な機能を搭載した次世代SCクラウドサービス(ホームページ商品説明引用)

*2:全国のSC・百貨店5300施設、24万ショップ、10万のショップブランド、4万のショップ 運営企業等の情報を搭載したSC&ショップ検索サービス(ホームページ商品説明引用)

*3:BOND GATEは直観的で使いやすい、店長支援のためのSC・専門店向けコミュニケーションウェア(ホームページ商品説明引用)

「入門 監視」読書会レポート vol.4

株式会社リゾーム システム企画・開発部 第3グループの藤岡です。

読書会の第4回目のレポートです。 第3回目のレポートは、こちらになります。

tech.rhizome-e.com

読書会の題材

前回に引き続き 入門 監視 ―モダンなモニタリングのためのデザインパターン を題材としています。

4回目レポート

今回は4章「統計入門」で、参加者は4名でした。

それぞれの感想

システム運用における統計を学ぶ前に
  • アラートが鳴りすぎるのは良くないので、フラッピング検出によるアラート制御が害悪か判断しかねる。
計算が救いの手を差し伸べる
  • 過去のログも記録する、統計を見て何か掴む。
  • AWSを使って過去ログを記録するのが当たり前になっていた。使いこなせてるかは別。
統計は魔法ではない
  • 恣意的な統計の使い方をすれば、必然そういう数字が誇張されて出てくる。
  • 計算方法の選択や実際の計算を間違えることも考えられる。統計を道具として使うなら、プログラミング同様、理解してから使わないといけないのだろうと思う。
移動平均
  • スパイクを無くして傾向を見やすくするのはよい。
    スパイクが見えなくなるという欠点はあるので、データの蓄積をしておくことが大事。
  • 移動平均は全体のおおまかな値の変化を確認するのに便利そう。
  • 多用している気がする。
中央値
  • よくある例は年収、こういうケースだと平均は役に立たない。
  • 他にどういう時に使えばいいかイメージがわかない。コア層の把握?
周期性
  • パターンを見て、いつもと違う場合は何か気づくことがあるかも。
  • 周期性を見て、対策するべき時間帯とか考えていくのも大事だなと思う。
  • *1BOND GATEは日単位で見ると朝、(昼)、夕方にWebリクエスト多め。週単位だと金曜日が多めの環境もある。
  • 毎日眺めて、初めて得られるものの気がする。
分位数
  • あまり馴染みのない数値。
  • Herokuのメトリクスページにレスポンスタイムの分位数が表示されている。
  • 外れ値を無視して基本的な性能を表してくれるので、中央値の金持ちがいないケースにするって感じかな。
  • データの大部分の傾向は分かるが、ある程度のデータは捨てられるので、平均値出すのは駄目。
標準偏差
  • 正規分布している場合しか信用ならないので注意。
  • 監視ではあまり使わないほうがいいということが分かった。
章のまとめ
  • あまり実数ばかりを見ていても分からないことがあるので、ふんわり傾向を掴むことが大事だなと思った。
  • データポイントに上限下限があるか確認しよう。閾値を考える時に意識したい。
  • ディスク使用率・使用量、両方あるけど、どちらを監視すべきだろうか。
    => 両方監視するべきだと思う。

まとめ

実際に、Herokuのメトリクスを開いてレスポンスタイムの表示確認や利用シーンについて議論しました。
また、MackerelやNewRelicで各製品にどのような周期性があるか確認し、傾向を知ることが出来ました。
これらの統計値を上手く使って、改善出来ればと思います。

次回は「5章 ビジネスを監視する」です。

*1:直観的で使いやすい、店長支援のためのSC・専門店向けコミュニケーションウェアです。(ホームページ商品説明引用)

「入門 監視」読書会レポート vol.3

株式会社リゾーム システム企画・開発部 システム管理のあめぎです。

読書会の第3回目のレポートです。 第2回目のレポートはこちらです。

tech.rhizome-e.com

読書会の題材

前回に引き続き 入門 監視 ―モダンなモニタリングのためのデザインパターン を題材としています。

3回目レポート

今回は3章「アラート、オンコール、インシデント管理」で、参加者は6名でした。

それぞれの感想と議論まとめ

どうしたらアラートをよくできるか?

アラートのメール通知は反対派多数 ※参加者全員
  • 誰も叩き起こせないし、スルーしてしまう可能性も高い。SMSに送るのはよくある。
  • 一般的な使い方は「期限に余裕があり、期限までに目を通していればいい」「届いていない・見ていない可能性も許容する」
  • メールボックスに張り付いているのも、緊急度の高いメールが届いていないか気にするのも疲れる。
  • RundeckのJob失敗はメール通知しているが、確かに埋もれてしまう事がある。
  • 業務関連のメールと混ざると読まない。見落とす。うんざりする。
手順書を書こう
  • 最近バッチ処理失敗時の対応手順書を作成した
    • 作成して共有することで誰でも対応出来るようになったと思う
  • 今は設定ファイルがそのままインフラ構成・依存性を表す絶好の資料になっている(DockerfileやCloudFormationなど)
    • ない時代は大変だっただろうなと思う
  • よい手順書は質問に答えるように書かれたもの
    • ここまで丁寧に実際かけているのか?
    • 書けた覚えがない…気を付けたい
  • 作れていない手順書は正直ある…
固定の閾値を決めることだけが方法ではない
  • 使用量の変化量を監視するのはいいかもしれない
  • 今朝もメモリの使用率が閾値を超えているアラートが来た
    • サービスの性質上、ある時間帯になると利用増えるので超えるのは問題ないかなとは思う
    • 変化量でアラートを作るのも難しい
    • ディスク使用率は変化量を見るのも良いかもしれない
アラートを削除し、チューニングしよう
  • なんのために監視をしているのかの定義の見直そう
    • オオカミ少年のままにしない強い意志が必要
    • 自動復旧ができるからk8sとかが流行ってるのかもしれない
    • アラートは自動復旧に失敗してからでよい
  • CPUやメモリ使用率がある値を超えるとアラートを発信している
    • 特にアクションもしていないので減らしてもいいかもしれない
メンテナンス期間を使おう
  • SC BASEでは本番メンテナンス前にMackerelの外形監視を時間指定でミュートしている
  • メンテナンスモードにしないとデプロイ出来ない仕組みを入れた事があった
  • 静観してくださいって連絡をする事があった
    • アラートをミュートしていたのか
まずは自動復旧を試そう
  • delayed_jobが落ちたら自動復旧と同時にアラートが鳴る
    • 自動復旧に失敗したらアラートの方がいいなと思った
  • 基本は何かを見つけて再起動!
    • サービス維持に繋がるならシンプルでも立派な自動回復なのか!
    • オンプレの古い機器を無暗に再起動するのは怖いからほどほどにしよう
オンコール
  • 月に2日程度休日に担当になる
    • 昔はCPUやメモリ使用率のアラートも保守端末に届いて落ち着けなかった
    • 最近は問題が起きることは少ないので精神的に楽になった
  • オンコールローテーション。ここの組織デザインが大事。
    • オンコールは精神を削る
    • お酒も飲めないし(お酒が好きな人は…)出かけるのも難しい
  • オンコールの内容を次の週の会議に取り上げる計画を立てる方法は重要だと思う
誤報を修正する
  • アラートを整理してチューニングを行うというのは改善手段として優れていると思う
無用の場当たり的対応を減らす
  • 「触らぬ神に祟りなし」的な対応をしてしまうこともある
    • お金と要望がない限り修正できない契約パターン
    • 仕様や実装経緯が不明
    • 監視・開発だけでなく体制を整えることも大切
  • 監視は修復してくれない。直すのはあなた。その通りですね。
インシデント管理
  • 緊急時の対応マニュアルは必要
    • いざというときに組織としてどう対処していくか
    • 会社全体や法務としてどう対応するかもあればベスト
      • 場合によっては情報漏えいなども絡んでくる
    • アラートでチケットの自動作成までは出来ていない
      • 記録漏れのないように改善していきたい
  • 現場指揮官・スクライブを関わらせないのすごく大事
    • 特定の誰かが全部やっている状態では、客観的な記録が残らなかったり、コミュニケーションが歪んだものになる可能性がある。
  • コミュニケーション調整役はめちゃくちゃ大事
    • まさにコード書いて直してる人はそれに集中するべき
社内の課題は?
  • すべてのアラートをPCメール・携帯メール・Teamsに送りがちなのでいいようにしたい
  • どのような監視・アラートがあって、どこに通知されているのか・通知する必要があるのかを整理したい
  • アラートが混在しているので良くない(システムの利用に影響のあるアラート・影響はないけど注意は必要なアラート)
事例・アイディア など
  • SC GATEではTeamsに送られるようになっている
  • 注意が必要だがすぐにアクションが必要でないアラートは社内チャットにしよう
  • 手動復旧じゃなくて自動復旧にできるものはしよう
  • 調査の仕方を手順書に書いておく
    • ネクストアクションが書いてあるといい
      • papertrail / bugsnag / Mackerel / New Relicをみてみましょう
      • 判断できるかはわからないけれど、見てみたら、いつもと違う何かがあるかもしれない。

まとめ

アラート、オンコールについてはメンバー各々思い当たる事があったようです。 どうすれば互いの負担を減らせるか、良い体制を整えられるか意見を交わせるよい機会になったように思います。 アイディアも出てきましたので、少しでも取り入れて改善していきたいですね。

次回は「4章 統計入門」です。

「入門 監視」読書会レポート vol.2

株式会社リゾーム システム企画・開発部 第4グループの萩原です。

読書会の第2回目のレポートです。 第1回目のレポートは、こちらになります。

tech.rhizome-e.com

読書会の題材

前回に引き続き 入門 監視 ―モダンなモニタリングのためのデザインパターン を題材としています。

2回目レポート

今回は、2章「監視のデザインパターン」で、参加者は6名でした。

それぞれの感想

組み合わせ可能な監視
  • UNIX哲学「一つのことを、うまくやれ」
    • ここでもUNIX哲学が出てくる。
    • 改めて監視に当てはめて聞くと、なるほどと納得した。
    • 聞いたことはある(が、内容を理解はしていない……)。
  • 専門的なツールを組み合わせる方が、複合的なツールを扱うよりいいのかもしれない。
    • 個別にも使えるし、組み合わせても使える。一つだけ乗り換えることもできる。
    • 必要なものだけ使用することで、無駄を省くことができる。
      ただ、どんな監視が必要かを明確にしておかないと持ち腐れになってしまう。
  • Elastic Stack が正にこれ、やはり気になる。
監視サービスのコンポーネント
データ収集
  • 最近の主流はプッシュ型でしょう。
    • プル型では監視対象の増減管理などが面倒そう。
      プッシュ型であればデータをプッシュしなくなるだけなので楽そう。
    • スケールしやすいメリットも、クラウドサービスを利用しているなら重要。
    • 送りたいものが送りたいところに送る自発的・合理的なツール。便利そう。
  • BOND GATE*1 では、以下を利用している。
    • 外形監視としてプル型
    • インフラ等のメトリクス取得にはプッシュ型
メトリクス
  • 「カウンタ(Counter)」
    • CPU使用率・メモリ使用率
  • 「ゲージ(Gauge)」
    • アクセス回数・ログイン回数
  • HDD使用量はゲージっぽさがあるけれど、カウンタの役割にも似ている。
    Nヶ月後に80%超える的な予測ができる。
ログ
  • 非構造化ログが普通と思っていたが、JSONで出力すればいいのかと気付かされた。
  • JSON・キーと値のペアなど、ログが見やすい。
    • 追加したキーの分ログサイズが大きくなるデメリットはあるが、ログが読みやすくなるメリットにおいて勝る。
    • 考えれば考えるほど、JSON出力して Elasticsearch に食わせて Kibana で検索すればいいのでは……。
  • Webアプリを作成する視点から見ると、構造化ログの取り回しが良さそう。 非構造化ログだとコンソールのように出力するか、構造化ログに直してから使用するか。
  • BOND GATE では、Nginxログを Elasticsearch + Kibana で閲覧するためLTSV形式で構造化している。 New Relic でもログを見やすく改善したい。
データストレージ
  • 「メトリクスの間引き」
    • ログの量もバカにならないため、間引くというのはなるほどなと思った。
      確かに過去のCPU使用率など細かく見る必要がない。
    • 料金コストがもったいないので、運用ルールを作成し削除を行うようにしたい。
  • 必要なものはどれくらいの周期で見るかをきちんと考える必要がある。
    毎分見る必要ないものなど当然ある(CPU・HDD空き容量)。
  • Webアプリが出すログにはデータベース保存・ログファイル出力・直接Amazon CloudWatchに送るなど種類があるが、 どれが監視の場面で使いやすいかをあまり考えずに、デフォルトで使っていることが多い気がする。
  • BOND GATE では、ログを Fluentd で Amazon S3 へ転送・バックアップしている。
可視化
  • 価値あるダッシュボードとは?
    • あまりダッシュボードを使ったことがなかったので気になる。
    • 何を見れるようにすればいいのか分からなかった。何を見るべきかを学びたい。
    • Tableau などのデータ可視化ツールは、これにあたるのか。
  • Service Level Agreement(SLA, サービス水準合意)
    • 可用性をあげるのはAWSをもってしても難しいので、ほどほどにしておけという話。
    • SLAが出せるのは、アプリケーションの稼働率が算出できるから。 これ以外の目的・場面でどのように監視で得たデータを利用していけば良いのだろうか。
  • 自分でダッシュボードを作るのは難しい。
    • 何をダッシュボードに表示させるべきなのかが、よく分からない……。
    • 何のデータを欲しているか、正しく分析出来ていないからか。
    • 機能ではなくデザインを追求して、余計なことをしてしまうことはよくある。
      作る側は綺麗に色々なグラフを並べたくなりがち。監視という目的を忘れないようにしたい。
    • New Relic のデフォルトのダッシュボードで十分な気もする。
アラート
  • 「何か問題がおきた時にアラートを出すことが監視システムの目的だと信じている」
    • 何か問題が起きた時にアラートを出すことが監視システムの目的、ではないのか?
    • どうしてもWebアプリの範囲しか見えていないと、障害やエラーへの対処と紐付いてしまう。
      もちろん開発中に明らかに時間のかかる処理などはパフォーマンスを確認するが。
  • 「監視は、質問を投げかけるためにある。」
    • 分かるような、分からないような……。
    • CPU使用率が高いからといって問題とは限らないとか、高い原因を探るための判断材料とかいうことだろうか。
  • アラートには、本当にまずいアラート・気付きのあるアラートの2種類が存在する。
    • 運用的にはセーフだが気付きのあるアラートを作ることも大切なのではないか。
ユーザー視点での監視
  • ユーザーから監視するとはどういうことか?
    • とても大事な視点。監視のスタートはお客様からだったか。
    • 真っ先に浮かんだのは外形監視。まずはアプリケーションが動いているかどうかが重要。
    • どの機能がよく使われているか分かれば、サービス改善の順番を考えるのに使える。
    • 時間帯別のアクセス数がわかれば、スケールアウト・スケールイン戦略を立てることができる。
      常時同じスペックのサーバを動かすよりはコスト削減に繋がるだろう。
  • サービスを継続させるための監視なのに、ユーザー視点を度外視していたら、それは監視と言えないのでは。
  • 「HTTPレスポンスコード(特に HTTP 5xx 番台)」
    • New Relic APM でデフォルトのダッシュボードに表示されるようになったので見ようと思う。
  • 監視ツールの具体的な活用方法が見出だせないでいる。
    • リクエスト時間、ページの表示速度などたまに見るが、そこから発展して何かするとかはあまりない。
    • 結局障害発生時しか見ないので、常時監視ツールを開いておく必要があるかどうか。
作るのではなく買う
  • 監視ツールの設計・作成による恩恵をどう捕らえるか。
    • SaaS によるアウトソースを行うことで、溜まりにくい知見もあるのではないか。 確かに直接売上をもたらさないかもしれないが、運用スキルは上がるのではないか。
    • これらの経験を踏まえた上でコスト面・監視対象を考慮に入れたSaaS選定ができるようになれば次に繋げていくことができる。
    • クラウドサービスを利用した方が良いという結論も、 共有のレンタルサーバVPS自宅サーバの運用経験しているからこそ出てくるものだと思う。
    • 優先順位の問題ではないか。車輪の再発明や自作ツールの作成により技術を高めるか、 自社プロダクトの専門分野に特化した開発に注力するか。
  • SaaS にしても詳しい人が必要になるので、コスト削減に繋がるかは疑問が残る。
    • メンテナンスコストを考えれば理解できるが、他のコストについても考慮に入れるべきでは。
    • メンバー全員に対して教育コストがかかると考えると、既製ツールを使っても結構なコストになりそう。
  • 監視の仕組みが成熟していない時は買い、システムがツールを超えて成長してきたら何かに特化した自作ツールを作る感じ。
    • 現状は、監視のサービスを使って基礎を整える段階っぽい。
    • 監視ツールはSaaSOSSをそのまま使う形にしがちだが、あるところまではこれでいい、ということが分かったのは大きい。
  • 安いしどんどん便利になるし導入も簡単です使いなさい。
    • はい。
  • 自分達で構築するよりはSaaSを使うか、出来の良いFOSSを使う方がいい気はする。
継続的改善
  • 「継続は力なり」
    • 常に監視を行う習慣を身に付けるとともに、設備や環境も整えていかねば。
  • ふと「コードと向き合い過ぎてませんか? サービスと向き合えてますか?」という問いが頭に浮かんだ。
  • インフラやログは一度作ると、動いているうちは更新が滞りがち。
    バージョンアップは大前提だが、より良い機能が増えたなら活用するなど、常に良い監視ができるように改善するようにしていきたい。
  • 完成と思わない、変わるのが前提。
    実用性重視で取り組むのが良いのだろうなと感じた。
  • 段階を踏んで監視を変えないと、仕組みが整ってない状態で進んでしまい失敗する。
    とりあえず、変えてみたになる。

意見交換

「価値あるダッシュボード」とは

Q.「価値あるダッシュボード」とは何か、具体的なイメージが掴めていません。
これまでの業務で行ったカスタマイズ事例などがあれば知りたいです。

A.New Relic APMダッシュボードを眺めつつ、備わっている機能の確認やダッシュボードについての議論を行った。

  • New Relic APM を見てみる。
    • CPU利用率がスパイクしている部分を拡大。
    • 遅いクエリのリストを確認。
  • ダッシュボードのカスタマイズについて。
    • 複数のダッシュボードを作ることはできる。
    • プランや仕様によってはダッシュボードに表示できないものもある。
    • 見たい情報をダッシュボードに集めるようにすれば、それが「価値あるダッシュボード」なのでは。
  • 開発者・営業・サポート・ユーザー視点など、様々なダッシュボードがあるのでは。
    • 開発者にとって遅いクエリの情報は重要だが、営業には不要。
    • 同様に立場や仕事内容によって、必要な情報は異なる。
    • こういった監視方法もユーザー目線の監視なのかもしれない。
  • アクセス解析は広義の監視と捉えても良いのではないだろうか。
  • システム利用率が低下したときにアラートを出してはどうか。
    • 疑問をなげかけるアラート。見る価値がありそう。
    • カスタムメトリクスでログイン回数を集計し、ログイン率が低い場合にアラートを出すなど。
    • アクティブユーザー数を分析することで、事前に何らかの対策を打つことができるのでは。 営業視点で考えれば減少というのは大事な事象なので、共有した方がいいかもしれない。

まとめ

現在の監視体制はデザインパターンに即したベストプラクティスなのか、開きがある部分はどのように業務に取り入れていったらよいか、あるいは今はまだ取り入れない方がよいのか。

取り扱うプロダクトはメンバーそれぞれですが、監視という共通の括りで感想・意見交換を行う中で、具体的な改善点が見えてきたようです。

まだ合点がいかない部分も疑問が残る部分もある状態ですが、「第Ⅰ部 監視の原則」もやっと半分というところ。読書会を進めていく中で知識を得、より理解を深めていければと考えています。

次回は「3章 アラート、オンコール、インシデント管理」です。

*1:BOND GATEは直観的で使いやすい、店長支援のためのSC・専門店向けコミュニケーションウェアです。(ホームページ商品説明引用)