원격 명령
개요
원격 명령을 사용하면 특정 조건이 발생했을 때 모니터링 대상 호스트에서 미리 정의된 명령이 자동으로 실행되도록 설정할 수 있습니다.
따라서 원격 명령은 스마트한 사전 예방적(pro-active) 모니터링을 위한 강력한 메커니즘입니다.
이 기능의 가장 대표적인 사용 사례는 다음과 같습니다.
- 애플리케이션(웹 서버, 미들웨어, CRM)이 응답하지 않을 경우 자동으로 재시작
- 원격 서버가 요청에 응답하지 않을 경우 IPMI 'reboot' 명령을 사용하여 재부팅
- 디스크 공간이 부족할 경우 (오래된 파일 삭제, /tmp 정리 등으로) 자동으로 디스크 공간 확보
- CPU 부하에 따라 한 물리 장비에서 다른 장비로 VM 마이그레이션
- CPU(디스크, 메모리 등) 리소스가 부족할 경우 클라우드 환경에 새 노드 추가
원격 명령을 위한 액션 설정은 메시지 전송을 위한 설정과 유사하며, 유일한 차이점은 Zabbix가 메시지를 보내는 대신 명령을 실행한다는 점입니다.
원격 명령은 Zabbix 서버, 프록시 또는 에이전트에서 실행될 수 있습니다. Zabbix 에이전트에서의 원격 명령은 Zabbix 서버에서 직접 실행되거나 Zabbix 프록시를 통해 실행될 수 있습니다. Zabbix 에이전트와 Zabbix 프록시 양쪽 모두 원격 명령은 기본적으로 비활성화되어 있습니다. 다음과 같은 방법으로 활성화할 수 있습니다.
- 에이전트 설정에
AllowKey=system.run[*]파라미터 추가; - 프록시 설정에서 EnableRemoteCommands 파라미터를 '1'로 설정.
Zabbix 서버가 실행하는 원격 명령은 명령 실행 문서에 설명된 대로 종료 코드 확인을 포함하여 실행됩니다.
원격 명령은 대상 호스트가 유지보수 상태에 있어도 실행됩니다.
원격 명령 제한
모든 매크로가 해석된 후의 원격 명령 제한은 데이터베이스 종류와 문자 집합에 따라 달라집니다(비 ASCII 문자는 저장에 1바이트 이상이 필요합니다).
| 데이터베이스 | 문자 수 제한 | 바이트 수 제한 |
|---|---|---|
| MySQL | 65535 | 65535 |
| PostgreSQL | 65535 | 제한 없음 |
| SQLite(Zabbix 프록시 전용) | 65535 | 제한 없음 |
원격 명령 실행 결과 출력(반환 값)은 16MB로 제한됩니다(잘려나가는 후행 공백 포함). IPMI 원격 명령 제한은 설치된 IPMI 라이브러리에 따라 결정됩니다. 데이터베이스 제한은 모든 원격 명령에 적용된다는 점에 유의하십시오.
설정
Zabbix 에이전트에서 실행되는 원격 명령(커스텀 스크립트)은 먼저 에이전트 설정에서 활성화해야 합니다.
nowait 모드로 특정 명령을 허용하려면 에이전트 설정에서 허용할 각 명령에 대해 AllowKey=system.run[<command>,*] 파라미터가 추가되었는지 확인하십시오. 이 파라미터를 변경한 경우 에이전트 데몬을 재시작하십시오.
그런 다음, Alerts → Actions → Trigger actions에서 새 액션을 설정할 때:
- 적절한 조건을 정의합니다. 예를 들어, Apache 애플리케이션 중 하나에서 심각한(disaster) 문제가 발생했을 때 액션이 활성화되도록 설정합니다.

- Operations 탭에서 Operations, Recovery operations, 또는 Update operations 블록의 Add를 클릭합니다.

- Operation 드롭다운 목록에서 사전 정의된 스크립트 중 하나를 선택하고 스크립트의 Target list를 설정합니다.

사전 정의된 스크립트
액션 오퍼레이션(webhook, script, SSH, Telnet, IPMI)에 사용 가능한 스크립트는 스코프로 Action operation이 선택된 글로벌 스크립트에서 정의됩니다.
예를 들면:
sudo /etc/init.d/apache restart
이 경우 Zabbix는 Apache 프로세스를 재시작하려고 시도합니다. 이 명령의 경우, 명령이 Zabbix 에이전트에서 실행되도록 (Execute on에서 Zabbix agent 버튼을 클릭하여) 반드시 확인하십시오.
sudo의 사용에 유의하십시오 - Zabbix 사용자는 기본적으로 시스템 서비스를 재시작할 권한을 가지고 있지 않습니다. sudo를 설정하는 방법에 대한 힌트는 아래를 참고하십시오.
Zabbix 에이전트 7.0부터, 원격 명령은 능동(active) 모드로 동작 중인 에이전트에서도 실행할 수 있습니다. Zabbix 에이전트는 능동이든 수동(passive)이든 원격 호스트에서 실행되어야 하며, 명령을 백그라운드에서 실행합니다.
Zabbix 에이전트에서의 원격 명령은 system.run[,nowait] 키에 의해 시스템 타임아웃 없이 실행되며 실행 결과가 확인되지 않습니다. Zabbix 서버와 Zabbix 프록시에서는, 원격 명령이 zabbix_server.conf 또는 zabbix_proxy.conf 파일의 TrapperTimeout 파라미터에 설정된 타임아웃으로 실행되며 실행 결과가 확인됩니다. 추가 정보는 Script timeout을 참고하십시오.
접근 권한
설정한 명령에 대해 'zabbix' 사용자가 실행 권한을 가지고 있는지 확인하십시오. 특권이 필요한 명령에 대한 접근 권한을 부여하기 위해 sudo를 사용하는 것을 고려할 수 있습니다. 접근 권한을 설정하려면, root로 다음을 실행하십시오.
visudo
sudoers 파일에서 사용할 수 있는 예시 라인:
# allows 'zabbix' user to run all commands without password.
zabbix ALL=NOPASSWD: ALL
# allows 'zabbix' user to restart apache without password.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart
일부 시스템에서는 sudoers 파일이 로컬이 아닌 사용자의 명령 실행을 막을 수 있습니다. 이를 변경하려면 /etc/sudoers에서 requiretty 옵션을 주석 처리하십시오.
여러 인터페이스를 사용하는 원격 명령
대상 시스템이 선택한 유형(Zabbix 에이전트 또는 IPMI)의 인터페이스를 여러 개 가지고 있는 경우, 원격 명령은 기본 인터페이스에서 실행됩니다.
Zabbix 에이전트 인터페이스가 아닌 다른 인터페이스를 사용하여 SSH 및 Telnet을 통해 원격 명령을 실행하는 것도 가능합니다. 사용할 인터페이스는 다음 순서로 선택됩니다.
- Zabbix 에이전트 기본 인터페이스
- SNMP 기본 인터페이스
- JMX 기본 인터페이스
- IPMI 기본 인터페이스
IPMI 원격 명령
IPMI 원격 명령에는 다음 구문을 사용해야 합니다.
<command> [<value>]
여기서
- <command> - 공백 없는 IPMI 명령 중 하나
- <value> - 'on', 'off' 또는 임의의 부호 없는 정수. <value>는 선택적 파라미터입니다.
예제
액션 오퍼레이션에서 원격 명령으로 사용할 수 있는 글로벌 스크립트의 예제입니다.
예제 1
특정 조건에서 Windows 재시작.
Zabbix가 감지한 문제에 따라 Windows를 자동으로 재시작하려면, 다음 스크립트를 정의합니다.
| 스크립트 파라미터 | 값 |
|---|---|
| Scope | 'Action operation' |
| Type | 'Script' |
| Command | c:\windows\system32\shutdown.exe -r -f |
예제 2
IPMI 제어를 사용하여 호스트 재시작.
| 스크립트 파라미터 | 값 |
|---|---|
| Scope | 'Action operation' |
| Type | 'IPMI' |
| Command | reset |
예제 3
IPMI 제어를 사용하여 호스트 전원 끄기.
| 스크립트 파라미터 | 값 |
|---|---|
| Scope | 'Action operation' |
| Type | 'IPMI' |
| Command | power off |