Edited at
New RelicDay 20

fluent-newrelic-insightsプラグインを作った

More than 3 years have passed since last update.

この記事は New Relic Advent Calendar 2015 の20日目です。

New Relic Insightsは素晴らしい可能性を感じるサービスではあるのですが、どうやら未だfluentdのouput pluginは誰も作っていないようです。こういうタイプのサービスを見ると、fluentdのプラグインを作りたくなるのは一般的なプログラマの通常の反応だと思うのですが、まだ存在しないということはそれだけNew Relic Insightsが一般に浸透していないということでしょう。

ということで、fluent-newrelic-insights を作ってみました。

これはfluentdのアウトプットプラグインです。受け取ったログデータをNew Relic Insightsにカスタムイベントとして送信します。


インストール

gemを公開しているので、gem install fluent-newrelic-insightsでインストールできます。


設定

<match yourapp.**>

@type newrelic_insights
account_id <Your Account ID>
insert_key <Your Insert Key>
</match>

account_idinsert_key は必須です。どちらもInsightsの管理画面から取得できます。


動かす

ここではテストとして次のような設定とfluent-catを使って動作を確認してみます。IDと鍵は伏せます


サンプル設定ファイル

# fluent.conf

<source>
@type forward
port 24224
</source>

<match app.**>
@type newrelic_insights
account_id ******
insert_key **********
</match>

fluentdを起動します

$ fluentd -c fluent.conf

fluentdにデータを送ります

echo '{"eventType": "sampleType", "amount": 1000, "metadata": {"user_id": 1, "group_id": 100}}' | fluent-cat --json app

上記のコマンドを連続5回実行した結果が以下です。

ということで、しっかりログがInsightsに送られていることが確認できました。


設定

細かい設定について少しだけ書いておきます。


event_type_key

<match app.**>

@type newrelic_insights
account_id ******
insert_key **********
event_type_key 'event'
</match>

入力データのどのキーをInsightsのeventTypeとみなすかの設定です。デフォルトではeventTypeです。


event_data_key

入力データのどのキーをInsightsに送るデータのルートとみなすかの設定値です。デフォルトではすべてのログデータをInsightsに送信します。

例えば、次のような設定になっているとき

<match app.**>

@type newrelic_insights
account_id ******
insert_key **********
event_type_key 'event'
event_data_key 'data'
</match>

次のような入力を受けると

{

"event": "sample",
"data": {
amount: 1000,
user: {
id: 1,
name: "Taro"
}
}
}

次のようにデータを加工してInsightsに送信します

{

"eventType": "sample",
"amount": 1000,
"user.id": 1,
"user.name": "Taro",
"timestamp": 1450642010,
"fluentTag": "app"
}

以上から次のことがわかります。



  • eventeventTypeに変換されている


  • data以下がInsightsに送信されている


  • timestampfluentTagが追加されている

  • ネストしてるキーは.区切りで一つのキーに変換されている


    • Insightsはネストしたオブジェクトを受け付けないので



設定はこれだけ、すごくシンプルなので、あとはwebアプリケーションとか好きなところからどんどんログを送れば自動的にNew Relic Insightsにデータが溜まっていきます。