サーバーの状態やサービスを監視するツールは数多くありますが、Dockerを利用し軽量なサーバー監視システムを構築できる小・中規模ウェブサイト向けの無料オープンソース監視ツール「Checkmate」が公開されています。

Checkmate - Open source infrastructure monitoring

https://checkmate.so/



bluewave-labs/Checkmate: Checkmate is an open-source, self-hosted tool designed to track and monitor server hardware, uptime, response times, and incidents in real-time with beautiful visualizations.

https://github.com/bluewave-labs/checkmate

bluewave-labs/capture: An open source hardware monitoring agent for Checkmate

https://github.com/bluewave-labs/capture

◆Checkmateの概要

・Uptime監視

HTTP・HTTPS・Ping・Docker・Port・Game・gRPC・WebSocketの稼働状況を監視し、エラーが発生した場合に通知します。



Gameの監視ではホストサーバーと「Minecraft」などのゲーム名を指定することで、ゲームサーバーの正確な死活監視が可能です。



・レスポンスタイム計測

グラフ表示することで、時間帯ごとのレスポンスタイムの変化を把握可能。



・ページスピード計測と評価

Lighthouseを使用してページの表示にかかる時間を計測したり、CLSやLCPなどホームページに関する評価値を記録することで施策前後の評価が可能。



・サーバーの状態監視

CPU・メモリ・ディスク・ネットワークの使用量を監視し、閾値を超えたりエラーが発生した場合には通知を行います。



・通知方法

Email・Slack・Discord・Webhook・PagerDuty・Matrixが利用できます。



・ステータスページ

監視対象のサービスからリストを作成し、稼働状況を一目で把握できるステータスページが作成可能です。



◆Checkmateの成り立ちと方向性

ソーシャル系ニュースサイトのHacker Newsにおいて、作者によるサーバー監視システムに必要な機能に関する議論を行いコミュニティから意見を集め、設計と機能実装に反映しつつ開発を進めています。他の監視ツールとの差別化として、簡単に設置できることや必要な情報をまとめることを方針としています。

◆Checkmateの導入方法

事前に用意が必要なものは以下の通りです。

・サーバー:Checkmateをセルフホストするサーバー。

・ドメイン名:SSL証明書を取得するためのドメイン名。

・Docker:Checkmateのコンテナを動作させるためのコンテナ実行環境。

・Nginx Proxy Manager:Checkmateを公開するためのリバースプロキシ。Let's Encryptを利用してSSL・TLS証明書を取得し、HTTPSで安全にアクセスできるようにする。

・コンテナ共有用ネットワーク:CheckmateとNginx Proxy Managerのコンテナを同じネットワークで動作させるためのネットワーク。

今回はGoogle CloudのVMインスタンス上のUbuntuでDockerとNginx Proxy Managerが利用できる環境に構築します。作業フォルダに移動し、docker-compose.yamlをダウンロード。


curl -L -o docker-compose.yaml \
https://raw.githubusercontent.com/bluewave-labs/checkmate/develop/docker/dist-mono/docker-compose.yaml


docker-compose.yamlを編集します。


services:
server:
image: ghcr.io/bluewave-labs/checkmate-backend-mono:latest
pull_policy: always
restart: always
ports:
- "52345:52345"
environment:
- UPTIME_APP_API_BASE_URL=https://【ドメイン名】:52345/api/v1
- UPTIME_APP_CLIENT_HOST=https://【ドメイン名】
- DB_CONNECTION_STRING=mongodb://mongodb:27017/uptime_db
- CLIENT_HOST=https://【ドメイン名】
# JWT_SECRETを設定してください。
# openssl rand -hex 32
- JWT_SECRET=【上記コマンドの出力結果】
depends_on:
- mongodb
networks:
- default
- proxy_shared

mongodb:
image: ghcr.io/bluewave-labs/checkmate-mongo:latest
restart: always
command: ["mongod", "--quiet", "--bind_ip_all"]
volumes:
- ./mongo/data:/data/db
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')", "--quiet"]
interval: 5s
timeout: 30s
start_period: 0s
start_interval: 1s
retries: 30
networks:
- default

networks:
proxy_shared:
external: true


Checkmateのコンテナを起動。


docker compose up -d


リバースプロキシの設定を行うため、ブラウザでNginx Proxy Managerの管理画面にアクセスし「Hosts」から「Proxy Hosts」をクリックし、「Add Proxy Host」をクリック。



「Domain Names」にドメイン名を入力、「Scheme」は「http」を選択、「Forward Hostname/IP」に「server」、「Forward Port」に「52345」を入力、「Block Common Exploits」のトグルを「オン」、「Websockets Support」のトグルを「オン」にして「Save」をクリック。



タブで「SSL」を選択し、「SSL Certificate」は「Request a new Certificate」を選択、「Force SSL」のトグルを「オン」にして「Save」をクリック。



設定したドメイン名にアクセスするとCheckmateのログイン画面が表示されるので、「Register here」をクリック。



「First name」「Last name」に任意の名前を入力、「Email」にメールアドレスを入力、「Password」・「Confirm password」にパスワードを入力し「Register」をクリック。



登録が完了すると管理画面が表示されます。



◆Captureの導入方法

CPU使用率やメモリ使用量などのサーバー内部の情報を得るために、captureを監視対象のサーバーに導入します。以下のコマンドを実行してコンテナを起動します。


# API_SECRETを設定してください。
# openssl rand -hex 32

docker run -d \
-v /etc/os-release:/etc/os-release:ro \
-p 59232:59232 \
-e API_SECRET=【上記コマンドの出力結果】 \
ghcr.io/bluewave-labs/capture:latest


Checkmateの管理画面から「Infrastructure」をクリックし、「URL」に「http://【監視するサーバーのIPアドレス】:59232/api/v1/metrics」を、「Authorization secret」にはAPI_SECRETに設定した値を入力、「Display name」に任意の名前を入力。



設定フォーム最下部にある「Save」をクリックして設定を保存します。



一覧にデータが表示されれば成功です。



カスタマイズを必要とせず提供されている機能だけで十分なケースでは、このようなシンプルな監視システムで導入が簡単な方が便利です。「サーバーを簡単にまとめて監視したい」、「利用しているサービスの稼働状況を一目で把握したい」という要望を1つのツールで実現できます。