웹사이트 검색

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


이 페이지에서

  1. 전제 조건
  2. 1단계 - 방화벽 구성\n
  3. 2단계 - NetData 설치
  4. 3단계 - SSL 설치
  5. 4단계 - Nginx 설치 및 구성
  6. 5단계 - Netdata 대시보드 액세스 및 사용
  7. 6단계 - NetData 구성
    1. NetData 메모리 사용 구성
    2. 원격 분석 끄기
    3. 장기 보관
    4. 수집 빈도 줄이기

    1. Nginx 로그 모니터링

    1. PHP 구성
    2. Nginx에 PHP 설정 추가

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

    이 튜토리얼에서는 Rocky Linux 8 서버에서 Netdata Tool을 사용하여 다양한 서비스를 설치하고 모니터링하는 방법을 배웁니다. Netdata를 사용하여 LEMP 스택 및 Docker 엔진의 메트릭을 추적합니다.

    전제 조건

    • Rocky Linux 8을 실행하는 서버.\n
    • sudo 권한이 있는 루트가 아닌 사용자.\n
    • 서버를 가리키는 netdata.example.com과 같은 정규화된 도메인 이름(FQDN).\n
    • 알림 수신을 위한 Slack 계정 및 작업 공간.\n
    • Amazon SES 또는 Mailgun과 같은 이메일 서비스를 사용하는 SMTP 계정.\n
    • SELinux를 비활성화합니다.\n

    1단계 - 방화벽 구성

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

    $ 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는 모든 Linux 배포판에서 작동할 수 있는 설치 프로그램 스크립트와 함께 제공됩니다. 다음 명령을 실행하여 설치 프로그램 스크립트를 다운로드하고 실행합니다.

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

    sudo 권한을 활성화하기 위해 sudo 암호를 묻는 메시지가 표시됩니다. Y를 입력하여 Netdata 저장소 추가 및 서버에 설치를 확인하십시오.

    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 설치

    Lets 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  -d netdata.example.com
    

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

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

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

    Lets 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 대시보드 액세스 및 사용

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

    다음 대시보드가 나타납니다.

    내 선택 기억 확인란을 선택하고 나중에 상담원 대시보드에 머물기 버튼을 클릭하여 팝업을 닫습니다.

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

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

    6단계 - NetData 구성

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

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

    <시작>

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

NetData 메모리 사용량 구성

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

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

차트 데이터 보존 시간을 두 배로 늘릴 때마다 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
  • 커널 이름, 버전, 아키텍처
  • 가상화 기술\n
  • 컨테이너화 기술\n
  • Netdata 클라이언트 실패에 대한 추가 정보.\n

다행히도 이를 거부할 수 있습니다. 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과 디스크에 약 2일 분량의 메트릭을 저장합니다.

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

<시작>

  • 더 많은 RAM 및 디스크 공간을 사용하도록 Netdata 구성\n
  • 측정항목을 외부 데이터베이스에 보관\n

    이 자습서에서는 첫 번째 옵션에 대해서만 설명합니다. 두 번째 옵션은 Netdatas 공식 문서를 참조해야 합니다.

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

    편집을 위해 /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 디스크 공간은 디스크 사용량을 결정합니다. 기본적으로 Netdata는 32MB의 RAM과 256MB의 디스크 공간을 사용합니다. 이 값의 주석을 제거하고 두 값 중 하나를 원하는 대로 변경할 수 있습니다.

    Netdatas Storage Metric 계산기를 사용하여 필요한 RAM 및 디스크 공간을 결정할 수 있습니다.

    수집 빈도 줄이기

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

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

    $ sudo nano /etc/netdata/netdata.conf
    

    [global] 섹션 아래에 다음 줄을 입력합니다. 이렇게 하면 빈도가 5초로 증가합니다.

    [global]
    ...
        update every = 5
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    7단계 - Slack 알림 구성

    첫 번째 단계는 Slack 애플리케이션을 만들고 워크스페이스의 특정 채널에 연결하여 Slack 알림을 구성하는 것입니다.

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

    From Scratch 링크를 클릭하여 앱을 만듭니다.

    앱 이름을 선택하고 앱을 표시할 작업 공간을 선택합니다. 앱을 기존 작업 영역과 연결하지 않으려면 다른 작업 영역을 만들고 이 단계로 돌아올 수 있습니다.

    왼쪽 사이드바의 기능 메뉴에서 옵션을 선택하여 수신 웹후크 페이지를 연 다음 웹후크를 활성화합니다.

    페이지 하단에 있는 작업 공간에 새 Webhook 추가 버튼을 클릭하고 작업 공간과 알림 대상 채널을 선택합니다.

    계속하려면 허용 버튼을 클릭하십시오. 수신 Webhook 페이지로 돌아가 Webhook 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인 경우 Esc 키를 눌러 편집을 종료하고 :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.<location>.amazonaws.com
    from 
    auth on
    user <yoursesusername>
    password <yoursespassword>
    
    # 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:
    #              " ..."
    
    # the email address sending email notifications
    # the default is the system user netdata runs as (usually: netdata)
    # The following formats are supported:
    # EMAIL_SENDER=""
    # EMAIL_SENDER="User Name <>"
    # EMAIL_SENDER="'User Name' <>"
    # EMAIL_SENDER="\"User Name\" <>"
    EMAIL_SENDER="Server Admin <>"
    
    # enable/disable sending emails
    SEND_EMAIL="YES"
    
    # if a role recipient is not configured, an email will be send to:
    DEFAULT_RECIPIENT_EMAIL=""
    # 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 애플리케이션을 열면 다음과 같은 알림을 받았을 것입니다.

    또한 테스트 경고에 대한 세 개의 이메일을 받아야 합니다.

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

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

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

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

    아래와 같이 10min_cpu_usage 아래의 warn 및 crit 옵션 값을 변경합니다.

    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 복구 알림을 받게 됩니다.

    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를 컴파일해야 합니다.

    편집을 위해 Nginxs 기본 구성 파일 /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 연결 세부 정보가 표시되어야 합니다.

    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 대시보드를 다시 로드하십시오.

    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 플러그인을 활성화합니다. 이 설정은 MySQL 서버가 아닌 MariaDB에서만 작동합니다.

    [mariadb]
    userstat = 1
    

    Ctrl + X를 누르고 메시지가 표시되면 Y를 입력하여 파일을 저장합니다.

    MariaDB 서버를 시작합니다.

    $ sudo systemctl start mariadb
    

    Netdata 서비스를 다시 시작하십시오.

    $ sudo systemctl restart netdata
    

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

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

    Netdata를 사용하여 하나 이상의 PHP-FPM 인스턴스를 모니터링할 수 있습니다. 자습서에서는 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입니다. Remis PHP 8.0 저장소를 활성화합니다.

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

    다음으로 Firefly III에 필요한 PHP 및 확장 기능을 설치합니다. 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: @/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 설정 추가

    편집을 위해 Nginxs 기본 구성 파일 /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 통계가 표시됩니다.

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

    Netdata는 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 통계를 볼 수 있습니다.

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

    다음 단계는 Docker 컨테이너를 모니터링하는 것입니다. Netdata는 cgroups라고 하는 제어 그룹을 사용하여 Docker 컨테이너를 모니터링합니다. 제어 그룹은 프로세스 모음(이 경우 컨테이너)의 리소스 사용량을 제한하고 추적하는 Linux 기능입니다. 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
    

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

    결론

    이것으로 Rocky Linux 서버에서 Nginx, MySQL, PHP-FPM 및 Docker와 같은 다양한 앱을 모니터링하기 위해 Netdata 모니터링 시스템을 설치하고 사용하는 방법에 대한 자습서를 마칩니다. 질문이 있으시면 아래 의견에 게시하십시오.