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

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

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

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

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

始める前に

このクイックスタートを完了するには、課金が有効になっている Google Cloud プロジェクトが必要です。Google Cloud プロジェクトをまだ作成していない場合、または Google Cloud プロジェクトに対する課金を有効にしていない場合は、次の手順を行います。
  1. Google Cloud アカウントにログインします。Google Cloud を初めて使用する場合は、アカウントを作成して、実際のシナリオでの Google プロダクトのパフォーマンスを評価してください。新規のお客様には、ワークロードの実行、テスト、デプロイができる無料クレジット $300 分を差し上げます。
  2. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  3. Google Cloud プロジェクトで課金が有効になっていることを確認します

  4. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

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

  5. Google Cloud プロジェクトで課金が有効になっていることを確認します

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

はじめに

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

Cloud Shell

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

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

      Google Cloud コンソールで、Cloud Shell アイコンをクリックします。

      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 コンソールのナビゲーション パネルで [ロギング] を選択してから、[ログルーター] を選択します。

      ログルーターに移動

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

    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 コンソールに移動し、[ストレージ] > [バケット] をクリックします。バケット名の横にあるチェックボックスをオンにして、[削除] をクリックします。

次のステップ