New Relic : Drop filter rules によるデータ量削減
New Relic へのデータ取り込み時に不要なデータを破棄できます。
HealthCheck など監視用のリクエストを除外したいが、送信元で制御できない場合などに有用です。
New Relic のデータベース “NRDB” への投入前に破棄され、課金対象から除外されます。
目次
概要図
対象のデータがログである場合は、PartitionとParse処理が少し絡んできます。
- Partition
- ログをグループ化して保存を行う機能
- 詳細は “パーティションによるデータの整理 \| New Relic Documentation” 参照
- Parse
- ログのパースルール
- Partition に関わらず全体に適用することも、Partition 毎に適用することも可能
- Drop filter
- Partition に関わらず全体に適用することも、Partition 毎に適用することも可能
- Logs → Drop filters から設定が可能
Drop filter rules 詳細
Attributes (ドロップ属性)
NerdGraph API でのキーは action
です。以下の3種類がサポートされています。
(Logs インターフェース上では、 “Filter type” 項目となっています)
DROP_DATA
(Drop logs)- データまたはサブセットの削除
DROP_ATTRIBUTES
(Drop attributes)- データ属性の削除
DROP_ATTRIBUTES_FROM_METRIC_AGGREGATES
- メトリックカーディナリティ管理のためのメトリック集計プルーニング\| New Relic
- データ量削減ではなく、カーディナリティ制限に対する機能となるため本稿では割愛
DROP_DATA、DROP_ATTRIBUTES のドロップ対象は以下のイメージです。
NRQL の制限
ドロップ対象は NRQL で指定します。
- SELECT 句
- DROP_DATA の場合、 “*” 固定
- DROP_ATTRIBUTES の場合、”*” は利用不可。属性名のリストを渡す必要がある
- 最大 4,098 文字
- 超過すると INVALID_NRQL_TOO_LONG エラーとなる
- WHERE 句 以外の機能は利用不可
- LIMIT、TIMESERIES、COMPARE_WITH、FACET、SINCE、…
- 履歴(過去)データの削除は不可
- 将来のある時点までを指定する場合は、timestamp で指定する
- “WHERE timestamp < (epoch milliseconds in the future)”
- 将来のある時点までを指定する場合は、timestamp で指定する
ドロップルールの作成例
Logs インターフェース、または、 NerdGraph で設定します。
Logs
“Logs” → “Drop filters” → “Create drop filter” から作成します。
- Partitions
- 適用対象とする partition を選択。複数選択可。
- Filter logs based on NRQL
- NRQL の WHERE 句 で破棄するデータを指定。
- ※ Logs インターフェース上での検索は Lucene クエリ言語 を利用できるが、ここで指定するのは NRQL。
- 作成した設定は NerdGraph 上で、 “nrql” に FROM Log 、”source”: ”Logging” が付与される。
- Attributes
- Filter type を “Drop attributes” とした場合に、破棄する属性を選択。複数選択可。
詳細表示や更新には対応しておらず、変更する場合には再作成が必要になります。
NerdGraph
Log を含む、対応している全データを対象とした設定が可能です。
UI で設定する場合、 “Apps” → “NerdGraph API Explorer” から作成します。
“Search fields” に DropRules を入力してフィルタを掛けると、 参照・作成・削除 のクエリ生成用フィールドが確認できます。
参照
nrqlDropRules
を選択すると、クエリ構築に必要なフィールドが自動入力されます。
“[actor.account.id](http://actor.account.id)” は New Relic の account ID です。左上のAPIキーのプルダウンに表示されています。
または、 URL の account= 部でも確認できます。
その他必要になるフィールドを選択していきます。
必要フィールドが揃うと Query Builder 上でのエラー出力が無くなり、実行できるようになります。
作成
nrqlDropRulesCreate
で作成します。
nrqlDropRules で確認すると作成した rule を確認できます。
”source”: ”NerdGraph” として追加されています。
この例では5分間隔で発生しているデータを破棄する様にしています。
実際のデータを確認すると、 Drop filter 追加後は New Relic 上にデータが存在しない事を確認できます。
削除
nrqlDropRulesDelete
でルールを削除します。
ルールの削除後に実際のデータを確認すると、 Drop filter 削除後は New Relic 上にデータが存在し、Drop filter 設定前の状態に戻った事を確認できます。
NerdGraph API Explorer (Apps) について
NerdGraph API 実行のためのツールです。Drop filter rules に限らず様々な操作が行なえます。
NerdGraphの紹介:当社のGraphQL API \| New Relic Documentation
Web UI 上で作成したクエリを出力でき、ターミナルからの実行など CLI として利用できます。
APIキーなど必要な情報が入った状態で出力されるので、そのまま実行できます。
インターフェース上の表示 について
Drop filter rule は Logs インターフェース、または、 NerdGraph の2つの方法で設定しますが、
NerdGraph で作成したルールは ”Logs” → “Drop filters” には表示されません。
現在の仕様
“source” フィールドが表示条件です。
- Logs インターフェースで作成 → “source”: “Logging”
- NerdGraph で作成 → “source”: “NerdGraph”
ここで言う “source” は破棄対象となるデータのソースではなく、
Drop filter rule を作成したソースを意味するようです。
Logs 以外のデータを対象とした Drop filter rule を “source”: “Logging” として作成することで Logs インターフェース上に表示することができます。
NerdGraph API Explorer 上で、sourceフィールドはエラー出力されますが、実行は問題なく行なえます。
作成されたルールを確認すると、 “source”: “Logging” が設定できています。
“source”: “Logging” であるルールは、Logs インターフェース上で表示されます。
実際に除外も成されます。
その他の情報
Log が対象でないと動作しないのかと思いきや、問題無く動作します。
Log 以外のデータの source を Logging としても現時点では支障は無い様です。
Logs インターフェース上
Logs インターフェース上には以下の文言が表示されています。
This view only shows dropped filters created from our platform or drop filters created NerdGraph with the `source` attribute set to `Logging`.
Logs インターフェース上で作成するか、 source に “Logging” を設定すると表示するとあります。
日本語ブログ
ログのDrop filterについての公式の日本語ブログでも `source: “Logging”` の指定を紹介しています。
このことから、NerdGraph API Explorer 上での sourceフィールドはエラー出力は無視して良いようです。
NRQLを使ってログのDrop filterを作成する方法 \| New Relic
ここでポイントになるのは`nrql`と`source`の部分です。画面から設定する際はLuceneベースでの条件指定方法しかできませんでしたが、ここではNRQLを設定することができます。また、このルールがログ用のルールであることを定義するために`source: “Logging”`を設定する必要があります。
Terraform
Terraform New Relic provider の newrelic_nrql_drop_rule で Drop filter rule を管理できます。
現時点では source フィールド未対応です。
“source”: “NerdGraph” 固定で作成されます。
まとめ
New Relic には取り込み前にデータを破棄できる Drop filter rule 機能があります。
ルールに合致したデータはデータ量の課金対象から除外されます。
ルールの一覧はログ用のみ標準UIが提供されています。
その他のデータ用のルールについては NerdGraph で確認します。
本来、不要なデータは “出力しない”、”転送しない” 方が良いですが、
諸事情により送信元(監視対象側)で制御不可な場合に有用な機能だと思います。
性質上、設定頻度が少なく、表に出難い(見え難い)設定項目になると思います。
注意事項をよく読み、用法用量を守って正しくお使いください。