New Relic ユーザーの皆さん、こんにちは!本投稿はユーザーグループのセミナーで同僚の開発者(Alexと呼びましょう)に相談された内容をもとにした記事で Docker アプリケーションのログ閲覧に関する話です。具体的には、インフラエージェント経由で Docker アプリケーションのログを転送すると New Relic Host UI 配下の エンティティ (Docker ホスト) の logs として見ることができますが、Container UI 配下のエンティティの logs には紐づかないため、見ることができないという問題を解決する手法の紹介です。これは Alex だけの課題ではなく、Docker と New Relic コミュニティの多くのユーザーに影響を与える一般的な問題だと思います。
どうすればログを適切な場所に紐づけることができるでしょうか?この現実の課題に触発されて、私はこのログとエンティティの紐付け問題の解決方法を思いつきました。ログ管理を実現するためのロードマップを New Relic と共有することにしました。読者の皆さん、デジタルコンパスを手に取りましょう。Docker ログが参照されるべき場所に紐付けられているかを確認しましょう。
核心的な問題:コンテナログはどこに保存されるのか?
まずはログの保存先について、どのような問題があるのかを細かくみてみましょう。コンテナ内でアプリケーションを実行している場合、特に Docker を使用している場合、ロギングは単に記録を残すだけではありません。重要なのは明確さとコンテキストです。(Docker用の New Relicインテグレーション が稼働している) New Relic infrastructureエージェント は、ホストとその上で実行されているコンテナのログを収集することができます。そして、複数のコンテナアプリケーションが稼働していても、すべてのログがひとまとめにされ、Infrastructure UI 配下のホスト にサーバーのログとともに表示されます。一見、問題はないように思いますが、実運用を考えれば、不便さがあります。特定のコンテナのログを見ようと思った際にホストの UI ページからそのコンテナログを探す、あるいは抽出する必要があります。
そして、コンテナ UI の Logs セクションには、この Docker ログは表示されません。
この状況はまるで、騒がしく混雑した部屋で、特定の会話を探そうとしている状況に似ています。重要な議論であろうと些細な議論であろうと、あらゆる議論は圧倒的な騒音にかき消されます。これが現在の Docker ログの紐付けの実態です。コンテナログがホストログのノイズに埋もれしまい、特定のコンテナの情報を効率よく探すことを困難にしています。
この誤った紐付けは、ビューを乱雑にするだけではありません。コンテナ固有の操作とホスト全体のアクティビティの間の境界が曖昧になるため、監視やトラブルシューティングも複雑になります。問題を迅速に診断し、効果的に拡張し、実際のコンテナのパフォーマンスを正確に把握するには、ホストログからコンテナログを分離して確認する必要があるはずです。
次のセクションでは、コンテナログ を New Relic で正しく紐付けするための再ルーティングを行う方法について説明します。
正確なログルーティングのための設定
当面の問題を理解したので、気を引き締めて解決策に取り組みましょう。次の 3ステップの操作を行うことで、コンテナログを Docker ホストおよびそれぞれのコンテナエンティティに関連付けることができます。
ステップ1:ロギング設定の調整
まずは各コンテナのログが取得されていることを確認しておきましょう。インフラエージェント経由での ログ転送設定 にて、/var/lib/docker/containers/ 配下のログを収集しているかを確認してください。 設定されていない場合、下記の内容を ログ設定ファイルに追記ください。
以下は、logging.yml にコピーして使用できるスニペットです。
ステップ2:Docker でのコンテナのタグ付け
次に、「docker run」コマンドを使用して手動でコンテナを実行する際に、または Docker Compose 設定ファイル内でコンテナを実行する際に、コンテナをタグで認識できるようにする必要があります。以下の tag を追加することで、これを実現できます。
- Docker runコマンドの例
- docker-compose.ymlのDocker Composeの例
以下は、docker-compose.yml にコピーして使用できるスニペットです。
この設定により コンテナからの各ログエントリにコンテナの名前がタグとして含まれるようになり、New Relic が収集したログでの追跡が容易になります。
ステップ3:New Relic Logsでのログ解析ルールの設定
New Relic 環境でコンテナ タグが送信されることを確認したら、これらのログのパースと表示方法を調整します。ログ解析ルールを設定 を行うと、特定の属性に基づいてログを分類し、クエリを実行できます。設定方法は次のとおりです。
- Name:コンテナ名
- Field to parse:attrs.tag
- Filter logs based on NRQL::attrs.tag is not null
- Parsing rule:%{NOTSPACE:containerName}
この解析ルールは、各ログエントリの attrs.tag フィールドからコンテナ名を抽出し、containerName という名前の属性を追加します。これにより、特定のコンテナごとにログをフィルタリングして分析できるようになります。
まとめ
上記の 3ステップで、コンテナのログをより効率的に閲覧できるようになります。その効果は問題に迅速に対応する能力が強化されるだけでなく、データドリブンの知見をチームに提供してくれるでしょう。そしてそれらの積み重ねはアプリケーションがスムーズかつ効率的に実行されるようにことに貢献するでしょう。
New Relic での Docker ログの合理化に関するガイドをまとめるにあたり、効果的なログ管理はオブザーバビリティパズルのピースのひとつにすぎないことを忘れないでください。統合された監視ツールの力をさらに説明するために、私は最近、OpenTelemetry のデモアプリケーションの強化に貢献しました。私のプルリクエスト(PR #1495 が受け入れられ、マージされ、Docker Composeでデモを実行する 際に役立つ新しいタグ付け機能の導入をすることができました。この追加により、コンテナのログを簡単に区別して正確に属性を特定できるようになりました。それは効果的な監視とトラブルシューティングの強化をもたらしてくれるでしょう。興味をお持ちいただけたら こちら で変更内容を確認し、それが設定にどのような利点をもたらすかをチェックしてください。
OpenTelemetry のデモアプリケーションに貢献することに加えて、New Relic ドキュメントの対応する各セクションを更新して、ログ管理の改善点を反映しました。この更新により、これまで説明してきた戦略と技術的な詳細がテストされるだけでなく、正式にガイダンスに統合されるため、これらの変更を簡単に実装してその恩恵を受けることができます。これらの更新を確認して、これらのプラクティスを理解いただくことで New Relic ツールを最大限に活用できるようになります。
Next steps
最適なログ管理を行うための Docker 環境の設定が完了しました。しかし、ジャーニーはまだ終わっていません。可能性をさらに深く掘り下げてみましょう。
- 実験と調整:その環境におけるニーズに基づいて、ログレベルと解析ルールを調整します。各アプリケーションには、独自のインサイトを提供してくれる場合があります
- 変更の影響を確認する:これらの変更によりモニター機能がどのように強化されるかに注目してください。トラブルシューティングとシステムパフォーマンスの改善を目指しましょう
- インサイトの共有:状況を把握していますか?独り占めしないでください。成功事例や課題をユーザーグループやソーシャルメディアで共有してください。お客様の経験は、同じような課題に直面している開発者の仲間たちにヒントを与えるかもしれません
- コミュニティへの参加:New Relic Explorer Hub のディスカッションに参加して、他のユーザーとつながり、ヒントやコツを交換しましょう。お客様のフィードバックはコミュニティの成長に貢献するだけでなく、ソリューションの改善と進化にも役立ちます
ログ管理ゲームをレベルアップする準備はできていますか?今すぐ調整、共有、交流を始めましょう。精度の高いログデータの可能性を一緒に最大限に活用しましょう!
The views expressed on this blog are those of the author and do not necessarily reflect the views of New Relic. Any solutions offered by the author are environment-specific and not part of the commercial solutions or support offered by New Relic. Please join us exclusively at the Explorers Hub (discuss.newrelic.com) for questions and support related to this blog post. This blog may contain links to content on third-party sites. By providing such links, New Relic does not adopt, guarantee, approve or endorse the information, views or products available on such sites.