監視タイプ

B-Beacon は11種類の監視方式(Web外形監視・サーバー内部エージェント・データベース・Heartbeat・ネットワーク)をサポートしています。それぞれの特徴と設定方法を説明します。

1. HTTP(S) モニター

指定した URL に HTTP リクエストを送信し、レスポンスのステータスコードと応答時間を監視します。Web サイトや API の死活・性能監視に最適です。

設定項目

項目 説明 例
URL 監視対象の URL https://example.com/health
HTTP メソッド GET / POST / HEAD GET
期待ステータスコード 正常とみなすステータスコード(未指定時は 200) 200
キーワード レスポンス本文に含まれるべき文字列(省略可) "status":"ok"
Basic 認証 BASIC 認証が必要な場合のユーザー名・パスワード(省略可) admin / secret
JSON Path 検証 JSON レスポンスの特定キーの値を比較検証(ドット記法対応) Path: status / 期待値: ok
応答時間警告閾値 この応答時間(ms)を超過した場合に「パフォーマンス低下」として警告(省略可) 2000 ms
タイムアウト 応答待ちの最大秒数 10秒
おすすめ(Web 組み込みヘルスチェック API 方式):
データベースや Redis のポートを外部インターネットに開放することなく、アプリケーション内に /api/health エンドポイントを設置して内部疎通(SELECT 1 や PING)を確認し、B-Beacon の HTTP モニターで監視するのが最も安全なベストプラクティスです。Laravel, Next.js, Express, FastAPI, Go などの主要フレームワークに対応しています。

2. SSL 証明書モニター

SSL/TLS 証明書の有効期限を監視し、期限切れによる接続エラーを未然に防ぎます。

設定項目

項目 説明 例
ホスト 証明書を確認するドメイン example.com
ポート SSL ポート(通常 443) 443
警告(残り日数) 証明書の有効期限がこの日数を切ると警告 30日
重大(残り日数) 証明書の有効期限がこの日数を切ると重大障害として通知 7日

3. TCP モニター

指定したホストとポートに TCP 接続を試行し、ポートの疎通を確認します。Web 以外のサーバーや独自プロトコルの監視に使用します。

設定項目

項目 説明 例
ホスト 監視対象のホスト名または IP アドレス api.example.com
ポート 接続先ポート番号 8080
タイムアウト 接続待ちの最大秒数 10秒

4. DNS モニター

ドメインの名前解決を監視し、DNS レコードの消失や意図しない変更を検知します。

設定項目

項目 説明 例
ホスト名 解決するドメイン名 example.com
レコードタイプ A, AAAA, CNAME, MX, TXT, NS A
期待値 名前解決結果がこの値と一致するかチェック(省略可) 93.184.216.34

5. データベース モニター

MySQL, MariaDB, PostgreSQL, SQL Server に直接接続して死活とパフォーマンスを監視します。

設定項目

項目 説明 デフォルト
ドライバー MySQL / MariaDB / PostgreSQL / SQL Server MySQL
ホスト / ポート 接続先ホスト名・ポート MySQL: 3306, Pg: 5432, SqlServer: 1433
ユーザー名 / パスワード 接続認証情報 -
データベース名 接続先データベース(任意) -
コネクション警告閾値 同時接続数が上限(max_connections)の何%を超えたら警告するか 80%
コネクション重大閾値 同時接続数が上限の何%を超えたら重大障害とするか 95%
レプリケーション遅延 レプリカ/スレーブの同期遅延(秒)が閾値を超えた場合に警告(有効化時) 許容遅延: 60秒
セキュリティの推奨事項:
データベースには監視専用ユーザーを作成し、最小限の権限(MySQL なら USAGE 権限のみ)を付与し、B-Beacon の IP アドレスのみファイアウォール(セキュリティグループ)で許可することを推奨します。

6. Redis モニター

Redis サーバーに接続して PING 応答とメモリ使用状況を監視します。

設定項目

項目 説明 デフォルト
ホスト / ポート Redis サーバーのホスト名・ポート localhost / 6379
パスワード / DB 番号 認証パスワード(任意)・データベース番号 0
メモリ警告閾値 使用メモリが上限(maxmemory)の何%を超えたら警告するか 80%
メモリ重大閾値 使用メモリが上限の何%を超えたら重大障害とするか 95%

7. Heartbeat(Push型)モニター

外部からのポート開放が一切不要な Push 型監視です。Cron ジョブ、夜間バックアップ、ディスク容量監視などから B-Beacon の専用 URL へ定期的に HTTP リクエストを送信し、連絡が途絶えた瞬間に障害を検知します。

仕組み

  1. B-Beacon で Heartbeat モニターを作成すると、専用のエンドポイント URL(https://getbbeacon.com/api/heartbeat/TOKEN)が発行されます。
  2. 監視対象のサーバーやバッチ処理から、この URL に定期的にリクエスト(GET または POST)を送信します。
  3. 設定した猶予期間(秒)を超えてもリクエストが届かない場合、直ちに「ダウン(Down)」と判定してアラートを発報します。

コピペで使えるスクリプト例

(1) 定期バッチ(Cron ジョブ)の生存監視

ジョブが正常終了したときだけ末尾の curl が実行されます:

0 3 * * * /usr/bin/php /var/www/app/artisan batch:run && curl -fsS -m 10 "https://getbbeacon.com/api/heartbeat/YOUR_TOKEN" > /dev/null

(2) DB バックアップ生存監視スクリプト(Bash)

バックアップ処理が成功した時のみシグナルを送信し、エラー時は停止して障害を通知します:

#!/bin/bash
set -eo pipefail

HEARTBEAT_URL="https://getbbeacon.com/api/heartbeat/YOUR_TOKEN"

# 1. バックアップ処理を実行
mysqldump -u root -p'PASSWORD' my_db | gzip > /var/backups/db_$(date +%Y%m%d).sql.gz

# 2. 成功時のみ B-Beacon へ送信
curl -fsS -m 10 "$HEARTBEAT_URL" > /dev/null

(3) ディスク容量パンク防止スクリプト

使用率が 90% 未満なら正常シグナルを送り、90% を超えたら送信を止めてアラートを発報させます:

#!/bin/bash
HEARTBEAT_URL="https://getbbeacon.com/api/heartbeat/YOUR_TOKEN"
THRESHOLD=90

USAGE=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
if [ "$USAGE" -lt "$THRESHOLD" ]; then
    curl -fsS -m 10 "$HEARTBEAT_URL" > /dev/null
else
    echo "Disk usage critical: ${USAGE}%" >&2
fi

8. ドメイン有効期限 モニター

ドメインの登録有効期限日(失効日)を自動取得し、更新忘れによるWebサイト消滅を未然に防ぎます。ICANN 標準の RDAP および Whois プロトコルに対応しています。

設定項目

項目 説明 例
ドメイン名 監視対象のドメイン(https:// は不要) example.com
警告(残り日数) 有効期限がこの日数を切ると警告通知を発報 30日
重大(残り日数) 有効期限がこの日数を切ると重大障害通知を発報 7日

9. ICMP Ping モニター

純粋な ICMP Echo リクエストにより、サーバーやルーター、ネットワーク機器の死活・パケットロス率・平均応答時間(RTT)を監視します。

設定項目

項目 説明 例
ホスト名 / IP 監視対象の IP アドレスまたはホスト名 192.168.1.1 / gw.example.com
送信パケット数 1回のチェックで送信する Ping パケット数(1〜10回) 3回

10. UDP ポート モニター

DNS(53番)や NTP(123番)など、UDP プロトコルを使用するサービスのポート疎通を確認します。

設定項目

項目 説明 例
ホスト名 / IP 監視対象のホスト名または IP アドレス ns1.example.com
ポート番号 UDP ポート番号 53

11. サーバー監視(Agent)モニター

「世界一簡単なホスト監視」。Linux サーバーに 1 行のコマンドを実行するだけで、ディスク容量パンク(90%超・95%超)、メモリ枯渇、CPU ロードアベレージ、指定プロセス死活 を毎分全自動で監視します。

圧倒的に簡単な導入(所要時間 30秒・ポート開放ゼロ):
Docker や重いエージェント、root 権限は一切不要です。Linux 標準の sh と curl だけで動作し、外部インバウンドポートの開放も不要です(外向き HTTPS 通信のみ)。

ワンライナーでの導入手順

  1. B-Beacon 管理画面で「モニター」>「新規作成」を開き、タイプに 「サーバー(Agent)」 を選択して作成します。
  2. モニター詳細画面に表示された 1行のインストールコマンド をコピーします:
curl -fsSL https://getbbeacon.com/agent/install.sh | bash -s -- YOUR_TOKEN
  1. 監視対象のサーバー(SSH ターミナル)に貼り付けて実行します。これだけでセットアップ完了です。

監視・検知される項目

項目 判定基準 障害重大度
ディスク容量 使用率 90% 以上で警告 / 95% 以上で重大障害 Warning / Critical
メモリ使用率 使用率 90% 以上で警告 / 98% 以上で重大障害 Warning / Critical
プロセス死活 指定したプロセス(nginx, mysqld 等)が停止した場合 Down (Critical)
サーバー完全停止 エージェントからの送信が 3分間 途絶えた場合 Down (Critical)

ワンライナーコマンドの動作と安全性

セキュリティ規程の厳しい法人環境でも安心してご利用いただけるよう、ワンライナーは極めてシンプルかつ安全に設計されています:

  • 実行前の事前監査が可能: スクリプト実行前に curl -fsSL https://getbbeacon.com/agent/install.sh | less で全コードを確認できます。
  • SHA-256 完全性検証(改ざん防止): 以下のコマンドでチェックサムを照合してから実行できます:
    curl -fsSL https://getbbeacon.com/agent/install.sh -o /tmp/install.sh
    echo "cfb729278dde36182370cf73b9e986427047aeacff5c8a7591338e5da223058e  /tmp/install.sh" | sha256sum -c
    bash /tmp/install.sh YOUR_TOKEN
  • root 権限不要: 一般ユーザーで動作し、システム領域(/etc や /usr 等)への書き込みは一切行いません。
  • 追加パッケージのインストールゼロ: OS 標準の bash, curl, df, free のみを使用します。
  • 配置場所: 実行ユーザーの ~/.bbeacon/ 配下にスクリプトと専用トークン(パーミッション 600 で他ユーザー閲覧不可)を配置します。
  • トークンの失効・再発行(Revoke): 管理画面のモニター設定からいつでもトークンを再発行(旧トークンは即時無効化)できます。
  • Cron 実行: ユーザーの crontab に * * * * * ~/.bbeacon/agent.sh >/dev/null 2>&1 を追加し、毎分1回実行します(Linux 1vCPU環境での実測実行時間は約0.04〜0.08秒、常駐デーモン不要のためアイドル時CPU負荷は実質ゼロです)。
  • アンインストール: 不要になった場合は ~/.bbeacon/uninstall.sh を実行するだけで、Cron 解除とファイル削除が1秒で完了します。

独自スクリプトによる実装(REST API 仕様 & 多言語ガイド)

ワンライナーを使用せず、既存の社内バッチや CI/CD、独自監視スクリプト、コンテナから直接メトリクスを送信することも可能です。

REST API 仕様

エンドポイント POST https://getbbeacon.com/api/v1/agent/report
認証ヘッダー Authorization: Bearer YOUR_TOKEN(または JSON 内に "token": "YOUR_TOKEN")
Content-Type application/json
必須パラメータ disk.usage_percent(ディスク使用率 0〜100)
// リクエスト JSON 例
{
  "disk": {
    "usage_percent": 45,
    "free_gb": 52.3,
    "total_gb": 100.0
  },
  "memory": {
    "usage_percent": 62,
    "free_mb": 1500,
    "total_mb": 4000
  },
  "cpu": {
    "load_1m": 0.15,
    "load_5m": 0.22
  },
  "processes": {
    "nginx": true,
    "mysqld": true,
    "php-fpm": true
  }
}

多言語コードスニペット

Shell / cURL スクリプト
#!/usr/bin/env bash
TOKEN="YOUR_TOKEN"
DISK=$(df -Pk / | awk 'NR==2 {print $5}' | tr -d '%')
MEM=$(free -m | awk '/Mem:/ {printf "%d", ($3/$2)*100}')

curl -fsS -X POST "https://getbbeacon.com/api/v1/agent/report" \
  -H "Authorization: Bearer ${TOKEN}" \
  -H "Content-Type: application/json" \
  -d "{\"disk\":{\"usage_percent\":$DISK},\"memory\":{\"usage_percent\":$MEM}}"
PHP スクリプト
<?php
$token = 'YOUR_TOKEN';
$url = 'https://getbbeacon.com/api/v1/agent/report';

$diskTotal = disk_total_space('/');
$diskFree = disk_free_space('/');
$diskUsage = round((($diskTotal - $diskFree) / $diskTotal) * 100);

$payload = json_encode([
    'disk' => [
        'usage_percent' => $diskUsage,
        'free_gb' => round($diskFree / 1024 / 1024 / 1024, 1),
    ],
]);

$ch = curl_init($url);
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_HTTPHEADER => [
        'Authorization: Bearer ' . $token,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => $payload,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_TIMEOUT => 5,
]);
curl_exec($ch);
curl_close($ch);
Node.js / JavaScript スクリプト
const os = require('os');
const { execSync } = require('child_process');

const TOKEN = 'YOUR_TOKEN';
const URL = 'https://getbbeacon.com/api/v1/agent/report';

let diskUsage = 0;
try {
  const df = execSync('df -Pk /').toString();
  diskUsage = parseInt(df.trim().split('\n')[1].split(/\s+/)[4].replace('%', ''), 10);
} catch (e) {}

const memUsage = Math.round(((os.totalmem() - os.freemem()) / os.totalmem()) * 100);

fetch(URL, {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${TOKEN}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    disk: { usage_percent: diskUsage },
    memory: { usage_percent: memUsage },
    cpu: { load_1m: os.loadavg()[0] },
  }),
}).catch(console.error);
Python スクリプト
import json, shutil, urllib.request, os

TOKEN = 'YOUR_TOKEN'
URL = 'https://getbbeacon.com/api/v1/agent/report'

total, used, free = shutil.disk_usage('/')
disk_usage = round((used / total) * 100)

payload = json.dumps({
    'disk': {'usage_percent': disk_usage, 'free_gb': round(free / (1024**3), 1)},
    'cpu': {'load_1m': os.getloadavg()[0]},
}).encode('utf-8')

req = urllib.request.Request(
    URL,
    data=payload,
    headers={'Authorization': f'Bearer {TOKEN}', 'Content-Type': 'application/json'}
)
urllib.request.urlopen(req, timeout=5)

チェック間隔とプラン制限

監視のチェック間隔と登録可能モニター数は、ご契約プランによって異なります。

プラン 最短チェック間隔 最大モニター数 データ保持期間
Hobby(無料) 15分 2 1日
Starter 1分 20 30日
Business 30秒 100 90日
Scale 10秒 無制限 365日

監視方式別 検知可能範囲・制約マトリクス

各監視方式がカバーする障害範囲と、アーキテクチャ上の制約事項の一覧です。システムの特性に応じて適切な監視方式を組み合わせてご利用ください。

監視方式 検知できる障害 検知できない障害(制約) 前提・通信要件
HTTP(S) Webサーバーダウン、HTTP 5xx/4xxエラー、レスポンス遅延、特定キーワード欠落、JSON値の不一致 ヘルスチェックURLのみ正常で別画面がエラーのケース、クライアント端末固有のJSエラー ポート80/443 インバウンド疎通
TCP 指定ポートのサービス停止、ポート閉塞、ファイアウォール遮断 L4接続は成功するがアプリ層でハングアップしている障害、認証失敗 指定ポートのインバウンド疎通
SSL 証明書 証明書有効期限切れ(事前通知)、ドメイン名(CN/SAN)不一致、自己署名証明書 中間証明書チェーン欠落(一部OSのみ接続不可となるケース)、クライアント側ルート証明書失効 ポート443 インバウンド疎通
DNS レコード値の意図せぬ変更、権威DNSサーバーのダウン、NXDOMAINエラー 特定地域/ISPのキャッシュDNSサーバーでのみ発生する伝播遅延・ポイズニング UDP/TCP 53番 外部解決可能
データベース DBプロセス停止、接続過多(Max connections)、クエリ遅延、認証エラー レプリケーション遅延(Slave遅延)、スロークエリによる特定テーブルのロック DBポートへのアクセス許可(IP制限推奨)
Redis Redisプロセス停止、PING応答タイムアウト、メモリ枯渇(OOM) 特定キーのデータ破損、Pub/Subワーカーの停止 Redisポートへのアクセス許可(IP制限推奨)
Heartbeat Cronジョブの不発、バッチ処理の異常終了・タイムアウト、サーバー完全ハング バッチ自体は完了したが内部ロジックで不整合が発生している場合(例外を握りつぶしてPing送信した場合) 対象環境からB-Beaconへの外向きHTTPS送信
ドメイン有効期限 レジストラでのドメイン更新忘れ、期限切れ(30日/14日/7日前通知) DNSSEC署名エラー、レジストラ側のネームサーバー障害 RDAP/Whois公開
ICMP Ping ネットワーク断、パケットロス、回線遅延(RTT悪化) ICMPをDropするクラウドファイアウォール環境での監視、上位L7アプリ障害 ICMP Echo要求の受信許可
UDP DNS/NTP等のUDPポート停止・閉塞 UDPの非接続性の性質上、パケット到達後のアプリ応答がない場合の正確な判定 指定UDPポートの疎通
サーバー (Agent) CPU過負荷、メモリ枯渇、ディスク容量逼迫、ゾンビプロセス急増 Agentスクリプト停止時(Heartbeat未達判定まで若干の遅延あり)、カーネルパニック時の即時ダンプ 外向きHTTPS 443送信(root不要・インバウンドゼロ)