このドキュメントでは、Cloud Monitoring API の Dashboard
リソースを使用して、カスタム ダッシュボードと、そのダッシュボードのウィジェットを作成、管理する方法について説明します。以下の例は、curl
を使用して API を呼び出すことでダッシュボードを管理する方法と、Google Cloud CLI を使用する方法を示しています。
Google Cloud コンソールを使用してカスタム ダッシュボードを管理することもできますが、API を使用すると、プログラムで複数のダッシュボードを同時に管理できます。
エンドポイントでは、ダッシュボードを管理および構成するための、次のメソッドがサポートされています。
dashboards.create
: ダッシュボードを作成しますdashboards.delete
: 指定したダッシュボードを削除しますdashboards.list
: 任意のプロジェクト内のすべてのダッシュボードのリストを取得しますdashboards.get
: 指定したダッシュボードを取得しますdashboards.patch
: 指定したダッシュボードの構造を更新します
API は、curl
ユーティリティまたは Google Cloud CLI を使用して直接呼び出せます。
事前定義されたダッシュボードを取得、編集、削除することはできません。
この機能は Google Cloud プロジェクトでのみサポートされています。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
ダッシュボードについて
ダッシュボードを作成するときは、表示するコンポーネント、またはウィジェットとそのウィジェットのレイアウトを指定する必要があります。ダッシュボードにラベルとフィルタを追加することもできます。ラベルを使用すると、ダッシュボードを見つけたり、ダッシュボードのコンテンツの種類を示したりできます。
ダッシュボードのレイアウト
レイアウトは、ダッシュボードのコンポーネントの順序を定義します。API では、次のレイアウトが提供されます。
GridLayout
: 利用可能なスペースを等幅の縦の列に分割し、行優先戦略を使用してウィジェットのセットを配置します。MosaicLayout
: 利用可能なスペースをグリッドに分割します。各ウィジェットは 1 つ以上のグリッド ブロックを占有出来ます。RowLayout
: 利用可能なスペースを行に分割し、ウィジェットのセットを各行に水平に配置します。ColumnLayout
: 利用可能なスペースを縦の列に分割し、各列にウィジェットのセットを縦に並べます。
たとえば、3 つの Text
ウィジェットを使用した RowLayout
のダッシュボードの JSON 表現は以下のとおりです。
{
"displayName": "Row-layout example",
"rowLayout": {
"rows": [
{
"widgets": [
{
"text": {
"content": "Text Widget 1",
"format": "RAW"
}
},
{
"text": {
"content": "**Text Widget 2**",
"format": "MARKDOWN"
}
},
{
"text": {
"content": "_Text Widget 3_",
"format": "MARKDOWN"
}
}
]
}
]
}
}
マイレポートのウィジェット
ウィジェットには 1 つのダッシュボード コンポーネントと、ダッシュボードにコンポーネントを表示する方法の構成が含まれています。ダッシュボードには複数のウィジェットを指定できます。Widget
オブジェクトには複数のタイプがあります。
XyChart
ウィジェットは、X 軸と Y 軸にデータを表示します。このウィジェットには、時系列データまたは SQL クエリで生成されたデータセットが表示されます。このウィジェットを使用すると、グラフ化されたデータを左 Y 軸または右 Y 軸に関連付けることができます。複数の指標タイプをグラフ化する場合、両方の Y 軸を使用できます。
XyChart
ウィジェットは、次の表示スタイルをサポートしています。- 折れ線グラフ
- 横棒グラフ
- 積み上げ面グラフ
- ヒートマップ
最新の値など、1 つのディメンションから表示するウィジェット:
PieChart
: 時系列のコレクションの最新の値が表示されます。ここで、各時系列は円グラフに 1 つのスライスをもたらします。Scorecard
: 1 つの時系列の最新の値と、この値が 1 つ以上のしきい値とどのように関連するかを示します。TimeSeriesTable
: 各時系列の最新の値または集計値を表示します。表はカスタマイズをサポートしています。たとえば、セルに色分けしたり、列名やデータの配置を構成したりできます。
アラート ポリシーまたはインシデント情報を表示するウィジェット:
AlertChart
: 単一条件のアラート ポリシーの概要を表示します。このウィジェットでは、データを折れ線グラフとして表示し、しきい値を表示して、対応待ちのインシデントの数を一覧表示します。IncidentList
: インシデントのリストを表示します。特定のアラート ポリシーまたは特定のリソースタイプのインシデントを表示するようにウィジェットを構成できます。
ログエントリとエラーを表示するウィジェット:
ErrorReportingPanel
: 選択したGoogle Cloud プロジェクトに保存されているエラーグループを表示します。LogsPanel
: 現在の Google Cloud プロジェクトに保存されているプロジェクト スコープのログエントリを表示します。現在の指標スコープを介してアクセス可能な Google Cloud プロジェクトに格納されているログエントリを表示するようにウィジェットを構成できます。
テキスト ウィジェットと組織ウィジェット:
CollapsibleGroup
: ウィジェットのコレクションを表示します。 グループのビューは折りたたむことができます。SingleViewGroup
: ウィジェットのコレクション内の 1 つのウィジェットを表示します。表示するウィジェットを選択できます。SectionHeader
: ダッシュボードに横方向の分割線を作成し、ダッシュボードの目次にエントリを作成します。Text
: 生のテキスト文字列またはマークダウン文字列としてテキスト コンテンツを表示します。
ダッシュボードにテキスト ウィジェットと組織ウィジェットを含めるには、ダッシュボードに
MosaicLayout
が必要です。
これらのオブジェクトに加えて、空白のプレースホルダをダッシュボードに追加することもできます。
たとえば、右の Y 軸が構成されている XyChart
ウィジェットの JSON 表現は以下のとおりです。
{
"displayName": "Demo dashboard",
"gridLayout": {
"widgets": [
{
"title": "Sample line chart",
"xyChart": {
"dataSets": [
{
"timeSeriesQuery": {
"timeSeriesFilter": {
"filter": "metric.type=\"compute.googleapis.com/instance/cpu/utilization\" resource.type=\"gce_instance\"",
"aggregation": {
"perSeriesAligner": "ALIGN_MEAN",
"crossSeriesReducer": "REDUCE_MAX",
"groupByFields": [
"resource.label.zone"
]
}
},
"unitOverride": "1"
},
"plotType": "LINE"
}
],
"timeshiftDuration": "0s",
"yAxis": {
"label": "y1Axis",
"scale": "LINEAR"
},
"chartOptions": {
"mode": "COLOR"
}
}
}
]
}
}
ダッシュボード ラベル
ラベルは、ダッシュボードの管理と整理に役立ちます。たとえば、本番環境リソースの時系列データとログデータを表示するダッシュボードを示すラベル prod
を追加できます。または、ラベル playbook
を追加して、ダッシュボードに障害のトラブルシューティングに役立つ情報が含まれていることを示すこともできます。
ダッシュボードにラベルを追加することは任意です。
たとえば、次の図は、playbook
という名前のラベルを指定する Dashboard
オブジェクトを示しています。
{
"displayName": "Example",
"mosaicLayout": {
"columns": 12,
"tiles": [
...
]
},
"dashboardFilters": [],
"labels": {
"playbook": ""
}
}
前の例に示すように、labels
フィールドは map
として実装されます。ここで、key
フィールドと value
フィールドはどちらも文字列です。ダッシュボードにラベルを追加する場合は、key
をラベルの名前に設定し、value
フィールドを空の文字列に設定します。
ダッシュボードのフィルタと変数
ダッシュボードを設計する際、ダッシュボードに表示するデータの表示方法を複数特定できる場合があります。たとえば、ダッシュボードに仮想マシン(VM)インスタンスの時系列データが表示されているとします。すべての VM の時系列データを表示することも、特定のゾーンにあるデータのみを表示することもできます。このような状況では、固定フィルタまたは変数を作成し、そのフィルタのデフォルト値を最もよく表示されるゾーンに設定することをおすすめします。
固定フィルタは、ウィジェットに同じラベルキーのフィルタが含まれていない限り、フィルタで指定されたラベルをサポートするすべてのダッシュボード ウィジェットに適用されます。たとえば、グラフにフィルタ zone = us-central1-a
が含まれている場合、そのグラフではラベルキーが zone
の固定フィルタが無視されます。同様に、このフィルタは、キーが zone
のラベルがないグラフでは無視されます。
変数は固定フィルタに似ていますが、特定のウィジェットにのみ適用されます。変数は、固定フィルタのようにラベルに基づいて設定することも、値のみを設定することもできます。値のみの変数には、1 つ以上のデフォルト値と、可能なすべての値のリストが含まれます。デフォルト値を指定しない場合、デフォルトはワイルドカード演算子 (*)
に設定されます。可能な値のセットを定義するには、値の配列を指定するか、SQL クエリを作成します。
データをクエリするウィジェットの場合、ウィジェットのクエリに変数を含めることができます。また、変数を使用してウィジェットの表示を制御することもできます。クエリが変数に依存している場合、変数の値を変更すると、ウィジェットがリクエストするデータが変更されます。その結果、表示されるデータも変化します。変数を使用してウィジェットの表示を制御すると、ツールバーに visibility [表示] アイコンが表示されます。公開設定に関する制限については、ウィジェットの表示 / 非表示を設定するをご覧ください。
固定されたフィルタと変数の両方について、ダッシュボード ツールバーに各変数とメニューが表示されます。このメニューでは、変数の値を一時的に変更できます。固定されたフィルタと変数を表すために、同じデータ構造が使用されます。フィルタと変数を区別できるように、ダッシュボードのツールバーでは、変数名の先頭にドル記号 $
が付加されます。詳細については、DashboardFilter
をご覧ください。
変数を使用してウィジェットの表示を制御する方法を示す例については、ウィジェットの表示が構成されたダッシュボードをご覧ください。
ラベルベースの変数または値のみの変数を使用してウィジェットのクエリを更新する方法については、次のセクションをご覧ください。
- 変数を逆参照する一般的な構文
- ログパネル ウィジェット
- PromQL クエリを含むグラフ
- SQL クエリを含むグラフ
- MQL クエリを含むグラフ
-
メニュー ドリブンのインターフェースを使用して時系列データを表示するグラフを作成すると、選択内容がモニタリング フィルタに変換されます。
フィルタと変数を作成する
コンソール
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" ] },
- デフォルト値を 1 つ設定し、ユーザーが値メニューで 1 つのオプションのみを選択できるように制限するには、
省略可: 値のみの変数で使用可能なすべての値のリストを指定するには、
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
句を含めないでください。比較には正規表現を使用する必要があります。
ログパネル ウィジェット
変数をログパネル ウィジェットに適用するには、[クエリ] ペインを更新します。これらのウィジェットの構文は、一般的な構文で指定されている構文に従います。
コンソール
たとえば、次のクエリでは、正規表現を使用して、jsonPayload.message
フィールドの値をラベルベースの変数の値を含む文字列値と比較します。
jsonPayload.message=~"Connected to instance: ${my_label_based_variable.value}"
別の例として、値のみの変数 value_only_severity_variable
を考えます。値のメニューで ERROR
、INFO
、NOTICE
の 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
を考えます。メニューで ERROR
、INFO
、NOTICE
の 3 つの値が選択されているとします。次に、ログパネル ウィジェットのクエリ ペインに次の内容を追加します。
"logsPanel": {
"filter": "severity =~ \"${value_only_severity_variable}\"\n",
...
}
次の図は、ログパネル ウィジェットによって実行されるクエリを示しています。
severity =~ "^(ERROR|INFO|NOTICE)$"
ログパネルのクエリを構成してから、ボタンを選択してログ エクスプローラを開くと、ログ エクスプローラが開く前に変数が解決されます。
次の表は、ログパネルでサンプル変数がどのように解決されるかを示しています。前述のように、変数の値のみを使用する場合は、比較演算子として正規表現を使用する必要があります。
構文 | 選択された 値 |
解決されたログパネル式 |
---|---|---|
${my_label_based_variable} |
12345 |
resource.labels."instance_id"="12345"
この変数の例は、リソースラベル |
${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 クエリを含むグラフをラベルベースの変数に依存するように更新するには、一般的な構文に記載されているガイダンスに従います。
コンソール
たとえば、次のクエリは、ラベルベースの変数 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'
この変数の例は、リソースラベル |
${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 インジェクションに対して安全です。詳細については、パラメータ化クエリの実行をご覧ください。
コンソール
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
句を追加する手順は次のとおりです。
- ウィジェットを編集します。
- ツールバーで [変数フィルタを挿入] を選択し、
WHERE
句を更新する変数を選択します。 - 表示されたダイアログで、生成されたコードを確認し、[コピーして閉じる] をクリックします。
コピーしたコードを [クエリ] ペインに貼り付け、必要に応じて編集します。
たとえば、ログ名のリストを生成し、
log_name
という名前の単一の列を含むテーブルで結果を出力するLogName
という名前の変数を作成するとします。次に、グラフを作成し、[変数フィルタを挿入] を選択して、変数LogName
を選択します。次のコードが生成されます。WHERE IF(@LogName = '*', TRUE, LogName = @LogName)
この例では、テーブル結合が行われるように、生成されたコードを編集して
LogName =
をlog_name =
に置き換える必要があります。WHERE IF(@LogName = '*', TRUE, log_name = @LogName)
[実行]、[適用] の順にクリックします。
変更したダッシュボードを保存するには、ツールバーで [保存] をクリックします。
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 クエリを含むグラフの場合は、パイプ(|)と (|)
を追加し、一般的な構文に記載されているガイダンスに従います。
メニュー ドリブンのインターフェースを使用して時系列データを表示するグラフを作成すると、選択内容がモニタリング フィルタに変換されます。
コンソール
たとえば、次のクエリは、ラベルベースの変数 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')
この変数の例は、リソースラベル |
${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 フィルタ形式のクエリを含むグラフを更新して、ラベルベースの変数に依存させるには、一般的な構文に記載されているガイダンスに従います。
コンソール
Google Cloud コンソールを使用してグラフを作成し、メニュー ドリブン インターフェースを使用している場合は、変数の [グラフに適用] フィールドを使用するか、ウィジェットを編集して [フィルタ] メニューからラベルベースの変数を選択することで、グラフのクエリを更新できます。[フィルタ] メニューには、すべてのラベルベースの変数とすべてのラベルキーが一覧表示されます。
値ベースの変数に依存するようにグラフのクエリを更新する手順は次のとおりです。
- グラフの編集。
- クエリ ペインで、[フィルタを追加] をクリックしてラベルキーを選択します。たとえば、ゾーンを選択します。
- [値] メニューで、値のみの変数を選択します。
- [適用] をクリックします。
- 変更したダッシュボードを保存するには、ツールバーで [保存] をクリックします。
たとえば、次の 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"
この変数の例は、リソースラベル |
${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} |
* |
".*" |
始める前に
ダッシュボードを作成または管理する Google Cloud プロジェクトで、次の操作を行います。
-
Select the tab for how you plan to use the samples on this page:
gcloud
-
Install the Google Cloud CLI.
-
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.
- PROJECT_ID: プロジェクトの ID。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
- ダッシュボードを取得するの手順を完了して、元のダッシュボードの定義をダウンロードします。
- 返された JSON を編集して
etag
フィールドとname
フィールドを削除し、displayName
フィールドの値を変更します。 - コマンドを実行してダッシュボードを作成します。
- プロジェクトに Terraform をインストールして構成します。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
google_monitoring_dashboard
Terraform リソースを使用します。コマンドで、次のフィールドを設定します。
dashboard_json
:Dashboards
形式を使用したダッシュボードの JSON 表現。この形式の例については、API Explorer を使用してダッシュボードを一覧表示するか、 Google Cloud コンソールでダッシュボードを開いて JSON 表現を表示します。
parent
: プロジェクトの完全修飾名。たとえば、このフィールドを"projects/PROJECT_ID"
に設定します。ここで、PROJECT_ID は Google Cloud プロジェクトの ID です。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
${PROJECT_ID}
: ダッシュボードを作成するプロジェクト ID を保存する環境変数。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。- PROJECT_ID: プロジェクトの ID。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
- DASHBOARD_ID: ダッシュボードの ID。
${PROJECT_ID}
: ダッシュボードを作成するプロジェクト ID を保存する環境変数。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。${DASHBOARD_ID}
: ダッシュボードの ID を格納する環境変数。- PROJECT_ID: プロジェクトの ID。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
${PROJECT_ID}
: ダッシュボードを作成するプロジェクト ID を保存する環境変数。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。- PROJECT_ID: プロジェクトの ID。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
${PROJECT_ID}
: ダッシュボードを作成するプロジェクト ID を保存する環境変数。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。- PROJECT_ID: プロジェクトの ID。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
- DASHBOARD_ID: ダッシュボードの ID。
${PROJECT_ID}
: ダッシュボードを作成するプロジェクト ID を保存する環境変数。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。${DASHBOARD_ID}
: ダッシュボードの ID を格納する環境変数。- PROJECT_ID: プロジェクトの ID。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
- DASHBOARD_ID: ダッシュボードの ID。
- プロジェクトに Terraform をインストールして構成します。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
google_monitoring_dashboard
Terraform リソースを使用します。コマンドで、次のフィールドを設定します。
dashboard_json
:Dashboards
形式を使用したダッシュボードの JSON 表現。parent
: プロジェクトの完全修飾名。たとえば、このフィールドを"projects/PROJECT_ID"
に設定します。ここで、PROJECT_ID は Google Cloud プロジェクトの ID です。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。
${PROJECT_ID}
: ダッシュボードを作成するプロジェクト ID を保存する環境変数。App Hub 構成の場合は、App Hub ホスト プロジェクトまたはアプリ管理用フォルダの管理プロジェクトを選択します。${DASHBOARD_ID}
: ダッシュボードの ID を格納する環境変数。
In the Google Cloud console, activate Cloud Shell.
At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.
Terraform
ローカル開発環境でこのページの Terraform サンプルを使用するには、gcloud CLI をインストールして初期化し、ユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定します。
詳細については、 Google Cloud 認証ドキュメントのローカル開発環境の ADC の設定をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
ダッシュボードを作成する
新しいカスタム ダッシュボードを作成するには、
dashboards.create
メソッドを呼び出し、それをレイアウトとウィジェットに指定してダッシュボードに表示します。name
フィールドは省略可能です。名前フィールドの値の構造は次のとおりです。"name": "projects/PROJECT_ID_OR_NUMBER/dashboards/DASHBOARD_ID"
ダッシュボードを作成すると、API が自動的に DASHBOARD_ID コンポーネントを生成します。カスタム DASHBOARD_ID を指定する場合は、
Dashboard
オブジェクトのname
フィールドを指定できます。gcloud
プロジェクトでダッシュボードを作成するには、
gcloud monitoring dashboards create
コマンドを使用します。gcloud monitoring dashboards create --config-from-file=my-dashboard.json --project=PROJECT_ID
前述のコマンドを実行する前に、次のように置き換えます。
たとえば、ダッシュボードを複製する場合は、次の操作を行います。
詳細については、
gcloud monitoring dashboards create
リファレンスをご覧ください。Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。詳細については、Terraform プロバイダのリファレンス ドキュメントをご覧ください。
Terraform を使用してダッシュボードを作成するには、次の操作を行います。
REST
新しいダッシュボードを作成するには、
POST
リクエストをDashboard
エンドポイントに送信します。curl -d @my-dashboard.json -H "Authorization: Bearer $ACCESS_TOKEN" -H 'Content-Type: application/json' -X POST https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards
前述のコマンドを実行する前に、次のように構成します。
この例では、
my-dashboard.json
ファイルを使用してサンプルのダッシュボードを作成します。 Google Cloud コンソールからダッシュボードを管理できるようになりました。ダッシュボードのその他の構成については、ダッシュボードとレイアウトのサンプルをご覧ください。
ダッシュボードの削除
カスタム ダッシュボードを削除するには、
dashboards.delete
メソッドを呼び出して、削除するダッシュボードを指定します。gcloud
カスタム ダッシュボードを削除するには、
gcloud monitoring dashboards delete
を使用して、削除するダッシュボードの完全修飾 ID を指定します。gcloud monitoring dashboards delete DASHBOARD_ID --project=PROJECT_ID
前述のコマンドを実行する前に、次のように置き換えます。
詳細については、
gcloud monitoring dashboards delete
リファレンスをご覧ください。Terraform
Terraform を使用してリソースを削除できます。リソースの削除については、Terraform コマンドの destroy をご覧ください。
REST
カスタム ダッシュボードを削除するには、削除するダッシュボードの ID で修飾された
Dashboard
エンドポイントにDELETE
リクエストを送信します。curl -H "Authorization: Bearer $ACCESS_TOKEN" -X DELETE https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
前述のコマンドを実行する前に、次のように構成します。
成功すると、このメソッドは空のレスポンスを返します。それ以外の場合は、エラーを返します。
ダッシュボードの一覧表示
プロジェクトに属するすべてのカスタム ダッシュボードを一覧表示するには、
dashboards.list
メソッドを呼び出し、プロジェクト ID を指定します。gcloud
プロジェクトのすべてのカスタム ダッシュボードを一覧表示するには、
gcloud monitoring dashboards list
コマンドを使用します。gcloud monitoring dashboards list --project=PROJECT_ID
前述のコマンドを実行する前に、次のように置き換えます。
詳細については、
gcloud monitoring dashboards list
リファレンスをご覧ください。Terraform
Terraform を使用してプロジェクトにクエリを送信し、ダッシュボードのリストをレスポンスとして取得することはできません。ただし、これらのダッシュボードは Google Cloud コンソールを使用して表示できます。
REST
プロジェクトのすべてのカスタムダッシュボードを一覧表示するには、プロジェクト ID を
Dashboard
エンドポイントに送信します。curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards
前述のコマンドを実行する前に、次のように構成します。
この例ではプロジェクトに関連付けられたカスタム ダッシュボードが返されます。
リスト レスポンスのページ分け
dashboards.list
メソッドはページ分けをサポートしているので、すべての結果を一度にではなく、1 ページずつ結果を取得できます。gcloud
ページあたりのリソース数を指定するには、コマンドで
--page-size
フラグを渡します。次に例を示します。gcloud monitoring dashboards list --page-size=1 --project=PROJECT_ID
前述のコマンドを実行する前に、次のように置き換えます。
Terraform
Terraform を使用してプロジェクトにクエリを送信し、ダッシュボードのページネーション リストをレスポンスとして取得することはできません。ただし、これらのダッシュボードは Google Cloud コンソールを使用して表示できます。
REST
結果リストの最初のページで、リクエストに
pageSize
クエリ パラメータを指定します。curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards?page_size=1
前述のコマンドを実行する前に、次のように構成します。
メソッドは、リストの最初のページと
nextPageToken
を返します。次に例を示します。{ "dashboards" : [ { "displayName" : "Grid Layout Example", "gridLayout" : { "widgets" : [ { ... }, { ... }, { ... }, ] } } ] }, "nextPageToken": "ChYqFDEyMzkzMzUwNzg0OTE1MDI4MjM3"
残りの各ページには、リクエストに対応する
nextPageToken
を指定する必要があります。ダッシュボードを取得する
プロジェクトの特定のカスタム ダッシュボードを取得するには、ダッシュボード ID で修飾された
dashboards.get
メソッドを呼び出します。gcloud
特定のカスタム ダッシュボードを取得するには、
gcloud monitoring dashboards describe
コマンドを使用してダッシュボード ID を指定します。gcloud monitoring dashboards describe DASHBOARD_ID --format=json --project=PROJECT_ID
前述のコマンドを実行する前に、次のように置き換えます。
このコマンドにより、リクエストされたダッシュボードが返されます。
{ "columnLayout": { "columns": [ { "widgets": [ { "text": { "content": "Text Widget 1", "format": "RAW" } }, { "text": { "content": "**Text Widget 2**", "format": "MARKDOWN" } }, { "text": { "content": "_Text Widget 3_", "format": "MARKDOWN" } } ] } ] }, "displayName": "Column-layout example", "etag": "cb3070baf15de7c79d78761baac3a386", "name": "projects/730041941835/dashboards/e4cd063e-5414-4e07-9e1e-450d6d3a531d" }
詳細については、
gcloud monitoring dashboards describe
リファレンスをご覧ください。Terraform
Terraform を使用して、レスポンスが個々のダッシュボードであるクエリをプロジェクトに送信することはできません。ただし、これらのダッシュボードは Google Cloud コンソールを使用して表示できます。
REST
特定のカスタム ダッシュボードを取得するには、ダッシュボード ID を
Dashboard
エンドポイントに送信します。curl -H "Authorization: Bearer $ACCESS_TOKEN" https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
前述のコマンドを実行する前に、次のように構成します。
上記の式で、
${DASHBOARD_ID}
はダッシュボードの完全修飾名を格納する環境変数です。このメソッドは、次の例に類似したレスポンスを返します。
{ "columnLayout": { "columns": [ { "widgets": [ { "text": { "content": "Text Widget 1", "format": "RAW" } }, { "text": { "content": "**Text Widget 2**", "format": "MARKDOWN" } }, { "text": { "content": "_Text Widget 3_", "format": "MARKDOWN" } } ] } ] }, "displayName": "Column-layout example", "etag": "cb3070baf15de7c79d78761baac3a386", "name": "projects/730041941835/dashboards/e4cd063e-5414-4e07-9e1e-450d6d3a531d" }
ダッシュボードの更新
既存のカスタム ダッシュボードを更新するには、
dashboards.patch
メソッドを呼び出します。現在のetag
の値を取得するには、dashboards.get
メソッドを呼び出すと、レスポンス内で確認できます。gcloud
カスタム ダッシュボードを更新するには、
gcloud monitoring dashboards update
を使用して更新するダッシュボードの ID を指定し、ダッシュボードに変更を送信します。gcloud monitoring dashboards update DASHBOARD_ID --config-from-file=my-updated-dashboard.json --project=PROJECT_ID
前述のコマンドを実行する前に、次のように置き換えます。
詳細については、
gcloud monitoring dashboards update
リファレンスをご覧ください。前の例では、
my-updated-dashboard.json
ファイルを使用して既存のカスタム ダッシュボードを更新しています。レスポンス(新しいetag
値を含む)は、更新されたダッシュボードの一覧のコピーです。Terraform
Terraform 構成を適用または削除する方法については、基本的な Terraform コマンドをご覧ください。詳細については、Terraform プロバイダのリファレンス ドキュメントをご覧ください。
Terraform を使用してダッシュボードを更新する手順は次のとおりです。
REST
カスタム ダッシュボードを更新するには、
PATCH
リクエストをDashboard
エンドポイントに送信し、修正したDashboard
オブジェクトと最新dashboards.get
レスポンスのetag
値を指定します。curl -d @my-updated-dashboard.json -H "Authorization: Bearer $ACCESS_TOKEN" -H 'Content-Type: application/json' -X PATCH https://monitoring.googleapis.com/v1/projects/${PROJECT_ID}/dashboards/${DASHBOARD_ID}
前述のコマンドを実行する前に、次のように構成します。
前の例では、
my-updated-dashboard.json
ファイルを使用して既存のカスタム ダッシュボードを更新しています。レスポンス(新しいetag
値を含む)は、更新されたダッシュボードの一覧のコピーです。次のステップ
特に記載のない限り、このページのコンテンツはクリエイティブ・コモンズの表示 4.0 ライセンスにより使用許諾されます。コードサンプルは Apache 2.0 ライセンスにより使用許諾されます。詳しくは、Google Developers サイトのポリシーをご覧ください。Java は Oracle および関連会社の登録商標です。
最終更新日 2025-07-14 UTC。
-