LoginSignup
0
0

本来指定できないNRQLのFACET句にmessage 属性を指定させる話

Last updated at Posted at 2024-04-13

はじめに

New Relicでログ監視設定をしている中でNRQLにmessage 属性入れてみたいなーと思いつつもできない。ぐぬぬ..
あれ? parse rule使って属性名変更すればいけるのでは?→ いけましたという話です
(04/14追記)workflowのエンリッチメントの機能は頭から抜けてました。

多分本来のparse ruleの使い方ではないです。

NRQLとは

NewRelic社が提供するクエリ言語です。
NRQLは「New Relic Query Language」の略称で、SQL(Structured Query Language)に似た構文を持っています。
NRQLを使うことで、NewRelic上に蓄積されたデータを以下のように抽出・分析することができます。

機能 説明
データの抽出 (SELECT句) 取得したいデータの属性を指定します。
データのフィルタリング (WHERE句) 条件に合致するデータのみを抽出します。
データのグループ化 (FACET句) 属性値ごとにデータをグループ化します。
データの集計 (COUNT、SUM、AVG、MAX、MIN) 集計関数を使ってデータを集計します。
データの並び替え (ORDER BY句) 指定した属性でデータを昇順/降順に並び替えます。
データの時間範囲指定 (SINCE句) 指定した時間範囲のデータのみを抽出します。

NRQLは、NewRelic上のさまざまなデータソース(アプリケーションパフォーマンス、インフラストラクチャ、ログ、トレース、カスタムイベントなど)に対して使用できるため、NewRelic上の多様なデータを統合的に分析することができます。

FACET句にmessage属性を指定できない

おそらくmessage属性がログなどのテキストデータを表すため
FACET句で指定すると大量の情報をグループ化することになり、多数のアラート発生や分析が困難になるためmessage属性はFACET句に指定できないと思われます

NRQLでは、デフォルトではmessage属性をFACET句で指定することができません。

通常、FACET句では、離散的な値を持つ属性(例えば、アプリケーション名、ホスト名など)を指定するのが適切です。
message属性のようなテキストデータは、WHERE句でフィルタリングするなどして、分析の対象を絞り込むのが一般的な使い方です。

実際にFACET句にmessage属性を指定し、NRQLの設定をすると以下エラーが出ます。
image.png

とはいえmessage属性をNRQLに入れてみたい

前述のように、NRQLではmessage属性をデフォルトではFACET句で指定できません。
しかしアラート文面にmessage属性の内容を含めたい等を理由にNRQLへ入れたい場合があります。(わたしはありました。)

そこで登場するのがparse ruleです。

parse ruleとは

NewRelicでは、ログデータなどのテキストデータを構造化された形式で取り扱うために、「parse rule」を定義することができます。

parse ruleとは、ログデータ内のテキストを解析して、特定の属性値を抽出する設定のことです。
これにより、ログデータをNRQLで効果的に分析できるようになります。

例:プレーン テキストと混在したJSONの解析

NewRelicさんのparsing rule説明ページに記載されていた例です

たとえば、ログに日付/時刻の文字列がプレフィックスとして付けられている場合:

2015-05-13T23:39:43.945958Z {"event": "TestRequest", "status": 200, "response": {"headers": {"X-Custom": "foo"}}, "request": {"headers": {"X-Custom": "bar"}}}

このログ形式から JSON データを抽出して解析するには、次のparsingルールを作成します。

%{TIMESTAMP_ISO8601:containerTimestamp} %{GREEDYDATA:my_attribute_prefix:json}

結果のログは次のとおりです。

containerTimestamp: "2015-05-13T23:39:43.945958Z"
my_attribute_prefix.event: "TestRequest"
my_attribute_prefix.status: 200
my_attribute_prefix.response.headers.X-Custom: "foo"
my_attribute_prefix.request.headers.X-Custom: "bar"

parse ruleを適用することで、ログデータ内の重要な情報を構造化された形式で取り出すことができNRQLによる分析がより効果的に行えるようになります。

parse ruleを活用?しました

(再掲)多分本来のparse ruleの使い方ではないです。

ある設定でparsingルール触っていてふと思いました。
構造化できるのであれば単純に属性名も変更できるのでは・・
例えば、message属性をlog_messageなどに変更すればNRQLにmessage内容を導入できるのでは??

できました

parse ruleでmessage属性を別属性に変更することでFACET句に指定できました。

実施した手順は以下の通りです:

parse ruleを作成

message属性の内容を別の属性(log_message)に抽出する
 ・Parsing ruleの内容:%{GREEDYDATA:log_message}

parsingルールを作成後にNewRelicに送られたログ情報の一部です。
messagelog_message(parsingルール設定した内容)した内容が含まれておりました。

{
  "log_message": "20240413 parsing test test.log:ERROR",
  "message": "20240413 parsing test test.log:ERROR",
}

NRQLのFACET句で、log_message属性を指定する

問題なく設定できました(アラート文面にも記載できました

2024-04-13_21h16_01.png

FACET句で、log_message属性を指定できたということは・・・

Issueの内のIncident Payloadにtag情報として登録されるということですね!
これでアラート設定にもlog_message属性の値を活用できるようになりました

2024-04-13_21h59_13.png

まとめ

  • 本来NRQLのFACET句に使用できないmessage属性を別の属性に変換することで、FACET句として使用することが出来ます(本来の使い方かは微妙ですが)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0