keyboard_double_arrow_up

Blog X-Tech5エンジニアがお送りするテックブログ
SREやDevOpsをはじめ、インフラエンジニアリングの実践情報を届けします。

New Relic : Drop filter rules によるデータ量削減

2023年10月30日 

New Relic へのデータ取り込み時に不要なデータを破棄できます。
HealthCheck など監視用のリクエストを除外したいが、送信元で制御できない場合などに有用です。

New Relic のデータベース “NRDB” への投入前に破棄され、課金対象から除外されます。

概要図

対象のデータがログである場合は、PartitionとParse処理が少し絡んできます。

  • Partition
  • Parse
    • ログのパースルール
    • Partition に関わらず全体に適用することも、Partition 毎に適用することも可能
  • Drop filter
    • Partition に関わらず全体に適用することも、Partition 毎に適用することも可能
    • Logs → Drop filters から設定が可能

Drop filter rules 詳細

Attributes (ドロップ属性)

NerdGraph API でのキーは action です。以下の3種類がサポートされています。
(Logs インターフェース上では、 “Filter type” 項目となっています)

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)”

ドロップルールの作成例

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 フィールド未対応です。

Enhancements needed so Drop Rules created with terraform can be viewed and accessed using the NR’s console UI · Issue \#2152 · newrelic/terraform\-provider\-newrelic

“source”: “NerdGraph” 固定で作成されます。

 

まとめ

New Relic には取り込み前にデータを破棄できる Drop filter rule 機能があります。
ルールに合致したデータはデータ量の課金対象から除外されます。

ルールの一覧はログ用のみ標準UIが提供されています。
その他のデータ用のルールについては NerdGraph で確認します。

本来、不要なデータは “出力しない”、”転送しない” 方が良いですが、
諸事情により送信元(監視対象側)で制御不可な場合に有用な機能だと思います。

性質上、設定頻度が少なく、表に出難い(見え難い)設定項目になると思います。
注意事項をよく読み、用法用量を守って正しくお使いください。