本記事では、ファーストステップガイドの一つとして、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 上で転送されたログが確認できます。

送信されたログが、New RelicのLogs UI上でどのように表示されているか確認してみましょう。

転送されたログエントリを確認すると、Fluentd 側で設定したカスタム属性が付与されていることが分かります。

Logs UI メニューの Attributes ページでは、ログ行に付与された属性に基づいたデータの抽出が可能です。例えば、特定のパスで特定のレスポンスコードを返したログのみを抽出するといった分析が容易になります。

ログ行のパース結果が属性として記録されているので、レスポンスコードで絞り込みといった操作も可能です。

おわりに

今回は Fluentd を使用して New Relic にログを送信する方法について紹介しました。New Relic では、その他にも様々なサービスやソリューションからのログを取り込み、分析に用いることができます。ぜひ皆様のアプリケーションの運用や改善活動にお役立てください。詳細はドキュメントもご確認ください。