Storage Transfer Service のログ出力を追加して、ファイル転送エラーをアラート通知してみた。

2022.02.25

こんにちは、みかみです。

AWS S3 や Azure Blob Storage などから Google Cloud Storage にファイル転送が可能な Storage Transfer Service ですが、Google Cloud コンソールの UI 操作で特に何も考えずに転送ジョブを作成してしまうと、Cloud Logging のログが出力されず、エラー監視ができない状況になってしまいます。。

データ移行などワンショットでの実行ならば問題ないと思いますが、デイリーなどで継続的に転送ジョブを実行する場合、毎回管理コンソールから実行結果を確認するのはちょっと。。

ということで。

やりたいこと

  • Storage Transfer Service のログを Cloud Logging に出力したい
  • Storage Transfer Service でエラーが発生した場合にメールで通知したい

前提

AWS S3 から Cloud Storage にファイル転送する Storage Transfer Service のジョブは作成済みです。

また、作業するために必要な Storage Transfer Service や Cloud Logging、Cloud Monitoring の権限は付与されているものとします。

loggingConfig を追加

はじめに、まだ Storage Transfer Service のログが出力されていないことを確認しておきます。

Storage Transfer Service のジョブを実行した後、Cloud Logging のログエクスプローラから、クエリ欄に storage_transfer_job と入力して「クエリを実行」しました。

ヒットする結果はありません。。

では、transferJobs.patch API で、先ほど実行したファイル転送ジョブに loggingConfig の設定を追加します。

API Explorer を使用して、以下の API リクエストを実行しました。

{
  "projectId": "cm-da-mikami-yuki-258308",
  "transferJob": {
    "loggingConfig": {
       "logActions": ["FIND", "DELETE", "COPY"],
       "logActionStates": ["SUCCEEDED", "FAILED"],
    },
  },
  "updateTransferJobFieldMask": "loggingConfig"
}

logActions で出力対象のアクション、logActionStates で出力対象のステータスを指定できるので、例えばコピーに失敗した場合のみログに出力するなど、自由に指定することが可能です。

200 OK のレスポンスが確認できたので、もう一度 Storage Transfer Service のジョブを実行した後、ログエクスプローラからログが出力されるようになったか確認してみます。

期待通り、ログが出力されるようになったことが確認できました。 ジョブは正常実行されたものの転送対象のファイルがなかったため、actionFIND のログしか出力されませんでした。

転送対象のファイルを転送元の S3 バケットに追加して、再度実行してみると

COPY のログも出力されていることが確認できました。

アラートを作成

以下のログベースアラートを設定して、Storage Transfer Service の特定のジョブでエラーが発生した場合に、メールで通知してみます。

なお、こちらのログベースアラートは、2022/02/25 現在、まだプレビューの機能なので、ご利用の際にはご留意ください。

まずは Cloud Monitoring のアラート画面から、通知チャンネルを作成しておきます。

今回はメールで通知しますが、通知先には Slack や Cloud Pub/Sub などを指定することも可能です。

Cloud Logging ログエクスプローラで、以下をクエリ実行し、通知対象のエラーログだけがヒットすることを確認します。

resource.type="storage_transfer_job" resource.labels.job_id="transferJobs/15221824054792012051" severity>=ERROR

期待通りエラーログのみクエリされることが確認できたので、「アラートを作成」リンクからアラート通知を設定します。

「Alert Name」に任意の名前を入力し、「ドキュメント」欄に通知メッセージをマークダウン で記載します。

そのまま進み、④の「Who Should be notified?」パートで先ほど作成した通知チャンネルを指定したら「SAVE」。

Cloud Monitoring コンソール「アラート」画面から、ログベースのアラートが追加されたことが確認できました。

本当にメール通知されるか、転送ジョブのエラーを発生させて確認してみます。

ファイル転送ジョブがエラーになったことを確認して、メールをみてみると

アラートメールが受信できるようになりました!

まとめ(所感)

Storage Transfer Service ジョブ作成時に LoggingConfig を追加しておけば済む話でしたが、無事にログ出力を後から追加することもできました。

また、Storage Transfer Service では転送結果を Cloud Pub/Sub に通知することも可能なので、Cloud Functions などと組み合わせて、転送が正常終了したら後続処理を開始、エラーの場合は Slack 通知する等、処理の幅が広がるのではないかと思います。

参考