ユーザーアクセス指標検出¶
現在のドキュメントの位置づけ
本ドキュメントは、検出ルール設定フローにおける第2ステップです。設定が完了したら、メインドキュメントに戻り第3ステップ:イベント通知に進んでください。
ワークスペース内のユーザーアクセス指標データを監視するために使用します。Web、Android、iOS、ミニアプリ(Miniapp)、React Native、HarmonyOS など、複数のアプリケーションタイプのパフォーマンス指標に対してしきい値を設定し、指標がしきい値を超えた場合にシステムが自動的にアラートをトリガーします。
フロントエンドアプリケーションのパフォーマンスを監視する必要があるシナリオに適しています。例えば、Web 側の都市ディメンションに基づく JS エラー率の監視や、ミニアプリのページ読み込み時間、モバイルアプリのクラッシュ率などを監視します。
検出設定¶
検出頻度¶
検出を実行する時間間隔を設定します。
- プリセットオプション:1 分、5 分、10 分、15 分、30 分、1 時間
- デフォルト選択:5 分
- Crontab モード:「Crontab モードに切り替える」をクリックして、カスタム周期を設定できます。秒、分、時、日、月、週などの周期に基づいて、定期タスクの実行を設定できます。
検出区間¶
毎回の検出でクエリするデータの時間範囲を設定します(❗️ 検出区間は検出頻度以上に設定し、データの実際の報告周期と一致させる必要があります。漏検や誤検を防ぐためです)。
| 検出頻度 | 検出区間(ドロップダウン選択可能) |
|---|---|
| 30s | 1m/5m/15m/30m/1h/3h |
| 1m | 1m/5m/15m/30m/1h/3h |
| 5m | 5m/15m/30m/1h/3h |
| 15m | 15m/30m/1h/3h/6h |
| 30m | 30m/1h/3h/6h |
| 1h | 1h/3h/6h/12h/24h |
| 6h | 6h/12h/24h |
| 12h | 12h/24h |
| 24h | 24h |
- カスタム形式:カスタム入力で検出区間を設定します。例:
20m(直近 20 分)、2h(直近 2 時間)、1d(直近 1 日)。
検出指標¶
検出する指標データを設定します。現在のワークスペース内の単一のアプリケーションタイプにおけるアプリ指標データを設定できます(❗️ 高カーディナリティフィールドを検出ディメンションとして選択しないでください。設定が適切でない場合、トリガー条件が緩くなり、頻繁なアラートが発生する可能性があります。現在のクエリの最大返却件数は 10 万件です)。
設定要素¶
| 設定項目 | 説明 |
|---|---|
| アプリケーションタイプ | RUM がサポートするアプリケーションタイプ:Web、Android、iOS、Miniapp、HarmonyOS |
| アプリケーション名 | 選択したアプリケーションタイプに基づいて、対応するアプリケーション一覧を取得します。すべてまたは指定のアプリケーションを選択できます。 |
| 指標 | アプリケーションタイプに応じて、対応するパフォーマンス指標を表示します。詳細は以下の指標説明を参照してください。 |
| フィルター条件 | 指標のタグに基づいて、検出指標のデータをフィルタリングし、検出するデータ範囲を制限します。1 つまたは複数のタグフィルターを追加できます。あいまい一致およびあいまい不一致のフィルター条件をサポートします。 |
| 検出ディメンション | 設定データ内の文字列型(keyword)フィールドを検出ディメンションとして選択できます。現在、検出ディメンションは最大 3 つのフィールドまで選択可能です。複数の検出ディメンションフィールドの組み合わせにより、特定の検出対象を特定できます。システムは、検出対象に対応する統計指標がトリガー条件のしきい値を満たしているかどうかを判断し、条件を満たした場合にイベントを生成します。 (例:検出ディメンションとして host と host_ip を選択した場合、検出対象は {host: host1, host_ip: 127.0.0.1} となります。) |
| 追加情報 | 追加フィールドは付加的なクエリにのみ使用され、トリガー条件の判断には使用されません。これらをイベント通知に設定できます。複数の一致する値が検出された場合は、ランダムに 1 件のレコードが返されます。 |
Web / ミニアプリ 指標説明¶
| 指標 | DQL クエリ例 |
|---|---|
| JS エラー数 | R::error:(count(__docid) asJS 错误数) { app_id = '<应用 ID>' } |
| JS エラー率 | Web: eval(A/B, alias='页面 JS 错误率', A="R::view:(count(view_url)) {view_error_count > 0, app_id = '<应用 ID>'}", B="R::view:(count(view_url)) { app_id = '<应用 ID>'}")ミニアプリ: eval(A/B, alias='JS 错误率', A="R::view:(count(view_name)) {view_error_count > 0, app_id = '<应用 ID>' }", B="R::view:(count(view_name)) { app_id = '<应用 ID>' }") |
| リソースエラー数 | R::resource:(count(resource_url) as资源错误数) {resource_status >=400, app_id = '<应用 ID>'}" |
| リソースエラー率 | eval(A/B, alias='资源错误率', A="R::resource:(count(resource_url)) { resource_status >= '400',app_id = '<应用 ID>' }", B="R::resource:(count(resource_url)) { app_id = '<应用 ID>' }") |
| 初回レンダリング平均時間 | R::page:(avg(page_fpt)){app_id = '<应用 ID>'} |
| ページ読み込み平均時間 | R::view:(avg(loading_time)){app_id = '<应用 ID>'} |
| ページ遅延読み込み回数 | R::resource:(count(resource_load)){app_id = '<应用 ID>',resource_load>8000000000,resource_type='document'}" |
| リソース読み込み平均時間 | R::resource:(avg(resource_load) as加载耗时) {app_id = '<应用 ID>',resource_type!='document'}" |
| LCP (largest_contentful_paint) | 集約関数をサポート:avg、percentileR::view:(avg(largest_contentful_paint)){app_id = '<应用 ID>'}R::view:(percentile(largest_contentful_paint,75)){app_id = '<应用 ID>'}R::view:(percentile(largest_contentful_paint,90)){app_id = '<应用 ID>'}R::view:(percentile(largest_contentful_paint,99)){app_id = '<应用 ID>'} |
| FID (first_input_delay) | 集約関数をサポート:avg、percentileR::view:(avg(first_input_delay)){app_id = '<应用 ID>'}R::view:(percentile(first_input_delay,75)){app_id = '<应用 ID>'}R::view:(percentile(first_input_delay,90)){app_id = '<应用 ID>'}R::view:(percentile(first_input_delay,99)){app_id = '<应用 ID>'} |
| CLS (cumulative_layout_shift) | 集約関数をサポート:avg、percentileR::view:(avg(cumulative_layout_shift)){app_id = '<应用 ID>'}R::view:(percentile(cumulative_layout_shift,75)){app_id = '<应用 ID>'}R::view:(percentile(cumulative_layout_shift,90)){app_id = '<应用 ID>'}R::view:(percentile(cumulative_layout_shift,99)){app_id = '<应用 ID>'} |
| FCP (first_contentful_paint) | 集約関数をサポート:avg、percentileR::view:(avg(first_contentful_paint)){app_id = '<应用 ID>'}R::view:(percentile(first_contentful_paint,75)){app_id = '<应用 ID>'}R::view:(percentile(first_contentful_paint,90)){app_id = '<应用 ID>'}R::view:(percentile(first_contentful_paint,99)){app_id = '<应用 ID>'} |
Android / iOS 指標説明¶
| 指標 | DQL クエリ例 |
|---|---|
| 起動時間 | R::action:(avg(duration)) { app_id = '<应用 ID>' ,action_type='app_cold_launch'}" |
| 総クラッシュ数 | R::error:(count(error_type)) {app_id='<应用 ID>',error_source = 'logger' and is_web_view !='true'}" |
| 総クラッシュ率 | eval(A.a1/B.b1, alias='总崩溃率',A="R::error:(count(error_type) as a1) {app_id='<应用 ID>',error_source = 'logger',is_web_view !='true'} ",B="R::action:(count(action_name) as b1) { app_id = '<应用 ID>',action_type in [launch_cold,launch_hot,launch_warm]} ")" |
| リソースエラー数 | R::resource:(count(resource_url) as资源错误数) {resource_status >=400, app_id = '<应用 ID>'}" |
| リソースエラー率 | eval(A/B, alias='资源错误率', A="R::resource:(count(resource_url)) { resource_status >= '400',app_id = '<应用 ID>' }", B="R::resource:(count(resource_url)) { app_id = '<应用 ID>' }") |
| 平均 FPS | R::view:(avg(fps_avg)) { app_id = '<应用 ID>' }" |
| ページ読み込み平均時間 | R::view:(avg(loading_time)) { app_id = '<应用 ID>' }" |
| リソース読み込み平均時間 | R::resource:(avg(duration)) { app_id = '<应用 ID>' }" |
| カクつき回数 | R::long_task:(count(view_id)) { app_id = '<应用 ID>' }" |
| ページエラー率 | eval(A/B, alias='页面错误率',A="R::view:(count(view_name)) {view_error_count > 0, app_id = '<应用 ID>' }",B="R::view:(count(view_name)) { app_id = '<应用 ID>' }")" |
トリガー条件¶
トリガー条件と重要度を設定します。クエリ結果が複数の値を持つ場合、いずれかの値がトリガー条件を満たすとイベントが生成されます。
致命的、重大、重要、警告の 4 段階のしきい値と、正常の回復条件を設定できます。
| レベル | 設定 | 説明 |
|---|---|---|
| 致命的 | Result >= [値] の場合 |
最高レベルのアラート。即時対応が必要です。 |
| 重大 | Result >= [値] の場合 |
高レベルのアラート。優先的に対応が必要です。 |
| 重要 | Result >= [値] の場合 |
中レベルのアラート。注意が必要です。 |
| 警告 | Result >= [値] の場合 |
低レベルのアラート。留意が必要です。 |
| 正常 | [N] 回の検出でイベントが発生しない場合 |
検出ルールが有効になった後、設定したカスタム検出回数内に、データ検出結果が異常(致命的、重大、重要、警告)から正常に回復した場合、回復アラートイベントがトリガーされます。 ❗️ 回復アラートイベントはアラートミュートの制限を受けません。回復アラートイベントの検出回数が設定されていない場合、アラートイベントは回復されず、常にイベント > 未復旧イベント一覧に表示されます。 |
詳細については、イベントレベル説明 を参照してください。
詳細オプション¶
連続トリガー判定¶
有効にすると、トリガー条件を継続的に満たした場合にのみイベントが生成され、一時的な変動による誤報を防ぎます(❗️ 最大設定上限は 10 回です)。
大量アラート保護¶
システムデフォルトで有効です。
1 回の検出で生成されるアラート数が事前設定されたしきい値を超えた場合、システムは自動的に状態集約ポリシーに切り替わります。アラート対象を個別に処理するのではなく、イベント状態に基づいて少数のサマリアラートを生成し、プッシュします。
これにより、通知の即時性を確保しつつ、アラートノイズを大幅に削減し、多数のアラート処理によるタイムアウトリスクを回避できます。
このスイッチが有効な場合、モニターが異常を検出した後に生成されるイベント詳細には、履歴レコードや関連イベントは表示されません。
データ欠落¶
検出指標が検出区間内でクエリ結果が空の場合の処理ポリシー:
| オプション | 説明 |
|---|---|
| イベントをトリガーしない(デフォルト) | 検出区間の時間範囲に連動し、検出指標の直近数分間のクエリ結果に基づいて、イベントを生成するかどうかを判断します。データの欠落が許容されるシナリオに適しています。 |
| クエリ結果を 0 とみなす | 検出区間の時間範囲に連動し、検出指標の直近数分間のクエリ結果を 0 とみなして、上記のトリガー条件で設定したしきい値と再度比較し、異常イベントをトリガーするかどうかを判断します。 |
| カスタム入力でイベントをトリガー | 検出区間の値をカスタム入力で設定し、以下のイベントタイプをそれぞれトリガーできます:データ欠落イベント、致命的イベント、重大イベント、重要イベント、警告イベント、回復イベント。 ❗️ このポリシーを選択する場合、カスタムのデータ欠落時間は 検出区間の時間間隔以上 に設定することを推奨します。設定時間が検出区間の時間間隔以下の場合、データ欠落と異常が同時に満たされる可能性があり、その場合はデータ欠落の処理結果が優先的に適用されます。 |
トリガー条件、データ欠落、情報生成を同時に設定する場合、以下の優先順位でトリガーを判断します:データ欠落 > トリガー条件 > 情報イベント生成。
つまり、まずデータ欠落があるかどうかを判断し、次にしきい値をトリガーするかどうかを判断し、最後に情報イベントを生成するかどうかを判断します。
情報生成¶
このオプションを有効にすると、情報生成条件を設定する必要があります。検出結果が「致命的」「重大」「重要」「警告」のいずれのしきい値もトリガーせず、かつ情報生成条件を満たした場合にのみ、システムは「情報」イベントを書き込みます。
正常な状態変化や優先度の低い情報を記録する必要があるシナリオに適しています。
後続設定¶
上記の検出設定が完了したら、以下の設定を続けて行います。