2 원격 명령
원본 보기2 원격 명령
개요
원격 명령을 사용하면 특정 조건에 따라 모니터링 대상 호스트에서 미리 정의된 명령이 자동으로 실행되도록 정의할 수 있습니다.
따라서 원격 명령은 스마트한 사전 모니터링을 위한 강력한 메커니즘입니다.
이 기능의 가장 명백한 용도로는 다음과 같은 것들을 시도할 수 있습니다:
- 응답하지 않는 일부 애플리케이션(웹 서버, 미들웨어, 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 |
| Oracle Database | 2048 | 4000 |
| PostgreSQL | 65535 | 제한 없음 |
| SQLite (Zabbix 프록시 전용) | 65535 | 제한 없음 |
원격 명령 실행 출력(반환값)은 16MB로 제한됩니다(잘려진 후행 공백 포함). IPMI 원격 명령 제한은 설치된 IPMI 라이브러리를 기반으로 합니다. 모든 원격 명령에는 데이터베이스 제한이 적용됩니다.
구성
Zabbix 에이전트에서 실행되는 원격 명령(사용자 정의 스크립트)은 먼저 에이전트 구성에서 활성화해야 합니다.
특정 명령을 nowait 모드로 허용하려면 허용된 각 명령에 대해 AllowKey=system.run[<command>,*] 매개변수가 에이전트 구성에 추가되어 있는지 확인하세요. 이 매개변수를 변경하는 경우 에이전트 데몬을 재시작하세요.
그런 다음 알림 → 액션 → 트리거 액션에서 새 액션을 구성할 때:
- 적절한 조건을 정의합니다. 예를 들어, Apache 애플리케이션 중 하나의 재해 문제 시 액션이 활성화되도록 설정합니다.

- 동작 탭에서 동작, 복구 동작 또는 업데이트 동작 블록의 추가를 클릭합니다.

- 동작 드롭다운 목록에서 미리 정의된 스크립트 중 하나를 선택하고 스크립트의 대상 목록을 설정합니다.

미리 정의된 스크립트
액션 동작(webhook, script, SSH, Telnet, IPMI)에 사용할 수 있는 스크립트는 전역 스크립트에서 정의됩니다.
예를 들어:
sudo /etc/init.d/apache restart
이 경우 Zabbix는 Apache 프로세스를 재시작하려고 시도합니다. 이 명령으로 명령이 Zabbix 에이전트에서 실행되는지 확인하세요(실행 위치에서 Zabbix 에이전트 버튼을 클릭).
sudo의 사용에 주의하세요 - Zabbix 사용자는 기본적으로 시스템 서비스를 재시작할 권한이 없습니다. sudo 구성 방법에 대한 힌트는 아래를 참조하세요.
Zabbix 에이전트 7.0부터 원격 명령은 액티브 모드로 작동하는 에이전트에서도 실행할 수 있습니다. 액티브 또는 패시브 모드의 Zabbix 에이전트는 원격 호스트에서 실행되어야 하며, 백그라운드에서 명령을 실행합니다.
Zabbix 에이전트의 원격 명령은 system.run[,nowait] 키에 의해 시스템에서 타임아웃 없이 실행되며 실행 결과를 확인하지 않습니다. Zabbix 서버와 Zabbix 프록시에서 원격 명령은 zabbix_server.conf 또는 zabbix_proxy.conf 파일의 TrapperTimeout 매개변수에 설정된 타임아웃과 함께 실행되며 실행 결과를 확인합니다. 추가 정보는 스크립트 타임아웃을 참조하세요.
액세스 권한
'zabbix' 사용자가 구성된 명령에 대한 실행 권한을 가지고 있는지 확인하세요. 권한이 있는 명령에 대한 액세스를 제공하기 위해 sudo 사용에 관심이 있을 수 있습니다. 액세스를 구성하려면 root로 실행하세요:
visudo
sudoers 파일에서 사용할 수 있는 예시 라인:
# 'zabbix' 사용자가 암호 없이 모든 명령을 실행할 수 있도록 허용합니다.
zabbix ALL=NOPASSWD: ALL
# 'zabbix' 사용자가 암호 없이 apache를 재시작할 수 있도록 허용합니다.
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를 자동으로 재시작하려면 다음 스크립트를 정의하세요:
| 스크립트 매개변수 | 값 |
|---|---|
| 범위 | '액션 동작' |
| 유형 | '스크립트' |
| 명령 | c:\windows\system32\shutdown.exe -r -f |
예시 2
IPMI 제어를 사용하여 호스트 재시작.
| 스크립트 매개변수 | 값 |
|---|---|
| 범위 | '액션 동작' |
| 유형 | 'IPMI' |
| 명령 | reset |
예시 3
IPMI 제어를 사용하여 호스트 전원 끄기.
| 스크립트 매개변수 | 값 |
|---|---|
| 범위 | '액션 동작' |
| 유형 | 'IPMI' |
| 명령 | power off |