【サービス監視してますか？】5分で構築できるオシャレお手軽監視ツール「Uptime Kuma」

# 読み飛ばしてください
おはようございます、しなもんです。

みなさんは、自分が運営するサービスが止まってしまったことはありますか？
**私はあります。**

https://qiita.com/CinnamonSea2073/items/4ea9700ea92c3c6ba858

なんてこった。

この時は奇跡的に停止から5分で対応に回れたので良かったですが、
**もしあの時すぐに気づいていなければ...**
と思うと冷や汗が止まりません。

でももう大丈夫。そう、**監視ツールがあるからね！**

# 監視ツールとは

サービスを構成している各種システムや、サーバー自体のインフラを定期的にチェックしてくれるツールのことです。

もしサービスに何らかの異常が見られた場合は通知が発生したり自動的にお知らせが飛ぶようにできるので、早期復旧に大いに役立ちます。

:::note info
**モニタリングツールとは何が違うの？**
モニタリングツールはどちらかというと[new Relic](https://newrelic.com/jp)のような「インフラのログや稼働量を記録してそのデータを役立てる」というもので、
**通知を送ることが仕事かどうか**という点で違いがあると思います。

（※正直、明確な定義はバラバラです。例として、[Oracle](https://docs.oracle.com/ja-jp/iaas/Content/cloud-adoption-framework/monitoring-and-observability.htm)は完全に真逆に定義しています。）
:::

# 早速構築してみよう
Dockerイメージを建てるだけなので一瞬でできます。多分。
## 前提環境
* Docker及びDocker-composeが動く環境

## ファイルを用意する
ファイルを用意します。
```
workspace/
└─docker-compose.yml
```
適当なフォルダにdocker-composeファイルを設置すればOKです。

```yml:docker-compose.yml
version: '3.3'

services:
  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: uptime-kuma
    volumes:
      - ./uptime-kuma-data:/app/data
    ports:
      - 3001:3001  # <Host Port>:<Container Port>
    restart: always
    networks:
      - default

networks:
  default:
```
ポート番号は適宜変えると良いでしょう。

## コンテナを起動する
```bash
$ docker-compose up
```
で起動できます。

:::note info 
VScodeで、Dockerの拡張機能を導入した状態で、ファイル上で右クリックすると
そのままcompose upができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/882e0730-831f-f0e3-0a97-1e5c3e5ca6df.png)

:::

## 初期設定

まずは設定画面にアクセスします。ブラウザを使います。

http://localhost:3001
※ポート番号は設定したものに適宜変えてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/c16d97e6-a66b-4b5b-ae2d-a4ba6a23fd79.png)

Adminアカウントを作るためのフォームが現れるので、適当に入力して作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/e5f84832-d230-60b7-9f64-3328361b37dc.png)

作成するとダッシュボードに入れます。

## 監視するものを追加する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/c87f3a51-b1ca-b486-3fb9-d23ec106229a.png)

左上の「監視の追加」をクリックします。

フォームが現れるので適当に入力します。
正直めちゃくちゃ細かくいじれます。
色々触ってみてください。

## せっかくなので通知先も設定する【Discord】
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/c878c150-e336-090f-4981-1da6f9da2302.png)

「通知設定」から通知先を指定できます。
「通知タイプ」を開くと分かる通り、めちゃくちゃ種類がありますが、
今回はDiscordに通知させてみようと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/851946c8-1d76-8bde-71a9-d0436ac40968.png)

Discordの送信させたいチャンネルの設定から、ウェブフックURLを取得します。

「新しいウェブフック」を押すと増えるので、URLをコピーします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/62488a9b-b261-c483-c5f4-965794e89a8b.png)

この項目に貼り付け、残りの項目を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/600a7566-f2f1-6e8e-6f62-8c4948e24883.png)

ちなみに動作するとこんな感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/b2eabfd6-01f2-8597-487e-aa16e69f3f0b.png)

## ステータスページについて

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/d5521d03-f198-11e2-47cc-887d4c56a81b.png)


ダッシュボードとは別に、ステータスページというものがあります。

管理人が監視を管理するためのダッシュボードと異なり、
どちらかというと**サービスを使うユーザーがステータスを確認するための公開用ページ**です。

やってることはこのサイトと同じです。

https://www.apple.com/jp/support/systemstatus/

**このページはAdminアカウントが無くても閲覧でき、リバースプロキシで外部に公開できます。**

切り替えは右上からできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/4f1f489b-c158-1ad5-4a9e-ec0122a5716f.png)

「新しいステータスページ」を追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/1aa76340-f710-361e-56bd-098a33af3341.png)

適当に入力します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/f65104c2-70b4-5b22-0134-61047182d6f1.png)

この「監視の追加」の項目に、先ほど作った監視サービスを追加します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/39766ab3-a69f-779b-5e08-5813d8fe1a00.png)

左下の保存を押すと、ステータスページが完成します。

:::note info
外部にステータスページを公開するにはCloudflaredを使った簡単な方法があるので、~~後日別記事にまとめます。~~
**まとめました。↓**
:::

https://qiita.com/CinnamonSea2073/items/31d238e32916586f60e1

## タグでちょっとオシャレに

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/281ae455-6bef-e674-0d93-62b5d13cb77e.png)

監視するものにはタグを付けられます。
[私の本番環境](https://service-status.cinnamon.works/status/cinnamon-works)では、マシン名やジャンル、リージョンの場所などをまとめています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/65a59010-db0a-9b78-9f98-36d59e754ae5.png)

ちょっとオシャレになります。

## メンテナンスについて

メンテナンスするときはちゃんと設定することで、期間をユーザーに知らせることができたり、無駄に通知が飛んでいかないようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/c8f2491f-8301-ed94-32af-d1f24d5e72cf.png)

右上から設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/2639f887-198c-2d25-6c77-0dc2a85dbbd1.png)

メンテナンスを追加し、フォームを適当に入力します。
**タイムゾーンをAsia/Tokyoにするのを忘れないで下さい。**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1927831/f129f66a-49cd-fe24-08fc-ac3d161ccac8.png)

時間になるとちゃんとメンテナンスが発動します。

# 最後に
Uptime Kumaをサクッと構築してみました。
非常に簡単に監視ツールを起動でき、ブラウザから操作できるので、とても助かっています。

皆さんも監視ツールを使って素敵なエンジニアライフを。