Ubuntu Weekly Recipe

第707回シンプルでおしゃれなモニタリングツールUptime Kuma

Uptime Kumaは登場して一年足らずな新進気鋭のモニタリングツールです。ただし登場して間もないとは思えないほど完成度は高く、そして「とりあえずこれだけやっときたい」という用途にちょうどよい塩梅の機能をもっています。今回はこのUptime Kumaをインストールしてみましょう。さぁ、🐻の時間だ!

シンプルとかそんな甘言に騙されない(・(ェ)・)

いわゆる「モニタリングツール」と呼ばれるものは、おおよそ次のような機能のすべて、もしくはいずれかが備わっています。

  • データの取得
  • データの収集
  • データの表示
  • 監視対象の管理
  • 状態監視
  • アラートの通知

たとえばPrometheusはExporterが各ノードのデータの取得を行い、Prometheus本体がそれを収集してデータベースに保存します。データの表示はPrmetheus本体でも行えるものの、より高機能で見やすい表示にするためにGrafanaと合わせて使うことがよく行われます。また、アラートの通知はAlertManagerが担当します。

他のモニタリングツールも大なり小なりその設定方法は異なるものの、基本的な部分はおおよそ同じです。変わるとしたら、エージェントをノードにインストールするPush型か、本体側で監視対象を管理するPull型かの違いぐらいでしょうか。

いずれにせよ、監視方法や監視対象は環境によって大きく変わるため、どんなツールも拡張性が高くなるよう作られています。そして自由度が高くなればなるほど、⁠何がベストプラクティスか」⁠要するにどれをやればいいの?」という部分で初心者は躓くわけです。

今回紹介するUptime Kumaは、Webサービスを軽く死活監視できれば良いという人向けのとてもわかりやすいサービスです。一度サービスを立ち上げたら、Web UIで2、3項目入力するだけで、HTTPSの疎通確認、証明書のチェック、レスポンスの判定、外部からのPushの受信監視などを実現できます。もちろんSlackやMattermost、メール、LINEなど各種メッセージングサービスへの通知も対応しています。

言い方を変えると、実際にモニタリングできるのはほぼ上記だけです。そもそもユーザー管理機能もないためログインできるのは一人だけとなります。明示的なログアウトの機能もありません。現時点では、個人でちょっとしたサーバー類を監視しておきたい、という程度の利用が最もマッチしていると思います。

ちなみに「Kuma」はその名の通り「熊」のことです。花咲く森の道で出会うあれです。

Uptime Kumaのデプロイ🧸

さて、Uptime Kumaのデプロイですが、実はサービスの構成そのものもシンプルでDockerインスタンスひとつで済みます。データ類はDockerボリュームに保存し、データベースはSQLite3を使っているため、立ち上がるのはNode.jsプロセスだけです。

結果的に、そのデプロイ方法は第704回の高機能でMarkdownや作図もサポートするWiki.jsとほとんど同じになります。

まず必要に応じて、次の手順でLXDインスタンスを立ち上げておくと良いでしょう。もちろんLXDを使わないのであれば、ここは丸々スキップしてかまいません。

$ lxc launch ubuntu:20.04 kuma
$ lxc exec kuma -- sh -c 'apt update && apt full-upgrade -y && apt autoremove -y'
$ lxc config set kuma security.privileged true
$ lxc config set kuma security.nesting true
$ lxc restart kuma
$ lxc shell kuma
# sudo -i -u ubuntu

システムにはDockerとdocker-composeをインストールしておきましょう。Ubuntuリポジトリのパッケージでも良いですし、Docker本家のバイナリでもかまいません。

$ sudo apt install -y docker.io docker-compose

Uptime KumaはDocker Hubにイメージが構築されていますし、docker-compose.ymlもGitHubのリポジトリに用意されています。今回はdocker-composeを使うことにしましょう。

$ mkdir ~/kuma && cd $_
$ wget https://raw.githubusercontent.com/louislam/uptime-kuma/master/docker/docker-compose.yml
$ sudo docker-compose up -d

これで準備は完了です。http://サーバーのIPアドレス:3001/にアクセスすれば、初回ログイン画面が表示されます。

Uptime Kumaのセットアップ🍯

ここからは実際の画面を表示しながら、設定手順について解説していくことにします。と言っても、設定方法自体はとてもわかりやすいため、悩むことはまずないでしょう。

図1 初回アクセス時はユーザー名とパスワードを設定する
図1

ちなみに設定画面から二要素認証もサポートしています。

図2 ホーム画面は「ダッシュボード」を表示している
図2
図3 ⁠設定」を選択すると、各種設定が行える
図3

設定自体はほとんど項目がありません。デプロイしたときの状態のままでも良いぐらいです。前述の通りユーザーアカウントを管理する機能もありません。

図4 監視の追加画面
図4

では、さっそく適当なサーバーをモニタリングしてみましょう。画面左上の「監視の追加」をクリックすると上図のような画面に遷移します。

「監視タイプ」によって設定できる項目が異なります。バージョン1.12.1の時点では、次の選択肢が用意されています。

HTTP(s)
指定したURLの疎通確認、証明書の有効期間、各メソッドのレスポンスを確認する。
TCP Port
特定のホスト名、ポートへのTCP pingを送信する。
Ping
特定のホスト名へのpingを送信する。
HTTP(s) - キーワード
HTTP(s)の機能に加えて、レスポンスに指定したキーワードが含まれるかどうかを確認する。
DNS
指定したDNSサーバーで各レコードの名前解決できるかどうかを確認する。
Push
設定済みのURLに定期的に誰かが叩きに来ているかどうかを確認する。
Steam Game Server
任意のSteam Game Serverのステータスを確認する。

HTTP(s)の「レスポンス」は空の場合、何も確認しません。Web APIなどで特定のレスポンスがきちんと返ってくるか確認したい場合などに設定してください。

指定できるキーワードはひとつだけで、複数のキーワード指定には対応していません。Pull Requestは出ているので、そのうち対応されると思われます。

図5 監視対象の表示
図5

上記は単にHTTPSをチェックしているだけです。作ったばかりであるためグラフには何も表示されませんが、数分待つと次のようにきちんと表示されるようになります。

図6 30分近く経過した例
図6

多様なアラート先のサポート🐻‍❄️

Uptime Kumaはアラート機能にも対応しています。アラート先は充実していて15個以上のサービス・プロトコルに対応しています。SMTPやSlack、Mattermostあたりは定番でしょう。また、Webhookもサポートしているため、大抵のサービスはなんとかなります。

Python製の通知ライブラリであるAppriseにも対応しており、これらを組み合わせればさらに多くの(50個以上の)サービスに対応できます。ただしAppriseを使うためには、サービスごとのURLの記述方法を学習する必要があります。

図7 Telegramへの通知の設定UI
図7

Slackにログインした状態でSlackアプリの作成ページに移動します。あとは画面の指示に従ってアプリを作成し、⁠Incoming Webhooks」を有効化し、⁠Add New Webhook to Workspace」で特定のワークスペース向けのWebhook URLを取得します。

図8 通知用のSlackアプリの作成
図8
図9 Incomming Webhooksの有効化
図9

あとは取得したURLをUptime Kumaの「Webhook URL」に入力するだけです。

図10 適当に設定を変更して、意図的に「Down」状態を発生させる
図10
図11 Slackの指定したチャンネルにDownとUpの通知が届く
図11

ダッシュボードにはターゲットごとの詳細なモニタリングステータスが表示されますが、それとは別により簡易的な「ステータスページ」を作ることも可能です。まずは画面右上の「ステータスページ」を選択すると、空のステータスが画面が表示されます。

図12 ⁠ステータスページ編集」でステータスページの編集を開始する
図12

ステータスページは「カテゴリ名」を入力し、そこに監視対象を追加していきます。最後に保存すると、次のような画面が構築されます。

図13 サービスが稼働しているかどうかを一覧で見たいだけならステータスページのほうが見やすい
図13

ログイン時のホーム画面をダッシュボードにするかステータスページhttps://example.com/statusにするかは、設定画面から変更可能です。

なお、ステータスページはログインしなくても表示できます。ラベル等に公開できない情報が含まれないようにしましょう。⁠設定」画面から、Google等の検索エンジンのインデックス対象外とする設定も可能ではありますが、このあたりはあくまで気休め程度だと思っておくべきです。

言い換えると、詳細な情報は表示せず、サービスが動いているかどうかだけを任意の利用者に伝えたい場合に、ステータスページを利用しましょう。

証明書やリバースプロキシとバックアップ🐾

Uptime KumaのDockerイメージは環境変数によってサーバー証明書の設定を行えます。またリバースプロキシーを用意して、証明書はそちらで用意する方法もあるでしょう。

また、設定画面からは「Backup」で設定情報一式をJSONファイルにエクスポートできます。ただしJSONファイルにはトークン情報等が暗号化されずに保存されてしまう点には注意してください。docker-compose実施時は、カレントディレクトリにuptime-kumaディレクトリが作られます。このディレクトリを丸々バックアップしてしまうのもひとつの手でしょう。

このように、Uptime Kumaはできることが限られてはいるものの、⁠最低限ほしかったもの」は一通りそろっていますし、最低限であるが故に設定がとても簡単です。自前の監視システムはほしいし、社内等の限定ネットワークへのアクセスも必要だけど、いろいろ考えるのが面倒って人におすすめのツールです。

おすすめ記事

記事・ニュース一覧