MQL 言語の概要

このページでは、Monitoring Query 言語(MQL)に関する一般的な情報を提供します。この情報は、Google Cloud Console または Cloud Monitoring API のどちらから MQL を使用するかに関係なく適用されます。

このページでは、で説明されているように、MQL 言語に関する一般的な理解があることを前提としています。

厳密なクエリと簡潔なクエリ

Monitoring Query Language のクエリは、厳密な形式または簡潔な形式の式にできます。 簡潔なクエリは、簡略表記と、推定またはデフォルト化できる場合に一部のクエリ コンポーネントを省略できるという事実を利用します。このため、同等のクエリの形式が互いにかなり異なる可能性があります。

クエリ エディタに簡潔なクエリを入力してグラフを保存すると、クエリは厳密な形式に変換されます。

このセクションでは、これらのショートカットと他のバリエーションについて説明します。

詳細な一覧については、テーブル オペレーションのショートカットをご覧ください。

オペレーションのショートカット

fetchgroup_byfilter のオペレーションは、オペレーション名を省略してより簡潔にできます。

次の fetch リクエストは同等です。

fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
      gce_instance::compute.googleapis.com/instance/cpu/utilization

次の group_by オペレーションは同等です。

group_by [zone], mean(val())
         [zone], mean(val())

フィルタテストを丸括弧で囲む場合は、単語 filter を省略できます。たとえば、次の 2 つの filter オペレーションは同等です。

filter instance_name =~ 'apache.*'
       (instance_name =~ 'apache.*')

関数のショートカット

たとえば、function(val()) のように入力ポイントの値に関数を適用する場合は、表記 .function を使用できます。先頭のドットは、「次の関数を呼び出して、入力ポイントの値を最初の引数として関数に渡す」という意味です。

たとえば、関数 mean(val()).mean に置き換えることができます。次の式はすべて同じ結果になります。

group_by [zone], mean(val())
group_by [zone], .mean

group_by ショートカットを適用します。

[zone], .mean

各ポイントに 1 つの値を持つ時系列のテーブルの一般的なケースでは、.mean は「集計されるすべてのポイントの値の平均を取る」を意味します。同様に、.div(3) は「ポイントの値を 3 で割る」を意味します。以下は同等です。

div(val(), 3)
.div(3)
val() / 3

fetch のバリエーション

fetch オペレーションは、モニタリング対象リソースタイプと指標タイプの組み合わせに対する時系列データを返します。他にも、resourcemetric のオペレーションもあります。各 resource オペレーションの後に metric オペレーションを続ける必要があります。次のクエリは同等です。

resource gce_instance | metric compute.googleapis.com/instance/cpu/utilization
fetch    gce_instance | metric compute.googleapis.com/instance/cpu/utilization
         gce_instance | metric compute.googleapis.com/instance/cpu/utilization

この resource | metric 形式は非常に一般的であるため、次の簡潔な形式もサポートされており、上記の例と同等です。

fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
      gce_instance::compute.googleapis.com/instance/cpu/utilization

ただし、resource オペレーションの後に metric オペレーションを直接実行する必要はありません。resource 出力を filter オペレーションに直接パイプしてから、その出力を metric オペレーションにパイプできます。 例:

fetch gce_instance
| filter zone = "us-central1-a"
| metric compute.googleapis.com/instance/cpu/utilization.

この形式は、同じモニタリング対象リソースのグループから収集された 2 つの異なる指標タイプを一連のオペレーションとして使用する場合に非常に便利です。詳細については、 fetch をご覧ください。 シーケンスを使用する別の例については、選択と union の組み合わせをご覧ください。

例: 簡潔から厳密への変換

クエリ エディタを使用してクエリを入力し、グラフをダッシュボードに保存すると、クエリは厳密な形式に変換されます。

選択と union の組み合わせに次のクエリが表示されます。

fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
|
  {
     top 1, max(val())
  ;
     bottom 1, min(val())
  }
| union

このクエリをクエリ エディタに入力してグラフを保存すると、クエリは次のように変換されます。

fetch gce_instance::compute.googleapis.com/instance/cpu/utilization
|
  {
     t_0: top 1, max(value.utilization)
  ;
     t_1: bottom 1, min(value.utilization)
  }
| union

このバージョンのクエリは、ダッシュボードに保存した後のグラフの JSON 表現から取得できます。

  1. ダッシュボードに移動し、グラフをクリックします。
  2. オプション メニューから次のいずれかを選択します。

    • 編集
    • Metrics Explorer で開く

    クエリ エディタでは、クエリが厳密な形式で表示されます。

resource.project_id 列の照合

すべてのリソースタイプに resource.project_id というラベルが付いています。このラベルは、リソースとそのリソースに関するデータを所有するプロジェクトを指定します。

resource.project_id ラベルには、値としてテキスト形式のプロジェクト番号がありますが、その値は特定の状況では MQL によってプロジェクト名に変換されます。たとえば、"monitoring-demo" という名前のプロジェクトのプロジェクト番号が "530310927541" であるとします。このプロジェクトが所有するすべてのリソースの resource.project_id ラベルの値は "530310927541" ですが、場合によっては MQL によって値が "monitoring-demo" として扱われます。

次の場合、MQL は resource.project_id ラベルをプロジェクト名とプロジェクト番号の両方を持つものとして扱います。

  • グラフの凡例には、resource.project_id ラベルの値のプロジェクト番号ではなく、プロジェクト名が表示されます。

  • resource.project_id の値と文字列リテラルの等価比較では、プロジェクト番号とプロジェクト名の両方が認識されます。たとえば、次のプロジェクトが所有するリソースには、どちらも true を返します。

    • resource.project_id == "monitoring-demo"
    • resource.project_id == "530310927541"

    これは、== 演算子と != 演算子で機能し、関数では eq()ne() の形式になります。

  • resource.project_id ラベルの正規表現の一致は、プロジェクト番号またはプロジェクト名のいずれかに対して正しく機能します。たとえば、次のプロジェクトが所有するリソースには、どちらも true を返します。

    • resource.project_id =~ "monitoring-.*"
    • resource.project_id =~ ".*27541"

    これは、=~ 演算子と !~ 演算子で機能し、関数では re_full_match を形成します。

実際の列の値は数値であり、他のすべてのオペレーションには数値が使用されます。たとえば、concatenate("project-", resource.project_id) と指定すると、"project-monitoring-demo" ではなく "project-530310927541" という値になります。