本記事では、ファーストステップガイドの一つとして、Fluentd を使用して任意のログを New Relic に送信するための設定方法と、カスタマイズのヒントについてご紹介します。
また、New Relic アカウントをお持ちでない場合は これからはじめるNew Relicライフ! 無料でアカウントを開設しよう!をご覧ください。
Fluentdについて
Fluentd は、様々なデータソースや送信先サービスに対応した、オープンソースのログ転送ソリューションです。
New Relic の Infrastructure Agent には、ビルトインのログ転送機能がありますが、すでに Fluentd を使ってログを集約している場合や、あるいはログの送信前に細かなデータ加工を行うようなユースケースでは、引き続き Fluentd を使用することも選択できます。また、インフラ監視を行わずにログ転送のみを設定したい場合にも有効です。
設定方法
本記事では、一般的な Linux OS 上で nginx のログを転送する例について記載します。Fluentd のセットアップは、同プロジェクトのドキュメントに沿って実施してください。
なお、Fluentd は最新の calyptia-fluentd をセットアップしています。calyptia-fluentd と td-agent は提供元に違いがありますが、バイナリや設定ファイルのパスが異なる以外は、基本的には同様に使用可能です。td-agent をご利用の場合には、calyptia-fluentd を td-agent と読み替えてください。
Fluentdプラグインのインストール
Fluentd はプラグインを使用して、様々なデータソースや送信先サービスに対応できることが特徴です。New Relic へデータを送信するためのプラグインをセットアップするには、以下コマンドを実行します。
calyptia-fluentd-gem install fluent-plugin-newrelic
ログ転送設定サンプル
今回作成した、nginx のアクセスログとエラーログを New Relic へ送信するための Fluentd の設定ファイルを例として紹介します。
ドキュメントに記載の設定例にくわえて、New Relic の UI 上での可視性や分析のしやすさに考慮し、以下のような設定を行い、各ログ行にいくつかの属性を付与しています。
- nginx 用の Parser プラグインを使用して、ログの各フィールドをカスタム属性(Custom attributes)に変換
- パース前のメッセージは message 属性として保持
- filePath 属性に、各ログ行の読み取り元ファイルパスを設定
- hostname 属性に、送信元ホスト名を設定
- logtype 属性に、ログ種別を示すタグを指定
設定ファイルは /etc/calyptia-fluentd/calyptia-fluentd.conf です。このファイルの末尾に以下のような設定を追加して保存します。YOUR_LICENSE_KEY は、送信先となる New Relic アカウントの Ingest 用ライセンスキーで置換してください。
<source>
@type tail
path /var/log/nginx/access.log
pos_file /var/log/calyptia-fluentd/tmp/nginx.access.log.pos
path_key filePath
<parse>
@type none
</parse>
tag nr.nginx.access
</source>
<source>
@type tail
path /var/log/nginx/error.log
pos_file /var/log/calyptia-fluentd/tmp/nginx.error.log.pos
path_key filePath
<parse>
@type none
</parse>
tag nr.nginx.error
</source>
<filter nr.nginx.access>
@type parser
reserve_data true
key_name message
<parse>
@type nginx
</parse>
</filter>
<filter nr.**>
@type record_transformer
<record>
logtype ${tag_suffix[1]}
hostname "#{Socket.gethostname}"
</record>
</filter>
<match nr.**>
@type newrelic
license_key YOUR_LICENSE_KEY
</match>
動作確認
Fluentdを起動します。
systemctl start calyptia-fluentd.service
実際にアクセスログを発生させて、ログ転送が行えていることを確認してみましょう。今回は curl で localhost:80 にアクセスする形で簡易的な検証を行いました。設定に誤りがなければ、まもなく New Relic の Logs UI 上で転送されたログが確認できます。
転送されたログエントリを確認すると、Fluentd 側で設定したカスタム属性が付与されていることが分かります。
Logs UI メニューの Attributes ページでは、ログ行に付与された属性に基づいたデータの抽出が可能です。例えば、特定のパスで特定のレスポンスコードを返したログのみを抽出するといった分析が容易になります。
おわりに
今回は Fluentd を使用して New Relic にログを送信する方法について紹介しました。New Relic では、その他にも様々なサービスやソリューションからのログを取り込み、分析に用いることができます。ぜひ皆様のアプリケーションの運用や改善活動にお役立てください。詳細はドキュメントもご確認ください。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。