ログは、アプリケーションパフォーマンスのデバッグ、トラブルシューティング、監視や、セキュリティおよびコンプライアンス要件の監査など、さまざまな場面で必要とされます。しかし、ログを最大限に活用するためには、整理されている必要があります。

一貫性のある組織化されたログの形式は、構造化ログとして知られています。ログが構造化された形式に整理されると、ログデータの検索やフィルタリング、分析によりパターンを発見して問題を修正する作業がずっと容易になります。ただ、構造化ログは、特に複雑な分散化システムを扱っていると、チャレンジとなる場合もあります。では、すべてのログを標準化して、同じ構造形式を使用するには、どうすればいいのでしょうか?

今回のブログでは、以下について説明します。

  • 構造化ログのメリット
  • 構造化ログのベストプラクティス
  • 構造化ログのユースケース
  • 構造化ログに対し、New Relicは何ができるのか

構造化ログのメリット

構造化ログには数々のメリットがあり、単なるベストプラクティス以上のものです。構造化ログは、ソフトウェア開発プロセスには欠かせない存在です。構造化ログのメリットと、必要な理由について見ていきましょう。

パフォーマンス

アプリケーションの規模が拡大するにつれ、パフォーマンスはさらに重要になります。さらに言えば、規模化する前であっても、アプリケーションの運用遅延や不要なリソース取得は望ましくないはずです。アプリケーションが拡大すれば、ログの総数も増えていきます。多くの異なるソースからログを取得し、それらが標準化されていなければ、後で検索やフィルターをかける際に余分な処理能力が必要になります。数百万の、あるいは数十億の、標準化されていないログ行を、なるべく多くの特殊ケースで活用できるように設計されたアルゴリズムで検索することを想像してみてください。可能性のある特殊ケースをすべて把握できていない場合、いうまでもなく、ソフトウェアチームの貴重な時間と処理能力を費やすことになります。

検索能力の向上

無数の本が所蔵されているのに、目録が用意されておらず、読みたい本を見つける方法がない図書館に行きたいと思うでしょうか。デューイ十進分類法やアルファベット順など、図書館で見るすべての整理方法には理由があります。標準化することで、探しているものを見つけるのがずっと簡単になります。これはログについても同じです。特定のラベル(マイクロサービスなど)やタイムスタンプ(サービスが停止した時間)などで検索をするかもしれません。その両方を試すかもしれません。そのようなラベルが存在し、標準化されていれば、検索はずっと楽になります。もしそれぞれのサービスに違う名称のフィールドがあったり、重要な情報のためのフィールドがなければ、必要なものを探し出すのはずっと難しくなります。

一貫性

一貫性は、検索能力の向上に役立つだけではありません。形式に一貫性があると、ログの分析や比較は格段に楽になります。サービス間でタイムスタンプの形式が異なっていたり、フィールドの名称が違っているといった単純なことで、アプリケーションの異なる部分がどのように機能しているかを適切に比較することがきわめて難しくなってしまいます。

自動化

構造化ログは、機械が読み取りやすいように設計されており、プロセスの自動化と時間の節約がより簡単になります。ログを使用しているツールとシステムに、さらに統合しやすくなります。また、効率的な自動化により事業コストも削減できます。

構造化ログのベストプラクティス

ログの構造化に役立つベストプラクティスをいくつか見ていきましょう。

  • 一貫性あるログ形式の決定:できれば、アプリケーション全体で同一のログ形式を使用するのが理想的です。ログがJSONやXMLやその他の形式にばらついていると、サービスとコンポーネントを通じて一貫性を保つのはずっと難しくなります。
  • 標準的なデータ形式の使用:一貫性だけでなく、標準的なデータ形式を使用しましょう。JSONとXMLがその一例です。JSONは良い選択です。解析がしやすく、多くのツールがすでにこれを使用しているからです。広く採用されている形式を使用することで、その形式が自身のサービスとうまく統合できる可能性はずっと高まります。問題が発生した際には、参照できるドキュメントも多く用意されています。
  • 必要なコンテキストとメタデータの含有:サービスや、何がいつ起こったのかを正確に特定できる、IDやタイムスタンプ、ラベルなどの基本情報を含めるとよいでしょう。これにより、ログを相関づけてあらゆる問題の根本原因をかなり理解しやすくなります。
  • ステークホルダーのニーズへの対応:特に大規模な組織では、開発者、DevOps、リーダー、SRE、その他さまざまなチームからなる多様なステークホルダーのことを考慮することが大切です。ステークホルダーが異なれば、ログデータに対するニーズも異なるかもしれません。ステークホルダーに相談し、ログにどんな情報が含まれるべきかを確認しましょう。ステークホルダーがログを実際に最大限活用できるようになるための、構造化ログに関するチーム横断的な教育も必須です。
  • 冗長になりすぎない:一般的には情報は有用ですが、詳細すぎると整理やフィルタリング、必要な情報の検索が難しくなります。
  • セキュリティベストプラクティスの遵守:機密データをログに含めないようにし、もし機密データのログが必要な場合には、それらのログが安全に管理されていることを確認しましょう。また、ログの難読化を使用して機密データを隠すこともできます。
  • 構造化ログのモニタリングと分析:構造化ログを活用するためには、定期的にモニタリングが不可欠です。New Relicは、すべてのログの監視、アラート、管理、そして理解に役立つ優れたツールです。

構造化ログのユースケース

構造化ログのメリットとベストプラクティスについてご説明しましたが、では、実際のユースケースはどのようなものがあるしょうか?構造化ログからメリットを得られる一般的なユースケースについて、さらに詳しく見ていきましょう。ご自身のアプリケーションにも適用できるかもしれません。

  • デバッグとトラブルシューティング:開発段階であろうと、ステージングや本番環境であろうと、ログはあらゆる段階でアプリケーションのデバッグとトラブルシューティングを助けてくれます。たとえば、開発中にエラーが発生した場合、スタックトレースは非常に重要ですが、ログがないとスタックトレースは不可能です。
  • パフォーマンス監視:問題の修正だけでなく、アプリケーションが速く動作することも重要です。ユーザーは、ページの読み込みに問題が発生すると数秒でサイトを離れてしまいます。構造化ログは、パフォーマンスの問題を発見し、サイトを最適化するのに役立ちます。
  • 分散トレーシング:分散トレーシングは、複数の異なるサービスにわたる問題の追跡、すなわちトレースに必須のツールです。構造化ログと併用することで、システム全体の動作を包括的に理解できます。
  • セキュリティ監査:セキュリティ監査は、多くの企業が法令遵守を確実にするために求められていることであり、侵害やその他のセキュリティに関する問題が発生した際に必ず必要になります。構造化ログを使用して、コンプライアンスと規制の観点で、システムにおけるユーザーアクティビティの理解を深めることができます。また、以前起きたセキュリティ問題の再発を確実に防ぐための法的証拠の調査や解析にも使用されます。
  • ビジネスインテリジェンス:サイト上でどのページが最も人気があり、どのページは修正が必要か?構造化ログを使用して、ユーザーの行動や顧客とのインタラクションなどビジネス関連のデータから価値ある情報を得ることができます。構造化ログを利用することで、データに基づいた意思決定が可能になり、製品やサービスの改善につながります。

構造化ログに対し、New Relicは何ができるのか

New Relicは、トラブルシューティング、パフォーマンス監視、分散トレーシングなど、先述したあらゆるユースケースをサポートするオールインワンのオブザーバビリティツールです。では、New Relicは構造化ログに対して具体的に何ができるのでしょうか?

  • カスタム属性の追加:New Relicでは、ログが取り込まれた際にカスタム属性を追加することができます。これにより、ログの標準化が格段に容易になり、データの欠落を防げます。
  • 強力な検索と分析:ログデータが取り込まれた後、New Relicクエリ言語(NRQL)を使用して、ログデータのフィルタリング、検索を行い、理解を深めることができます。NRQLはANSI SQLと同様のクエリ言語です。NRQLを使用すると、柔軟な検索を可能にし、事業目標に重要な洞察を提供することができます。
  • ログの集約:構造化ログはすべてのログを比較・分析する能力を持っていますが、すべてのログが1か所に集約されている場合に効果を発揮します。New Relicはここで大きな役割を果たします。すべてのシステムデータを1か所に収集して監視を行い、総合的な分析を可能にするツールを提供しています。New Relicを使用したログ管理について、さらに詳しく見ていきましょう。以下の画像は、New RelicのログUIです。
  • 非構造化ログの解析:理想的ではありませんが、ときには構造化されていないログがシステムの一部から出てくるかもしれません。その場合は、New Relicのログ解析を使用して、非構造化ログデータから属性を取得できます。それらの属性を使用することで、より効果的にログの検索とクエリが行えます。
  • Logs in Contextの確認:New Relicには、Logs in Contextという機能があります。これにより、APMやインフラストラクチャ監視、分散トレーシングなど、他のプラットフォームUIエクスペリエンスのコンテキストに沿ったログを確認できます。このコンテキストに沿った情報を利用して、アプリケーション内で何が起こっているかを、ログデータを手動で検索することなく確認できます。
  • 定番のログフレームワークとのインテグレーション:New Relicは、 LogstashFluent BitFluentdなど、普及しているログフレームワークとの統合が可能です。この場合、任意のフレームワークでログの構造化を行い、それからNew Relicを使用してログのメリットを最大化することができます。