G-gen の杉村です。Personalized Service Health は、Google Cloud の障害を特定、通知するサービスです。このサービスについて、徹底解説します。
Personalized Service Health とは
Personalized Service Health とは、Google Cloud(旧称 GCP)の障害を特定したり、通知したりするためのサービスです。このサービスの利用に、料金は発生しません。
ここでいう「Google Cloud の障害」とは、Google Cloud のグローバル単位、リージョン単位、ゾーン単位、サービス単位で、機能停止やパフォーマンス低下などが起きることを指します。一方で、Compute Engine VM や Cloud Run で稼働するアプリケーションの障害など、ユーザー側の実装における障害は、このサービスの対象ではありません。
Personalized Service Health が検知した障害は、以下の3つの方法で確認することができます。
- Service Health Dashboard(Web 画面)
- Service Health API
- Cloud Logging
また、障害情報は以下のような方法でメールや Slack に通知することができます。
- Cloud Logging にアラートポリシー(ログアラート)を設定し、通知チャンネル(メール、Slack 等)に通知する
- Service Health API からプログラムで定期的に情報を Pull して、任意の通知先に通知する
対応プロダクト
Personalized Service Health は、多くの Google Cloud プロダクトの障害情報に対応しています。
Compute Engine、Cloud SQL、AlloyDB for PostgreSQL、Firestore、BigQuery、App Engine、Cloud Run などほとんどの代表的なプロダクトに対応しています。詳細なリストは、以下のドキュメントをご参照ください。
インシデント
インシデントとは
Personalized Service Health からは、インシデントという単位で Google Cloud の障害情報を取得できます。インシデントは以下の情報を含んでいます。
名称 | 説明 |
---|---|
Event State | イベントの状況。Active または Closed |
Incident impact | イベントの影響箇所。Google Cloud プロダクト名やロケーションなど |
Personalized relevance | インシデントが自分の Google Cloud プロジェクトに影響があるかどうか |
Description | 何が起きているかの説明 |
Updates from Google Cloud | Google Cloud からの追加情報。定期的に追加される |
Symptoms | このイベントが引き起こす実害に関する説明 |
Workarounds | 回避策 |
Relevance(影響度)
イベントが持っている「Personalized relevance」という情報から、そのイベントが利用者の Google Cloud プロジェクトに影響があるかどうかを確認することができます。
影響度には以下の種類があります。
名称 | 訳語 (※1) | 説明 |
---|---|---|
Impacted | 影響あり | 影響があることが確定 (※2) |
Related | 関連あり | プロジェクトに関連があり、プロジェクトで使っているロケーションに影響している |
Partially Related | 部分的に関連 | プロジェクトで使っているプロダクトに関連あり。影響が出る可能性がある |
Not Impacted | 影響なし | プロジェクトに影響がない |
Unknown | 不明 | 影響の有無が不明である |
(※1) 訳語は筆者独自のものです
(※2) Compute Engine、Cloud SQL、Firestore、Cloud Bigtable など一部のプロダクトのみ判別可能
イベントが自分のプロジェクトに影響があることが明確であれば、影響度は「Impacted」になりますが、注釈でも示したとおり、この関連度が表示されるのは一部の対応プロダクトのみです。対応プロダクトは、以下の公式ドキュメントで十字のマークがついています。
有効化
Personalized Service Health はデフォルトではオフになっており、プロジェクトごとに有効化することができます。繰り返しになりますが、このサービスの利用に料金は発生しません。
有効化するには、Google Cloud コンソールの検索ボックスで「Service Health(日本語の場合は「サービスの状態」)」と検索し、遷移した先の画面で Service Health API を有効化するだけです。
組織配下のすべてのプロジェクトで有効化したい場合、コンソールは提供されていませんが、以下の公式ドキュメントで公開されているシェルスクリプトを使うことができます。
アラート通知
アラートポリシーの利用
障害発生時に E メールや Slack などに通知を発報したい場合、Cloud Monitoring のアラートポリシーを使うことができます。
イベントが発生すると、Personalized Service Health はログを Cloud Logging に出力するため、このログをアラートポリシーで検出することで、通知を発報することができます。アラートポリシーの通知先(通知チャンネル)は、E メールや Slack、Pub/Sub などのほか、PagerDuty などのサードパーティ、Webhook(HTTP エンドポイントを呼び出す)などに対応しています。
メール通知の例
以下は、メール通知の例です。
設定手順
ポリシーを作成
Google Cloud コンソールの Personalized Service Health の画面から、ボタン「アラート ポリシーを作成」を押下します。
テンプレートを選択
アラートポリシーのテンプレートが複数表示されますので、作成したいアラートに一番近いものを選択します。
なおアラートポリシーとは、Cloud Monitoring の設定オブジェクトであり、特定条件を満たすと E メールや Slack に通知を発報する仕組みのことです。
今回は「利用中のロケーション(リージョン)の障害」「利用中の Google Cloud サービスの障害」を検知したいため、最も近いであろうテンプレートを選択しました。
実際に通知したいのが、例えば「東京(asia-northeast1)リージョン」の「BigQuery 障害」だとすると、表示されているテンプレートの内容と異なっていますが、あとから編集可能です。また、テンプレートを2つ選択しているので、2つのアラートポリシーが作成されてしまいますが、ログのフィルタの構文だけを参考にして、片方がのちほど削除します。
また、通知チャンネル(E メールアドレスや Slack など、通知先設定)を選択します。以前に作成したことがなければ、このプルダウンをクリックすると表示されるメニューの中から「MANAGE NOTIFICATION CHANNELS」を押下することで、通知チャンネルを新規作成することができます。
アラートポリシーの編集
画面下部に、以下のような表示が現れます。「すべてのアラート ポリシーを表示」を押下すると、アラートポリシーの一覧画面へ遷移できます。
表示が消えてしまった場合は、「Cloud Monitoring > アラート > Policies」の部分にある、See all policies をクリックしてください。
以下のように、アラートポリシーが一覧表示されます。
Location alerts (us-central1)
という方をクリックして選択してみます。ポリシーの詳細が表示されます。ログクエリ構文を見ると、このアラートが、Cloud Logging のクエリ構文を使ってログをフィルタし、引っかかるログがあれば通知を発報する仕組みであることが分かります。
EDIT を押下すると、ポリシーの設定を編集できます。
Choose logs to include in the alert
の項までスクロールすると、ログクエリを編集できます。
今回は、対象のロケーションを「東京(asia-northeast1)リージョン」に書き換えてみます。また、テンプレートから作成されたもう1つのアラートポリシー Product alerts (Google Compute Engine)
のクエリ構文を一部、コピー&ペーストして、BigQuery と Cloud Storage に関する障害だけをフィルタするよう書き換えました。なお、サービス名は公式ドキュメントの Value for productName or impactedProducts
列の表記に従います。
resource.type = "servicehealth.googleapis.com/Event" AND labels."servicehealth.googleapis.com/new_event" = true AND jsonPayload.state = "ACTIVE" AND jsonPayload.@type = "type.googleapis.com/google.cloud.servicehealth.logging.v1.EventLog" AND jsonPayload.category = "INCIDENT" AND jsonPayload.impactedLocations =~ "asia-northeast1" AND ( jsonPayload.impactedProducts =~ "Google BigQuery" OR jsonPayload.impactedProducts =~ "Google Cloud Storage" )
PREVIEW LOGS
をクリックすると、構文をテストすることができます。過去にこのフィルタに該当するログが出力されたことがある場合に、そのログが表示されます。
またこの画面から、クエリ構文の他にも、件名、通知先、メール本文の体裁などをカスタマイズすることができます。
設定を保存したら、もう1つのアラートポリシー Product alerts (Google Compute Engine)
は不要なので、削除しましょう。
参考ドキュメント
メール通知の設定手順は、以下の公式ドキュメントをご参照ください。
また、Cloud Logging のクエリ構文は、以下の公式ドキュメントをご参照ください。
- 参考 : Logging のクエリ言語
Cloud Monitoring や Cloud Logging の詳細は、以下の記事をご参照ください。
杉村 勇馬 (記事一覧)
執行役員 CTO / クラウドソリューション部 部長
元警察官という経歴を持つ現 IT エンジニア。クラウド管理・運用やネットワークに知見。AWS 12資格、Google Cloud認定資格11資格。X (旧 Twitter) では Google Cloud や AWS のアップデート情報をつぶやいています。
Follow @y_sugi_it