News and media screen tile collage

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種

ここでは、パフォーマンス障害及びエラー発生のドリルダウンで利用できるテクニックをご紹介します。

作成するダッシュボードサンプル

dashboard-apm-link-1

障害分析時のドリルダウン

パフォーマンス分析を行う場合、スループットや応答速度、CPU使用率、メモリ使用率などサービスの状態とリソースの状態を併せて分析します。APMの画面だけでも見ることができますが、それに加えネットワークが重要なサービスやディスクの状態をみないといけないサービス、サービスごとに見たい情報は多岐にわたります。そのような場合、重要なインジケーターを整理し、1画面で全体の動きを把握されるでしょう。

このダッシュボードを見たときに、明らかにサービス/アプリの挙動に問題があれば、APMにドリルダウンします。New RelicではダッシュボードからAPM画面を開くいくつかの方法があるのですが、CONCAT関数を使って簡単に実装してみましょう。

仕様説明

  1. 障害を時系列で分析するためのトレンドチャート
    • 時系列のチャート上で範囲をドラッグすると、ダッシュボード全体の時間軸の絞り込みができます。障害を確認したい時間を絞り込むのに最適です。
  2. 各画面へのリンクテーブルチャート
    • ダッシュボードを時系列で絞ると、他のチャートも連動して該当時間の間のデータのみを考慮したチャートとなります。各テーブルにあるリンクは、選択した時間範囲の開始時~終了時を考慮したリンクとなっています。

リンク1:APMサマリー画面

apm summary

ダッシュボードサンプルの、パフォーマンス分析をする左側のリンクについて説明します。

トレンドチャートのクエリ

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画面

APM 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等のリンクを繋げ、さらに効果的に業務を進めることができるようになりました。ぜひご活用ください。