LoginSignup
1
0

More than 1 year has passed since last update.

OSSにファイルをアップロードしてLogServiceで通知する

Posted at

この記事は Alibaba Cloud アドベントカレンダー2021 3日目の記事です。

とある案件で「OSSにファイルがアップロードされたことを通知してほしい」という依頼がありました。
そこでOSSのログ機能であるLogServiceを使ったという話です。


背景

OSSにはイベント通知機能があります。
OSSのドキュメント Event notification Overview
これはOSSで発生したイベント(ファイルのuploadとかdownloadとか)をMNSに通知する機能です。
便利な機能なのですが、MNSからは直接ユーザーへ通知ができません。
MNSからユーザーへのそれらしい通知を行うには、OSS→MNS→別のプロダクト(FunctionComputeやらECSやら)経由でユーザーに送信しないといけないです。
特に今回はメールで通知がほしいとのことだったので、少し面倒だなと感じました。

例えばこんな感じになります。(有償のチュートリアルです)
Labex - OSS File Download Triggers Email Sending

そこでもっとシンプルな方法として、OSSのログをLogServiceで検出して、LogServiceのアラート機能で通知することにしました。

概要

ファイルがOSSの特定ディレクトリにアップロードされたことをメールで通知する

ファイルの検出クエリ

OSSにファイルをアップロードしたさいに、ログから operation をキーとして検出する。

operationの値

  • PostObject ・・・Alibaba Cloudコンソールからの通常のファイルアップロード。これは検知する。
  • PutObject ・・・OSSブラウザなどのAPIからの通常のファイルアップロード。これは検知する。
  • UploadPart ・・・マルチアップロードパートで分割されたファイルアップロード。これは検知したくない。
  • CompleteUploadPart ・・・マルチアップロードパートが完了したファイルアップロード。これは検知する。

例えば、OSSの 2021-yoshimura バケットに test.jpeg ファイルをアップロードすると
image.png

OSSのログには以下のように operation : PostObject が記録されます
image.png

更に念の為に、OSSにファイルをアップロードしたさいに、ログから http_status をキーとして検出する。

http_statusの値

  • 204 ・・・ Alibaba Cloudコンソールからのファイルをアップロードした際のステータスコード
  • 200 ・・・ OSSブラウザなどのAPIからファイルをアップロードした際のステータスコード

例えば先程同様に、OSSの 2021-yoshimura バケットに test.jpeg ファイルをアップロードするとこんな感じです。
Alibaba Cloudコンソールからアップロードすると204
image.png

APIからアップロードすると200
image.png

ここまで分かれば、あとはLogServiceで検出クエリを以下のように作ります。

2021-yoshimura バケットのすべてのフォルダにアップロードした場合の検出クエリ

* AND bucket: 2021-yoshimura AND (operation:CompleteUploadPart OR PostObject) AND http_status: 204
* AND bucket: 2021-yoshimura AND (operation:CompleteUploadPart OR PutObject) AND http_status: 200

クエリの保存とアラート通知

先ほどのクエリを保存して、LogServiceのアラートルールを作ります。

image.png

アラート条件

  • Log Search 期間 ・・・過去15分
  • Log Search 頻度 ・・・15分に1度
  • Trigger 条件 ・・・ contains(http_status, '200') ※204は別途アラートルールを作成
  • 通知方法 ・・・メール

これでOSSにファイルがアップロードされると15分間隔で検知&通知してくれます。

ちなみにLogServiceのアラート機能は今年バージョンアップして、様々な機能が使えるようになりました。
image.png

画像の参考URL : The alerting feature of Log Service

カレンダーで休日を指定してアラートを停止したり、メール以外にもSMSや電話通知など様々な通知方法が使えたりでするので、興味ある方はそちらも見てみてください。

それでは、明日の4日目にパス。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0