ログ管理とは何か?

ログ管理とは、ログデータを取り扱う際のすべてのプロセスを意味し、それにはログの生成、集計、保存、分析、アーカイブ、削除が含まれます。ログ管理システムは、エラーか、HTTPリクエストか、それ以外であるかにかかわらず、アプリケーション、ネットワーク、またはサーバーで発生するすべてを記録する必要があります。ログデータは、トラブルシューティングや分析に使用できます。モダンなアプリケーションには、毎日さまざまなサービスから何百万あるいは何十億ものイベントが発生します。そのため、インシデントの実用的なインサイトを管理したり、何よりも取得するのが困難になる場合があります。そのため、ログ管理はDevOpsオブザーバビリティおよびIT業務の不可欠な部分です。

ログとは何か?

ログとは、コンピュータが生成した、個別の具体的なアクションやイベントのタイムスタンプ付きの記録です。現代のソフトウェアシステムにおけるほぼすべてのものがログデータを作り出すことができ、それを確実に行うことがベストプラクティスです。通常ログを取るデータの例には、関数呼び出し、エラー、HTTPリクエスト、データベーストランザクションなどが含まれます。ログは、発生したアクションの実況を提供します。

ログが重要な理由は?

ログはアプリケーション、ネットワークまたはサーバーで発生するあらゆることを記録します。アプリケーション監視、エラー追跡、エラー報告の基盤となり、オブザーバビリティの不可欠な部分です。これらはどれも、データをログすることなしには不可能です。

オブザーバビリティと監視で使用するテレメトリーデータは4種類あります。頭文字MELTで覚えることができます。

  • メトリクス(Metrics)は集計されたログデータに基づき、アプリケーションのパフォーマンス状況を提供します。New Relic Oneのようなツールは自動的に一部のメトリクスを生成する一方、ニーズに応じて他のメトリクスをカスタマイズできます。
  • イベント(Event)はアプリケーションで発生していることを説明します。それらは複数行のログデータから成ります。イベントはログより多くのストレージスペースを使うので、ログほど長くは保存されない傾向にあります。
  • ログ(Log)はイベントよりもずっと細かく、アプリケーションで発生する一つ一つの段階を説明します。
  • トレース(Trace)はスパンを使用してイベントをつなげ、問題の根本原因を追跡し、それを修正できるようにします。

4種類のテレメトリーデータには、共通のログがあります。ログなしにはMELTも存在せず、アプリケーションで発生していることを観察することはできません。データを積極的に監視して問題を発見するのではなく、エンドユーザーから問題の発生が知らされるため、問題解決に積極的ではなく、消極的にならざるを得ません。さらに悪いことには、問題があることが分かっても、アプリケーション内にエラーの記録がないため、ログなしに問題を修正することが極めて困難です。その結果、ユーザーの不満、エンジニアのストレス、顧客のいら立ち、そしてほとんどの場合、製品の失敗へとつながります。

ログはもう一つ主なメリットをもたらします。それは、とても容量が少ないということです。そのため、イベントなどの他の多くの種類のデータよりも、はるかに送信や保存がしやすくなっています。

New Relic Oneを使用すれば、すべてのログを一か所で閲覧できます。

ログ管理が重要な理由は?

ログを生成するようにアプリケーションを設定するだけでは不十分です。次の哲学的思考実験について聞いたことがあると思います:「誰もいない場所で倒れた木は、それは音を立てますか?」ログデータの場合、データを生成してもそれが適切に収集および保存されない場合、そのログ情報は失われます。ログデータはどこかに送信する必要があります。理想的には、他のサービスからのデータとの関連で、それを必要に応じて適切に分析および取得できる、一元化された場所です。

しかし、データの一元的な収集は、ログ管理プロセスの一つの手順に過ぎません。ログ管理には、ログデータを生成したときから、その最終的なアーカイブまたは削除までの、ロギングライフサイクルのすべての部分への対応が含まれます。

現在の多くのアプリケーションには、マイクロサービス、分散システム、クラウドベースのサービスが含まれ、システムの各部分が独自のログデータを生成します。たとえば、アプリケーション内のどのHTTPリクエストの平均応答時間が最も長いかを知る必要があるとします。アプリケーションが分散されている場合は、複数のサービスがHTTPリクエストを生み出している可能性があり、ログデータが一か所にある場合にのみそれを比較することができます。そこで、ログ管理を成功させることが重要です。

ログ管理を成功させることで、以下のことが可能になります。

  • コンテキストスイッチ(コンテキストの切り替え)を減らす: ログデータを一か所に保存することで、ツールとコンテキスト間の切り替えの必要性が減ります。ログデータがさまざまな場所に保存されている場合は、おそらく、複数の場所とツールを確認し、問題をデバッグしなければならないでしょう。
  • 問題を素早く見つけて修正する:ログ管理ソリューションによって、コンテキストにおけるログデータを素早く取得、分析、可視化し、ユーザーに影響を与える前に問題を素早く特定し取り除くことができます。
  • 必要なデータのログを即座に検索する: 優れたログソリューションは、ログをドリルダウンして必要なデータを素早く取得するための検索機能をすべて提供します。
  • すべてのデータを一か所で可視化する: 一元化されたログデータによって、MELTを使用し、アプリケーションのパフォーマンス状況の大まかな概要を提供するカスタムビジュアライゼーションおよびダッシュボードを構築できます。

これらのメリットを確実に享受するためにはどのような機能が必要でしょうか?さらに見てみましょう。

ログ管理ソリューションに含まれるべき機能は?

ログ管理の以下の機能により、最大のメリットを享受することができます。

  • 柔軟で包括的なインストゥルメンテーション:すべてのログデータを一か所で収集するためには、アプリケーションをインストゥルメントする必要があります。インストゥルメンテーションとは、アプリケーション全体を流れるデータを追跡するエージェントをインストールするプロセスです。複数のクラウドサービスとJavaRail.NET APIを備えていて、フロントエンドで主にReactとJavaScriptを使用するアプリケーションを想像してみてください。それらの各サービスをインストゥルメントし、ログ管理ツールには可能な限り多くの異なるプログラミング言語およびサービスのために利用可能なエージェントがなければなりません。それにより、すべてのサービスに完全に対応することができます。アプリケーションの一部(機密データなど)をインストゥルメントしないことも選択できますが、インストゥルメントされていないサービスはログデータにギャップを残します。
  • ログ転送への対応: サービスをインストゥルメントできない場合には、ログを転送する必要があります。ログ管理ツールは、ログ転送に対応できなければなりません。
  • 強力なクエリ: エラーが発生した場合には、直ちにログにアクセスできなければなりません。そのためには、ログ管理ソリューションに、データのクエリを素早く効率的に実行する機能が備わっていることが極めて重要です。たとえば、New RelicはNRQL(New Relicクエリ言語)を使用し、柔軟な幅広いクエリを提供することで、ユーザーが必要なデータを取得できるようにしています。
  • 安全なデータストレージ: セキュリティは機密ログデータ、特にHIPAA(健康および医療記録を安全に保つための基準)のような高レベルのコンプライアンスを必要とするアプリケーションを取り扱う上で欠かすことができません。

ログ管理プロセスの手順は?

ログ管理プロセスの主な手順は以下の通りです。

  • 作成: まず、サービスがログデータを作り出す必要があります。第三者のサービスには通常、ログデータを生成する機能が含まれています。ログを記録するようサービスをインストゥルメントすることもできます。
  • 収集: ログデータの収集は、プロセスの2つ目の手順です。通常、インストゥルメンテーションとログの転送の組み合わせが含まれ、すべてのログが一元化された場所で収集されるようになっています。
  • 集計: 集計は、収集されたログデータを取り出し、それを標準化された便利なフォーマットに整理するプロセスです。さまざまなソースからのログデータを解析し、一貫したデータとなるように、必要に応じたデータフォーマットに変換されます。たとえば、集計されたデータはJSONフォーマットに標準化される場合があります。ログを生成したサービスやIPアドレスなどのさらなるコンテキストを提供するメタデータでログを強化することも一般的です。
  • ストレージ:ログデータを収集し、データベースに保存する必要があります。New Relicに送信されたログデータはすべてNRDB(New Relicデータベース)に保存されます。効率的なクエリと分析のためにデータにインデックスを付けるのが理想的です。
  • アーカイブ:一定期間の経過後、一部のログデータには継続的にアクセスする必要はなくなりますが、法的な理由や会社の方針などの他の目的でそのデータを保持する必要があるかもしれません。古いデータをアーカイブすることで、ストレージを最適化し、最近のログデータのクエリ実行がより効率的になります。
  • 削除: 一定期間の経過後に、ログデータを削除し、スペースを確保することもできます。

最終的には、ログ管理プロセスの目標は、トラブルシューティング、分析、可視化、レポート、およびアラートにログを利用できるようにすることです。効果的なログ管理ソリューションなしに、これらはどれも不可能です。ログ管理ツールの中には、この機能が含まれているものもありますが、ログ管理と一緒にアプリケーションパフォーマンスの監視およびオブザーバビリティソリューションを使用するのも一般的です。