Netdata 소개 및 docker로 설치

Netdata란?

Netdata는 서버의 CPU, 메모리, 디스크, 네트워크, 프로세스 등 시스템 리소스를 실시간으로 모니터링해주는 오픈소스 도구입니다.

  • 실시간 모니터링: 1초 단위로 수백~수천 개의 지표를 수집해서 웹 대시보드에 그래프로 보여줍니다
  • 설치 간편: 스크립트 하나 또는 Docker 컨테이너로 바로 실행 가능, 별도 설정 거의 없이도 동작
  • 경량: 다른 모니터링 도구(Prometheus + Grafana 조합 등)보다 리소스 사용량이 적어서, 소규모 서버(OCI ARM 인스턴스)에도 부담 없음
  • 자동 감지: Docker 컨테이너, 데이터베이스, 웹서버 등을 자동으로 찾아서 지표를 뽑아줌
  • 알림 기능: CPU/메모리 등이 임계치를 넘으면 이메일, Slack, Telegram 등으로 알림 발송 (지금 세팅하신 게 바로 이 부분)

알림 메일 발송을 위해 Dockerfile로 netdata 이미지를 확장해서 msmtp를 넣는 방식입니다.

Dockerfile


FROM netdata/netdata

RUN apt-get update && \
    apt-get install -y msmtp msmtp-mta ca-certificates nano && \
    rm -rf /var/lib/apt/lists/*

RUN ln -sf /usr/bin/msmtp /usr/sbin/sendmail

ENV EDITOR=nano

msmtprc (호스트에서 준비 후 볼륨 마운트)

/etc/msmtprc 대신 별도 파일로 만들어서 마운트하는 게 관리하기 편합니다.

# msmtprc
defaults
auth           on
tls            on
tls_trust_file /etc/ssl/certs/ca-certificates.crt
logfile        /var/log/msmtp.log

account        gmail
host           smtp.gmail.com
port           587
from           [email protected]
user           [email protected]
password       your_app_password_here

account default : gmail

주의: 일반 Gmail 비밀번호가 아니라 반드시 앱 비밀번호(App Password) 사용해야 합니다. 2단계 인증 활성화 후 Google 계정 설정에서 발급받으시면 됩니다.

docker-compose.yml 수정

services:
  netdata:
    build: .
    container_name: netdata
    hostname: streamrec-server
    restart: unless-stopped
    ports:
      - "19999:19999"
    cap_add:
      - SYS_PTRACE
      - SYS_ADMIN
    security_opt:
      - apparmor:unconfined
    volumes:
      - netdataconfig:/etc/netdata
      - netdatalib:/var/lib/netdata
      - netdatacache:/var/cache/netdata
      - /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
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./msmtprc:/etc/msmtprc:ro

volumes:
  netdataconfig:
  netdatalib:
  netdatacache:

파일 권한

msmtp는 설정 파일 권한이 640 이하가 아니면 실행을 거부합니다.

chmod 600 msmtprc

빌드 및 실행

docker compose build
docker compose up -d

테스트

docker exec -it netdata bash
echo "test mail body" | msmtp -a gmail [email protected]

메일이 정상 수신되면, health_alarm_notify.conf에서 SEND_EMAIL="YES"로 설정한 뒤 알람 발생 시 자동으로 이 sendmail 경로를 타고 이메일이 나갑니다.

health_alarm_notify.conf 설정 방법

1. 컨테이너 안에서 설정 파일 생성 (edit-config로 트리거)
docker exec -it netdata bash
cd /etc/netdata
./edit-config health_alarm_notify.conf

열리면 수정 없이 바로:

Ctrl+X → Y → Enter

이 과정에서 /etc/netdata/health_alarm_notify.conf 파일이 원본 복사되어 생성됩니다.

exit
2. 호스트로 복사
cd /opt/docker-services/netdata
docker cp netdata:/etc/netdata/health_alarm_notify.conf ./health_alarm_notify.conf
3. 호스트에서 nano로 값 수정
nano health_alarm_notify.conf

찾아서 수정 (Ctrl+W로 검색):

SEND_EMAIL="YES"
EMAIL_SENDER="[email protected]"
DEFAULT_RECIPIENT_EMAIL="[email protected]"

저장: Ctrl+O → Enter → Ctrl+X

4. docker-compose.yml에 볼륨 마운트 추가
nano docker-compose.yml

volumes 목록 아래에:

      - ./health_alarm_notify.conf:/etc/netdata/health_alarm_notify.conf:ro
5. 재시작
docker compose up -d
6. 반영 확인
docker exec netdata cat /etc/netdata/health_alarm_notify.conf | grep SEND_EMAIL

SEND_EMAIL="YES"로 나오면 정상.

7. 실제 테스트 알림 발송
docker exec -it netdata bash
/usr/libexec/netdata/plugins.d/alarm-notify.sh test

사이트 접속

사이트 처음 접속시 Private key 값 입력이 필요하다.

Private key 확인
docker exec netdata cat /var/lib/netdata/netdata_random_session_id

image

Private key 입력후 Claim 누르면 Metrics 화면이 뜬다

image