StackDriverとGCPのloggingを利用してアラートを通知する

## 概要
GCPのLoggingから任意のサービスの実行を検知し通知する仕組みを作ります。
今回は任意のDataflowJobの実行を検知し、Slackに通知します。

## 参考
[Dataflowのチュートリアル](https://cloud.google.com/dataflow/docs/quickstarts)
[GCPのlogging](https://cloud.google.com/logging/docs/logs-based-metrics/)
[loggingの高度なフィルタ](https://cloud.google.com/logging/docs/view/advanced-filters?hl=ja)
[StackDriverのWorkspaceを作成](https://cloud.google.com/monitoring/workspaces/)
[StackDriverのアラート設定](https://cloud.google.com/monitoring/alerts/)

## 詳細
まずは適当にDataflowのログを流すために[Dataflowのチュートリアル](https://cloud.google.com/dataflow/docs/quickstarts)を参考にJobを作成していきます。

#### 1. DataflowJobの作成
GCPから[Dataflow](https://console.cloud.google.com/dataflow)に接続し、初回のチュートリアル又は[Dataflowのチュートリアル](https://cloud.google.com/dataflow/docs/quickstarts)を参考にJobを作成します。

#### 2. 収集するログの定義
Dataflow又は任意のログを流し、[Loggingのログベースの指標](https://console.cloud.google.com/logs/metrics)で収集したいログを定義していきます。 
指標エディタはカウンタタイプを選択して以下のようなデフォルトの設定にします。
<img width="403" alt="スクリーンショット 2018-10-29 17.39.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/308125/a4dfd03e-b8bd-a305-c9cb-47768db2451d.png">
カウンタタイプは検知したログを単純にカウントするタイプで、通知などの機能を利用するにはカウンタタイプである必要があります。

次に検知するログの定義を書いていきます。下図のように検索窓のドロップダウンから**高度なフィルタに変換**を選択して検索クエリを入力していきます。<img width="998" alt="スクリーンショット 2018-10-29 17.45.27.png" src="https://qiita-image-store.s3.amazonaws.com/0/308125/7b37fb0f-7c20-be96-b7a7-4f565e5eab07.png">

今回取得したいDataflowのログはDataflowの任意のJob作成のため検索クエリは以下のようにしました。

```
resource.type="dataflow_step"
protoPayload.methodName="dataflow.jobs.create"
protoPayload.request.job_name="dataflow-intro"
```
高度なフィルタに関してはその他正規表現などサポートしているので、[こちら](https://cloud.google.com/logging/docs/view/advanced-filters?hl=ja)を参考ください。

ログベースの指標を定義すれば下図のように表示されます。
<img width="1392" alt="スクリーンショット 2018-10-29 17.55.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/308125/2ed01ddf-bb1f-29fc-7cff-cfc09214e929.png">

※ [ラベル](https://cloud.google.com/logging/docs/logs-based-metrics/labels)についての説明は省きます。

#### 3. 通知の設定
初めての方は[StackDriverのWorkspaceを作成](https://cloud.google.com/monitoring/workspaces/)してください。
StackDriverでログベースの指標からの通知設定をする前に[Slack通知の設定](https://app.google.stackdriver.com/settings/accounts/notifications/slack/)をしてください。
準備が整いましたら、先程作成したログベースの指標の三点ボタンから**指標に基づいて通知を作成する**を選択してください。

StackDriverに遷移した後は取得ログに対しての通知設定をします。
設定に関しては下図のように設定をします。閾値を設定するカウンタの値は一秒あたりの値になるため閾値は0.01などで設定しています。
<img width="725" alt="スクリーンショット 2018-10-29 18.15.05.png" src="https://qiita-image-store.s3.amazonaws.com/0/308125/96df6c24-0a60-acd9-2a47-33befec8aad5.png">

設定をした後は**Save Confition**を押し残りの設定を下図のように適当にしてください。
<img width="537" alt="スクリーンショット 2018-10-29 18.29.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/308125/76448850-63ea-408f-eed0-1eafb776a9e1.png">

Notificationの部分に先程連携したSlackが表示されなければ再度、**指標に基づいて通知を作成する**からやり直してください。
Documentationの部分には通知時に表示したい文字列などを記述してください。

上記の設定が終われば **Save Policy**を押してください。

設定が終わればもう一度DataflowのJobを流し確認してください。CloudShellで実行した方はhistory残っている実行ログから実行することをオススメします。

<img width="480" alt="スクリーンショット 2018-10-29 18.35.32.png" src="https://qiita-image-store.s3.amazonaws.com/0/308125/ae13a294-d8f0-a856-b7dc-a36363123d8f.png">

## 感想
CloudWatchLogsを捨てて積極的にLogging+StackDriver使っていきたい