ソリューションスクラムチームの池松です。13日目の記事になります。入社4ヶ月目ですがこういった記事をかかせていただき感謝。本日は、直近で実施したDatadogを活用したシステムのパフォーマンス改善に関するお話をしたいと思います。行い、顧客の業務コスト削減を図るサービスです。ありがたいことに、認知度ランキングでも一位を獲得させていただいており、導入社数も順調に増えてきています。運送業界では12月はクリスマスやお正月などイベントが集中しており、1年で最も忙しい時期で、ハコベルコネクトへのアクセスもが多いときで通常の2〜3倍になることがあります。したユーザ数の増加や繁忙期の影響で、これまで違和感なく利用できていた機能も徐々にパフォーマンスが悪くなり、UXを著しく下げてしまう問題がありました。そこでソリューションスクラムチームでは、ハイピークを迎える前にパフォーマンス改善を行うべく、既存の処理のパフォーマンス劣化を引き起こす原因の特定から行うことにしました。原因の特定といっても、アクセスが集中するタイミングなどでたまたま重くなるパターンなどもあり、単一のアクセスログなどから調査・改善を進めても、全体への効果としてはイマイチなことが想像されたため、今回はDatadogを活用しました。利用しましたが想像以上に便利で、もはやDatadogなしでは生きられないぐらいになったので、今回はその機能や使い方について紹介させていただければと思います。LogsやMonitorなど他の機能とも連携ができ、運用コストの削減にも効果的DatadogとはSaaS向けのデータ分析プラットフォームで、詳細については公式サイトをご確認いただければと思いますが、今回のパフォーマンス改善という目的では、以下のような機能を提供してくれます。名前の通りアプリケーションのパフォーマンス監視を行えます。Railsインスツルメンテーションを有効にした場合、リクエスト、データベース呼び出し、テンプレートのレンダリング、およびキャッシュの読み取り/書き込み/削除操作をトレースすることができます。この状態で行える監視は主に2つあります。1つは、エンドポイント単位のパフォーマンス監視、もう1つは、クエリ単位のパフォーマンス監視です。エンドポイント単位のパフォーマンス監視こちらが画面の全体像です。主要な可視化機能としては、以下になります。P99エラー数・エラーレートどれも有用な指標ですが、今回特に利用したのが指定期間内のエンドポイント別の統計情報です。パフォーマンス改善は、やればやるほど効果はでるけど、基本的にはキリがなく、より少ない労力で高い効果を得られることが求められると思います。そこで、エンドポイント単位でトータル時間の降順に並べ、上位に来るものの中でリクエスト回数が少ないものが、パフォーマンス改善すべき要素が多い可能性が高く、かつ効果が高いと判断して、それらを優先して見直すことにしました。上記の指定期間内のエンドポイント別の統計情報から特定のエンドポイントを選択すると下記のようなエンドポイント別の統計情報ページに遷移します。こちらでも時間帯ごとの各種指標やレイテンシ分布が見れ、かつ、以下のような情報も確認できます。上記からエンドポイント全体で時間のかかった処理を統計的に判断できるとともに、局所的に重くなっているリクエストの詳細を確認することなどもできます。リクエストを一つ選択すると、下記のようなリクエスト単位で視覚的にどの処理にどれくらいかかったかわかるような画面が表示されます。実際みてみるとあるモデルのActiveRecordのインスタンス生成で44%ほど使っていることがわかります。(モザイクしているので見にくいですがなんとインスタンス数まで表示されます)例えばこのパターンだと不要なインスタンス生成を行っていないかといった調査につなげることが可能です。クエリ単位でのパフォーマンス監視これだけでも十分なのですが、またクエリの観点から改善対象を調査することができます。こちらがその画面の全体像です。基本的にはエンドポイント単位でのパフォーマンス監視と同様ですが、クエリ単位での統計情報がこちらには表示されます。TIMEで降順にならべて、上位の中でリクエスト数が少ないものに注目して調査を行いました。実際に見てみると、対象のクエリがパルス的に発生していることがわかり、また下記のようにこのクエリがどのエンドポイントからどれくらい呼ばれているか確認できる機能があるのですが、ある特定のエンドポイントからだけ発生するクエリだということがわかります。結果として、このクエリ自体重かったので別途処理の改善は行うとともに、別サーバから定期的にAPIが叩れていることが判明し、それらの連携方法を改善することでパフォーマンスの向上につなげることができました。余談ですが、パフォーマンス改善が行われるとDatadogからお祝いしてもらえたりします。今回はAPMに関する説明をメインでしましたが、Datadogには他にもLogsやMonitorなど様々な機能が提供されています。Logsはログの集約・検索を行うもので、ログのパース設定などを適切に行うことで検索したいログへのアクセスと統計情報の表示を簡単にできるようにしてくれるものです。なんとこのLogsとAPMは相互連携可能で、先程のAPMのリクエスト詳細画面からLogsのリンクをたどることで、具体的にどんなリクエストパラメータが付与されていたかなどの確認ができるようになっています。逆にLogsからAPM側にたどることもできるので問い合わせ対応などをより効率的に行うことができます。Monitorは、事前に設定したルールに基づき、その条件を満たした場合にアラートを出すことができる機能です。アラートはslack通知することも可能です。私達は5分おきに全エンドポイントに対して特定の秒数を超えるリクエストが発生した場合にアラートを出し、slack通知を送るようにすることでパフォーマンスの劣化を検知できるようにしています。Databasesがあり、こちらはDBと直接agentをつなげることで、クエリの実行計画なども収集することができるものになります。ほんとDatadogすごいです...ありがとう...Datadog...また機会があればこのあたりも紹介させていただければと思います。採用情報のご案内ラクスルではエンジニア・プロダクトマネージャーを募集中!募集内容は以下のリンクをご確認ください。よるフロントエンド開発...こんにちは。ソリューションチームの丸山です...2020-06-15フロントエンドでもForceUpdateがしたいこんにちは。(普通トラック...2020-01-14ハコベルの開発スタイルをご紹介します!こんにちは。地域LT会はじめました。eventハコベルテックブログ注目記事はてなブログをはじめよう!raksuldevさんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。