본문 바로가기

웹서버 정보를 한눈에 실시간 모니터링 하는 Netdata 설치하기

웹서버 관리 툴(패널)로 cPanel이나 aaPanel 등을 사용하는데 직접 관리하는 것과 UI형 관리도구를 사용하는 것은 차이가 있습니다. 이런 **Panel들은 Root 권한으로 리눅스, nginx+apache 등 시스템에 직접 접근하고 설정을 바꾸기도 합니다.

 

서버 지식이 조금 부족하거나 웹서버 구축과 관리를 직접 하는 것 보다 관리 패널을 이용해 편하게 하고 싶을 때는 웹서버 관리 패널을 이용하는 게 좋기는 합니다.

※주의 : 다른 패널도 마찮가지지만 예를들어 aaPanel를 사용하고자 할 때는 우분투가 됐든 CentOS가 됐든 일단 OS만 설치한 다음 nginx 또는 apache, php, mysql 또는 mariaDB, phpmyadmin, TLS 등 웹서버 관리 프로그램들은 Panel에서 설치하는 게 좋습니다. 왜냐하면 이런 관리 Panel은 자체 AppStore에서 필요 프로그램을 설치하게 돼 있습니다. 수동으로 웹서버 프로그램들을 설치했다면 Panel의 AppStore에서 자동 설치되는 프로그램들과 충돌이 있을 수 있습니다. 따라서 OS만 깔고 깨끗한(?) 상태에서 Panel을 설치하는 게 좋습니다.

 

 

■ 관리는 Shell에서 직접하고 실시간 모니터링만 하고 싶을 때는 "netData"를 추천

"netData"는 서버 정보를 실시간 모니터링하는 도구입니다. 시스템 정보를 수집하기 위해 역시나 Root 권한을 갖고 접근은 하지만 어떤 시스템 설정을 변경하거나 생성하거나 삭제하는 작업을 하지 않습니다. 오로지 Read Only입니다.  **Panel처럼 시스템 파일을 건드리지 않기 때문에 잘못 조작으로 오류를 발생시킬 염려가 없습니다. 상황실의 모니터라고 보시면 됩니다.

 

netData는 주로 CPU, 메모리, 저장소(HDD, SSD), 네트워크, nginx(또는 apache)의 요청 수와 응답시간, MySQL(또는 mariaDB) 쿼리나 접속 정보, PHP의 상태 등 정보를 수집해서 실시간 그래픽 형태로 상황을 보여줍니다.

 

netData는 결코 프로그램이 무겁지 않고 CPU 사용률은 보통 1~3%, 메모리 사용량은 10~150MB 정도 수준으로 매우 가볍습니다.

 

#0 삭제도 간단합니다.

sudo netdata-uninstaller.sh

 

 

실전, netData 설치하기!

처음 접하다 보면 어렵다 생각 할 수 있는데 설치 과정은 그렇게 어렵지 않습니다. 작업은 Root 권한으로 해야 합니다. **Panel과 다르게 기존에 운영되고 있는 시스템 정보를 Read하는 것만 하기 때문에 이미 운영되고 있는 웹서버여도 상관 없습니다. 서버가 어떻게 돌아가고 있는지 보여주기만 합니다.

 

 

#1 netData를 설치합니다.

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

설치 성공했다면 #5 같은 결과를 받아 볼 수 있습니다. 만약 #3 같은 오류가 있다면 #4 부터 해보세요.

 

※ 해당 작업을 하기 위해서는 일단 curl이나 wget 등이 설치 되어 있어야 합니다.

 

 

#2 curl, wget 등이 없을 때 한 번에 설치합니다. git는 선택사항입니다. 필요한 사람만... 

sudo apt update
sudo apt install -y curl wget unzip git

이렇게 하면 서버에서 기본으로 필요한 기본 툴이 알아서 설치됩니다. curl은 다른 서버와 통신해 파일을 가져오거나(다운로드) 파일 내용을 가져오는 작업을 합니다. 이미 설치되어 있다면 다시 설치하지 않아도 됩니다.

 

 

#3 설치 오류 메시지

# bash <(curl -Ss https://my-netdata.io/kickstart.sh) /dev/fd/63: line 1: html:
그런 파일이나 디렉터리가 없습니다 /dev/fd/63: line 2:
syntax error near unexpected token <' 'dev/fd/63: line 2:
<head><title>307 Temporary Redirect</title></head>
...

만약 이런 에러를 만났다면 curl이 파일을 가져오는 게 아니라 해당 서버 주소의 html 페이지를 있는 그대로 읽어왔기 때문입니다. 웹페이지에서 프로그램 파일 경로가 링크 됐거나 Redirect 됐다는 의미입니다. 당황하지 않아도 됩니다. html 내용에서 Redirect 된 파일을 따라가면 됩니다.

 

 

#4 리다이렉트 자동 탐색해 무조건 설치하기

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

-S : 에러만 출력

-s : 과정 노출은 최대한 간단하게

-L : 리다이렉트 된 파일 따라가기

 

 

#5 netData 공식 저장소(repo)를 시시틈에 추가 할 것인 질문

====================================
Install 1 Package (+1 Dependent package) Total size: 30 k Total download size: 29 k Installed size: 29 k
Is this ok [y/d/N]:

"y" 선택

 

 

#6 설치 성공 메시지

/dev/fd/63: line 28: cd: pipe:[184428]: 그런 파일이나 디렉터리가 없습니다

 --- Using /tmp/netdata-kickstart-lsK6shUtN4 as a temporary directory. ---
 --- Checking for existing installations of Netdata... ---
 --- No existing installations of netdata found, assuming this is a fresh install. ---
 --- Attempting to install using native packages... ---
 --- Checking if native packages are being published for this platform. ---
 --- Checking for availability of repository configuration package. ---
[/tmp/netdata-kickstart-lsK6shUtN4]# /usr/bin/curl --fail -q -sSL --connect-timeout 10 --retry 3 --output /tmp/netdata-kickstart-lsK6shUtN4/netdata-repo-edge-5-1.noarch.rpm https://repository.netdata.cloud/repos/repoconfig/el/7/x86_64/netdata-repo-edge-5-1.noarch.rpm
[ OK]

....

Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile epel/x86_64/metalink
| 4.1 kB 00:00:00 * epel: d2lzkl7pfhq30w.cloudfront.net base
| 3.6 kB 00:00:00 extras
| 2.9 kB 00:00:00 mysql-connectors-community
| 3.0 kB 00:00:00 mysql-tools-community
| 3.0 kB 00:00:00 mysql80-community
| 3.0 kB 00:00:00 updates
| 2.9 kB 00:00:00 webtatic
| 3.6 kB 00:00:00 Package epel-release-7-14.noarch already installed and latest version Nothing to do
[OK]

첫줄은 신경 쓸 거 없습니다. 파일이 없으니 html 안에서 리다이렉트 된 파일 경로를 찾아서 계속 설치를 진행하는 과정입니다. 설치하는데 시간이 좀 걸릴 수도 있습니다. 이런 [OK] 메시지가 계속 나옵니다. 설치하는데 5~10분 정도 걸릴 수 있음.

 

😀이제 설치는 끝났습니다.

 

 

#6 netData가 설치 됐는 확인하기

systemctl status netdata

"active (running)" 이런 문구가 보이면 설치 성공.

 

다음 작업은 브라우저로 서버에 있는 netData에 접속하도록 몇 가지 설정을 해야합니다.

 

#7 브라우저에서 접속 확인

http://서버IP:19999

기본 접속 주소는 이렇게 됩니다. 내 웹서버의 IP 주소나 서버의 대표 도메인 뒤에 포트 번호 :19999를 붙여야 합니다. netData의 기본 포트는 19999번 입니다.

 

※ 주의사항 : 밑에 다시 언급하겠지만 netData는 주소만 노출되면 누구나 내 서버 정보 모니터링 화면을 볼 수 있습니다. 그래서 별도의 안전장치가 필요합니다.

 

728x90

 

#8 netData가 시스템을 건드리고 있는지 확인해 보기

ps -ef | grep netdata
또는
systemctl status netdata

netData는 처음부터 시스템 접근권만 있고 조작은 할 수 없도록 개발되었습니다. 확인하는 차원입니다.

 

 

#9 netData가 작동하지 않을 때

# ps -ef | grep netdata

root 26253 25912 0 17:06 pts/0 00:00:00 grep --color=auto netdata
[root /]# systemctl status netdata ● netdata.service - Netdata,
X-Ray Vision for your infrastructure!
Loaded: loaded (/usr/lib/systemd/system/netdata.service;
enabled; vendor preset: enabled)
Active: inactive (dead) 1월 24 17:03:16 mydomain..kr
systemd[1]: [/usr/lib/systemd/system/netdata.service:10] Unknow...ce' 1월 24 17:03:18
mydomain.kr
systemd[1]: [/usr/lib/systemd/system/netdata.service:10] Unknow...ce'
Hint: Some lines were ellipsized, use -l to show in full.

#8을 실행 했는데 이런 결과가 나왔다면 netData가 작동하지 않고 포트 번호 19999도 열리지 않은 상태.

설치에 이상이 있는 건 아닙니다.

 

#8을 실행 했을 때

" root   xxxx   1  ... /usr/sbin/netdata"

이런 문구가 포함 된 결과가 있어야 합니다.

 

작동은 하는데 하는데 브라우저에서 접속이 안되면 #12로 갑니다.

 

 

#10 수동으로 netData 기동 시키기

systemctl start netdata

 

이렇게 수동으로 netData를 작동한 다음 #8 처럼 제대로 작동하는지 다시 확인해 봅니다.

"Active: active (running)"

이런 문장이 포함 된 결과가 나오면 작동 성공입니다.

netData를 설치하거나 처음 실행(기동) 시킬 때 서버에 부하가 생겨 잠시 느려질 수 있습니다. 곧 회복됩니다.

 

 

#11 그래도 작동이 안되면 netData 상태 다시 살펴보기

journalctl -u netdata --no-pager | tail -50

포트가 충돌하는 건지, 권한 문제가 있는 건지 확인 해 봅니다. 이상 징후가 없는데 그래도 수동 가동이 되지 않는다면 #0부터 다시 시도 해 봅니다. 😥

 

 

#12 방화벽 상태 확인 (19999번 포트 열렸는지 확인)

firewall-cmd --list-ports

열려있는 포트 중에 19999번이 있는지 확인합니다.

열려있지 않다면 임의로 19999 포트를 열어 봅니다.

firewall-cmd --add-port=19999/tcp --permanent
firewall-cmd --reload

19999 포트를 열고 방화벽을 다시 시작합니다.

 

브라우저에서 접속 되는지 확인 합니다.

접속 주소는 http://서버IP:19999 또는 http://내 서버의 대표 도메인:19999

예)

http://123.11.22.19:19999

또는

http://mydomain.com

 

 

 

■ 브라우저에서 접속이 되지 않을 때는 19999 포트가 열렸는지 다시 확인하기

netData의 방화벽 기본 포트는 19999입니다. 브라우저 접속 시 페이지가 열리지 않을 때는 포트가 열려 있는지 다시 확인합니다.

 

#13 포트 리슨(LISTEN) 및 방화벽 확인하기

ss -lntp | grep 19999

"LISTEN ... netdata" 이런 문장이 보이면 포트가 제대로 열린 것입니다.

firewall-cmd --list-ports | grep 19999

혹은 이렇게 했는데 아무것도 보이지 않는다면 포트가 제대로 열려 있지 않은 것입니다.

 

firewall-cmd --add-port=19999/tcp

이 명령은 19999 번 포트를 추가하는 것입니다. 다음에 또 사용하게 됩니다.

 

curl http://127.0.0.1:19999

이 명령은 서버 내부에서 netdata가 제대로 작동하는지 확인하는 것입니다. 제대로 작동한다면 html이나 python 코드 등이 보입니다. 브라우저로 송출 해 줄 파일 내용을 보여주는 것입니다. 보인다면 일단 작동은 한다는 것입니다. 작동은 하는데 브라우저에서는 접근이 되지 않는다면 방화벽이나 접근 방법의 문제입니다.

 

 

■ 포트 19999는 이미 기본으로 노출, 위험성 있음. 포트 번호 바꾸기

netData의 기본 포트는 19999번이기 때문에 누구나 예측이 가능합니다. 그래서 나만의 포트 번호로 변경합니다. 원시적이긴 하지만 나만 아는 포트 번호로 최소한 누구나 쉽게 접근하지 못하게 합니다. 포트 번호이지만 1차원 적인 나만의 비밀번호라 생각하면 됩니다. 물론 프록시, TLS 등을 이용한 안전한 방법이 있기는 합니다. 그건 별도로 다뤄야 할 거 같습니다.

 

반응형

 

 

#14 netdata 설정 파일 열어서 포트번호 수정하기

sudo vi /etc/netdata/netdata.conf

netData의 환경설정 파일은 /etc/netdata/ 디렉토리 안에 있습니다.

 

※ 기본적으로 vi 파일 편집기를 사용합니다.

# netdata configuration
#
# You can get the latest version of this file, using:
#
#  netdatacli dumpconfig > /etc/netdata/netdata.conf
#
# You can also download it using:
#
#  wget -O /etc/netdata/netdata.conf http://localhost:19999/netdata.conf
# or
#  curl -o /etc/netdata/netdata.conf http://localhost:19999/netdata.conf
#

# ↓ ↓ ↓ ↓ 아래 부분을 추가 합니다.
[web]
# 접속 포트를기본값인 19999에서 12345으로 변경
bind to = *
default port = 12345

bind to = * : 모든 네트워크의 접속을 허용하겠다는 것입니다.

 

만약 bind to = 112.113.114.115 이렇게 했다면 해당 IP를 갖는 클라이언트(브라우저)에서만 접근이 가능합니다. 나만 접속하고 싶다면 내 컴퓨터(PC)의 IP를 넣으면 됩니다. 그럴 땐 굳이 포트 변경이 필요 없게 되기도 합니다.

 

default port = 12345 : 변경 할 포트 번호입니다.

 

※ 위에 [web] 이 부분도 꼭 넣어야 합니다.

 

 

 

#15 netData 다시 시작하기

# 서비스를 완전히 껐다가 켭니다
sudo systemctl stop netdata
sudo systemctl start netdata

# 제대로 살아있는지 확인
sudo systemctl status netdata

 

# netdata라는 이름을 가진 프로세스가 쓰고 있는 포트 전부 출력
ss -tlnp | grep netdata

프로그램이 제대로 작동하는지 다시 확인합니다.

작동한다면 브라우저에서 접속 되는지 확인 합니다.

접속 주소는 http://서버IP:12345 또는 http://내 서버의 대표 도메인:12345

 

sudo firewall-cmd --permanent --remove-port=19999/tcp
sudo firewall-cmd --reload

※ ※ ※  중요!!!! 19999번 포트는 이제 사용하지 않을 것이기 때문에 삭제 합니다. ※ ※ ※

 

 

#16 systemctl restart 오류로 제대로 실행 안 될 때 netData를 완전히 죽였다가 다시 시작하기

# 1. 실행 중인 모든 netdata 관련 프로세스 강제 종료
sudo pkill -9 netdata

# 2. 서비스 다시 시작
sudo systemctl start netdata

# 3. 서비스 상태 확인 (초록색 'active'가 뜨는지 보세요)
sudo systemctl status netdata

 

 

 

■ 실전 사용해 보기

접속 첫 화면

 

브라우저에서 netData에 접속하면 처음에 간단한 시스템 정보를 보여줍니다. 그리고 화면 오른쪽 하단 녹색 화살표 밑에 녹색 글씨가 있습니다.

"Skip and use the dashboard anonymously."

가입 절차 없이 익명으로 대시보드를 사용하겠다는 뜻입니다. 클릭하면 다음 화면으로 이동합니다.

netData는 로그인이 필요한 곳이 있습니다. 일부 서비스가 유료이기도 합니다. 하지만 필요한 주요 정보는 확인 가능합니다.

 

 

다음 주의 화면

 

다음 화면으로 넘어가면 화면이 뿌옇게 보이고 상단에 갈색 라인에 문구가 있습니다.

"MPORTANT: This Netdata is openly accessible from the Internet! Secure your Netdata now!"

"중요: 이 Netdata 대시보드는 현재 인터넷 어디서든 접속 할 수 있는 상태입니다. 지금 바로 Netdata 보안 설정을 하세요."

 

처음에 설명한 것처럼 netData는 누구나 접근 가능하도록 프로그램 되어 있습니다. 그래서 아주 1차원적으로 포트번호를 변경했지만 더 강화 된 보안을 위해서는 조금 복잡한 설정이 더 필요하기는 합니다. 일단 뿌연 화면 아무 곳이나 클릭하면 모니터링 화면이 보입니다.

모니터닝 메인 페이지
모니터링 상세페이지

 

 

728x90
반응형