홈 서버 만들기 20. 서버 모니터링: netdata + Nginx Proxy

June 16, 2018

netdata는 서버의 현재 상태를 보여주는 모니터링 툴로서, 아주 상세한 내용을 미려한 UI로 출력해주고 자동화된 설치 스크립트를 제공하기 때문에 설치와 관리가 쉽다. 데모는 https://london.my-netdata.io/default.html 에서 확인해볼 수 있다.

netdata 설치

sudo apt-get update
bash <(curl -Ss https://my-netdata.io/kickstart.sh) all

패키지 정보를 업데이트하고, netdata 설치 스크립트를 실행한다. 필요한 패키지를 설치하겠냐는 질문과 netdata 설치를 진행하겠냐는 질문에 응답해주면 netdata 설치가 자동으로 완료된다. 만일 수동으로 설치하고 싶다면 netdata의 설명을 참고한다.

방화벽 설정

sudo iptables -A INPUT -p tcp -m tcp --dport 19999 -j ACCEPT

iptables 방화벽에서 netdata가 사용하는 기본 포트 19999를 열어준다. (기본적인 방화벽 세팅은 03. 우분투 서버 18.04 LTS 기본 설정에서 완료했다.)

sudo netfilter-persistent save
sudo netfilter-persistent reload

iptables 설정 내용을 저장하고 리로드한다. (iptables-persistent는 03. 우분투 서버 18.04 LTS 기본 설정에서 설치했다.)

netdata 접속 – 내부 네트워크

내부 네트워크에서 웹 브라우저로 http://서버내부IP:19999에 접속하면 netdata의 서버 모니터링 화면을 볼 수 있다.

netdata 접속 – 외부 네트워크

netdata는 로그인 인증 기능을 자체적으로 제공하지 않기 때문에 외부 네트워크에서 netdata에 접속하려면 VPN을 통해서 내부 네트워크에 연결한 다음에 접속하면 된다. VPN을 통하지 않고 외부 네트워크에서 바로 접속하려면 현재 우분투 서버에 운영중인 웹 서버를 이용해서 로그인 인증 기능을 생성해주는 것이 좋다. 아래는 기존에 운영 중인 Nginx 웹 서버가 있다고 가정하고 설명한다.

sudo sh -c "echo -n 'varins:' >> /etc/nginx/.netdata"

로그인 ID를 결정해서 /etc/nginx/.netdata 파일에 저장한다. 위 예시의 varins를 원하는 ID로 변경해서 실행한다.

sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.netdata"

비밀번호를 암호화해서 /etc/nginx/.netdata 파일에 저장한다. 비밀번호를 묻는 메시지가 나오면 원하는 비밀번호를 입력한다. 암호화 되어 저장된 내용은 cat /etc/nginx/.netdata 명령으로 확인할 수 있다.

이제 접속에 사용할 도메인의 Nginx 서버 블록을 설정하는데, 앞선 글 08. 웹 서버에서 설정한 example.com의 서버 블록을 기준으로 보면,

sudo nano /etc/nginx/sites-available/example.com

example.com 서버 블록을 nano 편집기로 열어서

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

server {
	listen 80;

	server_name example.com www.example.com;

	return 301 https://$server_name$request_uri;
}

server {
	listen 443 ssl http2;

	server_name example.com www.example.com;

	root /var/www/example.com/html;

	ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
	ssl_dhparam /etc/ssl/certs/dhparam.pem;

	ssl_protocols TLSv1.2;
	ssl_prefer_server_ciphers on;
	ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256;
	ssl_ecdh_curve secp384r1;
	ssl_session_timeout 10m;
	ssl_session_cache shared:SSL:10m;
	ssl_session_tickets off;
	ssl_stapling on;
	ssl_stapling_verify on;
	resolver 8.8.8.8 8.8.4.4 valid=300s;
	resolver_timeout 5s;

	add_header Strict-Transport-Security max-age=31536000;
	add_header X-Frame-Options SAMEORIGIN;
	add_header X-Content-Type-Options nosniff;
	add_header X-XSS-Protection "1; mode=block";

	index index.html index.htm;

	location / {
		try_files $uri $uri/ =404;
	}

	location = /monitor {
		return 301 /monitor/;
	}

	location ~ /monitor/(?<ndpath>.*) {
		proxy_redirect off;
		proxy_set_header Host $host;

		proxy_set_header X-Forwarded-Host $host;
		proxy_set_header X-Forwarded-Server $host;
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_http_version 1.1;
		proxy_pass_request_headers on;
		proxy_set_header Connection "keep-alive";
		proxy_store off;
		proxy_pass http://netdata/$ndpath$is_args$args;

		gzip on;
		gzip_proxied any;
		gzip_types *;

		auth_basic "Protected";
		auth_basic_user_file /etc/nginx/.netdata;
	}
}

이렇게 서버 블록의 첫 부분과 listen 443 영역에 파란색 부분을 추가한다. monitor는 접속 주소 https://example.com/monitor의 일부분이 되는 것으로 원하는 것으로 바꾸면 된다. 완료했으면 Ctrl키와 x키를 동시에 눌러 nano 편집기를 빠져나오면서 저장한다.

sudo nginx -t
sudo systemctl restart nginx

변경한 서버 블록이 적용되도록 Nginx 기본 문법을 검사한 뒤 Nginx를 재시작한다.

이제 어디에서든 https://example.com/monitor 에 접속하면 로그인 인증 과정이 나타나고 netdata의 서버 모니터링 페이지를 확인할 수 있다.

방화벽 삭제

만일 https://example.com/monitor 주소로만 접속한다면, 앞서 iptables 방화벽에서 열어주었던 포트는 방화벽 규칙에서 삭제해도 된다.

sudo iptables -D INPUT -p tcp -m tcp --dport 19999 -j ACCEPT

sudo netfilter-persistent save
sudo netfilter-persistent reload

-D 옵션을 사용하면 항목이 삭제된다. 삭제 후에는 iptables 방화벽을 저장하고 리로드한다.

netdata 설정

netdata 설정 파일은 /etc/netdata/netdata.conf 에 위치한다. 보다 자세한 사항을 설정하고 싶다면 netdata의 설명을 참고한다.

 

홈 서버 만들기 목차 
https://varins.com/category/server

01. 하드웨어 구성과 전기 요금
02. 우분투 서버 18.04 LTS 설치
03. 우분투 서버 18.04 LTS 기본 설정
04. 파일 복원: Btrfs 스냅샷
05. 네트워크 파일 공유: Samba (SMB)
06. Dynamic DNS: 구글 도메인 + ddclient
07. SSL/TLS 인증서: Let's Encrypt (Wildcard)
08. 웹 서버: Nginx, 서버 블록, https 보안연결
09. 웹사이트: php + MariaDB + WordPress
10. 서버 모니터링: Monitorix + Nginx Proxy
11. FTPS: vsftpd
12. VPN: IKEv2 (strongSwan)
13. Torrent: Transmission
14. 클라우드 스토리지: Nextcloud (Nginx, MariaDB)
15. 온라인 오피스: 온리오피스 (Docker, Nginx)
16. 트랜스코딩: Plex
17. VNC RDP 클라이언트: Guacamole (Docker, Nginx)
18. 가상 머신: QEMU-KVM + libvirt + virt-install
19. 시스템 업그레이드: i3 8300T, 970 EVO 전력 사용량
20. 서버 모니터링: netdata + Nginx Proxy
Prev Post