はじめに
New Relicのクエリ言語NRQLの2024年1月のアップデートで、JSONを柔軟に解析できる関数の他にも便利な関数が4つも登場しましたので使い方を紹介します!JSONを解析する関数の使い方についてはこちらのQiita記事で紹介しておりますので是非ご確認ください。
このアップデートの詳細はこちら
What's new
その他アップデートの詳細はこちら
New Relic アップデート(2024年1月)
New Relic アップデート一覧
新関数の使い方を確認
今回、登場した関数は以下になります。
関数名 | 機能内容 |
---|---|
convert() | あるメトリック単位から別のメトリック単位に変換します (例:ミリ秒から秒) |
cidrAddress() | IPアドレスのベースネットワークアドレスを取得します |
toTimestamp() | datetime文字列をエポックタイムに変換します |
toDatetime() | エポックタイムをdatetime文字列に変換します |
各関数の使い方を見ていきます!
convert()
convert() は、 指定された入力値に対して指定された単位間の単位変換を実行します。時間、長さ、重量、体積、データの一般的な単位と略語は、OpenTelemetryの仕様に合わせてUCUM標準を使用してサポートされています。
例ではトランザクションのduratonをミリ秒から秒に変換します。関数で簡単に単位を変換できるので便利です。
SELECT convert(duration, 'ms', 'min') AS durationMin FROM Transaction
cidrAddress()
cidrAddress()は、CIDR IPアドレスからベースネットワークアドレスを取得します。
例では、AWS VPC フローログからパケットの送信先となるEC2インスタンス毎に送信元となるCloudFrontのエッジのサブネットの件数を返しています。CDNやWebサーバーのアクセスログなどからサーバーやアプリケーションに対してどのサブネットからのアクセスが多いのか傾向を把握したいときに便利です。
SELECT count(*) FROM Log_VPC_Flows_AWS WHERE `pkt_src_aws_service` = 'CLOUDFRONT'
facet cidrAddress(srcaddr, 24),instance_id since 7 days ago
指定したCIDR範囲内に存在するIPアドレスのみリストで取得することもできます。
SELECT uniques(srcaddr) FROM Log_VPC_Flows_AWS
WHERE `pkt_src_aws_service` = 'CLOUDFRONT' and cidrAddress(srcaddr, 24) = 'IPADDRESS/CIDR'
toTimestamp()
続いて、datetime文字列からタイムスタンプをエポックミリ秒単位に変換できるtoTimestamp()の紹介です。
toTimestamp()では解析するdatetimeの日時パターンを関数内で指定することができ、デフォルトではyyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
を解析するようになっています。対応しているパターンはリファレンスに記載されています。
デフォルトのパターンyyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
を使用して、datetime文字列2024-03-24T12:00:00.000Z
を解析しています。これにより、タイムスタンプ値1711281600000
が返されます。
SELECT toTimestamp('2024-03-24T12:00:00.000Z') FROM Event
Timezoneを指定することも可能で、以下例ではタイムゾーンをAsia/Tokyo
に指定して、datetimeのパターンも指定しています。これにより、タイムスタンプ値1711332032000
が返されます。
SELECT toTimestamp('2024-03-25 11:00:32', 'yyyy-MM-dd HH:mm:ss', timezone:'Asia/Tokyo') FROM Event
toDatetime()
エポックタイムをdatetime文字列に変換する関数も登場しました。
toTimestamp()と同じくデフォルトのdatetimeのパターンは、yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
を使用して、変換します。
SELECT toDatetime(timestampValue) WITH 1711281600000 AS timestampValue
※上記、NRQLクエリの例ではWITH AS句でエポックタイム(1711281600000)
をtimestampValue
に環境変数として格納して、SELECT toDatetime(timestampValue)
で呼び出すようにしています。
以下例では、タイムゾーンをAsia/Tokyo
、yyyy-MM-dd
を指定して、 datetime文字列に変換しています。
SELECT toDatetime(timestampValue, 'yyyy-MM-dd', timezone:'Asia/Tokyo') WITH 1711332032000 AS timestampValue
まとめ
この記事では、2024年1月の機能アップデートで登場したconvert() 、cidrAddress() 、toTimestamp() 、 toDatetime()のNQRLクエリ関数の使い方を紹介させていただきました。どれも便利な関数でNRQLクエリの使い勝手がさらに向上しました。特に、エポックタイムからdatetime文字列への変換はNew Relicに送る前の変換が不要になる便利な関数です!是非ご活用ください!また、同じタイミングでアップデート機能として登場したJSONを解析する関数の使い方についてはこちらのQiita記事で紹介しておりますので是非ご確認ください。
このアップデートの詳細はこちら
What's new
その他アップデートの詳細はこちら
New Relic アップデート(2024年1月)
New Relic アップデート一覧
無料のアカウントで試してみよう!
New Relic フリープランで始めるオブザーバビリティ!
New Relic株式会社のQiita OrganizationOrganizationでは、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。