홈 서버 만들기 10. 서버 모니터링: Monitorix + Nginx Proxy

May 10, 2018

서버를 운영하면 서버의 현재 상태를 파악하고 점검하는 것이 필요해진다. 여러 가지 모니터링 툴이 있으므로 필요에 따라 선택하면 되는데, 간편하게 현재 상태만 보고 싶다면 가벼운 Monitorix를 설치해본다. Monitorix는 이런 형태로 현재 서버 상태를 보여준다.

Monitorix 패키지 저장소 추가

Monitorix는 우분투의 기본 패키지 저장소에 없기 때문에 apt-get install 명령으로 설치하기 위해서는 우분투 서버에 Monitorix 패키지 저장소 주소를 추가해야 한다.

sudo nano /etc/apt/sources.list

우분투 서버에서 저장소 주소를 관리하는 파일인 sources.list를 nano 편집기로 연다.

deb http://apt.izzysoft.de/ubuntu generic universe

파일 끝부분에 Monitorix 패키지가 있는 저장소 주소를 추가하고, Ctrl키와 x키를 동시에 눌러 nano 편집기에서 빠져나오면서 저장한다.

wget http://apt.izzysoft.de/izzysoft.asc

추가한 저장소의 GPG key를 내려받는다.

sudo apt-key add izzysoft.asc

내려받은 GPG key를 설치한다.

Monitorix 설치 및 설정

sudo apt-get update
sudo apt-get install monitorix

apt-get update 명령으로 패키지 저장소 정보를 업데이트하고, apt-get install 명령으로 monitorix를 설치한다.

sudo nano /etc/monitorix/monitorix.conf

Monitorix의 설정 파일인 monitorix.conf 파일을 nano 편집기로 연다.

base_url = /monitorix
base_cgi = /monitorix-cgi

<httpd_builtin>
        enabled = y
        host =
        port = 8080
        user = nobody
        group = nobody
        log_file = /var/log/monitorix-httpd
        hosts_deny =
        hosts_allow =
        <auth>
                enabled = y
                msg = Monitorix: Restricted access
                htpasswd = /var/lib/monitorix/htpasswd
        </auth>
</httpd_builtin>

파일의 내용 중에서 위의 부분을 찾는다.

base_url은 Monitorix 접속 주소의 일부분이 되는데, 이 글의 설정을 끝까지 마치면 최종적으로 https://example.com/monitorix 형태의 주소가 된다. 도메인 뒷부분의 주소를 바꾸고 싶으면 base_url에서 monitorix를 원하는 대로 바꾸면 된다. base_url을 변경했다면 밑에 base_cgi 항목의 monitorix 부분도 똑같이 바꾸어야 한다. -cgi는 그대로 남아 있어야 한다.

Monitorix는 자체 내장된 웹 서버로 작동하고 8080번 포트를 기본으로 사용하는데, 포트를 변경하고 싶다면 <httpd_builtin> 영역의 port = 8080 부분에 원하는 포트 번호로 변경한다.

Monitorix에 아무나 접근할 수 없도록 <auth> 영역에 있는 enabled = nenabled = y로 변경해서 비밀번호 인증을 활성화한다.

수정이 끝났으면 Ctrl키와 x키를 동시에 눌러 nano 편집기를 빠져나오면서 저장한다.

sudo bash -c "echo -n 'varins:' >> /var/lib/monitorix/htpasswd"

Monitorix에 접속할 때 사용할 ID를 비밀번호 인증 정보가 저장되는 /var/lib/monitorix/htpasswd 파일에 기록한다. 여기서는 varins를 입력했다. varins를 원하는 이름으로 바꿔서 입력한다. varins 다음에 :를 추가하는 것에 주의한다.

sudo bash -c "openssl passwd -crypt >> /var/lib/monitorix/htpasswd"

Monitorix에 접속할 때 사용할 비밀번호를 암호화해서 입력하기 위해서 이 명령을 실행한다. Password: 라는 비밀번호를 입력하라는 메시지가 나타나면 원하는 비밀번호를 입력하는데, 8자 이내로 입력하고 특수문자 : 는 비밀번호에 포함되면 안 된다. 입력 후 Verifying - Password: 가 나타나면 비밀번호를 한 번 더 입력한다.

cat /var/lib/monitorix/htpasswd

비밀번호가 암호화되었는지 확인하는 명령인데, varins:O7d7pkzS1Qkjc 이런 형태로 출력되면 암호화된 것이다.

sudo systemctl restart monitorix

설정한 내용을 반영하기 위해 Monitorix를 재시작한다.

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

그다음, iptables 방화벽에서 Monitorix가 사용하는 포트를 열어준다. 앞서 포트를 변경했다면 8080을 변경한 포트 번호로 바꿔서 입력한다. (기본적인 방화벽 세팅은 03. 우분투 서버 18.04 LTS 기본 설정에서 완료했다.)

sudo netfilter-persistent save
sudo netfilter-persistent reload

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

Monitorix 접속

http 접속

이제 Monitorix는 http 프로토콜로 접속할 수 있는 상태가 되었다. 웹 브라우저로 http://서버내부IP:8080/monitorix 에 접속해서 ID와 비밀번호를 입력하면 Monitorix의 서버 모니터링 화면을 볼 수 있다.

인터넷 공유기 등에서 Monitorix가 사용하는 포트를 홈 서버 컴퓨터로 포워딩 한다면 공인 IP 주소나 도메인으로도 접속할 수 있는데, http 프로토콜을 사용해야 하므로 해당 도메인에 https로 리턴하는 설정이 적용되어 있다면 접속이 안 될 수 있다. 이때에는 인터넷 공유기에서 포트 포워딩을 하지 말고, 우분투 서버에서 운영 중인 웹 서버을 이용해서 프록시를 구성하면 https 프로토콜로 어디에서든 접속할 수 있다. 여기서는 기존에 운영 중인 Nginx 웹 서버가 있다고 가정하고 설명한다.

https 접속: Nginx 프록시

먼저 Monitorix가 출력하는 그래프의 이미지 파일 주소가 https가 되도록 설정한다.

sudo nano /etc/monitorix/monitorix.conf

Monitorix 설정 파일을 nano 편집기로 연다.

base_url = /monitorix
base_cgi = /monitorix-cgi

<httpd_builtin>
        enabled = y
        host =
        port = 8080
        user = nobody
        group = nobody
        log_file = /var/log/monitorix-httpd
        hosts_deny =
        hosts_allow =
        https_url = y
        <auth>
                enabled = y
                msg = Monitorix: Restricted access
                htpasswd = /var/lib/monitorix/htpasswd
        </auth>
</httpd_builtin>

<httpd_builtin> 영역에 https_url = y 항목을 추가한다. 추가했으면 Ctrl키와 x키를 동시에 눌러 nano 편집기를 빠져나오면서 저장한다.

sudo systemctl restart monitorix

변경한 내용을 적용하기 위해서 Monitorix를 재시작한다.

이제 Nginx 웹 서버에 프록시를 구성하면,

	location /monitorix {
		include proxy_params;
		proxy_pass http://127.0.0.1:8080/monitorix;
		allow 127.0.0.0/8;
		location ~ ^/monitorix/(.+\.png)$ {
			alias /var/lib/monitorix/www/$1;
		}
	}

이 내용을 서버 블록에 추가하면 된다. base_url을 변경했다면 위의 내용에서 빨간색 monitorix 부분을 변경한 것으로 바꿔줘야 한다. 포트 역시 변경했다면 변경한 번호로 바꿔줘야 한다.

서버 블록에 이 내용을 추가하는 위치는 listen 443 영역이다. 앞선 글 08. 웹 서버에서 설정한 example.com의 서버 블록을 기준으로 보면,

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

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

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 /monitorix {
		include proxy_params;
		proxy_pass http://127.0.0.1:8080/monitorix;
		allow 127.0.0.0/8;
		location ~ ^/monitorix/(.+\.png)$ {
			alias /var/lib/monitorix/www/$1;
		}
	}
}

이렇게 listen 443 영역에 추가하고, 완료했으면 Ctrl키와 x키를 동시에 눌러 nano 편집기를 빠져나오면서 저장한다.

sudo nginx -t
sudo systemctl restart nginx

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

이제 어디에서든 https://example.com/monitorix 에 접속하면 Monitorix 서버 모니터링 페이지를 확인할 수 있다.

방화벽 삭제

만일 https 프록시로 구성한 도메인 주소로만 접속한다면, 앞서 iptables 방화벽에서 열어주었던 포트는 방화벽 규칙에서 삭제해도 된다.

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

sudo netfilter-persistent save
sudo netfilter-persistent reload

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

Monitorix 추가 설정

Monitorix는 아주 다양한 내용을 보여줄 수 있는데, Monitorix 웹사이트의 설명서를 참고해서 Monitorix 설정 파일 /etc/monitorix/monitorix.conf에 적용하면 된다. <graph_enable> 섹션에서 보고 싶은 그래프를 선택하고, 그 아래의 각각의 그래프 섹션에서 세부 사항을 설정할 수 있다.

한 가지 참고할 사항은, NET graph 섹션과 TC graph 섹션에는 이더넷 인터페이스 이름이 기본값으로 eth0 으로 되어 있는데, 우분투 서버 18.04 버전은 eth0 을 사용하지 않고 임의로 변경한 이름을 사용하므로 바꿔줘야 한다. 우분투 서버에서 sudo dmesg | grep -i eth 명령을 실행해보면 몇 줄의 메시지가 나타나는데, ens33: renamed from eth0 이런 형태의 메시지에서 eth0ens33으로 이름이 바뀌었다는 것을 확인할 수 있다. ens33은 시스템에 따라 다른 형태로 나타날 수도 있다. 좀 더 확실히 하기 위해서, 우분투 서버에서 ifconfig 명령을 실행하면 네트워크 인터페이스에 ens33이 존재하는 것도 확인할 수 있다. networkctl status 명령을 실행해도 확인할 수 있다. 그러므로 monitorix.conf의 NET graph 섹션과 TC graph 섹션에도 eth0을 바뀐 이름인 ens33으로 변경해줘야 그래프가 제대로 출력된다.

설정을 완료했으면 nano 편집기를 빠져나오면서 저장하고, 변경한 내용을 적용하기 위해서 sudo systemctl restart monitorix 명령으로 Monitorix를 재시작한다.

 

홈 서버 만들기 목차 
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. 온라인 오피스: ONLYOFFICE (Docker, Nginx)
16. 트랜스코딩: Plex

Leave a comment

Your email address will not be published. Required fields are marked *

Prev Post Next Post