Netdata とは?
Netdata は、システムのパフォーマンスや状態をリアルタイムで監視できるツールです。主な特徴は以下の通りです。
- システムメトリクスを詳細かつリアルタイムで可視化
- CPU、メモリ、ディスク I/O、ネットワークなど幅広く監視
- 軽量で動作が速い
- 柔軟なアラートや通知機能
- プラグインで機能拡張が簡単
- ダッシュボードのカスタマイズが可能
Netdata はオープンソースで、個人・商用問わず無料で使えます。多くの Linux ディストリビューションに対応しており、Docker を使えば簡単にセットアップできます。
今回の構築ゴール
この記事では、以下の環境を構築します。
- Docker Compose で簡単にデプロイ
- サーバー起動時に自動で起動
- メールでアラート通知
- Nginx でリバースプロキシ
- HTTPS と Basic 認証でアクセス制限
前提条件
このガイドでは、以下がインストール済みであることを前提とします。
- Ubuntu 24.04 LTS
- Docker と Docker Compose
- Nginx
まだインストールしていない場合は、先に準備してください。
Netdata セットアップ手順
1. ディレクトリの作成
まず、設定ファイル用のディレクトリを作ります。
sudo mkdir -p /opt/netdata/netdata-config/health
sudo mkdir -p /opt/netdata/netdata-config/msmtp
sudo chown -R $(id -un):$(id -gn) /opt/netdata
cd /opt/netdata
2. 設定ファイルの作成
データ保存期間の設定
Netdata は通常、データをメモリに保存しますが、長期間保存したい場合は dbengine モードが便利です。以下の設定で最大 30 日分のデータを保存できます。
[global]
run as user = netdata
memory mode = dbengine
history = 900 # 直近15分(1秒ごとに900件)
dbengine disk space = 512 # MB単位。必要に応じて調整
さらに、保存するデータの粒度を時間ごとに変える設定も追加します。
[dbengine]
retention = 15m:1s, 2d:1m, 30d:5m
この設定で、最新 15 分は 1 秒ごと、2 日間は 1 分ごと、30 日間は 5 分ごとにデータを保存します。ストレージ容量に合わせて調整してください。
メール通知の設定
アラート発生時にメール通知を受け取る設定です。ここでは Gmail を例にします。
SEND_EMAIL="YES"
EMAIL_USE_SMTP="YES"
DEFAULT_RECIPIENT_EMAIL="your-email@gmail.com"
SMTP の設定も必要です。
defaults
auth on
tls on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile /var/log/msmtp.log
account default
host smtp.gmail.com
port 587
from your-email@gmail.com
user your-email@gmail.com
password your-app-password
注意: Gmail を使う場合は通常のパスワードではなくアプリパスワードを使ってください。your-app-password
の部分を自分のアプリパスワードに置き換えてください。
セキュリティのため、設定ファイルのパーミッションも変更しておきます。
chmod 600 netdata-config/msmtp/msmtprc
3. Docker Compose の設定
以下の内容で Docker Compose ファイルを作成します。
services:
netdata:
image: netdata/netdata
container_name: netdata
ports:
- 127.0.0.1:19999:19999 # ローカルのみアクセス可
cap_add:
- SYS_PTRACE
security_opt:
- apparmor:unconfined
volumes:
- netdataconfig:/etc/netdata
- netdatalib:/var/lib/netdata
- netdatacache:/var/cache/netdata
- ./netdata-config/netdata.conf:/etc/netdata/netdata.conf:ro
- ./netdata-config/dbengine.conf:/etc/netdata/dbengine.conf:ro
- ./netdata-config/health/health_alarm_notify.conf:/etc/netdata/health_alarm_notify.conf:ro
- ./netdata-config/msmtp/msmtprc:/etc/msmtprc:ro
- /etc/passwd:/host/etc/passwd:ro
- /etc/group:/host/etc/group:ro
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /etc/os-release:/host/etc/os-release:ro
restart: unless-stopped # サーバー再起動時も自動起動
volumes:
netdataconfig:
netdatalib:
netdatacache:
この設定では、ポート19999
はローカル(127.0.0.1)からのみアクセス可能です。外部から直接アクセスできないようにし、Nginx のプロキシ経由でのみアクセスできるようにしています。
4. Netdata の起動とテスト
設定ができたら、Netdata を起動します。
docker compose up -d
メール通知のテストもしておきましょう。
docker exec -it netdata /usr/libexec/netdata/plugins.d/alarm-notify.sh test
テストメールが届けば、通知設定は完了です。
Nginx リバースプロキシの設定
1. Basic 認証の設定
Netdata ダッシュボードを保護するため、Basic 認証を設定します。
sudo apt install apache2-utils
sudo htpasswd -c /etc/nginx/.htpasswd your-username
your-username
は好きなユーザー名にしてください。パスワードの入力も求められます。
複数ユーザーを追加する場合は、2 回目以降は-c
を外して実行します。
sudo htpasswd /etc/nginx/.htpasswd another-user
2. SSL 証明書の準備
Let's Encrypt で無料の SSL 証明書を取得します。
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d netdata.your-domain.com
netdata.your-domain.com
は実際に使うドメイン名に置き換えてください。事前に DNS でこのドメインがサーバーの IP を指すようにしておきます。
3. Nginx の設定ファイル作成
/etc/nginx/sites-available/netdata_your-domain_com
に以下の内容で作成します。
server {
listen 443 ssl http2;
server_name netdata.your-domain.com; # ドメイン名に置き換え
ssl_certificate /etc/letsencrypt/live/netdata.your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/netdata.your-domain.com/privkey.pem;
# セキュリティ設定
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers HIGH:!aNULL:!MD5:!kRSA;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
# HTTPヘッダー
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options SAMEORIGIN;
add_header X-XSS-Protection "1; mode=block";
location / {
proxy_pass http://127.0.0.1:19999/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Basic認証
auth_basic "Netdata Dashboard";
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
# HTTP→HTTPSリダイレクト
server {
listen 80;
server_name netdata.your-domain.com; # ドメイン名に置き換え
return 301 https://$host$request_uri;
}
4. 設定の有効化と Nginx の再読み込み
設定ファイルを有効化し、Nginx を再読み込みします。
sudo ln -s /etc/nginx/sites-available/netdata_your-domain_com /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl reload nginx
これでセットアップ完了です。以下の URL から Netdata ダッシュボードにアクセスできます。
https://netdata.your-domain.com
アクセス時に設定した Basic 認証のユーザー名とパスワードを入力してください。
右下の方にある「Skip and use the dashboard anonymously」をクリックすると、データ参照ページに遷移します。
まとめ
以上で、Docker を使った Netdata のセットアップ手順を紹介しました。この構成で、
- システムメトリクスのリアルタイム監視
- 最大 30 日間のデータ保存
- 問題発生時のメール通知
- HTTPS と Basic 認証によるアクセス制限
といったサーバー監視環境が簡単に作れます。