このクイックスタートでは、ログエントリの書き込み、読み取り、削除、エクスポートを行う Python プログラムを実行します。
始める前に
このクイックスタートを完了するには、課金が有効になっている Google Cloud プロジェクトが必要です。Google Cloud プロジェクトをまだ作成していない場合、または Cloud プロジェクトに対する課金を有効にしていない場合は、次の手順を行います。- Google アカウントにログインします。
Google アカウントをまだお持ちでない場合は、新しいアカウントを登録します。
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する。
このクイックスタートでは、Stackdriver Logging と Cloud Storage を使用します。これらのリソースを使用すると、費用が発生する可能性があります。このクイックスタートの終了後は、作成したリソースを削除するとそれ以上の請求が発生しなくなります。 詳細については、このページのクリーンアップをご覧ください。
ご利用にあたって
Cloud Shell 環境または一般的な Linux 環境を使用して、このクイックスタートを実行できます。
Cloud Shell
Cloud Shell には、あらかじめ Python バージョン 2.7 と 3.5 がインストールされています。他のソフトウェアのインストールや構成を行う必要はありません。
Cloud Shell を開き、Cloud プロジェクトの構成を確認します。
Cloud Console で、[Cloud Shell をアクティブにする] をクリックします。
Cloud Shell のウィンドウが開き、ウェルカム メッセージが表示されます。
ウェルカム メッセージは、構成された Cloud プロジェクト ID をエコーします。これが使用する Cloud プロジェクトでない場合は、
[PROJECT_ID]
を実際のプロジェクト ID に置き換えて、次のコマンドを実行します。gcloud config set project [PROJECT_ID]
Linux
Python をインストールして構成します。このクイックスタートでは、Python バージョン 2、3 のいずれも使用できます。詳しくは、Python 開発環境のセットアップをご覧ください。
Cloud プロジェクトの Identity and Access Management の権限を設定します。次の手順では、Cloud プロジェクトのサービス アカウントを作成し、ファイルを生成して Linux ワークステーションにダウンロードします。
Cloud Console で、[IAM と管理] > [サービス アカウント] に移動します。
クイックスタートの Cloud プロジェクトを選択し、[サービス アカウントを作成] をクリックします。
- アカウント名を入力します。
- アカウントの説明を入力します。
- [作成] をクリックします。
[サービス アカウントの権限(オプション)] ペインの [役割] で、プルダウン リストから [Logging 管理者] を選択します。[続行] をクリックします。
サービス アカウントへのアクセス権をユーザーに許可するオプションはスキップします。
キーファイルを作成し、ワークステーションにダウンロードします。
- [キーの作成(オプション)] ペインで、[キーを作成] をクリックします。
キーのタイプは、JSON を選択し、[Create] をクリックします。しばらくすると、ポップアップ ウィンドウに次のようなメッセージが表示されます。
サービス アカウントの作成を完了するには、[完了] をクリックします。
Linux ワークステーションで、環境変数
GOOGLE_APPLICATION_CREDENTIALS
をキーファイルのパスに設定して、アプリケーションに認証情報を指定します。例:export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/[FILE_NAME].json"
この環境変数は現在のシェル セッションにのみ適用されるため、新しいセッションを開く場合は、変数を再度設定してください。
ソースのクローンを作成する
GitHub プロジェクト python-logging
のクローンを作成します。
git clone https://github.com/googleapis/python-logging
ディレクトリ samples/snippets
には、このクイックスタートで使用する 2 つのプログラムが含まれています。
snippets.py
ログのエントリを管理します。export.py
ログのエクスポートを管理します。
プログラムのディレクトリに移動するには、次のコマンドを実行します。
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 でログエントリを表示するには、snippets.py
プログラムを list
オプションと実行します。
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-list
ログ内のすべてのログエントリを削除するには、snippets.py
プログラムを delete
オプションと実行します。
python snippets.py my-log delete
しばらくすると、コマンドが完了し、次の結果が表示されます。
Deleted all logging entries for my-log
。
ログをエクスポートする
Logging では、Cloud Storage バケット、BigQuery データセット、Pub/Sub にログエントリをエクスポートできます。エクスポートの詳細については、ログのエクスポートの概要をご覧ください。
このセクションでは、次の操作を行います。
- Cloud Storage バケットを作成し、データのエクスポート先として使用します。
- 新しいログエントリをエクスポート先にコピーするシンクを作成します。
- Cloud Storage バケットの権限を更新します。
- Logging にログエントリを書き込みます。
- 必要に応じて、Cloud Storage バケットの内容を確認します。
エクスポート先を作成する
このクイックスタートのエクスポート先は、Cloud Storage バケットです。Cloud Storage バケットを作成する手順は次のとおりです。
Cloud Console で、[Storage] > [ブラウザ] ページに移動します。
[バケットを作成] をクリックします。
バケットの名前を入力します。
[Regional] を選択し、[場所] で最も近い地理オプションを選択します。
[アクセス制御モデル] で [オブジェクト レベルとバケットレベルの権限を設定] を選択します。
その他の設定はデフォルト値のままにして、[作成] をクリックします。
このクイックスタートでは、バケット名が myloggingproject-1
の Cloud Storage を使用します。
シンクを作成する
シンクは、新しく到着したログエントリを Logging からエクスポート先にエクスポートするかどうかを決定するルールです。シンクには次の 3 つの属性があります。
- 名前
- エクスポート先
- フィルタ
新しく到着したログエントリがクエリ条件を満たしている場合、そのログエントリはエクスポート先にエクスポートされます。
export.py
プログラムは、Python クライアント ライブラリを使用して、シンクの作成、一覧表示、変更、削除を行います。 重要度が少なくとも INFO
であるすべてのログエントリを Cloud Storage バケット myloggingproject-1
にエクスポートするシンク mysink
を作成するには、次のコマンドを実行します。
python export.py create mysink myloggingproject-1 "severity>=INFO"
シンクを表示するには、export.py
プログラムを list
オプションと実行します。
python export.py list
結果は次のようになります。
mysink: severity>=INFO -> storage.googleapis.com/myloggingproject-1
エクスポート先の権限を更新する
export.py
プログラムでシンクを作成しても、Cloud Storage バケットの権限は変更されません。Cloud Storage バケットの権限の設定を変更して、シンクに書き込み権限を許可する必要があります。
Cloud Storage バケットの権限を更新するには:
シンクの書き込み ID を特定します。
[ログルーター] ページに移動します。
シンクのサマリー テーブルが表示されます。
表の各行には、メニュー more_vert が配置されています。シンクのメニューをクリックし、[シンクの詳細を表示] を選択します。
生成された [シンクの詳細] に、シンクの書き込み ID が表示されます。その ID をクリップボードにコピーします。
Cloud Console で、[Storage] > [ブラウザ] をクリックします。
詳細ビューを開くには、バケットの名前をクリックします。
[権限] を選択し、[メンバーを追加] をクリックします。
役割を
Storage Object Creator
に設定し、シンクの書き込み ID を入力します。
詳細については、エクスポート先の権限をご覧ください。
シンクを検証する
シンクとエクスポート先が正しく構成されていることを確認する手順は、次のとおりです。
新しいログエントリをログ
my-log
に書き込みます。python snippets.py my-log write
Cloud Storage バケットの内容を表示します。
Cloud Console で、[Storage] > [ブラウザ] をクリックします。
詳細ビューを開くには、バケットの名前をクリックします。詳細ビューには、データが含まれているフォルダが一覧表示されます。バケットにデータがない場合は、次のメッセージが表示されます。
There are no live objects in this bucket.
エクスポートしたログの可用性で説明しているように、最初のエントリがエクスポート先に表示されるまで、または構成エラーが通知されるまでに 2~3 時間かかることがあります。
バケットでデータが受信されると、詳細ビューには次のような結果が表示されます。
各フォルダ内のデータは、ラベル付けされた一連のフォルダに整理されます。最上位のフォルダはログ名で、その後に年、月、日の各フォルダが続きます。シンクによってエクスポートされたデータを表示するには、フォルダ名
my-logs
をクリックします。その後に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
Cloud プロジェクトを削除するか、クイックスタート リソースを削除します。
Cloud プロジェクトを削除するには、Cloud Console の [プロジェクト情報] ペインで [プロジェクト設定に移動] をクリックし、[シャットダウン] をクリックします。
クイックスタート リソースを削除するには:
次のコマンドを実行してシンクを削除します。
python export.py delete mysink
Cloud Storage バケットを削除します。Cloud Console に移動し、[Storage] > [ブラウザ] をクリックします。バケット名の横にあるチェックボックスをオンにして、[削除] をクリックします。
次のステップ
- サービス アカウント、アクセス スコープ、Identity and Access Management のロールの詳細については、サービス アカウントをご覧ください。
- ログ エクスプローラの詳細について、ログ エクスプローラで確認する。
- Cloud Storage、BigQuery、Pub/Sub にログエントリをエクスポートする方法について、ログのエクスポートの概要で確認する。
- Cloud Logging で VM インスタンスからログエントリを収集する方法について、Logging エージェントについてで確認する。
- 監査およびコンプライアンスのニーズについて、監査ログを参照する。
- アプリケーションからログの読み取り、書き込み、構成を行う方法については、Cloud Logging API をご覧ください。
- DevOps に関するリソースを読む。また、研究プログラムについて確認する。