見出し画像

BIからのクエリエラーのリアルタイム監視作ってみた

こんにちは。Shintaro Ishikawaです。
今日はEmbedダッシュボードの異常検知についてお話していこうと思います。

この記事で述べることまとめ

1. ユーザーからの問い合わせで異常に気づくのは三流以下
1. BigQueryの監査ログが優秀すぎるので異常を即時検知しよう

なぜ監視が必要か?

LookerはBigQueryに発行するクエリをモデリングするだけという立場上、Looker内ではエラーはcontent validatorという機能で検知できても、いざBigQueryにクエリを発行するとBigQueryからエラーを返されてしまうということが多々あります。
リリース前のテストを入念に設計しもれなく行った自負があったとしても異常事態というのは起こる前提で対策をしておく必要があります。

政治家のように「想定外でした」で済ませたくなる気持ちもわかりますが、きっちりいざという時の対策も必要という前提のもと、具体的に行っている一つの監視の事例を紹介します。

異常の検知はリアルタイム性にこだわる

アラートを構築するという点ではリアルタイム性が非常に重要です。もっともワーストなシナリオは「これおかしくないですか?」と顧客から指摘をうけることです。異常検知はリアルタイムに、理想は発生前に事前に検知することを前提に組む必要があります。そんな中構築した異常検知アプリケーションのアーキテクチャは以下のようなものです。
BigQueryの監査ログの中でLookerから発行されたクエリでエラーを返しているLogのみpub/subを経由してCloud Functionにpushしslackに通知します。

スクリーンショット 2021-09-25 10.44.59

ログのシンクを作成する

下記のフィルター条件に合致したログを検知するとPub/Subのトピックにpublishするシンクを作成します。

resource.type="bigquery_resource"
severity="ERROR"
protoPayload.methodName="jobservice.jobcompleted"
protoPayload.serviceData.jobCompletedEvent.job.jobConfiguration.labels.looker-context-history_id:*
protoPayload.serviceData.jobCompletedEvent.job.jobStatus.error.message !~ "User requested cancellation"

Cloud Function でslack通知を行う

Pub/SubのトピックへのpublishをトリガーにCloud Functionを起動します。Cloud Functionの中でやる処理としては

1. LookerAPIを叩いて対象のクエリが本番環境か開発環境か判定する
2. 本番環境だった場合特定のslackチャンネルにエラーメッセージを送信

のようなものです。実際のslackチャンネルメッセージは下記のようなメッセージにしています。

スクリーンショット 2021-09-25 10.46.40

まとめ

Google製品をフル活用して、Lookerの本番環境から発行されたクエリがBigQuery側でエラーとなった場合即時通知を行う仕組みを構築しました。
他にも様々な監視を構築しているので随時紹介していきます。

この記事が気に入ったらサポートをしてみませんか?