カスタム ダッシュボードに永続フィルタを追加する

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

ダッシュボード上のデータのデフォルト表示を、メニュー表示オプションとともに定義して表示する場合は、永続フィルタを追加します。たとえば、すべてのゾーンの指標に加えて、特定のゾーンの指標も表示する場合は、zone ラベルに基づく永続フィルタを作成します。

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

一時的なグループ化やフィルタを追加、変更する方法については、カスタム ダッシュボードに一時フィルタを追加するをご覧ください。

ダッシュボード フィルタの仕組み

ダッシュボード フィルタはラベルと値を指定します。ダッシュボードに表示される時系列によって、フィルタリングに使用できるラベルが決まります。ウィジェットがダッシュボード全体のフィルタをサポートする方法は、ウィジェットに表示されるデータの種類とウィジェットの構成によって異なります。

  • 折れ線グラフなどの時系列データを表示するウィジェットには、次のルールが適用されます。

    • ウィジェットに表示される時系列がフィルタ内のラベルをサポートしていない場合、ダッシュボード全体のフィルタは表示されるデータを変更しません。

      たとえば、ラベル instance_id にフィルタを追加しても、ダッシュボードのグラフに instance_id ラベルが付いている場合、フィルタによって表示される内容は変更されません。

    • ウィジェットでラベルの値を指定した場合、ダッシュボード全体のフィルタは表示されるデータを変更しません。

      たとえば、ラベル instance_id のフィルタを追加しても、ダッシュボードのグラフに instance_id ラベルに基づくフィルタが含まれている場合、ダッシュボード全体のフィルタは変更されません。

    • それ以外の場合、グラフは表示するデータを、ダッシュボード全体のフィルタを満たす時系列のみにフィルタリングします。

  • ログパネル ウィジェットの場合、リソースラベルに基づくダッシュボード全体のフィルタがクエリを更新します。たとえば、ダッシュボード全体のフィルタ cluster_name: mycluster を追加すると、クエリが更新され、 resource.labels."cluster_name"="mycluster" が含まれます。

ダッシュボード全体のフィルタを複数追加できます。これらのフィルタは論理 AND で結合されます。

準備

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

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

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

永続フィルタを作成する

ダッシュボードを設計する際、ダッシュボードに表示するデータの表示方法を複数特定できる場合があります。たとえば、ダッシュボードに VM インスタンスの指標を表示する場合、すべての VM の指標を表示することも、特定のゾーンにある VM の指標を表示することもできます。zone ラベルの永続フィルタを、デフォルトのすべてのゾーン * に設定して作成できます。ダッシュボードを表示している場合は、zone フィルタのメニューを使用して特定のゾーンを選択できます。

永続フィルタを特定のウィジェットに制限できます。2 つの異なるゾーンの VM の指標を並べて表示する必要があるシナリオを考えてみます。2 つのグラフのコレクションを作成し、各コレクションのフィルタを作成します。デフォルト構成は元の目標を満たしています。ただし、ダッシュボードを表示すると、ツールバーに変数が表示され、さまざまな値を選択するためのメニューが表示されます。これらのメニューを使用して、さまざまなゾーンのデータを表示できます。

特定のウィジェットにのみ適用される永続的なフィルタは、テンプレート変数と呼ばれることもあります。このタイプのフィルタを作成した後、ウィジェットをダッシュボードに追加するときに、そのウィジェットにフィルタを適用することもできます。詳細については、ウィジェットに永続フィルタを適用するをご覧ください。

永続フィルタを作成するには、次のようにします。

  1. Google Cloud コンソールのナビゲーション パネルで次の操作を行います。モニタリング)、次を選択します。  ダッシュボード:

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

  2. ダッシュボード ツールバーで、 [設定] をクリックし、[フィルタを管理] を選択します。
  3. [ラベル] をクリックし、ラベルを選択します。たとえば、zone を選択します。
  4. [デフォルト値] をクリックし、ラベルのデフォルト値を選択します。すべての値と一致させるには、[*] を選択します。

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

  5. 次のいずれかを行います。

ウィジェットに永続フィルタを適用する

ウィジェットに永続フィルタを適用するには、そのウィジェットを変数に関連付ける必要があります。

  • メニューを使用して構成するグラフの場合、フィルタを作成または編集するときに、この関連付けを実行できます。

  • ログパネルの場合は、ウィジェットを編集してデフォルトのクエリを構成します。 永続フィルタを適用するための構文セクションのガイダンスに従ってください。

  • MQL または PromQL で定義されるグラフとテーブルの場合は、グラフまたはテーブルを編集してから、MQL または PromQL を変更します。永続フィルタを適用するための構文セクションのガイダンスに従ってください。

永続フィルタを適用するための構文

たとえば、次の例では、テンプレート変数とダッシュボード全体のフィルタを定義するダッシュボードの JSON 表現の一部を示します。

{
  "dashboardFilters": [
      {
        "filterType": "RESOURCE_LABEL",
        "labelKey": "instance_id",
        "stringValue": "3133577226154888113",
        "templateVariable": "iid"
      },
      {
        "filterType": "RESOURCE_LABEL",
        "labelKey": "zone"
      }
    ],
  "displayName": "Illustrate Template Variables",
  ...

表示された JSON で、dashboardFilters 構造の最初のエントリは、iid という名前のテンプレート変数と、ラベルキー zone を含むダッシュボード全体のフィルタ用です。テンプレート変数は、ラベル instance_id のエイリアスです。

テンプレート変数のデータ構造には、テンプレート変数を適用するウィジェットが記載されません。代わりに、ウィジェットのクエリを変更して、変数への参照を含むようにウィジェットをテンプレート変数に関連付けます。ウィジェットがダッシュボードに表示されると、テンプレート変数の値が解決されます。

ログパネルとグラフにアノテーションを付ける方法については、以下のセクションをご覧ください。

ログパネル

テンプレート変数の値に基づいて表示をフィルタするようにログパネルを構成するには、変数をクエリペインに追加します。次の例は、テンプレート変数 iid の値でフィルタするクエリを示しています。

${iid}

ログパネルで表示するログをクエリする前に、テンプレート変数が解決されます。この例では、テンプレート変数の値が "12345" の場合、${iid} がステートメント resource.labels."instance_id"="12345" に置き換えられます。

クエリにはテンプレート変数の値のみを含めることもできます。この値は、正規表現で定義されたフィルタの一部としてのみ使用することをおすすめします。たとえば、次のクエリは正規表現を使用して、記述した文字列を含む JSON ペイロードを持つログエントリを照合します。

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

ログパネルのクエリを構成し、ログ エクスプローラを開くボタンを選択した場合、ログ エクスプローラを開く前にテンプレート変数が解決されます。

次の表は、テンプレート変数をログパネルで解決する方法を示しています。

構文 選択された
解決済みログパネルの式
${iid} 12345 resource.labels."instance_id"="12345"
${iid} * ""
${iid.value} 12345 12345
${iid.value} * .*

MQL 定義のグラフとテーブル

Monitoring Query Language(MQL)を使用してグラフを構成する場合は、クエリ文字列にパイプとその変数を追加します。

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

グラフで表示する時系列をクエリする前に、テンプレート変数が解決されます。この例では、テンプレート変数の値が "12345" の場合、${iid} がステートメント filter (resource.instance_id == '12345') に置き換えられます。このフィルタは、resource.instance_id という名前のラベルを持つ時系列に一致し、ラベルの値が 12345 の場合にのみ一致します。

正規表現を使用して時系列をフィルタリングする場合は、テンプレート変数の値のみが含まれるようにクエリを構成します。構文の詳細を説明するために、正規表現を使用して、ラベル resource.instance_id の値にテンプレート変数 iid の値が含まれているかどうかを判別する方法を示します。

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

次の表は、MQL クエリのテンプレート変数を解決する方法を示しています。

構文 選択された
解決済み MQL 式
${iid} 12345 filter (resource.instance_id == '12345')
${iid} * filter (true)
${iid.value} 12345 12345
${iid.value} * .*

PromQL 定義のグラフとテーブル

PromQL を使用してグラフを定義する場合は、クエリ文字列に中かっこで囲まれた変数を追加します。

compute_googleapis_com:instance_cpu_utilization {
    project_id="my-project", ${iid}
}

グラフで表示する時系列をクエリする前に、テンプレート変数が解決されます。この例では、テンプレート変数の値が "12345" の場合、${iid} がステートメント instance_id == '12345' に置き換えられます。

MQL と同様に、PromQL でウィジェットを定義すると、クエリはテンプレート変数の値のみを抽出できます。この値は、正規表現で定義されたフィルタの一部としてのみ使用することをおすすめします。構文の詳細を説明するために、正規表現を使用して、ラベル instance_id の値にテンプレート変数 iid の値が含まれているかどうかを判別する方法を示します。

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

次の表は、PromQL クエリのテンプレート変数を解決する方法を示しています。

構文 選択された
解決された PromQL 式
${iid} 12345 instance_id == '12345'
${iid} * noop_filter=~".*"
${iid.value} 12345 12345
${iid.value} * .+

時系列フィルタで定義されたグラフとテーブル

時系列フィルタを使用してグラフを定義する場合は、その変数をフィルタ文字列に追加します。

"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\"
           resource.type=\"gce_instance\" ${iid}"

MQL 定義のグラフや PromQL 定義のグラフとは異なり、テンプレート変数の値を時系列フィルタで使用することはできません。

次の表は、テンプレート変数の解決方法を示しています。

構文 選択された
解決済みフィルタ式
${iid} 12345 resource.instance_id == "12345"
${iid} * 除外
${iid.value} 12345 非対応
${iid.value} * 非対応

永続フィルタを変更する

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

永続フィルタの構成を変更するには、次の操作を行います。

  1. Google Cloud コンソールのナビゲーション パネルで次の操作を行います。モニタリング)、次を選択します。  ダッシュボード:

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

  2. ダッシュボード ツールバーで、 [設定] をクリックし、[フィルタを管理] を選択します。
  3. 変更するフィルタを見つけて、メニューを使用して変更を加えます。
  4. [Apply](適用)をクリックします。

永続フィルタを削除する

  1. Google Cloud コンソールのナビゲーション パネルで次の操作を行います。モニタリング)、次を選択します。  ダッシュボード:

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

  2. ダッシュボード ツールバーで、 [設定] をクリックし、[フィルタを管理] を選択します。
  3. 削除するフィルタを見つけて、 削除 をクリックします。
  4. [Apply](適用)をクリックします。

次のステップ