1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Netdataで簡単サーバー監視!Docker+Nginx構成ガイド

Last updated at Posted at 2025-05-15

Netdata とは?

netdata01.png

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 日分のデータを保存できます。

netdata-config/netdata.conf
[global]
    run as user = netdata
    memory mode = dbengine
    history = 900              # 直近15分(1秒ごとに900件)
    dbengine disk space = 512  # MB単位。必要に応じて調整

さらに、保存するデータの粒度を時間ごとに変える設定も追加します。

netdata-config/dbengine.conf
[dbengine]
    retention = 15m:1s, 2d:1m, 30d:5m

この設定で、最新 15 分は 1 秒ごと、2 日間は 1 分ごと、30 日間は 5 分ごとにデータを保存します。ストレージ容量に合わせて調整してください。

メール通知の設定

アラート発生時にメール通知を受け取る設定です。ここでは Gmail を例にします。

netdata-config/health/health_alarm_notify.conf
SEND_EMAIL="YES"
EMAIL_USE_SMTP="YES"
DEFAULT_RECIPIENT_EMAIL="your-email@gmail.com"

SMTP の設定も必要です。

netdata-config/msmtp/msmtprc
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 ファイルを作成します。

compose.yml
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」をクリックすると、データ参照ページに遷移します。

netdata02.png

まとめ

以上で、Docker を使った Netdata のセットアップ手順を紹介しました。この構成で、

  • システムメトリクスのリアルタイム監視
  • 最大 30 日間のデータ保存
  • 問題発生時のメール通知
  • HTTPS と Basic 認証によるアクセス制限

といったサーバー監視環境が簡単に作れます。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?