CONCAT関数
New Relicでは、SQLライクなNRQLというクエリで柔軟にデータ分析を行う機能が搭載されています。
このNRQLにCONCAT関数が実装され、より柔軟な文字列操作ができるようになりました。
ダッシュボードを構築する際、「複数の属性を結合する」「文字を追加する」これだけで利用者にとってのUXが上がり、非常に重宝します。
CONCAT関数を使ってNew Relicを使い倒すには
この強力なCONCAT関数を使ってNew Relicを使い倒すには、Table形式のチャートがおすすめの一つです。
New RelicのTable形式のチャートには、「文字列がURLであればリンクとみなす」という機能が搭載されています。データの中にURLがあれば、直接クリックし、その画面に飛ぶことができます。
フロントエンドのデータでエラーが発生している時に「このURLどの画面だっけ?」ということを考えることなく、クリックすればその画面に到達できます。
このブログでは、このリンク機能とCONCAT機能を活用し、New Relic内部でよりスムーズな画面遷移を行う方法をご紹介します。
実装サンプル: APM画面へのリンク2種
ここでは、パフォーマンス障害及びエラー発生のドリルダウンで利用できるテクニックをご紹介します。
作成するダッシュボードサンプル
障害分析時のドリルダウン
パフォーマンス分析を行う場合、スループットや応答速度、CPU使用率、メモリ使用率などサービスの状態とリソースの状態を併せて分析します。APMの画面だけでも見ることができますが、それに加えネットワークが重要なサービスやディスクの状態をみないといけないサービス、サービスごとに見たい情報は多岐にわたります。そのような場合、重要なインジケーターを整理し、1画面で全体の動きを把握されるでしょう。
このダッシュボードを見たときに、明らかにサービス/アプリの挙動に問題があれば、APMにドリルダウンします。New RelicではダッシュボードからAPM画面を開くいくつかの方法があるのですが、CONCAT関数を使って簡単に実装してみましょう。
仕様説明
- 障害を時系列で分析するためのトレンドチャート
- 時系列のチャート上で範囲をドラッグすると、ダッシュボード全体の時間軸の絞り込みができます。障害を確認したい時間を絞り込むのに最適です。
- 各画面へのリンクテーブルチャート
- ダッシュボードを時系列で絞ると、他のチャートも連動して該当時間の間のデータのみを考慮したチャートとなります。各テーブルにあるリンクは、選択した時間範囲の開始時~終了時を考慮したリンクとなっています。
リンク1:APMサマリー画面
ダッシュボードサンプルの、パフォーマンス分析をする左側のリンクについて説明します。
トレンドチャートのクエリ
SELECT percentile(duration, 99) FROM Transaction
FACET appName limit max TIMESERIES
このクエリでは、サービスごとのp.99のパフォーマンスを時系列で表示します。この例では時間帯を絞り込むことが目的のため、こちらのクエリはシンプルで問題ありません。
もし機能ごとにパフォーマンスを見たい、特定のURLにフォーカスしたい、ということがあれば、WHEREを追加したり、FACETを変更しましょう。
リンク用テーブルチャートのクエリ
FROM(
SELECT max(duration) as duration,
earliest(string(timestamp)) as t1,
latest(string(timestamp)) as t2
FROM Transaction
FACET appName, entityGuid limit max)
SELECT latest(duration),
latest(concat('https://one.newrelic.com/nr1-core/apm-features/overview/', entityGuid, '?begin=', t1, '&end=', t2)) as URL
FACET appName
解説
最終的に作成したいリンクは、以下のようなリンクです。
https://one.newrelic.com/nr1-core/apm-features/overview/MzMzODk0MHxBUE18QVBQTElDQVRJT058MTA1ODMyMDI3NA?begin=1661213389848&end=1661213585469
どのAPMなのか、どの時間帯を表示するのかがこのURLで表現されています。
MzMzODk0・・・・ | entityGuid。どのサービスかを特定する一意なID |
begin=1661213389848 | 開始時刻 |
end=1661213585469 | 終了時刻 |
NRQLで利用できるInner Queryを使って、元情報となるentityGuidと開始/終了時刻を取得します。
SELECT max(duration) as duration, latest(entityGuid) as entityGuid, earliest(string(timestamp)) as t1,latest(string(timestamp)) as t2 FROM Transaction FACET appName limit max
timestampは数値です。数値を数値のまま扱うと、New Reilcが気を遣ってくれて、1.7*1e12のような略記となってしまいます。それを抑止するために、string(timestamp)を使っています。Inner Queryとしているのは、開始と終了を1行のレコードで表現するためです。
その後に以下のようにconcatを使ってURLを生成します。
latest(concat('https://one.newrelic.com/nr1-core/apm-features/overview/', entityGuid, '?begin=', t1, '&end=', t2)) as URL
リンク2: Errors Inbox画面
大枠の仕組みはサマリー画面と同じなので、参考としてクエリのみご紹介します。
エラー発生トレンドチャートのクエリ
SELECT count(*) FROM TransactionError
FACET appName limit max TIMESERIES
Errors Inbox用リンクのテーブルチャートのクエリ
FROM(
SELECT count(*) as errors,
earliest(string(timestamp)) as t1,
latest(string(timestamp)) as t2
FROM TransactionError
FACET appName, entityGuid, error.message limit max)
SELECT latest(errors),
latest(concat('https://one.newrelic.com/nr1-core/errors-inbox/entity-inbox/', entityGuid, '?begin=', t1, '&end=', t2)) as URL
FACET appName, error.message
まとめ
CONCAT関数を使うと、文字列の操作がこれまでよりも柔軟にできるようになりました。
加えて、ダッシュボードとAPM等のリンクを繋げ、さらに効果的に業務を進めることができるようになりました。ぜひご活用ください。
次のステップ
サインアップ本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。