変数と固定フィルタを作成、管理する

このドキュメントでは、ダッシュボード レベルのフィルタを固定して、これらのフィルタを永続的に設定する方法について説明します。各ウィジェットを変更せずにダッシュボードに表示されるデータを変更できる固定フィルタは、デフォルトの状態を持ち、ダッシュボード全体に適用するか、または特定のウィジェットにのみ適用することができます。ダッシュボード ツールバーには、固定された各フィルタと、フィルタの値を一時的に変更できるメニューが表示されます。

変数は固定フィルタに似ていますが、特定のウィジェットにのみ適用されます。このドキュメントでは、変数を作成する方法と、ウィジェットで変数を適用する方法について説明します。ダッシュボード ツールバーには、各変数と、変数の値を一時的に変更できるメニューが表示されます。

このドキュメントでは、Google Cloud コンソールを使用して変数と固定フィルタを作成する方法について説明します。Cloud Monitoring API の使用方法については、API を使用してダッシュボードを作成、管理する: ダッシュボード フィルタをご覧ください。

現在のセッションにのみ適用される一時的なグループ化とフィルタを追加、変更する方法については、カスタム ダッシュボードに一時的なフィルタを追加するをご覧ください。

固定したフィルタについて

固定したフィルタには、ラベル、1 つ以上のデフォルト値、すべての有効な値のリストが含まれます。考えられるすべての値のリストは、ダッシュボードに表示される時系列データから動的に導出されます。フィルタの構造については、DashboardFilter をご覧ください。

個々のウィジェットで固定したフィルタを適用することはできません。代わりに、固定されたフィルタがウィジェットに表示されるデータを変更できるかどうかを判断するために、次のルールが使用されます。

  • 固定されたフィルタで指定されたラベルキーを含むデータがウィジェットに表示され、ウィジェットでそのラベルキーの値が指定されていない場合、固定されたフィルタによって表示されるデータが変更される可能性があります。

    たとえば、固定されたフィルタ cluster_name: mycluster を追加したとします。次に、値が myclustercluster_name ラベルを持つ時系列のみがグラフに自動的に表示されます。同様に、ログパネル ウィジェットのクエリは resource.labels."cluster_name"="mycluster" に変更され、グラフには、固定したフィルタにラベルが含まれている時系列のみが自動的に表示されます。

  • ウィジェットに同じラベルキーのフィルタが含まれている場合、またはウィジェットに表示されるデータに固定したフィルタで指定されたラベルキーが含まれていない場合、固定したフィルタは無視されます。

変数について

変数には名前と型があります。変数は、ウィジェットに含まれるクエリを変更することで、特定のウィジェットに適用されます。フィルタの構造については、DashboardFilter をご覧ください。

変数は、ラベルベースにするか、値のみにすることができます。

  • ラベルベースの変数は、固定されたフィルタに似ています。これらの変数には、ラベルキー、1 つ以上のデフォルト ラベル値、すべての有効なラベル値のリストが含まれています。考えられるすべての値のリストは、ダッシュボードに表示される時系列データから動的に導出されます。

  • 値のみの変数には 1 つ以上のデフォルト値が含まれ、可能なすべての値を一覧表示できます。デフォルト値を指定しない場合、デフォルト値としてワイルドカード演算子 (*) が選択されます。すべての有効な値のセットを定義するには、値の配列を指定するか、SQL クエリを作成します。

    値のみの変数には、カスタムテキスト入力SQL クエリの 3 種類があります。

    • カスタム: すべての有効な値のリストと 1 つ以上のデフォルト値の両方を列挙する場合に使用します。たとえば、使用可能なすべての値のリストを prod, staging, dev に設定し、デフォルト値を prod に設定できます。

    • テキスト入力: 考えられるすべての値がわからない場合に使用します。たとえば、URL でフィルタリングしたいが、変数を作成するときに URL の正確なリストがわからない場合、ウィジェットのフィルタ メニューを使用して新しい URL を入力し、現在のセッションまたは変数定義に変更を保存できます。

    • SQL クエリ: SQL クエリを使用して有効な値のリストを生成する場合に使用します。これらの変数は、Log Analytics を使用して作成されたグラフに適用することを目的としています。

      これらの変数の場合、クエリ結果が 1 つの列を持つテーブルであり、その列のデータ型が文字列であり、テーブルの各行に一意の文字列値が含まれていることを確認します。

      SELECT log_name
      FROM `TABLE_NAME_OF_LOG_VIEW`
      GROUP BY log_name
      

      変数は、グラフと同じテーブルをクエリする必要があります。

変数をウィジェットに適用するには、ウィジェットに含まれるクエリを更新します。Google Cloud コンソールを使用している場合、ラベルベースの変数と一部のウィジェット タイプでは、メニュー選択を使用してこの関連付けを行うことができます。ただし、ウィジェットのクエリを編集して変数を適用することはいつでも可能です。詳細については、ウィジェットに変数を適用するをご覧ください。

始める前に

Google Cloud コンソールを使用して変数または固定フィルタを追加または変更するために必要な権限を取得するには、管理者に依頼して、プロジェクトに対するモニタリング編集者 roles/monitoring.editor)IAM ロールを取得してください。 ロールの付与については、プロジェクト、フォルダ、組織へのアクセスを管理するをご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

ロールの詳細については、Identity and Access Management を使用してアクセスを制御するをご覧ください。

フィルタを作成して固定する

フィルタをサポートするすべてのダッシュボード ウィジェットに適用するフィルタを作成して固定するには、次の操作を行います。

  1. Google Cloud コンソールで [ダッシュボード] ページに移動します。

    [ダッシュボード] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  2. ダッシュボード ツールバーで、 [設定] をクリックします。
  3. [Filters] セクションで [Add a filter] をクリックします。
  4. [ラベル] をクリックし、ラベルを選択します。たとえば、zone を選択します。
  5. ユーザーが変数の値メニューから複数の値を選択できるようにするには、[複数選択] を選択します。[複数選択] が有効になっていない場合、ユーザーは値メニューから 1 つのオプションのみを選択できます。
  6. [デフォルト値] をクリックし、ラベルのデフォルト値を選択します。すべての値と一致させるには、* を選択します。

    フィルタが作成されると、ダッシュボードのツールバーに追加されます。フィルタ値を一時的に変更するには、フィルタを選択し、メニューから選択します。

  7. [完了]、[適用] の順にクリックします。

  8. 変更したダッシュボードを保存するには、ツールバーで [保存] をクリックします。

変数を作成する

特定のダッシュボード ウィジェットに適用する変数を作成するには、次の操作を行います。

  1. Google Cloud コンソールで [ダッシュボード] ページに移動します。

    [ダッシュボード] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  2. ダッシュボード ツールバーで、 [設定] をクリックします。
  3. [変数] セクションで、[変数を追加] をクリックします。
  4. 変数のタイプを選択して、ダイアログを完了します。

    ラベルベースの変数を作成するには、[ラベル] を選択します。このオプションは、ラベルキーとラベル値があり、フィルタとして使用できる変数を作成する場合に使用します。考えられるすべての値のリストは、ダッシュボードに表示される時系列データから動的に導出されます。

    値のみの変数には、次のオプションがあります。

    • SQL: SQL クエリの結果からすべての有効な値のリストを生成する場合に、このオプションを使用します。

      1 つ以上のデフォルト値を入力し、使用可能なすべての値のリストを生成する SQL クエリを入力します。クエリ結果が 1 つの列を持つテーブルであり、その列のデータ型が文字列であり、テーブルの各行に一意の文字列値が含まれていることを確認します。

    • カスタム: 使用可能な値のリストとデフォルト値の両方を指定する場合に使用します。たとえば、[] フィールドを prod, staging, dev に設定し、[デフォルト値] を prod に設定します。

    • テキスト入力: デフォルトとして適用される値のリストを指定する場合に使用します。

  5. 変数の名前を入力します。名前はダッシュボードのツールバーに表示されます。

  6. [完了]、[適用] の順にクリックします。

  7. 変数をログパネル ウィジェットと、SQL、MQL、PromQL で構成されたウィジェットに適用します。詳細については、ウィジェットに変数を適用するをご覧ください。

  8. 変更したダッシュボードを保存するには、ツールバーで [保存] をクリックします。

ウィジェットに変数を適用する

変数をウィジェットに適用するには、ウィジェットで使用されるクエリを編集する必要があります。

  • SQL、PromQL、MQL クエリを使用するグラフとログパネル ウィジェットの場合は、ウィジェットを編集してクエリを変更する必要があります。このセクションでは、これらの編集を行う方法について説明します。

  • メニューまたはダイレクト フィルタモードを使用して構成したグラフの場合、[グラフに適用] メニューを使用してウィジェットを選択すると、Monitoring によってクエリが編集されます。

ラベルベースの変数または値のみの変数をウィジェットに適用する方法については、次のセクションをご覧ください。

フィルタと変数を作成する

Console

Google Cloud コンソールを使用して固定されたフィルタと変数を作成する方法については、次のドキュメントをご覧ください。

API

固定されたフィルタと変数を定義するには、dashboardFilters データ構造を使用します。

  • 変数を作成するには、templateVariable フィールドの値を変数の名前に設定します。固定されたフィルタを作成する場合は、このフィールドを省略するか、値を空の文字列に設定します。
  • 固定フィルタまたはラベルベースの変数を作成するには、labelKey フィールドを指定する必要があります。値のみの変数にする場合は、このフィールドを省略します。
  • フィルタまたは変数のデフォルト値を設定します。このフィールドの設定によって、ユーザーが値のメニューから 1 つのオプションのみを選択できるか、複数の値を選択できるかが決まります。

    • 1 つのデフォルト値を設定し、ユーザーが値メニューで 1 つのオプションのみを選択できるようにするには、valueType フィールドを STRING として設定し、stringValue フィールドも設定します。
    "valueType": "STRING",
    "stringValue": "my-default-value",
    
    • 少なくとも 1 つのデフォルト値を設定し、ユーザーが値メニューで複数のオプションを選択できるようにするには、valueType フィールドを STRING_ARRAY として設定し、stringArrayValue フィールドも設定します。次の例では、3 つのデフォルト値があります。
    "valueType": "STRING_ARRAY",
    "stringArrayValue": {
      "values": [ "a", "b", "c" ]
    },
    
  • 省略可: 値のみの変数で使用可能なすべての値のリストを指定するには、stringArray フィールドまたは timeSeriesQuery フィールドを設定します。クエリを指定する場合は、分析クエリにする必要があります。

たとえば、次の dashboardFilters オブジェクトについて考えてみましょう。

{
  "dashboardFilters": [
      {
        "labelKey": "zone"
        "stringValue": "us-central1-c",
        "valueType": "STRING",
        "filterType": "RESOURCE_LABEL"
      },
      {
        "labelKey": "instance_id",
        "stringValue": "3133577226154888113",
        "valueType": "STRING",
        "filterType": "RESOURCE_LABEL",
        "templateVariable": "my_label_based_variable"
      },
      {
        "filterType": "VALUE_ONLY",
        "templateVariable": "my_value_only_variable",
        timeSeriesQuery: {
          opsAnalyticsQuery: {
            sql: "
              SELECT log_name
              FROM `MY_TABLE`
              GROUP BY log_name
            ",
          }
        }
      }
    ],
  "displayName": "Illustrate Variables",
  ...
}

上記の JSON では、1 つの固定フィルタと 2 つの変数を定義しています。

  • 固定されたフィルタのラベルキーは zone で、ツールバーに表示されます。valueType フィールドと stringValue フィールドには、単一のデフォルト値を指定します。詳細については、dashboardFilters データ構造の API リファレンス ページをご覧ください。

  • ラベルベースの変数の名前は my_label_based_variable で、ラベルキーは instance_id です。この変数のデフォルト値は、特定のインスタンス ID に設定されています。配列を使用してデフォルト値を構成することもできます。ツールバーには、フィルタ名 my_label_based_variable が表示されます。

  • 値のみの変数の名前は my_value_only_variable です。このエントリにはデフォルト値が指定されていないため、ワイルドカード演算子 (*) が自動的に適用されます。また、この変数は SQL クエリを使用して、変数の有効な値のリストを生成します。

dashboardFilters オブジェクトには、変数が適用されるウィジェットはリストされません。変数をウィジェットに適用するには、ウィジェットのクエリを変更します。

変数の参照を解除する一般的な構文

SQL で定義されているウィジェットを除くすべてのウィジェットでは、次の構文を使用して変数をクエリに適用します。

  • ラベルベースの変数を適用し、ラベルキーとラベル値をクエリ言語の有効なフィルタ式に解決するには、${my_label_based_variable} を使用します。

  • ラベルベースの変数の値のみを適用するには、${my_label_based_variable.value} を使用します。比較には正規表現を使用する必要があります。

  • 値のみの変数の値のみを適用するには、${my_value_only_variable} を使用します。値のみの変数の場合は、.value 句を含めないでください。比較には正規表現を使用する必要があります。

ログパネルのウィジェット

ログパネル ウィジェットに変数を適用するには、クエリペインを更新します。これらのウィジェットの構文は、一般的な構文で指定されている構文に従います。

Console

たとえば、次のクエリでは正規表現を使用して、jsonPayload.message フィールドの値をラベルベースの変数の値を含む文字列値と比較します。

jsonPayload.message=~"Connected to instance: ${my_label_based_variable.value}"

別の例として、値のみの変数 value_only_severity_variable について考えてみましょう。値のメニューで、ERRORINFONOTICE の 3 つの値が選択されているとします。次に、ログパネル ウィジェットのクエリペインに次のコードを追加します。

severity =~ "${value_only_severity_variable}"

レンダリングされたフォームは次のようになります。

severity =~ "^(ERROR|INFO|NOTICE)$"

API

たとえば、次の JSON は、ラベルベースの変数をログパネル ウィジェットのクエリに適用する方法を示しています。

"logsPanel": {
  "filter": "${my_label_based_variable}",
  "resourceNames": [
    "projects/1234512345"
  ]
},

たとえば、次のクエリでは正規表現を使用して、jsonPayload.message フィールドの値をラベルベースの変数の値を含む文字列値と比較します。

"logsPanel": {
  "filter": "resource.type=\"gce_instance\"\n
             resource.labels.project_id=~\"${my_label_based_variable.value}\"\n",
  "resourceNames": [
    "projects/012345"
  ]
}

別の例として、値のみの変数 value_only_severity_variable について考えてみましょう。メニューで ERRORINFONOTICE の 3 つの値が選択されているとします。次に、ログパネル ウィジェットのクエリペインに次のコードを追加します。

"logsPanel": {
  "filter": "severity =~ \"${value_only_severity_variable}\"\n",
  ...
}

ログパネル ウィジェットで実行されるクエリは次のとおりです。

severity =~ "^(ERROR|INFO|NOTICE)$"

ログパネルのクエリを構成してからボタンを選択してログ エクスプローラを開くと、ログ エクスプローラが開く前に変数が解決されます。

次の表に、ログパネルでサンプル変数が解決される方法を示します。前述のように、変数の値のみを使用する場合は、比較演算子として正規表現を使用する必要があります。

構文 選択された
解決されたログパネル式
${my_label_based_variable} 12345 resource.labels."instance_id"="12345"

変数の例は、リソースラベル instance_id に基づいています。

${my_label_based_variable} * ""
${my_label_based_variable.value}
${my_value_based_variable}
12345 12345
${my_label_based_variable.value}
${my_value_based_variable}
* .*

PromQL クエリを含むグラフ

ラベルベースの変数を PromQL クエリを含むグラフに適用するには、一般的な構文に記載されているガイダンスに沿って操作します。

Console

たとえば、次のクエリは、ラベルベースの変数 my_label_based_variable がフィルタ式に解決されることを前提としています。

compute_googleapis_com:instance_cpu_utilization{
    monitored_resource="gce_instance", ${my_label_based_variable} }

クエリを変更して、変数の値のみを解決することもできます。次の例では、正規表現を使用して、ラベルベースのクエリの値を instance_id と比較します。

compute_googleapis_com:instance_cpu_utilization{
    instance_id=~"${my_label_based_variable.value}"
}

値のみの変数の場合は、.value 句を省略します。たとえば、値のみの変数を使用してゾーンでフィルタリングするには、クエリに次のような内容を含めます。

zone=~"${my_value_only_variable}"

API

たとえば、次の JSON は、ラベルベースの変数 my_label_based_variable がフィルタ式に解決されることを前提とするクエリを示しています。

"timeSeriesQuery": {
  "prometheusQuery": "avg_over_time(
    compute_googleapis_com:instance_cpu_utilization{
      monitored_resource=\"gce_instance\",
      ${my_label_based_variable}
      }[${__interval}])",
  "unitOverride": "",
  "outputFullDuration": false
},

クエリを変更して、変数の値のみを解決することもできます。次の例では、正規表現を使用して、ラベルベースのクエリの値を instance_id と比較します。

"timeSeriesQuery": {
  "prometheusQuery": "avg_over_time(
    compute_googleapis_com:instance_cpu_utilization{
    monitored_resource=\"gce_instance\",
    instance_id=~\"${my_label_based_variable.value}\"
    }[${__interval}])",
  "unitOverride": "",
  "outputFullDuration": false
},

値のみの変数の場合は、.value 句を省略します。たとえば、値のみの変数を使用してゾーンでフィルタリングするには、クエリに次のような内容を含めます。

zone=~\"${my_value_only_variable}\"

次の表に、サンプル変数が PromQL によって解決される方法を示します。前述のように、変数の値のみを使用する場合は、比較演算子として正規表現を使用する必要があります。

構文 選択された
解決された PromQL 式
${my_label_based_variable} 12345 instance_id == '12345'

変数の例は、リソースラベル instance_id に基づいています。

${my_label_based_variable} * noop_filter=~".*"
${my_label_based_variable.value}
${my_value_based_variable}
12345 12345
${my_label_based_variable.value}
${my_value_based_variable}
* .+

SQL クエリを使用したグラフ

SQL で定義されたウィジェットに変数を適用する場合は、WHERE 句を更新して変数の値を参照します。すべての変数に、変数名の前に「@」記号を付けます(例: @variable_name)。ラベルベースの変数の場合は、変数名 @my_label_based_variabe.value.value を追加します。

SQL クエリの場合、変数の置換は BigQuery に依存し、SQL インジェクションに対して安全です。詳細については、パラメータ化クエリの実行をご覧ください。

Console

SQL ではワイルドカード演算子が「任意の値」を意味すると解釈されないため、SQL クエリに変数を適用する場合は、常に IF ステートメントを使用することをおすすめします。次の例は、データ型が文字列の値のみの変数の使用方法を示しています。

WHERE IF(@my_value_only_variable = "*", TRUE, log_name = @my_value_only_variable)

変数のメニュー オプションで複数の値を選択できるようにする場合は、CAST 関数を使用して、変数の値を GoogleSQL データ型にキャストする必要があります。次のクエリは、この構文を示しています。

IF(ARRAY_LENGTH(CAST(@my_value_only_variable)) = 0, TRUE,
   severity IN UNNEST(@my_value_only_variable))

SQL ではワイルドカード演算子が「任意の値」を意味すると解釈されないため、前述の例の IF ステートメントを使用することをおすすめします。したがって、IF ステートメントを省略し、ワイルドカード演算子を選択すると、クエリの結果は空のテーブルになります。2 番目の例では、UNNEST 関数によって配列がテーブルに変換されます。

適切な形式の WHERE 句を追加する手順は次のとおりです。

  1. ウィジェットを編集します。
  2. ツールバーで [変数フィルタを挿入] を選択し、WHERE 句に適用する変数を選択します。
  3. 表示されたダイアログで、生成されたコードを確認し、[コピーして閉じる] をクリックします。
  4. コピーしたコードを [クエリ] ペインに貼り付け、必要に応じて編集します。

    たとえば、ログ名のリストを生成して、log_name という名前の単一列を持つテーブルに出力する LogName という名前の変数を作成したとします。次に、グラフを作成し、[変数フィルタを挿入] を選択して、変数 LogName を選択します。次のコードが生成されます。

    WHERE IF(@LogName = '*', TRUE, LogName = @LogName)
    

    この例では、テーブル結合を実行できるように、生成されたコードを編集して LogName =log_name = に置き換える必要があります。

    WHERE IF(@LogName = '*', TRUE, log_name = @LogName)
    
  5. [実行]、[適用] の順にクリックします。

  6. 変更したダッシュボードを保存するには、ツールバーで [保存] をクリックします。

API

SQL ではワイルドカード演算子が「任意の値」を意味すると解釈されないため、SQL クエリに変数を適用する場合は、常に IF ステートメントを使用することをおすすめします。次の例は、データ型が文字列の値のみの変数の使用方法を示しています。

WHERE IF(@my_value_only_variable = "*", TRUE, log_name = @my_value_only_variable)

たとえば、次の例は、SQL クエリの結果を表示するグラフの JSON 表現の一部を示しています。ログ名による結果のフィルタリングをサポートするため、LogName という名前の変数を参照する WHERE 句が追加されました。

"plotType": "STACKED_BAR",
"targetAxis": "Y1",
"timeSeriesQuery": {
  "opsAnalyticsQuery": {
    "queryExecutionRules": {},
    "queryHandle": "",
    "sql": "SELECT\n timestamp, severity, resource.type, log_name, text_payload, proto_payload, json_payload\n
            FROM\n `my-project.global._Default._Default`\n
            WHERE \n IF (@LogName = \"*\", TRUE, log_name=@LogName)\nLIMIT 10000"
  }
}

変数 LogName は、使用可能なログ名のリストを特定するためにクエリも発行します。

"dashboardFilters": [
  {
    "filterType": "VALUE_ONLY",
    "templateVariable": "LogName",
    "valueType": "STRING",
    "timeSeriesQuery": {
      "opsAnalyticsQuery": {
        "savedQueryId": "",
        "sql": "SELECT log_name FROM `my-project.global._Default._Default` GROUP BY log_name LIMIT 1000",
        "queryHandle": ""
      },
      "unitOverride": "",
      "outputFullDuration": false
    }
  }
],

変数のメニュー オプションで複数の値を選択できるようにする場合は、CAST 関数を使用して、変数の値を GoogleSQL データ型にキャストする必要があります。次のクエリは、この構文を示しています。

IF(ARRAY_LENGTH(CAST(@my_value_only_variable)) = 0, TRUE,
   severity IN UNNEST(@my_value_only_variable))

SQL ではワイルドカード演算子が「任意の値」を意味すると解釈されないため、前述の例の IF ステートメントを使用することをおすすめします。したがって、IF ステートメントを省略し、ワイルドカード演算子を選択すると、クエリの結果は空のテーブルになります。2 番目の例では、UNNEST 関数によって配列がテーブルに変換されます。

MQL クエリを使用したグラフ

MQL クエリを含むグラフにラベルベースの変数を適用するには、パイプ((|))を追加し、一般的な構文に記載されているガイダンスに沿って操作します。

メニュー ドリブンのインターフェースを使用して時系列データを表示するグラフを作成するときに、選択内容はモニタリング フィルタに変換されます。

Console

たとえば、次のクエリは、ラベルベースの変数 my_label_based_variable がフィルタ式に解決されることを前提としています。

fetch gce_instance
| metric 'compute.googleapis.com/instance/cpu/utilization'
| every 1m
| ${my_label_based_variable}

クエリを変更して、変数の値のみを解決することもできます。次の例では、正規表現を使用して、ラベルベースのクエリの値を instance_id と比較します。

fetch gce_instance
| metric 'compute.googleapis.com/instance/cpu/utilization'
| filter resource.instance_id=~'${my_label_based_variable.value}'
| group_by 1m, [value_utilization_mean: mean(value.utilization)]
| every 1m

値のみの変数の場合は、.value 句を省略します。たとえば、値のみの変数を使用してゾーンでフィルタリングするには、クエリに次のような内容を含めます。

resource.zone=~'${my_value_only_variable}'

API

たとえば、次の JSON は、ラベルベースの変数 my_label_based_variable がフィルタ式に解決されることを前提とするクエリを示しています。

"timeSeriesQuery": {
  "timeSeriesQueryLanguage": "fetch gce_instance\n
    | metric 'compute.googleapis.com/instance/cpu/utilization'\n
    | group_by 1m, [value_utilization_mean: mean(value.utilization)]\n
    | every 1m\n
    | ${my_label_based_variable}",
  "unitOverride": "",
  "outputFullDuration": false
},

クエリを変更して、変数の値のみを解決することもできます。次の例では、正規表現を使用して、ラベルベースのクエリの値を instance_id と比較します。

"timeSeriesQuery": {
  "timeSeriesQueryLanguage": "fetch gce_instance\n
    | metric 'compute.googleapis.com/instance/cpu/utilization'\n
    | filter resource.instance_id=~'${my_label_based_variable.value}'\n
    | group_by 1m, [value_utilization_mean: mean(value.utilization)]\n
    | every 1m\n",
  "unitOverride": "",
  "outputFullDuration": false
},

値のみの変数の場合は、.value 句を省略します。たとえば、値のみの変数を使用してゾーンでフィルタリングするには、クエリに次のような内容を含めます。

resource.zone=~'${my_value_only_variable}'

次の表に、MQL によってサンプル変数が解決される方法を示します。前述のように、変数の値のみを使用する場合は、比較演算子として正規表現を使用する必要があります。

構文 選択された
解決された MQL 式
${my_label_based_variable} 12345 filter (resource.instance_id == '12345')

変数の例は、リソースラベル instance_id に基づいています。

${my_label_based_variable} * filter (true)
${my_label_based_variable.value}
${my_value_based_variable}
12345 12345
${my_label_based_variable.value}
${my_value_based_variable}
* .*

Monitoring フィルタクエリを含むグラフ

Monitoring フィルタの形式のクエリを含むグラフにラベルベースの変数を適用するには、一般的な構文に記載されているガイダンスに沿って操作します。

Console

Google Cloud コンソールを使用してグラフを作成し、メニュー ドリブンのインターフェースを使用している場合は、変数の [グラフに適用] フィールドを使用するか、ウィジェットを編集して [フィルタ] メニューからラベルベースの変数を選択することで、ラベルベースの変数をグラフに適用できます。[フィルタ] メニューには、すべてのラベルベースの変数とすべてのラベルキーが一覧表示されます。

値ベースの変数をこれらのタイプのグラフに適用する手順は次のとおりです。

  1. グラフの編集。
  2. クエリペインで [フィルタを追加] をクリックし、ラベルキーを選択します。たとえば、[ゾーン] を選択します。
  3. [] メニューで、値のみの変数を選択します。
  4. [適用] をクリックします。
  5. 変更したダッシュボードを保存するには、ツールバーで [保存] をクリックします。

たとえば、次の JSON は、ラベルベースの変数 my_label_based_variable がフィルタ式に解決されることを前提とするクエリを示しています。

metric.type="compute.googleapis.com/instance/cpu/utilization"
resource.type="gce_instance" ${my_label_based_variable}"

Monitoring フィルタの形式のクエリを使用するウィジェットでは、ラベルベースの変数の値で時系列をフィルタリングすることはできませんが、値のみの変数でフィルタリングすることはできます。たとえば、次のクエリは、値のみの変数の値に基づいて zone でフィルタするクエリの [フィルタ] フィールドの値を示しています。

metric.type="compute.googleapis.com/instance/cpu/utilization"
resource.type="gce_instance"
resource.label."zone"=monitoring.regex.full_match(${my_value_only_variable})

API

たとえば、次の JSON は、ラベルベースの変数 my_label_based_variable がフィルタ式に解決されることを前提とするクエリを示しています。

"timeSeriesQuery": {
  "timeSeriesFilter": {
    "filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
               resource.type=\"gce_instance\"
               ${my_label_based_variable} ",
    "aggregation": {
      "alignmentPeriod": "60s",
      "perSeriesAligner": "ALIGN_MEAN",
      "groupByFields": []
    }
  },
  "unitOverride": "",
  "outputFullDuration": false
},

Monitoring フィルタの形式のクエリを使用するウィジェットでは、ラベルベースの変数の値で時系列をフィルタリングすることはできませんが、値のみの変数でフィルタリングすることはできます。たとえば、次のクエリは、値のみの変数の値に基づいて zone でフィルタするクエリの "filter" フィールドを示しています。

"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
          resource.type=\"gce_instance\"
          resource.labels.\"zone\"=monitoring.regex.full_match(${my_value_only_variable})"

次の表に、Monitoring フィルタによって変数の例が解決される方法を示します。前述のように、変数の値のみを使用する場合は、比較演算子として正規表現を使用する必要があります。

構文 選択された
解決されたフィルタ式
${my_label_based_variable} 12345 resource.instance_id == "12345"

変数の例は、リソースラベル instance_id に基づいています。

${my_label_based_variable} * 除外
${my_label_based_variable.value} 12345 非対応
${my_label_based_variable.value} * 非対応
${my_value_based_variable} 12345 "12345"
${my_value_based_variable} * ".*"

固定したフィルタまたは変数を変更する

ダッシュボード ツールバーに表示されるフィルタの値を一時的に変更するには、フィルタ名をクリックして、値を入力するか、メニューから選択します。

ダッシュボードに時系列データを表示するテーブルが含まれている場合は、セルの [ダッシュボードをこの値でフィルタ] ボタンを使用して、一時フィルタを追加したり、永続的なフィルタと変数を変更したりできます。このボタンを選択すると、新しい一時フィルタが適用されるか、既存のフィルタまたは変数の値が更新されます。テーブル列のラベルキーがフィルタまたは変数のラベルキーと一致すると、既存のフィルタと変数が更新されます。

固定したフィルタまたは変数の構成を変更するには、次の操作を行います。

  1. Google Cloud コンソールで [ダッシュボード] ページに移動します。

    [ダッシュボード] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  2. ダッシュボード ツールバーで、 [設定] をクリックします。
  3. 変更するフィルタまたは変数を見つけて、その定義を開きます。
  4. 変更が完了したら、[適用] をクリックします。
  5. 変更したダッシュボードを保存するには、ツールバーで [保存] をクリックします。

固定したフィルタまたは変数を削除する

固定したフィルタまたは変数を削除する手順は次のとおりです。

  1. Google Cloud コンソールで [ダッシュボード] ページに移動します。

    [ダッシュボード] に移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  2. ダッシュボード ツールバーで、 [設定] をクリックします。
  3. 削除するフィルタまたは変数を見つけて、 [削除] をクリックします。
  4. [適用] をクリックします。
  5. 変更したダッシュボードを保存するには、ツールバーで [保存] をクリックします。

次のステップ