はじめに
Cloud Pub/Subメッセージを使用したアプリケーションを作成した際、アプリ側でエラーになっていないのにも関わらずPub/Subメッセージが滞留するという現象が発生したので、Cloud Monitoringを使用して、Pub/Subメッセージが一定時間ACK処理されていない場合にアラートを通知する方法を記述します。
前提条件
- GCPプロジェクトが作成済みであること
- プロジェクトのPub/Sub APIが有効化されていること
- Cloud SDKがインストールされている、または、Cloud Shellが使用できること
- アカウントにPub/Subトピック・サブスクリプションの作成権限とCloud Monitoringアラートの作成権限が付与されていること
設定方法
Pub/Subトピックとサブスクリプションの作成
Pub/Subトピックとサブスクリプションをgcloudコマンドで作成します。
# トピック作成
$ gcloud pubsub topics create my-topic
# サブスクリプションの作成
$ gcloud pubsub subscriptions create my-sub --topic=my-topic
アラートポリシーの作成
Cloud MonitoringはGCPコンソール画面から作成します。
Menu > Monitoring > アラート でアラートポリシー画面を開き、[CREATE POLICY]ボタンを押下します。
[ADD CONDITION]ボタンを押下し、条件設定画面で下記の通りに各項目を設定します。(その他の項目はデフォルト値です。)
設定項目 | 設定値 |
---|---|
Title | Pub/Subメッセージが一定時間ACK処理されてません |
Resource Type | Cloud Pub/Sub Subscription |
Metric | Oldest unacked message age |
Filter | subscription_id="my-sub" |
Period | 1 minute |
Condition triggers if | Any time violates |
Condition | is above |
Threshold | 60000 ms |
For | most recent value |
通知先のNotification Channelsを選択し、アラート名とドキュメントを下記の通りに設定します。
設定項目 | 設定値 |
---|---|
アラート名 | Pub/Subメッセージが一定時間ACK処理されてません |
ドキュメント | Pub/Subメッセージが一定時間ACK処理されてません |
動作確認
gcloudコマンドでメッセージを登録します。
gcloud pubsub topics publish my-topic --message="hello"
1分程度待つと、Notification Channelsで設定した通知先にアラートが通知されます。
クリーンアップ
GCPコンソール画面でアラートポリシーを削除します。
ポリシーの詳細画面で[DELETE]ボタンを押下します。
gcloudコマンドでPub/Subリソースを削除します。
# メッセージの受信
$ gcloud pubsub subscriptions pull my-sub --auto-ack
# サブスクリプションの削除
$ gcloud pubsub subscriptions delete my-sub
# トピックの削除
$ gcloud pubsub topics delete my-topic