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を使わないのであれば、ここは丸々スキップしてかまいません。
システムにはDockerとdocker-composeをインストールしておきましょう。Ubuntuリポジトリのパッケージでも良いですし、Docker本家のバイナリでもかまいません。
Uptime KumaはDocker
Hubにイメージが構築されていますし、docker-compose.yml
もGitHubのリポジトリに用意されています。今回はdocker-composeを使うことにしましょう。
これで準備は完了です。「http://サーバーのIPアドレス:3001/
」にアクセスすれば、初回ログイン画面が表示されます。
Uptime Kumaのセットアップ🍯
ここからは実際の画面を表示しながら、設定手順について解説していくことにします。と言っても、設定方法自体はとてもわかりやすいため、悩むことはまずないでしょう。
ちなみに設定画面から二要素認証もサポートしています。
設定自体はほとんど項目がありません。デプロイしたときの状態のままでも良いぐらいです。前述の通りユーザーアカウントを管理する機能もありません。
では、さっそく適当なサーバーをモニタリングしてみましょう。画面左上の「監視の追加」をクリックすると上図のような画面に遷移します。
「監視タイプ」によって設定できる項目が異なります。バージョン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は出ているので、そのうち対応されると思われます。
上記は単にHTTPSをチェックしているだけです。作ったばかりであるためグラフには何も表示されませんが、数分待つと次のようにきちんと表示されるようになります。
多様なアラート先のサポート🐻❄️
Uptime Kumaはアラート機能にも対応しています。アラート先は充実していて、15個以上のサービス・プロトコルに対応しています。SMTPやSlack、Mattermostあたりは定番でしょう。また、Webhookもサポートしているため、大抵のサービスはなんとかなります。
Python製の通知ライブラリであるAppriseにも対応しており、これらを組み合わせればさらに多くの(50個以上の)サービスに対応できます。ただしAppriseを使うためには、サービスごとのURLの記述方法を学習する必要があります。
Slackにログインした状態で「Slackアプリの作成」ページに移動します。あとは画面の指示に従ってアプリを作成し、「Incoming
Webhooks」を有効化し、「Add New Webhook to
Workspace」で特定のワークスペース向けのWebhook URLを取得します。
あとは取得したURLをUptime Kumaの「Webhook URL」に入力するだけです。
ダッシュボードにはターゲットごとの詳細なモニタリングステータスが表示されますが、それとは別により簡易的な「ステータスページ」を作ることも可能です。まずは画面右上の「ステータスページ」を選択すると、空のステータスが画面が表示されます。
ステータスページは「カテゴリ名」を入力し、そこに監視対象を追加していきます。最後に保存すると、次のような画面が構築されます。
ログイン時のホーム画面をダッシュボードにするかステータスページ(https://example.com/status
)にするかは、設定画面から変更可能です。
なお、ステータスページはログインしなくても表示できます。ラベル等に公開できない情報が含まれないようにしましょう。「設定」画面から、Google等の検索エンジンのインデックス対象外とする設定も可能ではありますが、このあたりはあくまで気休め程度だと思っておくべきです。
言い換えると、詳細な情報は表示せず、サービスが動いているかどうかだけを任意の利用者に伝えたい場合に、ステータスページを利用しましょう。
証明書やリバースプロキシとバックアップ🐾
Uptime KumaのDockerイメージは「環境変数によってサーバー証明書の設定」を行えます。またリバースプロキシーを用意して、証明書はそちらで用意する方法もあるでしょう。
また、設定画面からは「Backup」で設定情報一式をJSONファイルにエクスポートできます。ただしJSONファイルにはトークン情報等が暗号化されずに保存されてしまう点には注意してください。docker-compose実施時は、カレントディレクトリに「uptime-kuma
」ディレクトリが作られます。このディレクトリを丸々バックアップしてしまうのもひとつの手でしょう。
このように、Uptime
Kumaはできることが限られてはいるものの、「最低限ほしかったもの」は一通りそろっていますし、最低限であるが故に設定がとても簡単です。自前の監視システムはほしいし、社内等の限定ネットワークへのアクセスも必要だけど、いろいろ考えるのが面倒って人におすすめのツールです。