모니터링 도구 · 19 min read · Nov 30, 2025

Rocky Linux 8에서 Netdata 모니터링 도구를 사용하여 서비스 설치 및 모니터링하는 방법

Netdata는 리눅스 기반 운영 체제를 위한 오픈 소스 모니터링 시스템입니다. 아름답고 상세한 대시보드를 사용하여 실시간 성능 및 모니터링을 제공합니다. 서버, CPU, 메모리 사용량, 시스템 프로세스, 디스크 사용량, IPv4 및 IPv6 네트워크, 시스템 방화벽 및 Nginx, MySQL, MongoDB, Redis, ElasticSearch, PostgreSQL, PHP-FPM과 같은 애플리케이션을 모니터링하는 수백 가지 도구를 제공합니다. Prometheus, Graphite, Kafka, Grafana 등과 같은 다른 모니터링 도구와 통합됩니다.

이 튜토리얼에서는 Rocky Linux 8 서버에서 Netdata 도구를 사용하여 다양한 서비스를 설치하고 모니터링하는 방법을 배웁니다. LEMP 스택과 Docker 엔진의 메트릭을 추적하기 위해 Netdata를 사용할 것입니다.

전제 조건

  • Rocky Linux 8을 실행하는 서버.
  • sudo 권한이 있는 비루트 사용자.
  • 서버를 가리키는 netdata.example.com과 같은 완전한 도메인 이름(FQDN).
  • 알림을 받기 위한 Slack 계정 및 작업 공간.
  • Amazon SES 또는 Mailgun과 같은 이메일 서비스의 SMTP 계정.
  • SELinux 비활성화.

1단계 - 방화벽 구성

첫 번째 단계는 방화벽을 구성하는 것입니다. Rocky Linux는 Firewalld 방화벽을 사용합니다. 방화벽의 상태를 확인합니다.

$ sudo firewall-cmd --state
running

방화벽은 서로 다른 영역과 함께 작동하며, 공용 영역이 우리가 사용할 기본 영역입니다. 방화벽에서 활성화된 모든 서비스와 포트를 나열합니다.

$ sudo firewall-cmd --permanent --list-services

다음과 같은 출력을 보여야 합니다.

cockpit dhcpv6-client ssh

HTTP 및 HTTPS 포트를 허용합니다.

$ sudo firewall-cmd --permanent --add-service=http
$ sudo firewall-cmd --permanent --add-service=https

방화벽의 상태를 다시 확인합니다.

$ sudo firewall-cmd --permanent --list-services

유사한 출력을 볼 수 있어야 합니다.

cockpit dhcpv6-client http https ssh

변경 사항을 적용하기 위해 방화벽을 다시 로드합니다.

$ sudo firewall-cmd --reload

2단계 - NetData 설치

Netdata는 모든 리눅스 배포판에서 작동할 수 있는 설치 스크립트를 제공합니다. 다음 명령을 실행하여 설치 스크립트를 다운로드하고 실행합니다.

$ bash <(curl -Ss https://my-netdata.io/kickstart.sh)

sudo 권한을 활성화하기 위해 sudo 비밀번호를 입력하라는 메시지가 표시됩니다. Netdata 저장소를 추가하고 서버에 설치하는 것을 확인하기 위해 Y를 입력합니다.

Netdata 설치 관리자는 자동으로 서비스를 활성화하고 시작합니다. 서비스의 상태를 확인합니다.

$ sudo systemctl status netdata
? netdata.service - Real time performance monitoring
   Loaded: loaded (/usr/lib/systemd/system/netdata.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2022-04-11 12:09:12 UTC; 13s ago
 Main PID: 19443 (netdata)
    Tasks: 32 (limit: 11412)
   Memory: 52.0M
   CGroup: /system.slice/netdata.service
           ??19443 /usr/sbin/netdata -P /var/run/netdata/netdata.pid -D
           ??19448 /usr/sbin/netdata --special-spawn-server
           ??19937 /usr/libexec/netdata/plugins.d/apps.plugin 1
           ??19944 /usr/libexec/netdata/plugins.d/go.d.plugin 1

Apr 11 12:09:12 netdata systemd[1]: Started Real time performance monitoring.
.......

서비스가 시작되지 않았거나 활성화되지 않은 경우 다음 명령을 사용하여 활성화할 수 있습니다.

$ sudo systemctl enable netdata --now

열려 있는 포트와 이를 사용하는 프로세스를 확인하기 위해 다음 명령을 실행합니다.

$ sudo ss -plnt

유사한 출력을 얻어야 합니다. Netdata는 대시보드에 대해 포트 19999를 사용하며, 아래 출력에서 확인할 수 있습니다. Netdata는 다른 애플리케이션으로부터 통계를 수신하기 위해 포트 8125를 사용합니다.

State            Recv-Q           Send-Q                     Local Address:Port                      Peer Address:Port           Process
LISTEN           0                128                            127.0.0.1:8125                           0.0.0.0:*               users:(("netdata",pid=22496,fd=29))
LISTEN           0                128                              0.0.0.0:19999                          0.0.0.0:*               users:(("netdata",pid=22496,fd=6))
......
LISTEN           0                128                                [::1]:8125                              [::]:*               users:(("netdata",pid=22496,fd=28))
LISTEN           0                128                                 [::]:19999                             [::]:*               users:(("netdata",pid=22496,fd=7))

3단계 - SSL 설치

Let’s Encrypt를 사용하여 SSL 인증서를 설치하려면 Certbot 도구를 설치해야 합니다.

먼저 EPEL 저장소를 다운로드하고 설치해야 합니다.

$ sudo dnf install epel-release

다음 명령을 실행하여 Certbot을 설치합니다.

$ sudo dnf install certbot

SSL 인증서를 생성합니다.

$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m [email protected] -d netdata.example.com

위 명령은 서버의 /etc/letsencrypt/live/netdata.example.com 디렉토리에 인증서를 다운로드합니다.

Diffie-Hellman 그룹 인증서를 생성합니다.

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Let’s Encrypt 자동 갱신을 위한 챌린지 웹 루트 디렉토리를 생성합니다.

$ sudo mkdir -p /var/lib/letsencrypt

SSL을 갱신하기 위한 Cron 작업을 생성합니다. 매일 실행되어 인증서를 확인하고 필요시 갱신합니다. 먼저 /etc/cron.daily/certbot-renew 파일을 생성하고 편집을 위해 엽니다.

$ sudo nano /etc/cron.daily/certbot-renew

다음 코드를 붙여넣습니다.

#!/bin/sh
certbot renew --cert-name netdata.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

작업 파일의 권한을 변경하여 실행 가능하게 만듭니다.

$ sudo chmod +x /etc/cron.daily/certbot-renew

4단계 - Nginx 설치 및 구성

최신 버전의 Nginx를 설치할 것입니다. /etc/yum.repos.d/nginx.repo 파일을 생성하고 편집을 위해 엽니다.

$ sudo nano /etc/yum.repos.d/nginx.repo

다음 줄을 붙여넣습니다.

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

Nginx 및 HTTPD 도구를 설치합니다.

$ sudo dnf install nginx httpd-tools

설치를 확인합니다.

$ nginx -v
nginx version: nginx/1.20.2

Nginx 서비스를 활성화하고 시작합니다.

$ sudo systemctl enable nginx --now

/etc/nginx/conf.d/netdata.conf 파일을 생성하고 편집을 위해 엽니다.

$ sudo nano /etc/nginx/conf.d/netdata.conf

다음 코드를 붙여넣습니다.

# Define netdata upstream
upstream netdata {
    server 127.0.0.1:19999;
    keepalive 64;
}

# Redirect all non-encrypted to encrypted
server {
    listen 80;
    listen [::]:80;
    server_name netdata.example.com;
    return 301 https://netdata.example.com$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    
    server_name netdata.example.com;

    ssl_certificate     /etc/letsencrypt/live/netdata.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/netdata.example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/netdata.example.com/chain.pem;
    ssl_session_timeout 1d;
    ssl_session_cache shared:MozSSL:10m;
    ssl_session_tickets off;
    ssl_prefer_server_ciphers off;
    ssl_stapling on;
    ssl_stapling_verify on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    resolver 1.1.1.1 1.0.0.1 [2606:4700:4700::1111] [2606:4700:4700::1001] 8.8.8.8 8.8.4.4 [2001:4860:4860::8888] [2001:4860:4860::8844] valid=60s;
    resolver_timeout 2s;
    
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;

    access_log /var/log/nginx/netdata.example.com.access.log main;
    error_log  /var/log/nginx/netdata.example.com.error.log;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
     proxy_pass http://netdata;
     proxy_http_version 1.1;
        proxy_pass_request_headers on;
        proxy_set_header Connection "keep-alive";
        proxy_store off;
        auth_basic "NetData Private Area";
        auth_basic_user_file /etc/nginx/.htpasswd;
    }
}

작업이 끝나면 파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

/etc/nginx/nginx.conf 파일을 편집을 위해 엽니다.

$ sudo nano /etc/nginx/nginx.conf

include /etc/nginx/conf.d/*.conf; 줄 앞에 다음 줄을 추가합니다.

server_names_hash_bucket_size  64;

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

HTTP 인증을 활성화하기 위해 비밀번호 파일을 생성하는 명령을 실행합니다.

$ sudo htpasswd -c /etc/nginx/.htpasswd netadmin
New password: 
Re-type new password: 
Adding password for user netadmin

Nginx 구성 파일 구문을 확인합니다.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

새 구성을 활성화하기 위해 Nginx 서비스를 재시작합니다.

$ sudo systemctl restart nginx

5단계 - Netdata 대시보드에 접근 및 사용

https://netdata.example.com URL을 통해 Netdata에 접근할 수 있어야 합니다. 처음 접근할 때 HTTP 인증 세부 정보를 입력하라는 메시지가 표시됩니다.

Netdata HTTP 인증

다음과 같은 대시보드를 받게 됩니다.

Netdata 첫 번째 대시보드

내 선택 기억하기 체크박스를 선택하고 나중에 에이전트 대시보드에 머물기 버튼을 클릭하여 팝업을 닫습니다.

대시보드의 재생 버튼을 사용하여 언제든지 모니터링을 일시 중지, 중지 및 시작할 수 있습니다.

Netdata 재생/일시 중지 버튼

오른쪽 사이드바의 옵션을 클릭하여 다양한 대시보드에 접근할 수 있습니다. UTC 버튼을 클릭하고 올바른 시간대를 선택하여 변경할 수 있습니다.

Netdata 시간대 변경

6단계 - NetData 구성

Netdata는 /etc/netdata/netdata.conf 파일에 주요 구성을 저장합니다. 브라우저에서 https://netdata.example.com/netdata.conf를 방문하여 이러한 설정을 볼 수 있습니다.

브라우저의 Netdata 구성 파일

파일은 [global], [web], [registry] 등과 같은 다양한 섹션으로 나뉘어 있습니다. 기본 구성은 시작하는 데 충분합니다. Netdata는 두 가지 유형의 플러그인을 사용하여 데이터를 수집합니다:

  1. 내부 플러그인은 C 언어로 작성되며 netdata 데몬 내부에서 스레드로 실행됩니다.
  2. 외부 플러그인은 Python, Go 등 다양한 언어로 작성되며 netdata 데몬에 의해 장기 실행 독립 프로세스로 생성됩니다. 이들은 pipes를 사용하여 Netdata 데몬과 통신합니다.

NetData 메모리 사용량 구성

NetData의 RAM 사용량은 기록된 차트 데이터가 손실되기 전에 유지하려는 시간에 따라 결정됩니다.

  • 3600초 또는 1시간의 차트 데이터 보존은 15MB의 RAM을 사용합니다.
  • 7200초 또는 2시간의 차트 데이터 보존은 30MB의 RAM을 사용합니다.
  • 14400초 또는 4시간의 차트 데이터 보존은 60MB의 RAM을 사용합니다.

차트 데이터 보존 시간을 두 배로 늘릴 때마다 RAM 요구 사항도 두 배로 증가합니다. 이러한 RAM 요구 사항은 기본 대시보드에서 사용되는 차트 수에 따라 달라집니다. 더 많은 차트와 애플리케이션을 추가하면 이러한 추정치가 변경됩니다.

Netdata 구성 파일을 엽니다.

$ sudo nano /etc/netdata/netdata.conf

[global] 섹션 아래에 history = 14400 줄을 입력합니다.

[global]
..
        history = 14400
..

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

원격 측정 비활성화

기본적으로 Netdata는 제품 분석 플랫폼인 Posthog를 사용하여 익명 사용 정보를 수집합니다. Netdata 데몬이 시작되거나 중지될 때마다 Netdata는 익명 통계 스크립트를 사용하여 다음과 같은 시스템 정보를 수집하고 자신에게 전송합니다.

  • Netdata 버전
  • OS 이름, 버전, id, id_like
  • 커널 이름, 버전, 아키텍처
  • 가상화 기술
  • 컨테이너화 기술
  • Netdata 클라이언트 실패에 대한 추가 정보.

다행히도 이를 선택 해제할 수 있습니다. Netdata 디렉토리에 .opt-out-from-anonymous-statistics라는 빈 파일을 생성합니다.

$ sudo touch /etc/netdata/.opt-out-from-anonymous-statistics

변경 사항을 적용하기 위해 Netdata를 재시작합니다.

$ sudo systemctl restart netdata

장기 저장

Netdata는 기본적으로 시스템의 RAM과 디스크를 사용하여 역사적 데이터를 저장합니다. 기본 Netdata 프로세스는 초당 약 2000개의 메트릭을 수집하므로 기본 구성은 RAM과 디스크에 약 이틀 분량의 메트릭을 저장합니다.

더 많은 메트릭을 저장하려면 다음 두 가지 옵션이 있습니다:

  1. Netdata가 더 많은 RAM과 디스크 공간을 사용하도록 구성
  2. 메트릭을 외부 데이터베이스에 아카이브

이 튜토리얼에서는 첫 번째 옵션만 논의합니다. 두 번째 옵션에 대해서는 Netdata의 공식 문서를 참조해야 합니다.

Netdata가 더 많은 RAM과 디스크 공간을 사용하도록 구성

/etc/netdata/netdata.conf 파일을 편집을 위해 엽니다.

$ sudo nano /etc/netdata/netdata.conf

[global] 섹션 아래에 다음 줄을 붙여넣습니다.

[global]
...
    memory mode = dbengine
    page cache size = 32
    dbengine disk space = 256

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

페이지 캐시 크기는 사용되는 RAM의 양을 결정하고, dbengine disk space는 디스크 사용량을 결정합니다. 기본적으로 Netdata는 32MB의 RAM과 256MB의 디스크 공간을 사용합니다. 이러한 값을 주석 해제하고 원하는 대로 두 값을 변경할 수 있습니다.

Netdata의 저장 메트릭 계산기를 사용하여 필요한 RAM과 디스크 공간을 결정할 수 있습니다.

수집 빈도 줄이기

메트릭 수집 간의 시간을 늘려 Netdata의 성능을 최적화할 수 있습니다. 기본적으로 Netdata는 매초 메트릭을 수집합니다.

이를 변경하려면 Netdata 구성 파일을 편집을 위해 엽니다.

$ sudo nano /etc/netdata/netdata.conf

[global] 섹션 아래에 다음 줄을 입력합니다. 이는 빈도를 5초로 늘립니다.

[global]
...
    update every = 5

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

7단계 - Slack 알림 구성

첫 번째 단계는 Slack 애플리케이션을 생성하고 이를 작업 공간의 특정 채널에 연결하여 Slack 알림을 구성하는 것입니다.

Slack API 페이지를 방문하고 앱 생성 버튼을 클릭하여 애플리케이션 생성을 시작합니다.

Slack API 앱

From Scratch 링크를 클릭하여 앱을 생성합니다.

Slack 앱 생성 팝업

앱의 이름을 선택하고 앱이 나타날 작업 공간을 선택합니다. 기존 작업 공간과 앱을 연결하고 싶지 않다면 다른 작업 공간을 생성하고 이 단계로 돌아올 수 있습니다.

Slack 앱 이름 팝업

왼쪽 사이드바의 기능 메뉴에서 Incoming Webhook 페이지를 열고 웹후크를 활성화합니다.

Slack 앱 Incoming WebHooks

페이지 하단의 Add New Webhook to Workspace 버튼을 클릭하고 알림을 받을 작업 공간과 대상 채널을 선택합니다.

Netdata Slack 앱을 작업 공간에 추가

Allow 버튼을 클릭하여 진행합니다. Incoming Webhooks 페이지로 돌아가서 웹후크 URL을 복사합니다.

Slack 웹후크 URL

터미널로 돌아가 /etc/netdata 디렉토리로 이동합니다.

$ cd /etc/netdata

Netdata는 Netdata 구성 파일을 편집하고 생성하기 위해 edit-config 스크립트를 제공합니다. 다음 파일을 실행하여 시스템의 기본 편집기를 사용하여 health_alarm_notify.conf 파일을 생성하고 엽니다.

$ sudo ./edit-config health_alarm_notify.conf

다음 섹션으로 스크롤합니다.

# Enable slack notification
SEND_SLACK="YES"

# Select the slack webhook
SLACK_WEBHOOK_URL="https://hooks.slack.com/services/xxxxxxx"

# Default channel for notification
DEFAULT_RECIPIENT_SLACK="notifications"

변수 SEND_SLACK가 yes로 설정되어 있는지 확인합니다. 복사한 웹후크 URL을 SLACK_WEBHOOK_URL 변수에 붙여넣습니다. DEFAULT_RECIPIENT_SLACK 변수에 채널 이름을 입력합니다.

편집기가 Vim인 경우 Escape 키를 눌러 편집을 종료하고 :x를 입력한 후 Enter 키를 눌러 파일을 저장하고 편집기를 종료합니다.

편집기가 Nano인 경우 Ctrl + X를 눌러 파일을 저장하고 프롬프트가 나타나면 Y를 입력합니다.

변경 사항을 적용하기 위해 Netdata를 재시작합니다.

$ sudo systemctl restart netdata

이메일 알림 구성

Netdata는 기본적으로 이메일 알림을 보내기 위해 sendmail을 사용하지만 이메일 서버를 관리하는 것은 쉬운 일이 아닙니다. Netdata는 SMTP를 지원하지 않지만 msmtp 클라이언트라는 패키지를 설치할 수 있습니다. 이를 통해 SMTP 서버로 메일을 보낼 수 있습니다.

msmtp를 설치합니다.

$ sudo dnf install msmtp

msmtp의 구성 파일을 생성하고 엽니다.

$ sudo nano /etc/msmtprc

다음 코드를 붙여넣습니다.

# Set default values for all following accounts.
defaults

# Use the mail submission port 587 instead of the SMTP port 25.
port 587

# Always use TLS.
tls on

# The SMTP server of your ISP
account ses
host email-smtp..amazonaws.com
from [email protected]
auth on
user 
password 

# Set default account to isp
account default: ses

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

/etc/netdata/health_alarm_notify.conf 파일을 편집을 위해 엽니다.

$ sudo nano /etc/netdata/health_alarm_notify.conf

다음 섹션으로 스크롤하여 msmtp의 경로를 입력합니다.

# external commands

# The full path to the sendmail command.
# If empty, the system $PATH will be searched for it.
# If not found, email notifications will be disabled (silently).
sendmail="/usr/bin/msmtp"

다음 섹션을 찾아 발신자 및 수신자의 세부 정보를 입력하고 이메일 전송이 활성화되어 있는지 확인합니다.

# email global notification options

# multiple recipients can be given like this:
#              "[email protected] [email protected] ..."

# the email address sending email notifications
# the default is the system user netdata runs as (usually: netdata)
# The following formats are supported:
# EMAIL_SENDER="user@domain"
# EMAIL_SENDER="User Name "
# EMAIL_SENDER="'User Name' "
# EMAIL_SENDER="\"User Name\" "
EMAIL_SENDER="Server Admin <[email protected]>"

# enable/disable sending emails
SEND_EMAIL="YES"

# if a role recipient is not configured, an email will be send to:
DEFAULT_RECIPIENT_EMAIL="[email protected]"
# to receive only critical alarms, set it to "root|critical"

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

8단계 - 알림 채널 테스트

Slack 알림이 작동하는지 테스트해 보겠습니다.

설치 중에 생성된 시스템 사용자 netdata로 로그인합니다.

$ sudo su -s /bin/bash netdata

알람 알림 스크립트를 실행하여 테스트 알림을 보냅니다.

$ /usr/libexec/netdata/plugins.d/alarm-notify.sh test

사용자를 종료합니다.

$ exit.

Slack 애플리케이션을 열면 다음과 같은 알림을 받게 됩니다.

Netdata Slack 테스트 알림

테스트 경고에 대한 세 개의 이메일도 수신해야 합니다.

Netdata 테스트 알림 이메일

9단계 - 시스템 모니터링 구성

이제 알림을 구성하고 테스트했으므로 CPU 사용량과 같은 시스템 알림을 구성하고 테스트해 보겠습니다.

다음 명령을 실행하여 CPU 구성 파일을 생성하고 엽니다.

$ cd /etc/netdata
$ sudo ./edit-config health.d/cpu.conf

10min_cpu_usage 아래의 warncrit 옵션 값을 다음과 같이 변경합니다.

warn: $this > (($status >= $WARNING)  ? (60) : (70))
crit: $this > (($status == $CRITICAL) ? (75) : (85))

파일을 저장하고 편집기를 종료합니다.

위 설정은 CPU 사용량이 60%에서 70% 사이일 때 경고를 보내고, CPU 사용량이 75%에서 85% 사이일 때 치명적인 경고를 보냅니다.

Netdata 서비스를 재시작합니다.

$ sudo systemctl restart netdata

Stress 애플리케이션을 설치하여 설정을 테스트해 보겠습니다.

$ sudo dnf install stress

서버의 CPU 사용량을 증가시키기 위해 다음 명령을 실행합니다.

$ stress --cpu 2

명령을 5-10분 동안 실행한 후 높은 CPU 사용량 메시지를 수신하게 됩니다. 메시지를 수신한 후 터미널로 돌아가 Ctrl + Z를 눌러 명령을 종료합니다.

서비스를 중지한 후 Slack에서 CPU 복구 알림을 수신하게 됩니다.

Slack CPU 사용량 알림

10단계 - Nginx 모니터링 구성

Netdata를 사용하여 가장 일반적으로 모니터링되는 앱 중 하나는 서버 및 SQL 패키지입니다. Netdata를 사용하여 Nginx 서버를 모니터링해 보겠습니다.

Nginx 서버 모니터링을 활성화하려면 ngx_http_stub_status_module을 사용해야 합니다. 일반적으로 Nginx에 사전 설치되어 있습니다. 모듈이 있는지 확인할 수 있습니다.

$ nginx -V 2>&1 | grep -o with-http_stub_status_module
with-http_stub_status_module

응답이 없으면 Nginx 설치가 해당 기능을 지원하지 않는 것입니다. 이 경우 Nginx를 컴파일해야 합니다.

Nginx의 기본 구성 파일 /etc/nginx/conf.d/default.conf를 편집을 위해 엽니다. 파일의 위치는 공식 저장소에서 Nginx를 설치했기 때문에 다릅니다. OS의 저장소에서 Nginx를 설치하는 경우 파일의 위치는 /etc/nginx/nginx.conf가 됩니다.

$ sudo nano /etc/nginx/conf.d/default.conf

마지막 닫는 중괄호 앞에 서버 블록 내부에 다음 코드를 입력합니다.

# Enable module stub_status
location /stub_status {
    stub_status;
    allow 127.0.0.1;        #only allow requests from localhost
    deny all;               #deny all other hosts
}

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

Nginx 구성을 확인합니다.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nginx 서버를 재시작합니다.

$ sudo systemctl restart nginx

Netdata 서비스를 재시작합니다.

$ sudo systemctl restart netdata

Netdata 대시보드에서 Nginx 연결 세부 정보를 볼 수 있어야 합니다.

Netdata Nginx 연결 세부 정보

Nginx 로그 모니터링

Netdata는 Nginx 액세스 로그도 모니터링할 수 있습니다. 이를 위해 Netdata 디렉토리로 이동합니다.

$ cd /etc/netdata

액세스 로그 모니터링을 위한 구성 파일을 생성하는 명령을 실행합니다.

$ sudo ./edit-config python.d/web_log.conf

파일의 맨 아래로 스크롤하여 다음 섹션을 찾습니다.

# -------------------------------------------
# nginx log on various distros

# debian, arch
nginx_log:
  name: 'nginx'
  path: '/var/log/nginx/access.log'

# gentoo
nginx_log2:
  name: 'nginx_site'
  path: '/var/log/nginx/localhost.access_log'

각각의 로그 파일을 모니터링하기 위해 경로를 변경합니다. 모니터링할 호스트와 액세스 로그 파일 수에 따라 섹션을 추가할 수 있습니다. 우리의 구성 파일은 다음과 같습니다.

# -------------------------------------------
# nginx log on various distros

# debian, arch
nginx_log:
  name: 'nginx'
  path: '/var/log/nginx/access.log'

nginx_log2:
  name: 'nginx_site1'
  path: '/var/log/nginx/site1.access_log'

nginx_log3:
  name: 'nginx_site2'
  path: '/var/log/nginx/site2.access_log'

nginx_log4:
  name: 'nginx_site3'
  path: '/var/log/nginx/site3.access_log'

저장하고 편집기를 종료합니다.

Netdata가 로그 파일에 접근하려면 해당 디렉토리에 대한 권한이 필요합니다. 기본적으로 adm 시스템 그룹이 로그 파일에 접근할 수 있는 권한을 가지고 있습니다. Netdata에 접근 권한을 부여하기 위해 netdata 사용자를 adm 그룹에 추가해야 합니다.

$ sudo usermod -aG adm netdata

Nginx 및 Netdata 서비스를 재시작합니다.

$ sudo systemctl restart nginx netdata

Netdata 대시보드를 새로 고쳐 로그 파일 데이터를 볼 수 있습니다.

Netdata 액세스 로그 대시보드

11단계 - MySQL/MariaDB 모니터링 구성

튜토리얼을 위해 MariaDB를 설치할 것입니다. MySQL 서버를 사용하는 경우에도 단계는 동일합니다.

MariaDB 10.6에 대한 저장소를 추가합니다.

$ sudo nano /etc/yum.repos.d/MariaDB.repo

다음 코드를 붙여넣습니다.

# MariaDB 10.6 CentOS repository list - created 2022-04-12 11:12 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://download.nus.edu.sg/mirror/mariadb/yum/10.6/centos8-amd64
module_hotfixes=1
gpgkey=https://download.nus.edu.sg/mirror/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

MariaDB를 설치합니다.

$ sudo dnf install MariaDB-server

MariaDB 서버를 활성화합니다.

$ sudo systemctl enable mariadb

MySQL 보안 설치 스크립트를 시작합니다. MariaDB의 경우 파일 이름이 다릅니다.

$ sudo mariadb-secure-installation
....
Enter current password for root (enter for none): (Press Enter)
....
Switch to unix_socket authentication [Y/n] Y (Type Y and Press Enter)
....
Change the root password? [Y/n] Y (Type Y and Press Enter)
New password: 
Re-enter new password: 
Password updated successfully!
....
Remove anonymous users? [Y/n] Y (Type Y and Press Enter)
....
Disallow root login remotely? [Y/n] Y (Type Y and Press Enter)
....
Remove test database and access to it? [Y/n] Y (Type Y and Press Enter)
....
Reload privilege tables now? [Y/n] Y (Type Y and Press Enter)
....
All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

/etc/my.cnf.d/server.cnf 파일을 편집을 위해 엽니다.

$ sudo nano /etc/my.cnf.d/server.cnf

파일에서 [mariadb] 섹션을 찾아 다음 줄을 붙여넣어 Userstats 플러그인을 활성화합니다. 이 설정은 MariaDB에서만 작동하며 MySQL 서버에서는 작동하지 않습니다.

[mariadb]
userstat = 1

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

MariaDB 서버를 시작합니다.

$ sudo systemctl start mariadb

Netdata 서비스를 재시작합니다.

$ sudo systemctl restart netdata

MariaDB/MySQL 대시보드가 Netdata 대시보드에 나타나기 시작해야 합니다.

NetData MySQL/MariaDB 대시보드

12단계 - PHP-FPM 모니터링 구성

하나 이상의 PHP-FPM 인스턴스를 Netdata를 사용하여 모니터링할 수 있습니다. 튜토리얼을 위해 PHP 8.0을 설치한 후 모니터링을 활성화할 것입니다.

Remi 저장소를 사용하여 PHP를 설치할 것입니다. 3단계에서 EPEL 저장소를 이미 설치했습니다. Remi 저장소를 설치합니다.

$ sudo dnf install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

사용 가능한 PHP 스트림을 확인합니다.

$ dnf module list php -y
Last metadata expiration check: 0:00:12 ago on Fri 03 Dec 2021 09:39:32 AM UTC.
Rocky Linux 8 - AppStream
Name                Stream                 Profiles                                 Summary
php                 7.2 [d]                common [d], devel, minimal               PHP scripting language
php                 7.3                    common [d], devel, minimal               PHP scripting language
php                 7.4                    common [d], devel, minimal               PHP scripting language

Remi's Modular repository for Enterprise Linux 8 - x86_64
Name                Stream                 Profiles                                 Summary
php                 remi-7.2               common [d], devel, minimal               PHP scripting language
php                 remi-7.3               common [d], devel, minimal               PHP scripting language
php                 remi-7.4               common [d], devel, minimal               PHP scripting language
php                 remi-8.0               common [d], devel, minimal               PHP scripting language
php                 remi-8.1               common [d], devel, minimal               PHP scripting language

Hint: [d]efault, [e]nabled, [x]disabled, [i]nstalled

기본 버전은 7.2입니다. Remi의 PHP 8.0 저장소를 활성화합니다.

$ sudo dnf module reset php -y
$ sudo dnf module enable php:remi-8.0

다음으로 PHP 및 Firefly III에 필요한 확장 프로그램을 설치합니다. php 패키지는 Firefly III에서 요구하는 여러 종속성을 포함하므로 반드시 포함해야 합니다.

$ sudo dnf install php php-fpm php-mbstring php-xml php-curl php-mysqlnd php-zip php-intl php-bcmath php-gd php-ldap php-cli

설치를 확인합니다.

$ php --version
PHP 8.0.16 (cli) (built: Feb 15 2022 21:34:32) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.16, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.16, Copyright (c), by Zend Technologies

PHP 구성

/etc/php-fpm.d/www.conf 파일을 엽니다.

$ sudo nano /etc/php-fpm.d/www.conf

PHP 프로세스의 Unix 사용자/그룹을 nginx로 설정해야 합니다. 파일에서 user=www-datagroup=www-data 줄을 찾아 nginx로 변경합니다.

...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
;       will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...

파일을 아래로 스크롤하여 ;pm.status_path = /status 옵션을 찾습니다. 세미콜론을 제거하여 줄을 주석 해제합니다.

; Note: There is a real-time FPM status monitoring sample web page available
;       It's available in: @EXPANDED_DATADIR@/fpm/status.html
;
; Note: The value must start with a leading slash (/). The value can be
;       anything, but it may not be a good idea to use the .php extension or it
;       may conflict with a real PHP file.
; Default Value: not set
pm.status_path = /status

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

PHP 서비스를 활성화하고 시작합니다.

$ sudo systemctl enable php-fpm --now

Nginx에 PHP 설정 추가

Nginx의 기본 구성 파일 /etc/nginx/conf.d/default.conf를 편집을 위해 엽니다.

$ sudo nano /etc/nginx/conf.d/default.conf

마지막 닫는 중괄호 앞에 서버 블록 내부에 다음 코드를 입력합니다.

# define PHP-FPM monitoring
location ~ ^/(status|ping)$ {
    allow 127.0.0.1;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_pass   unix:/run/php-fpm/.sock; # Depends on the PHP Version and OS Distro
}

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

Nginx 구성을 확인합니다.

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nginx 서버를 재시작합니다.

$ sudo systemctl restart nginx

Netdata 서비스를 재시작합니다.

$ sudo systemctl restart netdata

Netdata 대시보드를 새로 고치면 PHP-FPM 통계를 볼 수 있어야 합니다.

NetData PHP-FPM 통계 대시보드

13단계 - Docker 엔진 및 컨테이너 모니터링 구성

Netdata는 Docker 엔진과 Docker 컨테이너를 모두 모니터링할 수 있습니다. 또한 이러한 컨테이너 내에서 실행되는 앱도 모니터링할 수 있지만 이 튜토리얼에서는 다루지 않겠습니다.

먼저 Docker를 설치해 보겠습니다.

$ sudo dnf install yum-utils
$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo
$ sudo dnf install docker-ce docker-ce-cli containerd.io

Docker 서비스를 활성화하고 시작합니다.

$ sudo systemctl enable docker --now

Docker 엔진을 모니터링하려면 Docker의 메트릭 기능을 활성화해야 합니다.

/etc/docker/daemon.json 파일을 생성하고 편집을 위해 엽니다.

$ sudo nano /etc/docker/daemon.json

다음 코드를 붙여넣습니다.

{
  "metrics-addr" : "127.0.0.1:9323",
  "experimental" : true
}

파일을 저장하려면 Ctrl + X를 누르고 프롬프트가 나타나면 Y를 입력합니다.

Netdata 및 Docker 서비스를 재시작합니다.

$ sudo systemctl restart docker netdata

Netdata 대시보드를 다시 로드하면 Docker 통계를 볼 수 있습니다.

NetData Docker 컨테이너 통계

메트릭 옵션이 Prometheus 대시보드를 위해 만들어졌기 때문에 대시보드에 Prometheus Metrics라는 또 다른 항목이 표시됩니다.

NetData Docker 컨테이너 Prometheus 통계

다음 단계는 Docker 컨테이너를 모니터링하는 것입니다. Netdata는 cgroups라고 하는 제어 그룹을 사용하여 Docker 컨테이너를 모니터링합니다. 제어 그룹은 프로세스 집합의 리소스 사용량을 제한하고 추적하는 리눅스 기능으로, 이 경우에는 컨테이너입니다. Netdata 설치 시 실행 중인 Docker 컨테이너는 자동으로 추적됩니다. 그러나 Netdata 설치 후 컨테이너를 실행하면 서비스를 재시작해야 합니다.

테스트 컨테이너를 실행합니다.

$ docker container run -d nginx

컨테이너의 상태를 확인합니다.

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS     NAMES
938b2cf30927   nginx     "/docker-entrypoint.…"   3 seconds ago   Up 2 seconds   80/tcp    pensive_lovelace

컨테이너의 이름은 tender_murdock입니다. 컨테이너가 Netdata 설치 후 시작되었기 때문에 서비스를 재시작합니다.

$ sudo systemctl restart netdata

대시보드를 로드하면 컨테이너 통계를 볼 수 있어야 합니다.

NetData Docker 개별 컨테이너 통계

결론

이 튜토리얼은 Rocky Linux 서버에서 Nginx, MySQL, PHP-FPM 및 Docker와 같은 다양한 앱을 모니터링하기 위해 Netdata 모니터링 시스템을 설치하고 사용하는 방법에 대한 것입니다. 질문이 있으시면 아래 댓글에 남겨주세요.

Share: X/Twitter LinkedIn

새 게시물을 받은 편지함에서 받기

스팸은 없습니다. 언제든지 구독 해지 가능합니다.