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>,*] 매개변수가 추가되었는지 확인하세요. 이 매개변수를 변경하는 경우 에이전트 데몬을 재시작하세요.

그런 다음 경고 → 액션 → 트리거 액션에서 새 액션을 구성할 때:

  1. 적절한 조건을 정의합니다. 예를 들어, Apache 애플리케이션 중 하나에서 재해 문제가 발생할 때 액션이 활성화되도록 설정합니다.

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

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

미리 정의된 스크립트

액션 작업(웹훅, 스크립트, 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