このチュートリアルでは、ロギング サーバーではなく Cloud Logging を使用して、アプリケーション固有のロギングを行う方法について説明します。デフォルトでは、Cloud Logging は、システムおよび多くの一般的なアプリケーションからのログを集計します。このチュートリアルでは、カスタム ワークフローや、一般的なアプリケーションのリストに表示されないアプリケーションからログを取得して Cloud Logging に送る方法についても説明します。
ビジュアル エフェクト(VFX)のレンダリング パイプラインやビルドシステムなど、多くのコンピューティング ワークロードでは、存続時間の短いワーカーが一般的です。このチュートリアルでは、VFX ワークロードに焦点を当て、スタンドアロンの VFX レンダラ V-Ray を例として使用します。典型的な使用例の場合、VM インスタンスは、キューイング システムによりオンデマンドで作成され、ジョブ(1 つ以上のフレームをレンダリングするなど)が割り当てられ、ジョブ完了後に終了します。レンダリング プロセスだけでなく、ファイル変換や、レンダリングされたフレームを共通ストレージにローカルにコピーする操作といった、インスタンスによって実行されるレンダリング前またはレンダリング後のジョブからもログを取得する必要があります。
目標
- インスタンスを作成し、そのインスタンスに Cloud Logging エージェントをインストールする。
- Cloud Logging エージェントにログを送信するよう、カスタム アプリケーションまたはワークフローを構成する。
- Python クライアント ライブラリを使用して、直接 Logging にログを送信する。
- Logging でログを表示、フィルタリング、検索する。
- Logging から、長期的にアクセス可能なストレージにログをエクスポートする。
費用
このチュートリアルでは、課金対象である次の Google Cloud コンポーネントを使用します。
- Compute Engine
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。新しい Google Cloud ユーザーは無料トライアルをご利用いただけます。
このチュートリアルでの Logging の使用に伴う費用については、Logging の料金をご覧ください。
始める前に
-
Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。
-
Cloud プロジェクトに対して課金が有効になっていることを確認します。プロジェクトに対して課金が有効になっていることを確認する方法を学習する。
- Compute Engine API を有効にします。
gcloud beta
コマンド コンポーネントをインストールします。gcloud components install beta
デフォルトのプロジェクトを設定します。これにより、コマンドを実行するたびに
--project
フラグを指定する必要がなくなります。gcloud config set project PROJECT_ID
Compute Engine インスタンスの作成
Cloud Logging エージェントは、Compute Engine 仮想マシン(VM)インスタンスと Elastic Compute Cloud(Amazon EC2)VM インスタンスで動作します。エージェントとサポートされる VM インスタンスの詳細については、プロダクト ドキュメントの Logging エージェントをご覧ください。
このチュートリアルでは、デフォルトの VM タイプを使用してインスタンスを作成できます。しかし、本番環境では、アプリケーションに必要なコンピューティング パワーを決定し、それに応じて VM を選択する必要があります。
- Cloud Console で、[VM インスタンス] ページに移動します。
- [インスタンスを作成] をクリックします。
- [新しいインスタンスの作成] ページで、インスタンスのプロパティを入力します。 詳細構成オプションで、[管理、セキュリティ、ディスク、ネットワーク、単一テナンシー] セクションを展開します。
- [作成] をクリックしてインスタンスを作成します。
新しいインスタンスを作成するには、少し時間がかかります。このチュートリアルの VM インスタンスの名前は sd-tutorial
です。
Compute Engine インスタンスの構成
スーパーユーザー権限を付与されたアカウントを使用して VM インスタンスを作成した後、次の手順を実行します。
SSH を使用して
sd-tutorial
インスタンスに接続します。gcloud compute ssh sd-tutorial
Cloud Logging エージェントをインストールします。手順の詳細については、Cloud Logging エージェントをインストールするをご覧ください。
pip
をダウンロードして、インストールします。sudo yum install python-pip
Cloud Logging Python ライブラリをダウンロードしてインストールします。
pip install --user --upgrade google-cloud-logging
/etc/google-fluentd/config.d/vray.conf
に、次の内容で V-Ray 用の Cloud Logging エージェント構成ファイルを作成します。<source> @type tail read_from_head true format /^(\[(?<time>.*?)\])?((?<severity> ?(debug|info|warning|error|critical)): )?(?<message>.*)$/ time_format %Y/%b/%d|%H:%M:%S # Log file names must be of the format SH.SEQ.SHOT.ROLE.log. # For example: myfilm.fba.0050.render.log path /home/*/vray/logs/*.log pos_file /var/lib/google-fluentd/pos/vray.pos tag vray.* </source> <filter vray.**> @type record_transformer <record> # Parse the log file name and add additional key:value records # to aid in filtering and searching logs in Logging. # Assumes you are following the convention in this tutorial. show ${tag_parts[-5]} seq ${tag_parts[-4]} shot ${tag_parts[-3]} role ${tag_parts[-2]} tag ${tag_suffix[1]} # Strip off the "vray." prefix. </record> </filter>
fluentd
の構成の詳細については、構成ファイルの構文をご覧ください。Cloud Logging エージェントの構成を再度読み込みます。
sudo service google-fluentd reload
本番環境の場合、パイプラインがオンデマンドで VM を開始できるよう、この構成済みの VM からカスタム VM イメージを作成できます。
VFX についての特別な考慮事項
レンダリング ソフトウェア パッケージごとに、独自のログ出力が生成されます。このチュートリアルでは V-Ray スタンドアロン レンダラを使用していますが、stdout/stderr
に出力する他のレンダラまたはアプリケーションにもチュートリアルの内容を適応できます。このチュートリアルでは、一般化された fluentd
構成を使用し、キューイング システムがレンダラの出力を検索に適した特定の形式でファイル名にリダイレクトすることを想定しています。単一の VM で複数のジョブを実行する場合は、ファイル名が確実に一意となるようにする必要があります。
Logging 内のログファイルに名前を付ける
Logging ログの命名規則を定義するときは、スタジオで使用されているおすすめの方法や命名規則に倣います。Logging ではリソース全体からの検索が可能であるため、一貫した命名規則を使用することにより、同じまたは類似のデータでタグ付けされた異なるリソースから生成されたログを検索できるようになります。このチュートリアルにおいてキュー マネージャーは、レンダリング ワーカー プロセスを開始する前に環境変数に次の値を設定します。これらの値は、ログにタグを付けるため、また、一意のファイル名を生成するために使用されます。
フィールド名 | 環境変数 | 値 |
表示(プロジェクト)名 | SHOW |
myfilm |
シーケンス名 | SEQ |
fba |
ショット番号 | SHOT |
0050 |
役割 | ROLE |
render |
この例では、これらの値に基づいて、ビジュアル エフェクト ワークフロー特有の命名規則を構成します。
<SHOW>.<SEQ>.<SHOT>.<ROLE>.log
たとえば、ショット fba0050
のレンダリング ログには、次のようにタグが付けられます。
myfilm.fba.0050.render.log
このチュートリアルでは、キュー マネージャーがこの規則に従ってログファイル名を設定すると想定していますが、スタジオのさまざまなニーズに合わせて変更するのは簡単です。
Logging の構成を手動でテストする
レンダラもキューイング マネージャーも使用せずに構成を確認するには、サンプル ログエントリをテストログにコピーします。ホーム ディレクトリから、次のコマンドを入力します。
mkdir -p vray/logs/
export SHOW='testshow' SEQ='testseq' SHOT='testshot' ROLE='testrole'
echo "debug: Test log line at `date` from ${HOSTNAME}" >> vray/logs/${SHOW}.${SEQ}.${SHOT}.${ROLE}.log
まもなくこの行がログビューアに表示されるはずです。
ログ配信を確認する
Cloud Console で、[ログビューア] ページに移動します。
[ログ] メニューの下に、作成したログ名のタグが付けられたエントリが表示されます(この場合は
testshow.testseq.testshot.testrole
)。このログを表示して、出力を確認します。
また、
[project-id]
と[log-name]
を適切に置き換えることにより、gcloud
ツールのベータ版のコマンドを使用してログを読むこともできます。# List all logs. gcloud beta logging logs list # Read the contents of a specific log. gcloud beta logging read projects/[project-id]/logs/[log-name]
gcloud
コマンドライン ツールを使用したロギングの詳細については、ログエントリを読み取るのドキュメントをご覧ください。
レンダリング プロセスから Logging へのログ出力
正しく構成され、検証された場合、次のような V-Ray スタンドアロン コマンドラインを使用することで Logging にログを送信できます。この例の場合、コマンドライン フラグにより、ファイルへのリダイレクト用に出力が最適化された V-Ray プロセスが開始されます。キューイング マネージャーは、SCENE_FILE
を、該当するローカル ファイルパスに置き換えるものと想定されています。また、ログファイルに名前を付けるのセクションで説明されているように、ログの名前を生成するために使用される 4 つの環境変数(SHOW
、SEQ
、SHOT
、ROLE
)も設定する必要があります。
vray \
-display=0 \
-showProgress=0 \
-progressUseCR=0 \
-progressUseColor=0 \
-sceneFile SCENE_FILE > vray/logs/${SHOW}.${SEQ}.${SHOT}.${ROLE}.log 2>&1
Cloud Logging API への直接ログ出力
ほとんどの VFX パイプラインでは、アセットの準備、公開、データ転送、レンダリング、トランスコードなど、プログラムによるタスクを実行するために、いずれかのスクリプト言語が使用されます。クライアント ライブラリを使用して、これらのタスクの出力を Logging のログに記録できます。このチュートリアルでは、VFX 業界で広く使用されている Python を使用します。
オンプレミスからも、クラウドベースのワークステーションからも Logging にログを送信できます。Logging とは Python API を介して通信するため、このような方法でログを書き込む場合、Logging エージェントはインストールしません。
Python ライブラリを使用して Cloud Logging にログを書き込む
Python スクリプトを使用して Cloud Logging にログを出力するには、まず次の手順を実行する必要があります。
- ログメタデータを構築します。
- 重大度を指定します。
- ログに記録するリソースのタイプを決定します。
スクリプトは次の処理を実行します。
- 適切な命名規則が使用されることを確認します。
- ログデータをアセンブルします。
- Google プロジェクト リソースレベルでログを書き込みます。
オンプレミスのワークステーションまたはサーバーからログを記録する場合は、Logging へのロギングの前に認証が必要です。クラウド インスタンスからログを記録する場合、認証はすでに完了しています。
モジュールをパイプライン内の任意の Python スクリプトにインポートして、オンプレミス アーティスト ワークステーションまたはクラウド インスタンスで実行できます。
import logToStackdriver as lts
lts.write( 'This is the text to log.', show='myfilm', seq='slb', shot='0050', role='render' )
デフォルトでは、すべてのログが、Google Cloud Console の [ロギング] > [ログ] > [Google プロジェクト] にある「project」リソースに書き込まれます。
ログのエクスポート
ログの保持期間を超えてログを保持するには、ログをエクスポートする必要があります。
低額で長期的なストレージを利用するには、ログを Compute Engine バケットにエクスポートします。ビッグデータ分析を実行するには、BigQuery データセットにエクスポートします。いずれの場合も、まずシンクと呼ばれるオブジェクトを作成します。シンクを使用すると、エクスポートするログエントリを選択するフィルタを作成できます。また、宛先として Compute Engine または BigQuery を選択することもできます。シンクを作成するとすぐに、指定されたログが指定された宛先にエクスポートされます。ログビューアでログをエクスポートするには、Cloud Logging API を使用するか、gcloud logging
コマンドライン ツールを直接使用します。
BigQuery にエクスポート
BigQuery に格納されたログは、SQL セマンティクスを使用して照会できます。サードパーティ分析ツールの多くは、これらのログをネイティブにサポートしています。手順は次のとおりです。
フィルタを使用してシンクを作成し、ログをそのテーブルにエクスポートします。次のコマンドラインでは、
[PROJECT_ID]
により Google Cloud プロジェクトが参照されていることに注意してください。gcloud beta logging sinks create render-errors-bq \ bigquery.googleapis.com/projects/[PROJECT_ID]/datasets/[DATASET] \ --log-filter "jsonPayload.SHOW=myfilm AND jsonPayload.SHOT=fba AND severity>=WARNING"
BigQuery データセットに追加するサービス アカウント名を示すメッセージが表示されます。ウェブ UI を使用するには、データセット名の横にあるプルダウンをクリックし、[共有データセット] をクリックします。
Logging に送信されるもののうち、このフィルタに一致する次のログは、少し遅れてデータセットに送信されます。詳細については、シンクの仕組みのドキュメントを参照してください。
Cloud Storage にエクスポート
ログをファイルに保存するには、それらを Cloud Storage バケットにエクスポートします。Cloud Storage バケットについては、アクセス頻度の低いファイル用の低価格のストレージ クラスを選択するか、または無料使用枠を利用できます。Cloud Storage は、HTTP により、または他の多くの Google Cloud プロダクトとの直接統合によって簡単にアクセスできます。
次の手順は、Cloud Storage にエクスポートする方法を示します。
- Cloud Storage バケットを作成します。
Logging で、フィルタを使用してシンクを作成し、それらのログを Cloud Storage にエクスポートします。
gcloud beta logging sinks create render-errors-gcs \ storage.googleapis.com/my-gcs-bucket \ --log-filter "jsonPayload.SHOW=myfilm AND jsonPayload.SHOT=fba AND severity>=WARNING"
Logging に送信されるもののうち、このフィルタに一致する次のログは、少し遅れてバケット中のファイルに送信されます。詳細については、シンクの仕組みのドキュメントを参照してください。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud Platform アカウントに課金されないようにする手順は次のとおりです。
プロジェクトの削除
課金をなくす最も簡単な方法は、チュートリアル用に作成したプロジェクトを削除することです。
プロジェクトを削除するには:
- Cloud Console で [リソースの管理] ページに移動します。
- プロジェクト リストで、削除するプロジェクトを選択し、[削除] をクリックします。
- ダイアログでプロジェクト ID を入力し、[シャットダウン] をクリックしてプロジェクトを削除します。
Compute Engine インスタンスの削除
Compute Engine インスタンスを削除するには:
- Cloud Console で、[VM インスタンス] ページに移動します。
- 削除するインスタンスをクリックします。
- delete [削除] をクリックしてインスタンスを削除します。
Cloud Storage バケットの削除
Cloud Storage バケットを削除するには:
- Cloud Console で、[Cloud Storage ブラウザ] ページに移動します。
- 削除するバケットのチェックボックスをクリックします。
- [削除] delete をクリックして、バケットを削除します。
次のステップ
- Cloud Logging のドキュメントを確認する。
- Fluentd の詳細を確認する。
- Fluentd 構成ファイルの詳細を確認する。
- Cloud Logging の割り当てと上限について学習する。
- Google Cloud のその他の機能を試す。チュートリアルをご覧ください。