Grafanaで死活監視画面を作ってみた


# ～ある日のお昼前～
社員A「あれ、プロジェクターの電源が入らない……」

インフラマネージャー「これはダメですね。買い替えです」

インフラ部長「高いなぁ……。せっかくいいの買うなら死活監視とか映しておきたいよね」

社員X「！！！」

# はじめに
死活監視をわかりやすく表示しておくにはどうしたらいいのでしょうか？

- 監視対象の選定は？
- 表示画面の設定方法は？
- 見やすくするにはどうしたらいいのか？

今回はGrafanaでサービスの死活監視をモニタリングするための画面を作成しました。

:::note warn
注意
死活監視のアラート設定ができていない場合はそちらを真っ先に作りましょう！！！
:::


# 監視画面作成の背景と課題
- 故障したプロジェクターがインフラグループの頭上にあったことから始まった物語。
- すでに死活監視のアラート設定は稼働していたけれど、可視化もしてみたかった。
- 既存の死活監視はアラート通知用で表示形式はグラフであり、スクロールをしなければすべての対象を確認できなかった。


# 監視対象の選定
## 基本方針
本記事で構築するGrafanaの監視画面では、管理者権限を持ち、自分たちで対応できるサービスに限定しました。

## なぜ管理者権限の有無を重視したのか？
管理者権限がないサービスの場合、障害が発生した際にユーザー側で取れる対策は限定的です。
ホスティング事業者による復旧作業を待つ、あるいは提供されているコントロールパネル上の限られた操作を行うことしかできません。

このような状況では、監視システムで異常を検知しても、『見ているだけ』の状態に陥りがちです。

![kaisya_komaru_man.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/3fd8873f-a946-414a-8c09-acb3f032502d.png)

:::note warn
注意
費用対効果を度外視すれば他サービスへの緊急移行といった選択肢も理論上は存在しますが、本記事では一般的な運用における現実的な対応を前提とします。
:::

## 監視対象としたプラットフォーム
- **自社のオンプレミスサーバー上のサービス**

これらはハードウェアからOS、ミドルウェア、アプリケーションに至るまで、すべてのレイヤーにおいて自社で管理・運用しているため、柔軟な障害対応が可能です。
<br>

- **AWSなどクラウドサーバー（管理者権限保有が前提）**

OSレベルのログやリソースメトリクスにアクセスでき、復旧手段も豊富です。

ただし、クラウドプロバイダー側の大規模障害には対応できないので、切り分けが必要です。

:::note warn
マルチリージョン/マルチAZ構成は有効ですが、コストやBCPの観点から別途検討が必要です。
:::

### 監視対象から除外したプラットフォーム
Xserverに代表されるような共用レンタルサーバー環境ではサーバー管理者権限が提供されず、障害発生時の対応はホスティング事業者頼みになります。

ユーザー側で可能な操作は、提供されるコントロールパネル上の機能やアプリケーションレイヤーの修正に限定され、サーバー自体の再起動やOSレベルでの調査は行えません。

そのため、監視によって得られる情報が、直接的な改善のための対応に結びつきにくいと判断しました。



## 選定方針の組織的要因
インフラの構築・運用・監視業務と社内ヘルプデスク業務を同一グループが兼任しているため、実効性のある対応が可能な範囲に監視を集中させなければアラートに振り回されると判断しました。

運用・監視の専任担当者を配置されている体制であれば、監視対象の範囲を拡大できるでしょう。

## 監視画面の構築
ダッシュボードの設定を変更したら、**Save**を忘れずに！

- ダッシュボードの場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/ed5ed73b-3ae1-4efb-9b1e-8757bddbd449.png)


- editパネルの場合
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/78d823fb-e5c9-4935-b86c-0a577e2161f9.png)


### **textパネル**

監視対象のサービス名を表示させました。
上下左右の中心に表示したいのですが、なかなかうまくいかず苦労しました。

少しだけ独学で勉強したときの記憶をあさりながら設定しました。
もっといい表現があれば教えていただきたいです……。
````
<div style="display: flex; justify-content: center; align-items: center; height: 100%;"> #上下左右の中心に表示する
    <h1 style="font-size: 5vw; margin: 0;">example</h1> #文字サイズを調整する
<div>
````
文字のサイズ設定は**vw**を使用し、文字数に合わせて調整しています。
実際に表示することになるモニターを見ながら設定してちょうどよいサイズを探ってください。

<br>
この右に監視対象のステータスを表示します。

![スクリーンショット 2025-05-15 133651.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/d24b229e-1d46-432e-b4e5-1c116360051d.png)

### Statパネルのカスタマイズ

死活監視の状況を表示する部分です。
アラート用サービス監視ではグラフ表示でしたが、今回の投影用サービス監視画面ではテキスト表示としました。
以下で各項目の設定を解説します。

### 使用したクエリ
`probe_success{instance=~"https://example.com"}`

- **probe_success**
メトリクス名。
Prometheusで使用しているexporterによって生成され、プローブの成功/失敗を示します。
値は成功なら**1**を、失敗なら**0**を返します。

- **instance**
ラベル名。
監視対象のインスタンスやエンドポイントを識別するために使われます。

- **=~**
正規表現マッチ演算子。
今回は結果として=とも同じ結果になりますが、条件を付けて設定することも可能です。

- "https://example.com"
監視対象のエンドポイント。
正規表現として対象を指定しています。

### 閾値と値のマッピング
上記のクエリでは、サービスがアップしていれば`1`、ダウンしていると`0`を返すようになっています。
これだと直感的にわかりずらいので、表示を変更します。
この際に使用するのが、**Value mappings**の項目です。

1. 「Edit value mappings」を選択する。
2. 変更前の値と変更後に表示したい文字を入力する。
3. 表示する色を変更できるので設定します。

今回はOKを<font color="Green">**緑**</font>、NGを<font color="Red">**赤**</font>で表示させるようにしました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/ab6227f1-32d3-4de7-ba97-92b6932008d4.png)

### タイトルと説明
**Panel optios**の部分を編集します。

![スクリーンショット 2025-05-15 134651.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/3c5c6dcf-d4af-4d45-b0ac-a84ac9912f58.png)


- **Title**

サービス名などを入れたくなりますが、**空欄**にします。


- **Description**

Title欄を空白にしているので、こちらに監視対象を記載しました。
ほかの人が確認したときにわかりやすいように、表示内容の説明も忘れずに。

### 表示内容の設定と色の反転

ここまでの設定だと以下のような表示になっています。

![スクリーンショット 2025-05-15 105030.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/e22767e9-34d8-41ba-acdf-b395e23ceb38.png)

このパネルを並べたときの様子を見てみましょう。

![grafana_2505_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/1b13aa24-13b2-4769-b4e4-ee4862aae7db.png)

:boom:**インパクト**:boom:、足りなくないですか？
遠くから見たときにもっとわかりやすくなるようにしましょう。

**Stat stayles**の部分を編集します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/1e80e6e4-466c-4875-a0d0-74a4528ad3ce.png)


- **Text mode**

**Value**に設定します。
Titleを設定していると同時に表示されます。
今回は監視対象はTextパネルで大きく表示するので不要になります。
<br>

- **Color mode**

**Background**に設定します。
背景が緑、文字が白に反転します。
<br>

- **Graph mode**

**None**に設定します。
今回はリアルタイムの情報のみ確認したいので、グラフは表示しません。
<br>
色だけで判別できるようになり、遠目にもわかりやすくなりました。

![grafana_2505_002.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/6840e86c-1c00-4b5b-a67e-6f06c8b89c81.png)

NGが出るとこんな感じ！
一気に心拍数が上がります:heartbeat:

![grafana_2505_003.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3624932/439511c0-84fd-412b-832b-0d940ba907fb.png)


# まとめ
死活監視をモニタリング用画面を作成いたしました。
ふと気になったとき簡単に見られて安心できるものがあると、日ごろの負荷が下がることを実感しています。

監視対象は全部を見たくなりますが、できる範囲内で設定することも大事です。

パネルの配置や表示については監視対象の数によって最適解が異なります。
ご自身の管理するサービスの数に合わせて調整が必要になります。

最後に、**設定の保存は超重要！**
（この記事を書いている隣りで1時間分の作業を消してしまった人が……）


# 終わりに
監視画面の表示場所の決定までは、紆余曲折ありました！
当初プロジェクター案は、接続がネックになりあえなく断念。
上司が推した短焦点プロジェクターも、既存プロジェクターとの兼ね合いで見送りに。

壁面・天井吊りモニターはSOCっぽくて魅力的でしたが、費用面でNG。
結局、普段使わないPCモニターに表示することに。
通路沿いに設置したことで人の目に触れるようにはなったのでOK！

最初の計画とは違う形になるのはよくあること！