Nagios 로 Azure VM 모니터링 하기
Nagios는 open source monitoring 솔루션입니다. 본 글에서는 Nagios로 Azure VM을 모니터링하는 방법을 정리합니다.
Nagios 서버와 VM간에는 NRPE plugin을 통해 communication합니다. 이를 위해 모니터링 대상인 Azure VM내에 NRPE 서버를 설치해야 합니다. (NRPE 서버는 default로 TCP 5666 port를 사용합니다.) 이 구성에서 Nagios 서버는 NRPE client로 NRPE 서버로 상태 정보를 query하게 됩니다.
Nagios 서버가 모니터링 대상이 되는 Azure VM과 같은 Virtual Network상에 있으면 내부 VNet상에서 private IP를 이용하여 간단히 연결할 수 있습니다. 하지만 Nagios 서버가 원격지 (예를 들어 on-premises data center)에 있고 모니터링 대상 Azure VM이 public IP를 가지고 있지 않은 경우는 (예를 들어 Azure Load Balancer의 backend pool에 속해 있는 경우) 아래의 방법을 고려할 수 있습니다.
1) Nagios서버가 있는 네트워크와 모니터링 대상 Azure VM이 있는 Virtual Network간에 VPN 또는 ExpressRoute 전용선을 연결하여 Private IP를 통해 통신하는 방법
2) Azure Load Balancer에 NAT rule을 추가하여 Azure Load Balancer Public IP를 통해 통신하는 방법
본 글에서는 Azure Load Balancer에 NAT rule을 추가하여 연결을 맺는 방법에 대해 기술합니다.
Nagios 서버 설치 및 NRPE plugin 설치
1) 먼저 ubuntu 16.04 VM을 생성하고 아래와 같이 Nagios 서버와 NRPE plugin을 설치합니다. (원격지에서 연결하는 테스트를 위해 Nagios 서버는 모니터링 대상 Azure VM과 다른 Virtual Network 상에 생성합니다.)
$sudo apt-get install -y nagios3 $sudo apt-get install -y nagios-nrpe-plugin
2) 설치가 끝난후 Nagios 서버 웹 화면에 접속합니다. 이 때 로그인창이 뜨면 ID는 ‘nagiosadmin” 비밀번호는 위 apt-get으로 ‘nagios3’ 설치시 입력한 비밀번호를 입력합니다.
모니터링할 Azure상의 VM에 NRPE 서버를 설치
1) 다음에는 모니터링할 대상 VM에 아래와 같이 NRPE 서버를 설치합니다.
$ sudo apt-get -y install nagios-nrpe-server
2) ‘/etc/nagios/nrpe.cfg’ 파일에서 아래 부분을 수정합니다.
#command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
command[check_disk]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /...
allowed_hosts=127.0.0.1,104.215.191.xxx # allowed_hosts에 Nagios 서버가 사용하는 IP 주소를 추가합니다.
3) nagios-nrpe-server를 재시작합니다.
systemctl restart nagios-nrpe-server
Azure Load Balancer에 inbound NAP Pool 추가하기
1) 다음 Azure CLI를 이용하여 Azure Load Balancer에 NRPE plugin 통신용 inbound NAT pool을 추가합니다.
Load Balancer의 backend pool이 VM Scale Set instance로 구성되어 있는 경우 아직 portal에서 NAT pool을 추가하는 기능이 지원되지 않습니다. 대신 Azure CLI를 사용하여 아래와 같이 backend pool을 추가할 수 있습니다.
$ az network lb inbound-nat-pool create --resource-group myresourcegroup --lb-name myLBName --name nrpe --protocol Tcp --frontend-port-range-start 6000 - frontend-port-range-end 6050 --backend-port 5666 --frontend-ip-name LBFrontEnd
2) 다음 Azure Resource Explorer에서 해당 VM Scale Set resource에 NAT Pool ID를 수동으로 추가하여 업데이트 해야 합니다.
3) VM Scale Set에 Network Security Group이 지정되어 있다면 해당 Network Security Group에 5666 TCP incoming port에 대한 Allow rule을 추가합니다.
테스트 하기
Nagios 서버에서 해당 VM Scale Set instance와 NRPE plugin을 이용하여 통신이 되는 지 확인합니다. 이 때 Azure Load Balancer NAT pool incoming port로 설정된 port를 지정해 주어야 합니다.
아래와 같이 “NRPE vx.xx”와 같이 응답을 하면 NRPE plugin을 이용한 요청에 대한 응답을 성공적으로 받았음을 알 수 있습니다. (아래 xxx.xxx.xxx.xxx는 Azure Load Balancer의 VM Scale Set에 대한 frontend public IP입니다.)
$ /usr/lib/nagios/plugins/check_nrpe -H xxx.xxx.xxx.xxx-p 6000
NRPE v2.15