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

このクイックスタートでは、Cloud Shell 環境から Python プログラムを実行します。これらのプログラムでは、Python クライアント ライブラリを使用してログエントリの書き込み、読み取り、削除、エクスポートを行います。

始める前に

Cloud Shell を使用するには、請求が有効になっている Google Cloud Platform プロジェクトが必要です。GCP プロジェクトがない場合、またはプロジェクトで請求が有効になっていない場合は、次の手順に従います。
  1. Google アカウントにログインします。

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

  2. GCP プロジェクトを選択または作成します。

    [リソースの管理] ページに移動

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

    課金を有効にする方法について

Python バージョン 2.7 と 3.5 は、Cloud Shell にあらかじめインストールされています。他のソフトウェアのインストールや構成を行う必要はありません。

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

Cloud Shell を開く

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

Cloud Shell をアクティブにする

Cloud Shell がウィンドウで開き、ウェルカム バナーが表示されます。

Welcome to Cloud Shell

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

gcloud config set project [project ID]

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

GitHub プロジェクトからソースコードのクローンを作成します。

git clone https://github.com/GoogleCloudPlatform/python-docs-samples

ログエントリを書き込む

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

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

新しいログエントリをログ my-log に書き込むには、次のコマンドを実行します。

cd python-docs-samples/logging/cloud-client
python snippets.py my-log write

ログエントリを表示する

Cloud Shell でログエントリを表示するには、次のコマンドを実行します。

python snippets.py my-log list

しばらくすると、コマンドが完了し、結果が Cloud Shell に表示されます。結果は次のようになります。

    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'}

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

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

ログエントリを削除する

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

python snippets.py my-log delete

コマンドが完了すると、Cloud Shell にメッセージ「Deleted all logging entries for my-log」が表示されます。

ログをエクスポートする

Logging では、ログエントリを Cloud Storage バケット、BigQuery データセット、Cloud Pub/Sub にエクスポートできます。エクスポートの詳細については、ログのエクスポートの概要をご覧ください。

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

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

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

このクイックスタートのエクスポート先は、Cloud Storage バケットです。Cloud Storage バケットを作成するには、次の手順に沿って操作します。

  1. GCP Console のダッシュボードで、[Storage] > [ブラウザ] に移動します。

    [ブラウザ] に移動

  2. [バケットを作成] をクリックします。

  3. バケットの名前を選択します。
  4. [Regional] を選択し、[場所] で最も近い地理オプションを選択します。他のすべての設定はデフォルト値のままにします。[作成] をクリックします。このクイックスタートでは、Cloud Storage バケット名 myloggingproject-1 を使用します。

シンクを作成する

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

  • 氏名
  • エクスポート先
  • フィルタ

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

重要度が INFO 以上のすべてのログエントリを Cloud Storage バケット myloggingproject-1 にエクスポートするシンク mysink を作成するには、次のコマンドを実行します。

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

ビルドを表示するには、次のコマンドを実行します。

python export.py list

結果は次のようになります。

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

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

クライアント ライブラリを使用してシンクを作成しても、エクスポート先(この場合は Cloud Storage バケット)の権限は変更されません。Cloud Storage バケットの権限の設定を変更して、シンクに書き込み権限を付与する必要があります。

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

  1. シンクのライター ID を特定します。

    1. [ログビューア] ページに移動します。

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

    2. シンクのライター ID を含めてシンクの概要を表示するには、[エクスポート] を選択します。

  2. GCP Console で、[Storage] > [ブラウザ] をクリックします。

    [ブラウザ] に移動

  3. バケットの名前をクリックすると、詳細ビューが開かれます。

  4. [権限] を選択し、[メンバーを追加] をクリックします。
  5. [役割] を [Storage Object Creator] に設定し、シンクのライター ID を入力します。

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

検証

シンクが正しく構成されていることを確認するには:

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

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

    1. GCP Console で、[Storage] > [ブラウザ] をクリックします。

      [ブラウザ] に移動

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

      There are no live objects in this bucket.

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

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

      バケットの内容

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

      バケットの内容

    5. 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 バケットが空になっている理由はいくつかあります。

  1. データがバケットに表示されるまで待てなかった。最初のエントリがエクスポート先に表示されるまで、または構成エラーが通知されるまでに 2〜3 時間かかることがあります。詳細は、エクスポートしたログの可用性をご覧ください。

  2. 構成エラーが発生した。この場合、次のような件名のメール メッセージが届きます。

          [ACTION REQUIRED] Stackdriver Logging export config error in myloggingproject.
      

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

          bucket_permission_denied
      

    この特定の条件を修正するには、権限を更新するをご覧ください。

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

     python snippets.py my-log write
    

クリーンアップ

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

  1. (省略可)作成したログエントリを削除します。ログエントリを削除しないと、そのエントリは期限切れになり、削除されます。割り当てポリシーをご覧ください。ログ my-log のすべてのログエントリを削除するには、次のコマンドを実行します。

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

    • プロジェクトを削除するには、GCP Console の [プロジェクト情報] ペインから [プロジェクト設定に移動] をクリックし、[シャットダウン] をクリックします。

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

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

        python export.py delete mysink
        
      2. Cloud Storage バケットを削除します。GCP Console に移動し、[Storage] > [ブラウザ] の順にクリックします。バケット名の横にあるチェックボックスをオンにして、[削除] をクリックします。

次のステップ

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

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。