みなさんこんにちは。
マネージドサービス部の福田です。
今回は以下ブログ記事の内容を実際に試してみました。
Fluentdのインストール
最新版のmsiのダウンロードリンクを取得します
PowerShellを管理ユーザーで起動し下記のようなコマンドを実施
cd Desktop Invoke-WebRequest -Uri https://s3.amazonaws.com/packages.treasuredata.com/4/windows/td-agent-4.4.2-x64.msi -OutFile td-agent-4.4.2-x64.msi
ダウンロードしたmsiをダブルチェックし、すべてデフォルトでインストールします
New Relicのpluginをインストールするため、PowerShellを管理ユーザーで起動し下記コマンドを実施します
cd C:\opt\td-agent\bin .\fluent-gem install fluent-plugin-newrelic
fluentdの設定
設定ファイルの配置
今回は以下のようにファイルを配置します。
なお、conf/in.d/ 配下に転送するログファイルごとの設定ファイルを配置します。
conf/td-agent.conf -> C:\opt\td-agent\etc\td-agent\td-agent.conf conf/in.d/ -> C:\opt\td-agent\etc\td-agent\in.d\
設定ファイルの修正
C:\opt\td-agent\etc\td-agent\td-agent.confの設定例
# Include config files in the ./in.d directory @include in.d/*.conf <filter test.**> @type record_transformer <record> #ログに付与したい情報を記載する tags.Name ★EC2名を記載する(例:SWX-Web01-Windows)★ log_name ${tag} </record> </filter> #Forward all events to New Relic <match test.**> @type newrelic license_key ★NewRelicのライセンスキーの値を記載★ </match>
C:\opt\td-agent\etc\td-agent\in.d\log.confの設定例
<source> @type tail path ★ログファイルのフルパス★ pos_file C:/opt/td-agent/etc/td-agent/in.d/★ログファイル名★.pos #ログファイルをtailで読み取るのでどこまでログを読み取ったか記録するposファイルが必要(ログロスト防止) read_interval 30 <parse> @type none </parse> from_encoding Shift_JIS #(Shift_JIS 文字コードではない場合不要) encoding UTF-8 </source> <filter test.log> @type grep <regexp> key message pattern ★検知文字列★ #(例:「error」もしくは「warn」含む文字列を検知する場合:error|warn) </regexp> </filter>
posファイルに記録される内容(ログファイルに書き込まれたinodeとバイト位置を記録する)
C:/opt/td-agent/etc/td-agent/test.log 0000000000000075 0000058b00030000
設定ファイルの反映
- powerShellを管理ユーザーで起動し下記コマンドを実施する。
net stop fluentdwinsvc net start fluentdwinsvc
NewRelicに送られるログ内容
Shift_JIS ログをUTF-8にエンコーディングした情報をNewRelicにて確認できました。
{ "log_name": "test.log", "message": "errorだよ", "newrelic.logPattern": "nr.DID_NOT_MATCH", "newrelic.source": "api.logs", "plugin.type": "fluentd", "plugin.version": "1.2.2", "tags.Name": "SWX-Web01-Windows", "timestamp": 1690517166448 }
NRQLの例
以下のようなNRQLで上記のログを検知することが可能になります。
SELECT count(*) FROM Log WHERE tags.Name ='★監視対象のEC2名★'AND log_name = '★ログファイル名★' AND message LIKE '%★検知文字列★%'
まとめ
fluentdを用いることでShift_JISログの連携できることが確認できました。
なお、New Relic Infrastructure はFluent-bitをバンドルしており、
文字コード変換には対応していないので文字コード変換する際はfluentdを使用する必要があるらしいです(2023年09月10日時点)