Python スクリプトを使用してログエントリの書き込みとクエリを行う

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

  • Python スクリプトを使用してログエントリを書き込む。
  • Python スクリプトを使用してログエントリを削除する。
  • Python スクリプトを使用してログエントリを削除する。
  • Cloud Storage バケットにログを転送する。

Logging は、ログエントリを次の宛先にルーティングできます。

  • Cloud Storage バケット
  • BigQuery データセット
  • Pub/Sub
  • Logging バケット
  • Google Cloud プロジェクト

始める前に

このクイックスタートを完了するには、課金が有効になっている Google Cloud プロジェクトが必要です。Google Cloud プロジェクトをまだ作成していない場合、または Google Cloud プロジェクトに対する課金を有効にしていない場合は、次の手順を行います。
  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

このクイックスタートでは、Stackdriver Logging と Cloud Storage を使用します。これらのリソースを使用すると、費用が発生する可能性があります。このクイックスタートの終了後は、作成したリソースを削除するとそれ以上の請求が発生しなくなります。詳細については、このページのクリーンアップをご覧ください。

はじめに

Cloud Shell 環境または一般的な Linux 環境を使用して、このクイックスタートを実行できます。 Cloud Shell には、あらかじめ Python がインストールされています。

Cloud Shell

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

    1. Google Cloud コンソールで、[Cloud Shell をアクティブにする] をクリックします。

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

    2. ウェルカム メッセージは、構成された Google Cloud プロジェクト ID を確認表示します。これが、使用する Google Cloud プロジェクトと異なる場合は、PROJECT_ID を実際のプロジェクト ID に置き換えて、次のコマンドを実行します。

      gcloud config set project PROJECT_ID
      

Linux

  1. Python がインストールされ、構成されていることを確認します。Python 開発用のマシンの準備については、Python 開発環境の設定をご覧ください。

  2. Cloud Logging クライアント ライブラリをインストールします。

    pip install --upgrade google-cloud-logging
    
  3. Google Cloud プロジェクトの Identity and Access Management のアクセス許可を設定します。以降の手順では、Google Cloud プロジェクト用のサービス アカウントを作成してから、ファイルを生成して Linux ワークステーションにダウンロードします。

    1. Google Cloud コンソールで、[サービス アカウント] ページに移動します:

      [サービス アカウント] に移動

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

    2. クイックスタートの Google Cloud プロジェクトを選択し、[サービス アカウントを作成] をクリックします。

      • アカウント名を入力します。
      • アカウントの説明を入力します。
      • [作成して続行] をクリックします。
    3. [ロールを選択] フィールドをクリックして、[Logging 管理者] を選択します。

    4. [完了] をクリックして、サービス アカウントの作成を完了します。

    5. キーファイルを作成し、ワークステーションにダウンロードします。

      • サービス アカウントに対して [その他のオプション] をクリックし、[鍵の管理] を選択します。
      • [] ペインで、[鍵を追加] をクリックします。
      • [新しい鍵を作成] をクリックします。
      • キーのタイプは、JSON を選択し、[Create] をクリックします。しばらくすると、ウィンドウに次のようなメッセージが表示されます。

        秘密鍵がパソコンに保存されました

  4. Linux ワークステーションで、環境変数 GOOGLE_APPLICATION_CREDENTIALS をキーファイルのパスに設定して、アプリケーションに認証情報を指定します。次に例を示します。

     export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/FILE_NAME.json"
    

    この環境変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定してください。

ソースのクローンを作成する

このクイックスタート用に Cloud Shell を構成するには、次の手順を行います。

  1. GitHub プロジェクト python-logging のクローンを作成します。

      git clone https://github.com/googleapis/python-logging
    

    ディレクトリ samples/snippets には、このクイックスタートで使用する 2 つのスクリプトが含まれています。

    • snippets.py ログのエントリを管理します。
    • export.py ログのエクスポートを管理します。
  2. snippets ディレクトリに移動します。

      cd python-logging/samples/snippets
    

ログエントリを書き込む

snippets.py スクリプトは、Python クライアント ライブラリを使用してログエントリを Logging に書き込みます。コマンドラインで write オプションを指定すると、スクリプトは次のログエントリを書き込みます。

  • 構造化されていないデータがあり、重要度レベルが指定されていないエントリ。
  • 構造化されていないデータがあり、重要度レベルが ERROR のエントリ。
  • JSON 構造化データがあり、重要度レベルが指定されていないエントリ。

新しいログエントリをログ my-log に書き込むには、snippets.py スクリプトを write オプションと実行します。

python snippets.py my-log write

ログエントリを表示する

Cloud Shell でログエントリを表示するには、list オプションを指定して snippets.py スクリプトを実行します。

python snippets.py my-log list

コマンドが完了し、次の結果が表示されます。

    Listing entries for logger my-log:
    * 2018-11-15T16:05:35.548471+00:00: Hello, world!
    * 2018-11-15T16:05:35.647190+00:00: Goodbye, world!
    * 2018-11-15T16:05:35.726315+00:00: {u'favorite_color': u'Blue', u'quest': u'Find the Holy Grail', u'name': u'King Arthur'}

結果にエントリが表示されない場合は、コマンドを再試行します。Logging でログエントリを受信して処理するには、少し時間がかかります。

ログ エクスプローラを使用してログエントリを表示することもできます。詳細については、ログ エクスプローラを使用してログを表示するをご覧ください。

ログエントリを削除する

my-log ログ内のすべてのログエントリを削除するには、delete オプションを指定して snippets.py スクリプトを実行します。

python snippets.py my-log delete

コマンドが完了し、次の結果が表示されます。

Deleted all logging entries for my-log

ログを転送する

このセクションでは、次の操作を行います。

  • Cloud Storage バケットを作成し、データのエクスポート先として使用します。
  • 新しいログエントリをエクスポート先にコピーするシンクを作成します。
  • Cloud Storage バケットの権限を更新します。
  • Logging にログエントリを書き込みます。
  • 必要に応じて、Cloud Storage バケットの内容を確認します。

エクスポート先を作成する

このクイックスタートのエクスポート先は、Cloud Storage バケットです。Cloud Storage バケットを作成するには、次の操作を行います。

  1. Google Cloud コンソールの [バケット] ページに移動します。

    [バケット] に移動

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

  2. [バケットを作成] をクリックします。
  3. バケットの名前を入力します。
  4. [ロケーション タイプ] で [リージョン] を選択し、最もレイテンシが低いバケットのロケーションを選択します。
  5. [デフォルトのストレージ クラス] で [スタンダード] を選択します。
  6. [アクセス制御] で [きめ細かい管理] を選択します。
  7. [保護ツール] で [なし] を選択し、[作成] をクリックします。

このクイックスタートでは、バケット名が myloggingproject-1 の Cloud Storage を使用します。

シンクを作成

シンクは、新しく到着したログエントリを Logging からエクスポート先にエクスポートするかどうかを決定するルールです。シンクには次の 3 つの属性があります。

  • 名前
  • 宛先
  • フィルタ

シンクの詳細については、シンクをご覧ください。

新しく到着したログエントリがクエリ条件を満たしている場合、そのログエントリはエクスポート先にエクスポートされます。

export.py スクリプトは、Python クライアント ライブラリを使用して、シンクの作成、一覧表示、変更、削除を行います。重要度が少なくとも INFO であるすべてのログエントリを Cloud Storage バケット myloggingproject-1 にエクスポートするシンク mysink を作成するには、次のコマンドを実行します。

python export.py create mysink myloggingproject-1 "severity>=INFO"

シンクを表示するには、list オプションを指定して export.py スクリプトを 実行します。

python export.py list

スクリプトから次の結果が返されます。

    mysink: severity>=INFO -> storage.googleapis.com/myloggingproject-1

エクスポート先の権限を更新する

export.py スクリプトでシンクを作成しても、Cloud Storage バケットの権限は変更されません。Cloud Storage バケットの権限の設定を変更して、シンクに書き込み権限を許可する必要があります。 サービス アカウント、アクセス スコープ、Identity and Access Management のロールについては、サービス アカウントをご覧ください。

Cloud Storage バケットの権限を更新するには:

  1. シンクの書き込み ID を特定します。

    1. Google Cloud コンソールで、[ログルーター] ページに移動します。

      [ログルーター] に移動

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

      シンクのサマリー テーブルが表示されます。

    2. テーブルでシンクを見つけて、[メニュー] を選択し、[シンクの詳細を表示する] を選択します。

    3. 書き込み ID をクリップボードにコピーします。

  2. Google Cloud コンソールの [バケット] ページに移動します。

    [バケット] に移動

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

  3. 詳細ビューを開くには、バケットの名前をクリックします。

  4. [権限] を選択し、[アクセス権を付与] をクリックします。

  5. 書き込み ID を [新しいプリンシパル] ボックスに貼り付けます。書き込み ID アドレスから serviceAccount: 接頭辞を削除します。

  6. [ロール] を Storage Object Creator に設定し、[保存] をクリックします。

詳細については、エクスポート先の権限を設定するをご覧ください。

シンクを検証する

シンクとエクスポート先が正しく構成されていることを確認する手順は、次のとおりです。

  1. 新しいログエントリをログ my-log に書き込みます。

    python snippets.py my-log write
    
  2. Cloud Storage バケットの内容を表示します。

    1. Google Cloud コンソールの [バケット] ページに移動します。

      [バケット] に移動

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

    2. 詳細ビューを開くには、バケットの名前をクリックします。詳細ビューには、データが含まれているフォルダが一覧表示されます。バケットにデータがない場合は、次のメッセージが表示されます。

      There are no live objects in this bucket.

      遅れて到着するログエントリで説明されているように、最初のエントリがエクスポート先に表示されるまで、または構成エラーが通知されるまでに 2 ~ 3 時間かかることがあります。

      バケットでデータが受信されると、詳細ビューには次のような結果が表示されます。

      バケットの内容の詳細ビュー。

    3. 各フォルダ内のデータは、ラベル付けされた一連のフォルダに整理されます。最上位のフォルダはログ名で、その後に年、月、日の各フォルダが続きます。シンクによってエクスポートされたデータを表示するには、フォルダ名 my-log をクリックします。その後に json で終わるファイルにたどり着くまで、年、月、日のサブフォルダをクリックします。

      バケットの内容のサブフォルダ ビュー。

    4. JSON ファイルには、Cloud Storage バケットにエクスポートされたログエントリが含まれています。JSON ファイル名をクリックすると、その内容が表示されます。内容は次のようになります。

       {"insertId":"yf1cshfoivz48",
       "logName":"projects/loggingproject-222616/logs/my-log",
       "receiveTimestamp":"2018-11-15T23:06:14.738729911Z",
       "resource":{"labels":{"project_id":"loggingproject-222616"},"type":"global"},
       "severity":"ERROR",
       "textPayload":"Goodbye, world!",
       "timestamp":"2018-11-15T23:06:14.738729911Z"}
      

      ERROR の重要度は INFO の重要度よりも高いため、文字列「Goodbye、world!」を含むログエントリがシンクのエクスポート先にエクスポートされます。書き込まれたその他のログエントリは、エクスポート先にエクスポートされません。設定されているデフォルト値の重要度レベルは INFO より低いためです。

トラブルシューティング

Cloud Storage バケットが空になっている理由はいくつかあります。

  • バケットはデータを受信していません。最初のエントリがエクスポート先に表示されるまで、または構成エラーが通知されるまでに 2〜3 時間かかることがあります。詳細については、遅れて到着するログエントリをご覧ください。

  • 設定エラーがあります。この場合、次のような件名のメール メッセージが届きます。

     [ACTION REQUIRED] Logging export config error in myloggingproject.

    メールの本文では、構成の問題が説明されています。 たとえば、エクスポート先の権限を更新しない場合、メールには次のエラーコードが表示されます。

     bucket_permission_denied

    この特定の条件を修正するには、このページのエクスポート先の権限を更新するをご覧ください。

  • シンクの作成後にログエントリが書き込まれませんでした。シンクは、新しく到着したログエントリにだけ適用されます。この状況を修正するには、次のコマンドを実行して新しいログエントリを書き込みます。

     python snippets.py my-log write
    

クリーンアップ

このページで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、次の手順を行います。

  1. (省略可)作成したログエントリを削除します。ログエントリを削除しないと、そのエントリは期限切れになり、削除されます。割り当てと上限をご覧ください。

    ログ my-log 内のすべてのログエントリを削除するには、次のコマンドを実行します。

     python snippets.py my-log delete
    
  2. Google Cloud プロジェクトを削除するか、クイックスタート リソースを削除します。

    • Google Cloud プロジェクトを削除するには、Google Cloud コンソールの [プロジェクト情報] ペインでプロジェクト設定に移動し、[シャットダウン] をクリックします。

    • クイックスタート リソースを削除するには:

      1. 次のコマンドを実行してシンクを削除します。

        python export.py delete mysink
        
      2. Cloud Storage バケットを削除します。Google Cloud コンソールに移動し、[ストレージ] > [バケット] をクリックします。バケット名の横にあるチェックボックスをオンにして、[削除] をクリックします。

次のステップ