チュートリアル: メトリック データをオンボードするための有効なクエリを作成する
重要
2023 年 9 月 20 日以降は、新しい Metrics Advisor リソースを作成できなくなります。 Metrics Advisor サービスは、2026 年 10 月 1 日に廃止されます。
このチュートリアルでは、次の作業を行う方法について説明します。
- 有効なデータ オンボード クエリを作成する方法
- 一般的なエラーとその回避方法
前提条件
Metrics Advisor リソースを作成する
Metrics Advisor の機能を利用するには、Azure portal で Metrics Advisor リソースを作成して、Metrics Advisor インスタンスをデプロイする必要があります。
データ スキーマの要件
Azure AI Metrics Advisor は、時系列の異常検出、診断、分析のためのサービスです。 AI を利用したサービスとして、ユーザーのデータを使用して、使用するモデルをトレーニングします。 このサービスは、次の列を含んだ集計データのテーブルを受け取ります。
- Measure (必須): メジャーは、単位固有の基本的な用語であり、メトリックの定量化可能な値です。 数値を格納する 1 つまたは複数の列を意味します。
- Timestamp (省略可): 型が
DateTime
またはString
である、0 個または 1 個の列。 この列が設定されなかった場合は、タイムスタンプが各インジェスト期間の開始時刻として設定されます。 タイムスタンプをyyyy-MM-ddTHH:mm:ssZ
の形式で指定します。 - Dimension (省略可): ディメンションは、1 つまたは複数のカテゴリの値です。 これらの値を組み合わせることによって、特定の一変量時系列 (国やリージョン、言語、テナントなど) が識別されます。 ディメンション列のデータ型は任意です。 大量の列と値を扱う際は、処理の対象となるディメンションの数が多くなりすぎないように注意してください。
Azure Data Lake Storage や Azure Blob Storage などのデータ ソースを使用している場合は、予期されるメトリック スキーマに合わせてデータを集計できます。 これは、これらのデータ ソースがメトリック入力としてファイルを使用するためです。
Azure SQL や Azure Data Explorer などのデータ ソースを使用している場合は、集計関数を使用して、予期されるスキーマにデータを集計できます。 これは、これらのデータ ソースで、ソースからメトリック データを取得するためのクエリの実行がサポートされているためです。
Metrics Advisor でのデータ インジェストのしくみ
メトリックを Metrics Advisor にオンボードする場合、一般に次の 2 つの方法があります。
- メトリックを予想されるスキーマに事前に集計し、データを特定のファイルに格納します。 オンボード中にパス テンプレートを入力すると、Metrics Advisor によりパスから新しいファイルが継続的に取得され、メトリックに対して検出が実行されます。 これは、Azure Data Lake や Azure Blob Storage のようなデータ ソースに対する一般的な方法です。
- Azure SQL Server、Azure Data Explorer、クエリ スクリプトの使用をサポートしているその他のソースなどのデータ ソースからデータを取り込む場合は、クエリが適切に構築されていることを確認する必要があります。 この記事では、メトリック データを想定どおりにオンボードする有効なクエリを作成する方法について説明します。
間隔とは
メトリックは、ビジネス要件に応じて特定の細分性で監視する必要があります。 たとえば、ビジネスの主要業績評価指標 (KPI) は、日単位の細分性で監視されます。 ただし、サービス パフォーマンス メトリックは、多くの場合、分単位または時間単位の細分性で監視されます。 そのため、ソースからメトリック データを収集する頻度は異なります。
Metrics Advisor により、各時間間隔で継続的にメトリック データが取得され、その間隔はメトリックの細分性と等しくなります。作成したクエリが Metrics Advisor によって毎回実行され、この特定の間隔でデータが取り込まれます。 このデータ インジェスト メカニズムに基づいて、クエリ スクリプトはデータベースに存在するすべてのメトリック データを返すのではなく、結果を 1 つの間隔に限定する必要があります。
有効なクエリを作成する方法
Use @IntervalStart and @IntervalEnd to limit query results
これを容易に行うために、クエリ内で使用する @IntervalStart と @IntervalEnd という 2 つのパラメーターが用意されています。
クエリが実行されるたび、@IntervalStart と @IntervalEnd が自動的に最新の間隔のタイムスタンプに更新され、対応するメトリック データが取得されます。 @IntervalEnd は常に @IntervalStart + 1 の細分性で割り当てられます。
Azure SQL Server でこれら 2 つのパラメーターを適切に使用する例を次に示します。
SELECT [timestampColumnName] AS timestamp, [dimensionColumnName], [metricColumnName] FROM [sampleTable] WHERE [timestampColumnName] >= @IntervalStart and [timestampColumnName] < @IntervalEnd;
この方法でクエリ スクリプトを作成することにより、クエリ結果ごとにメトリックのタイムスタンプが同じ間隔に収まります。 Metrics Advisor により、メトリックの細分性に合わせてタイムスタンプが自動的に調整されます。
集計関数を使用してメトリックを集計する
顧客のデータ ソース内に多くの列があるのは一般的なケースですが、それらのすべてを監視したり、ディメンションとして含めたりするのに意味があるわけではありません。 顧客は集計関数を使用してメトリックを集計し、意味のある列のみをディメンションとして含めることができます。
次に示す例では、顧客のデータ ソースに 10 を超える列がありますが、その中で意味のある列は数個しかなく、監視するメトリックに含めて集計する必要があります。
TS | Market | Device OS | カテゴリ | ... | Measure1 | Measure2 | Measure3 |
---|---|---|---|---|---|---|---|
2020-09-18T12:23:22Z | ニューヨーク | iOS | サングラス | ... | 43242 | 322 | 54546 |
2020-09-18T12:27:34Z | 北京 | Android | バッグ | ... | 3333 | 126 | 67677 |
... |
顧客が 'Measure1' を 1 時間単位の細分性で監視したいと考え、ディメンションとして 'Market' と 'カテゴリ' を選択した場合、集計関数を適切に使用してこれを実現する方法の例を次に示します。
SQL サンプル:
SELECT dateadd(hour, datediff(hour, 0, TS),0) as NewTS ,Market ,Category ,sum(Measure1) as M1 FROM [dbo].[SampleTable] where TS >= @IntervalStart and TS < @IntervalEnd group by Market, Category, dateadd(hour, datediff(hour, 0, TS),0)
Azure Data Explorer サンプル:
SampleTable | where TS >= @IntervalStart and TS < @IntervalEnd | summarize M1 = sum(Measure1) by Market, Category, NewTS = startofhour(TS)
Note
上記の場合、顧客は 1 時間単位の細分性でメトリックを監視したいと考えていますが、生のタイムスタンプ (TS) は調整されていません。 集計ステートメント内で、時間を合わせて、'NewTS' という新しいタイムスタンプ列を生成するように、タイムスタンプの処理を行う必要があります。
オンボード中の一般的なエラー
エラー: クエリ結果に複数のタイムスタンプ値が見つかりました
これは、クエリ結果を 1 つの間隔で限定していない場合に発生する一般的なエラーです。 たとえば、日単位の細分性でメトリックを監視していて、クエリから次のような結果が返された場合、このエラーが発生します。
複数のタイムスタンプ値が含まれていますが、それらは同じメトリック間隔 (1 日) 内ではありません。 「Metrics Advisor でのデータ インジェストのしくみ」を確認し、Metrics Advisor がメトリック間隔ごとにメトリック データを取り込むことを理解してください。 その後、クエリで @IntervalStart と @IntervalEnd を使用して、1 つの間隔の結果に限定してください。 詳しいガイダンスとサンプルについては、Use @IntervalStart and @IntervalEnd to limit query results を確認してください。
エラー: 1 つのメトリック間隔内に同じディメンションの組み合わせで重複するメトリック値が見つかりました
1 つの間隔内では、Metrics Advisor は同じディメンションの組み合わせに対して 1 つのメトリック値しか含めることができません。 たとえば、日単位の細分性でメトリックを監視していて、クエリから次のような結果が返された場合、このエラーが発生します。
詳細なガイダンスとサンプルについては、「集計関数を使用してメトリックを集計する」を参照してください。
次のステップ
次の記事に進み、作成方法を確認します。