Cloud SDK を使用したクイックスタート

このクイックスタートでは、Stackdriver Logging のいくつかの機能を紹介し、以下の方法について説明します。

  • Cloud SDK を使用してログエントリを書き込む
  • ログビューアを使用してログエントリを表示およびフィルタリングする
  • Cloud SDK を使用してログエントリをリスト表示する
  • Logging API を使用してログエントリをリスト表示する

始める前に

このクイックスタートでは、課金を有効にした Google Cloud Platform プロジェクトが必要です。GCP プロジェクトがない場合、またはプロジェクトで課金が有効になっていない場合は、次の手順に従います。
  1. Google アカウントにログインします。

    Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。

  2. GCP Console のプロジェクト セレクタのページで、GCP プロジェクトを選択または作成します。

    プロジェクト セレクタのページに移動

  3. Google Cloud Platform プロジェクトに対して課金が有効になっていることを確認します。 プロジェクトに対して課金が有効になっていることを確認する方法を学習する

始めに

このクイックスタートの Cloud SDK コマンドは、Cloud Shell 環境または Compute Engine VM インスタンスで使用できます。

Cloud Shell

  1. Cloud SDK は、Cloud Shell 環境にあらかじめインストールされています。他のソフトウェアのインストールや構成を行う必要はありません。

  2. Cloud Shell を開き、プロジェクトの構成を確認します。

    1. GCP Console で、右上にある [Cloud Shell をアクティブにする] ボタンをクリックします。

      Cloud Shell をアクティブにする

      Cloud Shell のウィンドウが開き、ウェルカム メッセージが表示されます。

      Welcome to Cloud Shell

    2. ウェルカム メッセージでは、構成されたプロジェクト ID がエコーされます。この ID が、使用するプロジェクトのものでない場合は、[PROJECT_ID] を目的のプロジェクト ID に置き換えて、次のコマンドを実行します。

       gcloud config set project [PROJECT_ID]
      

VM インスタンス

  1. Compute Engine VM インスタンスを作成します。

    1. GCP Console で、[Compute Engine] > [VM インスタンス] を選択します。[作成] を選択します。以下のメッセージが表示されたら、Compute Engine の準備が整うまでお待ちください。

      Compute の準備

    2. [ID と API へのアクセス] ペインで、[各 API にアクセス権を設定] を選択します。新しいパネルでリストを下にスクロールして、Stackdriver Logging API を探します。アクセスを [書き込みのみ] から [フル] に変更します。

      Compute の準備

    3. その他の設定はデフォルト値のままにして、[作成] をクリックします。しばらくすると、VM インスタンスを使用できるようになります。

  2. VM インスタンスのシェルに接続するには、[SSH] > [ブラウザ ウィンドウで開く] に移動します。しばらくすると、Debian GNU / Linux シェルのウィンドウが開き、ウェルカム メッセージが表示されます。

  3. Cloud SDK は、GCM VM インスタンスにあらかじめインストールされています。Cloud SDK が Compute Engine プロジェクト用に構成されていることを確認します。

     gcloud config list
    
  4. リストされているプロジェクトが使用するプロジェクトでない場合は、[PROJECT_ID] を目的のプロジェクト ID に置き換えて、次のコマンドを実行します。

     gcloud config set project [PROJECT_ID]
    

Cloud SDK を使用してログエントリを書き込む

Logging では、構造化データを含むログエントリと非構造化データを含むログエントリがサポートされています。構造化データは、JSON データ構造で構成されています(例: {"weather": "partly cloudy"})。非構造化データは文字列です(例: "A simple entry")。次の手順では、Cloud SDK を使用して、非構造化データを含むログエントリと構造化データを含むログエントリを書き込みます。

  1. 非構造化データを含むログエントリをログ my-test-log に書き込みます。

    gcloud logging write my-test-log "A simple entry."
    

    コマンドが完了すると、Created log entry というメッセージが表示されます。

  2. 構造化データを含むログエントリを my-test-log に書き込みます。

    gcloud logging write --payload-type=json my-test-log '{ "message": "My second entry", "weather": "partly cloudy"}'
    

    構造化データを含むログエントリを書き込むときには、--payload-type=json を含める必要があります。このフィールドが含まれていないと、ペイロードが非構造化テキストとして解釈されます。

ログ my-test-log が存在しない場合は、ログエントリの受信時に Logging によって作成されます。

ログビューアでログを表示する

ログビューアは、ログエントリを表示、フィルタリング、ダウンロードするためのツールです。

  1. Google Cloud Platform Console でログビューア ページに移動します。

    ログビューア ページに移動

    ログビューア ページが表示されます。

    ログビューア

    Google Cloud Platform のナビゲーション バーで、該当するプロジェクトが選択されていることを確認します。必要に応じて、プロジェクトのプルダウン リストでプロジェクトを選択します。

  2. リソースタイプのプルダウン リストで [グローバル] を選択して、先ほど書き込んだログエントリを表示します。

    ログビューアの [グローバル]

    [グローバル] メニュー オプションが表示されない場合や、該当するログエントリが表示されない場合は、数分待ってからページを更新します。Logging でログエントリが受信されるまでに数分かかることがあります。

  3. ログエントリを展開するには、[展開] ボタン(arrow_right)をクリックします。

    ログビューア

    1 つ目のログエントリのデータは textPayload に格納されています。2 つ目のログエントリには構造化データが含まれているため、データが jsonPayload に格納されています。構造化ペイロードには messageweather というキーが含まれています。

ログエントリのデータ形式の詳細については、すべてのログに共通のデータ型をご覧ください。

ログエントリのフィルタリング

テキスト フィールドを使用してログエントリをフィルタリングできます。構造化ログではキーと値を使用できます。たとえば、simple というテキストを含むすべてのログエントリを表示するには、次のようにします。

  1. ログセレクタの上にあるフィルタ ボックスに、「simple」という文字列を入力します。A simple entry. というログエントリのみがログ画面に表示されます。

  2. ログを確認したら、追加したフィルタ文字列を削除して、ログセレクタの上にある [更新] ボタン(refresh)をクリックします。再び両方のログエントリが画面に表示されます。

構造化データを含むログエントリのうち、キー weathervalue フィールドに partly が含まれているものをすべて表示するには、次のようにします。

  1. 高度なフィルタモードに切り替えます。フィルタ ボックスの右端にある [展開] ボタン(arrow_drop_down)をクリックして、[高度なフィルタに変換] を選択します。
  2. フィルタ ボックスに resource.type="global" が含まれています。この行の下に次のように入力します。

    jsonPayload.weather:partly
    
  3. [フィルタを送信] をクリックします。My second entry という 1 つのログエントリが結果として表示されます。

    ログエントリの高度なフィルタ

フィルタの詳細については、高度なログフィルタをご覧ください。

Cloud SDK を使用してログエントリをリスト表示する

Cloud SDK を使用して、Logging からログエントリを取得して表示できます。たとえば、リソースタイプが global のログエントリを取得して表示するには、次のコマンドを実行します。

gcloud logging read "resource.type=global"

このコマンドは次のような結果を返します。

---
insertId: jpj9zjf73t1mn
jsonPayload:
  message: My second entry
  weather: partly cloudy
logName: projects/myloggingproject/logs/my-test-log
receiveTimestamp: '2018-11-01T18:39:31.114507977Z'
resource:
  labels:
    project_id: myloggingproject
  type: global
timestamp: '2018-11-01T18:39:31.114507977Z'
---
insertId: vd4m1if7h7u1a
logName: projects/myloggingproject/logs/my-test-log
receiveTimestamp: '2018-11-01T18:39:19.718100792Z'
resource:
  labels:
    project_id: myloggingproject
  type: global
textPayload: A simple entry
timestamp: '2018-11-01T18:39:19.718100792Z'

API Explorer を使用してログエントリをリスト表示する

API Explorer を使用すると、コードを書かずに Logging API メソッドを実行できます。Logging からログエントリのリストを読み取るには次のようにします。

  1. entries.list API メソッドの API リファレンス ページに移動します。

    entries.list API ページに移動する

  2. API Explorer ウィジェットがページの右または下に表示されます。「この API を試す」という見出しがあります。次のテキストをコピーして、リクエストの本文に貼り付けます。[実行] をクリックする前に PROJECT_ID を置き換えてください。

      "resourceNames": [
        "projects/[PROJECT_ID]"
      ],
      "filter": "resource.type=global"
    

    これらの設定が完了したリクエストの本文を以下に示します。

    この API を試す

  3. [実行] をクリックします。次のようなレスポンスが返されます。

    {
      "entries": [
        {
          "textPayload": "A simple entry",
          "insertId": "vd4m1if7h7u1a",
          "resource": {
            "type": "global",
            "labels": {
              "project_id": "myloggingproject"
            }
          },
          "timestamp": "2018-11-01T18:39:19.718100792Z",
          "logName": "projects/myloggingproject/logs/my-test-log",
          "receiveTimestamp": "2018-11-01T18:39:19.718100792Z"
        },
        {
          "insertId": "jpj9zjf73t1mn",
          "jsonPayload": {
            "message": "My second entry",
            "weather": "partly cloudy"
          },
          "resource": {
            "type": "global",
            "labels": {
              "project_id": "myloggingproject"
            }
          },
          "timestamp": "2018-11-01T18:39:31.114507977Z",
          "logName": "projects/myloggingproject/logs/my-test-log",
          "receiveTimestamp": "2018-11-01T18:39:31.114507977Z"
        }
      ]
    }
    

トラブルシューティング

  • Cloud SDK のコマンドでは、入力ミスや不明なフィールド名があると INVALID_ARGUMENT メッセージが返されます。たとえば、resource.type のピリオドが抜けていると次のエラーが発生します。

     ERROR: (gcloud.logging.read) INVALID_ARGUMENT: Field not found: 'resourcetype'.
    
  • Cloud SDK のコマンドでは、Stackdriver Logging に必要なアクセス権限が付与されていないと PERMISSION_DENIED メッセージが返されます。たとえば、Compute Engine VM インスタンスがデフォルトの Cloud API 設定で構成されていると、list コマンドで PERMISSION_DENIED エラーが発生します。

     ERROR: (gcloud.logging.read) PERMISSION_DENIED: Request had insufficient authentication scopes.
    

    この状態を解決するには、Compute Engine VM インスタンスの権限を変更して、Stackdriver Logging に読み取り権限を付与します。

    1. VM インスタンスの [VM インスタンスの詳細] ページに移動します。[停止] をクリックします。完了までに 1〜2 分かかることがあります。
    2. 構成を変更するには、[編集] をクリックします。
    3. [Cloud API アクセス スコープ] という見出しを見つけて、[詳細] をクリックします。各 API の設定が表示されます。Stackdriver Logging API のエントリを [フル] に変更します。[保存] をクリックします。
    4. VM インスタンスを再起動するには、[開始] をクリックします。しばらくすると、VM を使用できるようになります。
  • API Explorer では、コマンドを完了できない場合や、追加の承認が必要な場合に、次のメッセージまたはエラーコードが表示されます。

    • レスポンス コード 200(エントリなし): nextPageToken というメッセージが表示される場合は、API Explorer が時間内に検索を完了できなかったことを示します。リクエストに pageToken を追加して、キー nextPageToken で指定されたのと同じ値に設定し、コマンドを再試行します。
    • レスポンス コード 400: フィルタ値が無効です。たとえば、global のスペルを間違えて gloobal と入力すると、Unsupported resource type: gloobal というメッセージが表示されます。
    • レスポンス コード 404: プロジェクト ID が無効です。プロジェクト ID のスペルを確認してください。
    • Google アカウントにログインして API Explorer にアカウントへのアクセスを許可するように求められる場合があります。

クリーンアップ

このクイックスタートで使用したリソースについて GCP アカウントに課金されないようにする手順は次のとおりです。

  1. (オプション)作成したログエントリを削除するには、次の gcloud コマンドを実行します。

    gcloud logging logs delete my-test-log
    

    ログエントリを削除しないと、そのエントリは期限切れになり、削除されます。割り当てポリシーをご覧ください。

次のステップ

  • ログビューアの詳しい説明については、ログビューアをご覧ください。
  • Cloud Storage、BigQuery、Cloud Pub/Sub にログエントリをエクスポートする方法については、ログのエクスポートをご覧ください。
  • Logging で仮想マシン インスタンスからログエントリを収集する方法については、Logging エージェントをご覧ください。
  • 監査およびコンプライアンスのニーズについては、監査ログをご覧ください。
  • アプリケーションからのログの読み取り、書き込み、構成を行う方法については、Stackdriver Logging API をご覧ください。