Python スクリプトを使用してログエントリの書き込みとクエリを行う
このクイックスタートでは、Cloud Logging のいくつかの機能を紹介し、以下の内容の実行方法について説明します。
- Python スクリプトを使用してログエントリを書き込む。
- Python スクリプトを使用してログエントリを削除する。
- Python スクリプトを使用してログエントリを削除する。
- Cloud Storage バケットにログを転送する。
Logging は、ログエントリを次の宛先にルーティングできます。
- Cloud Storage バケット
- BigQuery データセット
- Pub/Sub
- Logging バケット
- Google Cloud プロジェクト
始める前に
このクイックスタートを完了するには、課金が有効になっている Google Cloud プロジェクトが必要です。Google Cloud プロジェクトをまだ作成していない場合、または Google Cloud プロジェクトに対する課金を有効にしていない場合は、次の手順を行います。- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
このクイックスタートでは、Stackdriver Logging と Cloud Storage を使用します。これらのリソースを使用すると、費用が発生する可能性があります。このクイックスタートの終了後は、作成したリソースを削除するとそれ以上の請求が発生しなくなります。詳細については、このページのクリーンアップをご覧ください。
はじめに
Cloud Shell 環境または一般的な Linux 環境を使用して、このクイックスタートを実行できます。 Cloud Shell には、あらかじめ Python がインストールされています。
Cloud Shell
Cloud Shell を開き、Google Cloud プロジェクトの構成を確認します。
Google Cloud コンソールで、[terminalCloud Shell をアクティブにする] をクリックします。
Cloud Shell のウィンドウが開き、ウェルカム メッセージが表示されます。
ウェルカム メッセージは、構成された Google Cloud プロジェクト ID を確認表示します。これが、使用する Google Cloud プロジェクトと異なる場合は、PROJECT_ID を実際のプロジェクト ID に置き換えて、次のコマンドを実行します。
gcloud config set project PROJECT_ID
Linux
Python がインストールされ、構成されていることを確認します。Python 開発用のマシンの準備については、Python 開発環境の設定をご覧ください。
Cloud Logging クライアント ライブラリをインストールします。
pip install --upgrade google-cloud-logging
Google Cloud プロジェクトの Identity and Access Management のアクセス許可を設定します。以降の手順では、Google Cloud プロジェクト用のサービス アカウントを作成してから、ファイルを生成して Linux ワークステーションにダウンロードします。
-
Google Cloud コンソールで、[サービス アカウント] ページに移動します:
検索バーを使用してこのページを検索する場合は、小見出しが [IAM と管理者] である結果を選択します。
クイックスタートの Google Cloud プロジェクトを選択し、[サービス アカウントを作成] をクリックします。
- アカウント名を入力します。
- アカウントの説明を入力します。
- [作成して続行] をクリックします。
[ロールを選択] フィールドをクリックして、[Logging 管理者] を選択します。
[完了] をクリックして、サービス アカウントの作成を完了します。
キーファイルを作成し、ワークステーションにダウンロードします。
- サービス アカウントに対して [more_vertその他のオプション] をクリックし、[鍵の管理] を選択します。
- [鍵] ペインで、[鍵を追加] をクリックします。
- [新しい鍵を作成] をクリックします。
キーのタイプは、JSON を選択し、[Create] をクリックします。しばらくすると、ウィンドウに次のようなメッセージが表示されます。
-
Linux ワークステーションで、環境変数
GOOGLE_APPLICATION_CREDENTIALS
をキーファイルのパスに設定して、アプリケーションに認証情報を指定します。次に例を示します。export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/FILE_NAME.json"
この環境変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定してください。
ソースのクローンを作成する
このクイックスタート用に Cloud Shell を構成するには、次の手順を行います。
GitHub プロジェクト
python-logging
のクローンを作成します。git clone https://github.com/googleapis/python-logging
ディレクトリ
samples/snippets
には、このクイックスタートで使用する 2 つのスクリプトが含まれています。snippets.py
ログのエントリを管理します。export.py
ログのエクスポートを管理します。
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 バケットを作成するには、次の操作を行います。
-
Google Cloud コンソールの [バケット] ページに移動します。
検索バーを使用してこのページを見つける場合は、小見出しが [Cloud Storage] である結果を選択します。
- [バケットを作成] をクリックします。
- バケットの名前を入力します。
- [ロケーション タイプ] で [リージョン] を選択し、最もレイテンシが低いバケットのロケーションを選択します。
- [デフォルトのストレージ クラス] で [スタンダード] を選択します。
- [アクセス制御] で [きめ細かい管理] を選択します。
- [保護ツール] で [なし] を選択し、[作成] をクリックします。
このクイックスタートでは、バケット名が 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 バケットの権限を更新するには:
シンクの書き込み ID を特定します。
-
Google Cloud コンソールで、[ログルーター] ページに移動します。
検索バーを使用してこのページを検索する場合は、小見出しが [Logging] である結果を選択します。
シンクのサマリー テーブルが表示されます。
テーブルでシンクを見つけて、[more_vertメニュー] を選択し、[シンクの詳細を表示する] を選択します。
書き込み ID をクリップボードにコピーします。
-
-
Google Cloud コンソールの [バケット] ページに移動します。
検索バーを使用してこのページを見つける場合は、小見出しが [Cloud Storage] である結果を選択します。
詳細ビューを開くには、バケットの名前をクリックします。
[権限] を選択し、[アクセス権を付与] をクリックします。
書き込み ID を [新しいプリンシパル] ボックスに貼り付けます。書き込み ID アドレスから
serviceAccount:
接頭辞を削除します。[ロール] を
Storage Object Creator
に設定し、[保存] をクリックします。
詳細については、エクスポート先の権限を設定するをご覧ください。
シンクを検証する
シンクとエクスポート先が正しく構成されていることを確認する手順は、次のとおりです。
新しいログエントリをログ
my-log
に書き込みます。python snippets.py my-log write
Cloud Storage バケットの内容を表示します。
-
Google Cloud コンソールの [バケット] ページに移動します。
検索バーを使用してこのページを見つける場合は、小見出しが [Cloud Storage] である結果を選択します。
詳細ビューを開くには、バケットの名前をクリックします。詳細ビューには、データが含まれているフォルダが一覧表示されます。バケットにデータがない場合は、次のメッセージが表示されます。
There are no live objects in this bucket.
遅れて到着するログエントリで説明されているように、最初のエントリがエクスポート先に表示されるまで、または構成エラーが通知されるまでに 2 ~ 3 時間かかることがあります。
バケットでデータが受信されると、詳細ビューには次のような結果が表示されます。
各フォルダ内のデータは、ラベル付けされた一連のフォルダに整理されます。最上位のフォルダはログ名で、その後に年、月、日の各フォルダが続きます。シンクによってエクスポートされたデータを表示するには、フォルダ名
my-log
をクリックします。その後にjson
で終わるファイルにたどり着くまで、年、月、日のサブフォルダをクリックします。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 アカウントに課金されないようにするには、次の手順を行います。
(省略可)作成したログエントリを削除します。ログエントリを削除しないと、そのエントリは期限切れになり、削除されます。割り当てと上限をご覧ください。
ログ
my-log
内のすべてのログエントリを削除するには、次のコマンドを実行します。python snippets.py my-log delete
Google Cloud プロジェクトを削除するか、クイックスタート リソースを削除します。
Google Cloud プロジェクトを削除するには、Google Cloud コンソールの [プロジェクト情報] ペインでプロジェクト設定に移動し、[シャットダウン] をクリックします。
クイックスタート リソースを削除するには:
次のコマンドを実行してシンクを削除します。
python export.py delete mysink
Cloud Storage バケットを削除します。Google Cloud コンソールに移動し、[ストレージ] > [バケット] をクリックします。バケット名の横にあるチェックボックスをオンにして、[削除] をクリックします。
次のステップ
- アプリケーションからログの読み取り、書き込み、構成を行う方法について、Cloud Logging API で確認する。
- ログ エクスプローラの詳細については、ログ エクスプローラを使用してログを表示するをご覧ください。
- サポートされている宛先にログデータを転送する方法について、ルーティングとストレージの概要で確認する。
- VM インスタンスからログエントリを収集する方法については、Ops エージェントの概要をご覧ください。
- 監査とコンプライアンスについては、Cloud Audit Logs の概要 をご覧ください。