【New Relic】 fluentdを用いたShift_JISログの連携方法

記事タイトルとURLをコピーする

みなさんこんにちは。
マネージドサービス部の福田です。

今回は以下ブログ記事の内容を実際に試してみました。

newrelic.com

Fluentdのインストール

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日時点)

福田 圭 (記事一覧)

マネージドサービス部

医薬品業界からエンジニアに転身

2022年01月にサーバーワークスに入社

2023 New Relic Partner Trailblazer