9 웹 모니터링

개요

Zabbix를 사용하면 웹 사이트의 여러 가용성 측면을 확인할 수 있습니다.

웹 모니터링을 수행하려면 Zabbix 서버가 처음에 cURL (libcurl) 지원으로 구성되어야 합니다.

웹 모니터링을 활성화하려면 웹 시나리오를 정의해야 합니다. 웹 시나리오는 하나 또는 여러 개의 HTTP 요청이나 "단계"로 구성됩니다. 이 단계들은 미리 정의된 순서대로 Zabbix 서버에 의해 주기적으로 실행됩니다. 호스트가 프록시로 모니터링되는 경우, 단계는 프록시에 의해 실행됩니다.

웹 시나리오는 항목, 트리거 등과 같은 방식으로 호스트/템플릿에 연결됩니다. 즉, 웹 시나리오도 템플릿 수준에서 생성한 후 여러 호스트에 한 번에 적용할 수 있습니다.

모든 웹 시나리오에서 다음 정보가 수집됩니다:

  • 전체 시나리오의 모든 단계에 대한 초당 평균 다운로드 속도
  • 실패한 단계의 번호
  • 마지막 오류 메시지

모든 웹 시나리오 단계에서 다음 정보가 수집됩니다:

  • 초당 다운로드 속도
  • 응답 시간
  • 응답 코드

자세한 내용은 웹 모니터링 항목을 참조하세요.

웹 시나리오 실행에서 수집된 데이터는 데이터베이스에 저장됩니다. 이 데이터는 그래프, 트리거 및 알림에 자동으로 사용됩니다.

Zabbix는 또한 검색된 HTML 페이지에 미리 정의된 문자열이 포함되어 있는지 확인할 수 있습니다. 시뮬레이션된 로그인을 실행하고 페이지에서 시뮬레이션된 마우스 클릭 경로를 따라갈 수 있습니다.

Zabbix 웹 모니터링은 HTTP와 HTTPS를 모두 지원합니다. 웹 시나리오를 실행할 때, Zabbix는 선택적으로 리디렉션을 따릅니다(아래의 리디렉션 따라가기 옵션 참조). 최대 리디렉션 수는 10으로 하드코딩되어 있습니다(cURL 옵션 CURLOPT_MAXREDIRS 사용). 모든 쿠키는 단일 시나리오 실행 동안 보존됩니다.

웹 시나리오 구성

웹 시나리오를 구성하려면:

  • 이동: 데이터 수집 → 호스트 (또는 템플릿)
  • 호스트/템플릿 행에서 을 클릭
  • 오른쪽의 웹 시나리오 생성을 클릭 (또는 기존 시나리오를 편집하려면 시나리오 이름을 클릭)
  • 양식에서 시나리오 매개변수를 입력

시나리오 탭에서는 웹 시나리오의 일반 매개변수를 구성할 수 있습니다.

모든 필수 입력 필드는 빨간색 별표로 표시됩니다.

시나리오 매개변수:

매개변수 설명
이름 고유한 시나리오 이름.
사용자 매크로가 지원됩니다. 참고 사용자 매크로를 사용하는 경우, 웹 모니터링 아이템 이름에서 이러한 매크로는 해석되지 않은 상태로 남게됩니다.
업데이트 간격 시나리오가 실행되는 빈도.
시간 접미사가 지원됩니다. 예: 30s, 1m, 2h, 1d.
사용자 매크로가 지원됩니다. 참고 사용자 매크로를 사용하고 그 값이 변경되는 경우(예: 5m → 30s), 다음 검사는 이전 값에 따라 실행됩니다(예시 값의 경우 더 먼 미래에).
새로운 웹 시나리오는 생성 후 60초 이내에 검사됩니다.
시도 횟수 웹 시나리오 단계 실행을 위한 시도 횟수. 네트워크 문제(시간 초과, 연결 불가 등)의 경우 Zabbix는 단계를 여러 번 반복 실행할 수 있습니다. 설정된 값은 시나리오의 각 단계에 동일하게 적용됩니다. 최대 10회까지 시도할 수 있으며, 기본값은 1입니다.
참고: Zabbix는 잘못된 응답 코드나 필수 문자열의 불일치 때문에 단계를 반복하지 않습니다.
에이전트 클라이언트 에이전트를 선택합니다.
Zabbix는 선택된 브라우저인 것처럼 동작합니다. 이는 웹사이트가 다른 브라우저에 대해 다른 내용을 반환할 때 유용합니다.
이 필드에서 사용자 매크로를 사용할 수 있습니다.
HTTP 프록시 [protocol://][username[:password]@]proxy.example.com[:port] 형식을 사용하여 사용할 HTTP 프록시를 지정할 수 있습니다.
이는 CURLOPT_PROXY cURL 옵션을 설정합니다.
선택적인 protocol:// 접두사는 대체 프록시 프로토콜을 지정하는 데 사용될 수 있습니다(프로토콜 접두사 지원은 cURL 7.21.7에서 추가됨). 프로토콜이 지정되지 않으면 프록시는 HTTP 프록시로 처리됩니다.
기본적으로 1080 포트가 사용됩니다.
지정된 경우, 프록시는 http_proxy, HTTPS_PROXY와 같은 프록시 관련 환경 변수를 덮어씁니다. 지정되지 않은 경우, 프록시는 프록시 관련 환경 변수를 덮어쓰지 않습니다. 입력된 값은 "그대로" 전달되며 유효성 검사는 수행되지 않습니다.
SOCKS 프록시 주소도 입력할 수 있습니다. 잘못된 프로토콜을 지정하면 연결이 실패하고 아이템이 지원되지 않는 상태가 됩니다.
참고 HTTP 프록시에서는 단순 인증만 지원됩니다.
이 필드에서 사용자 매크로를 사용할 수 있습니다.
변수 시나리오 단계(URL, post 변수)에서 사용할 수 있는 변수.
다음과 같은 형식을 가집니다:
{macro1}=value1
{macro2}=value2
{macro3}=regex:<regular expression>
{macro4}=jsonpath:<jsonpath>
{macro5}=xmlxpath:<xmlxpath>
{macro6}={{macro}.function()} (매크로 함수 참조).
참고 변수에서 JSONPath, XML XPath 및 매크로 함수 사용은 Zabbix 7.0.4부터 지원됩니다.
예를 들어:
{username}=Alexei
{password}=kj3h5kJ34bd
{hostid}=regex:hostid is ([0-9]+)
{url}=jsonpath:$.host_url
{status}=xmlxpath://host/response/status
{newvar}={{myvar}.btoa()}
매크로는 단계에서 {username}, {password}, {hostid} 등으로 참조할 수 있습니다. Zabbix는 자동으로 이를 실제 값으로 교체합니다. regex:가 있는 변수는 정규 표현식 값을 얻기 위해 한 단계가 필요하므로 추출된 값은 다음 단계에만 적용될 수 있습니다.
값 부분이 regex:로 시작하면 그 후의 부분은 웹 페이지를 검색하는 정규 표현식으로 처리되고, 발견되면 일치하는 값을 변수에 저장합니다. 일치하는 값을 추출할 수 있도록 최소 하나의 하위 그룹이 있어야 합니다.
사용자 매크로와 {HOST.*} 매크로가 지원됩니다.
변수는 쿼리 필드나 post 변수의 form data에 사용될 때 자동으로 URL 인코딩되지만, raw post에 사용되거나 URL에서 직접 사용될 때는 수동으로 URL 인코딩해야 합니다.
헤더 HTTP 헤더는 요청을 수행할 때 사용됩니다. 기본 및 사용자 정의 헤더를 사용할 수 있습니다.
헤더는 시나리오 수준의 드롭다운 목록에서 선택된 에이전트 유형에 따라 기본 설정을 사용하여 할당되며, 단계 수준에서 사용자 정의로 정의되지 않는 한 모든 단계에 적용됩니다.
단계 수준에서 헤더를 정의하면 시나리오 수준의 드롭다운 목록에서 'User-Agent'를 선택하여 할당되는 기본 헤더를 제외하고 이전에 정의된 모든 헤더가 자동으로 삭제됩니다.
그러나 'User-Agent' 기본 헤더도 단계 수준에서 지정하여 재정의할 수 있습니다.
시나리오 수준에서 헤더를 해제하려면 단계 수준에서 헤더 이름을 지정하고 값 없이 속성을 설정해야 합니다.
헤더는 CURLOPT_HTTPHEADER cURL 옵션에서 지원하는 일부 추가 기능을 선택적으로 사용하여 HTTP 프로토콜에 나타나는 것과 동일한 구문을 사용하여 나열해야 합니다.
예를 들어:
Accept-Charset=utf-8
Accept-Language=en-US
Content-Type=application/xml; charset=utf-8
사용자 매크로와 {HOST.*} 매크로가 지원됩니다.
활성화 이 상자가 체크되면 시나리오가 활성화되고, 그렇지 않으면 비활성화됩니다.

기존 시나리오를 편집할 때 양식에서 두 개의 추가 버튼을 사용할 수 있습니다:

기존 시나리오의 속성을 기반으로 다른 시나리오를 생성합니다.
시나리오의 히스토리와 추세 데이터를 삭제합니다. 이렇게 하면 서버가 데이터를 삭제한 후 즉시 시나리오를 실행합니다.

HTTP 프록시 필드를 비워두면 HTTP 프록시를 사용하는 다른 방법은 프록시 관련 환경 변수를 설정하는 것입니다.

HTTP 검사의 경우 - Zabbix 서버 사용자에 대해 http_proxy 환경 변수를 설정합니다. 예를 들어, http_proxy=http://proxy_ip:proxy_port.

HTTPS 검사의 경우 - HTTPS_PROXY 환경 변수를 설정합니다. 예를 들어, HTTPS_PROXY=http://proxy_ip:proxy_port. 더 자세한 정보는 셸 명령을 실행하여 확인할 수 있습니다: # man curl.

단계 탭에서는 웹 시나리오 단계를 구성할 수 있습니다. 웹 시나리오 단계를 추가하려면 단계 블록에서 추가를 클릭하세요.

비밀 사용자 매크로는 "******"로 해석되므로 URL에 사용해서는 안 됩니다.

단계 구성

단계 매개변수:

매개변수 설명
Name 고유한 단계 이름.
사용자 매크로가 지원됩니다. 참고: 사용자 매크로를 사용하는 경우, 이러한 매크로는 웹 모니터링 항목 이름에서 확장되지 않은 상태로 남게 됩니다.
URL 연결하고 데이터를 검색할 URL입니다. 예시:
https://www.example.com
http://www.example.com/download
도메인 이름은 유니코드 문자로 지정할 수 있습니다. 웹 시나리오 단계를 실행할 때 자동으로 punycode로 변환되어 ASCII로 변환됩니다.
Parse 버튼을 사용하여 URL에서 선택적 쿼리 필드(?name=Admin&password=mypassword 같은)를 분리하고, 속성과 값을 Query fields로 이동시켜 자동 URL 인코딩을 할 수 있습니다.
변수는 {macro} 구문을 사용하여 URL에서 사용할 수 있습니다. 변수는 {{macro}.urlencode()} 구문을 사용하여 수동으로 URL 인코딩할 수 있습니다.
사용자 매크로와 {HOST.*} 매크로가 지원됩니다.
2048자로 제한됩니다.
Query fields URL용 HTTP GET 변수.
속성과 값 쌍으로 지정됩니다.
값은 자동으로 URL 인코딩됩니다. 시나리오 변수, 사용자 매크로 또는 {HOST.*} 매크로의 값은 확장된 후 자동으로 URL 인코딩됩니다. {{macro}.urlencode()} 구문을 사용하면 이중 URL 인코딩이 됩니다.
사용자 매크로와 {HOST.*} 매크로가 지원됩니다.
Post HTTP POST 변수.
Form data 모드에서는 속성과 값 쌍으로 지정됩니다.
값은 자동으로 URL 인코딩됩니다. 시나리오 변수, 사용자 매크로 또는 {HOST.*} 매크로의 값은 확장된 후 자동으로 URL 인코딩됩니다.
Raw data 모드에서는 속성/값이 한 줄로 표시되고 & 기호로 연결됩니다.
원시 값은 {{macro}.urlencode()} 또는 {{macro}.urldecode()} 구문을 사용하여 수동으로 URL 인코딩/디코딩할 수 있습니다.
예시: id=2345&userid={user}
{user}가 웹 시나리오의 변수로 정의된 경우, 단계가 실행될 때 해당 값으로 대체됩니다. 변수를 URL 인코딩하려면 {user}를 {{user}.urlencode()}로 대체하십시오.
사용자 매크로와 {HOST.*} 매크로가 지원됩니다.
Variables GET 및 POST 기능에 사용될 수 있는 단계 수준 변수.
속성과 값 쌍으로 지정됩니다.
단계 수준 변수는 시나리오 수준 변수나 이전 단계의 변수를 재정의합니다. 단, 단계 수준 변수의 값은 다음 단계에만 영향을 줍니다(현재 단계가 아님).
다음과 같은 형식을 갖습니다:
{macro}=value
{macro}=regex:<regular expression>
자세한 정보는 시나리오 수준의 변수 설명을 참조하십시오.
변수는 쿼리 필드나 post 변수의 form data에서 사용될 때 자동으로 URL 인코딩되지만, raw post에서 사용하거나 URL에서 직접 사용할 때는 수동으로 URL 인코딩해야 합니다.
Headers 요청을 수행할 때 전송될 사용자 정의 HTTP 헤더.
속성과 값 쌍으로 지정됩니다.
단계 수준에서 정의된 헤더는 해당 특정 단계에서 사용됩니다.
단계 수준에서 헤더를 정의하면 이전에 정의된 모든 헤더가 자동으로 제거되며, 시나리오 수준의 드롭다운 목록에서 'User-Agent'를 선택하여 할당된 기본 헤더만 예외입니다.
그러나 단계 수준에서 지정하여 'User-Agent' 기본 헤더도 재정의할 수 있습니다.
예를 들어, 헤더에 이름을 할당하되 값을 설정하지 않으면 시나리오 수준의 기본 헤더가 해제됩니다.
사용자 매크로와 {HOST.*} 매크로가 지원됩니다.
이는 CURLOPT_HTTPHEADER cURL 옵션을 설정합니다.
Follow redirects HTTP 리디렉션을 따르려면 체크박스를 선택하십시오.
이는 CURLOPT_FOLLOWLOCATION cURL 옵션을 설정합니다.
Retrieve mode 검색 모드를 선택하십시오:
Body - HTTP 응답에서 본문만 검색
Headers - HTTP 응답에서 헤더만 검색
Body and headers - HTTP 응답에서 본문과 헤더 모두 검색
Timeout Zabbix는 URL 처리에 설정된 시간(1초부터 최대 1시간) 이상을 소비하지 않습니다. 실제로 이 매개변수는 URL에 연결하기 위한 최대 시간과 HTTP 요청을 수행하기 위한 최대 시간을 정의합니다. 따라서 Zabbix는 단계에 2 x Timeout 초 이상을 소비하지 않습니다.
시간 접미사가 지원됩니다(예: 30s, 1m, 1h). 사용자 매크로가 지원됩니다.
Required string 필수 정규 표현식 패턴.
검색된 콘텐츠(HTML)가 필수 패턴과 일치하지 않으면 단계가 실패합니다. 비어 있으면 필수 문자열 확인을 수행하지 않습니다.
예시:
Homepage of Zabbix
Welcome.*admin
참고: Zabbix 프론트엔드에서 생성된 정규 표현식 참조는 이 필드에서 지원되지 않습니다.
사용자 매크로와 {HOST.*} 매크로가 지원됩니다.
Required status codes 예상 HTTP 상태 코드 목록. Zabbix가 목록에 없는 코드를 받으면 단계가 실패합니다.
비어 있으면 상태 코드 확인을 수행하지 않습니다.
예시: 200,201,210-299
사용자 매크로가 지원됩니다.

웹 시나리오 단계의 모든 변경 사항은 전체 시나리오가 저장될 때만 저장됩니다.

웹 모니터링 단계를 구성하는 방법에 대한 실제 예시도 참조하십시오.

태그 구성

태그 탭에서는 시나리오 수준의 태그를 정의할 수 있습니다.

태깅을 사용하면 웹 시나리오와 웹 모니터링 항목을 필터링할 수 있습니다.

인증 구성

인증 탭에서는 시나리오 인증 옵션을 구성할 수 있습니다. 탭 이름 옆의 녹색 점은 어떤 유형의 HTTP 인증이 활성화되어 있음을 나타냅니다.

인증 매개변수:

매개변수 설명
HTTP 인증 인증 옵션을 선택하세요:
없음 - 인증을 사용하지 않음;
Basic - 기본 인증을 사용;
NTLM - NTLM (Windows NT LAN Manager) 인증을 사용;
Kerberos - Kerberos 인증을 사용 (참조: Zabbix와 Kerberos 구성);
Digest - Digest 인증을 사용.
사용자 사용자 이름을 입력하세요 (최대 255자).
이 필드는 HTTP 인증이 Basic, NTLM, Kerberos 또는 Digest로 설정된 경우 사용할 수 있습니다. 사용자 매크로가 지원됩니다.
비밀번호 사용자 비밀번호를 입력하세요 (최대 255자).
이 필드는 HTTP 인증이 Basic, NTLM, Kerberos 또는 Digest로 설정된 경우 사용할 수 있습니다. 사용자 매크로가 지원됩니다.
SSL 피어 검증 웹 서버의 SSL 인증서를 검증하려면 체크박스를 체크하세요.
서버 인증서는 시스템 전체 인증 기관(CA) 위치에서 자동으로 가져옵니다. Zabbix 서버 또는 프록시 구성 매개변수 SSLCALocation을 사용하여 CA 파일의 위치를 재정의할 수 있습니다.
이것은 CURLOPT_SSL_VERIFYPEER cURL 옵션을 설정합니다.
SSL 호스트 검증 웹 서버 인증서의 Common Name 필드 또는 Subject Alternate Name 필드가 일치하는지 검증하려면 체크박스를 체크하세요.
이것은 CURLOPT_SSL_VERIFYHOST cURL 옵션을 설정합니다.
SSL 인증서 파일 클라이언트 인증에 사용되는 SSL 인증서 파일 이름입니다. 인증서 파일은 PEM1 형식이어야 합니다. 인증서 파일에 개인 키도 포함되어 있는 경우 SSL 키 파일 필드는 비워두세요. 키가 암호화되어 있는 경우 SSL 키 비밀번호 필드에 비밀번호를 지정하세요. 이 파일이 포함된 디렉터리는 Zabbix 서버 또는 프록시 구성 매개변수 SSLCertLocation으로 지정됩니다.
HOST.* 매크로와 사용자 매크로를 이 필드에서 사용할 수 있습니다.
이것은 CURLOPT_SSLCERT cURL 옵션을 설정합니다.
SSL 키 파일 클라이언트 인증에 사용되는 SSL 개인 키 파일 이름입니다. 개인 키 파일은 PEM1 형식이어야 합니다. 이 파일이 포함된 디렉터리는 Zabbix 서버 또는 프록시 구성 매개변수 SSLKeyLocation으로 지정됩니다.
HOST.* 매크로와 사용자 매크로를 이 필드에서 사용할 수 있습니다.
이것은 CURLOPT_SSLKEY cURL 옵션을 설정합니다.
SSL 키 비밀번호 SSL 개인 키 파일 비밀번호입니다.
사용자 매크로를 이 필드에서 사용할 수 있습니다.
이것은 CURLOPT_KEYPASSWD cURL 옵션을 설정합니다.

[1] Zabbix는 PEM 형식의 인증서와 개인 키 파일만 지원합니다. PKCS #12 형식 파일(보통 *.p12 또는 *.pfx 확장자)에 인증서와 개인 키 데이터가 있는 경우, 다음 명령을 사용하여 PEM 파일을 생성할 수 있습니다:

openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes  -out ssl-cert.key

Zabbix 서버는 재시작 없이 인증서 변경 사항을 적용합니다.

클라이언트 인증서와 개인 키가 하나의 파일에 있는 경우, "SSL 인증서 파일" 필드에만 지정하고 "SSL 키 파일" 필드는 비워두세요. 인증서와 키는 여전히 PEM 형식이어야 합니다. 인증서와 키를 결합하는 것은 간단합니다:

cat client.crt client.key > client.pem

표시

호스트에 구성된 웹 시나리오를 보려면 Monitoring → Hosts로 이동하여 목록에서 호스트를 찾고 마지막 열의 Web 하이퍼링크를 클릭하세요. 시나리오 이름을 클릭하면 자세한 정보를 확인할 수 있습니다.

웹 시나리오의 개요는 웹 모니터링 위젯을 통해 Dashboards에서도 표시할 수 있습니다.

웹 시나리오 실행의 최근 결과는 Monitoring → Latest data 섹션에서 확인할 수 있습니다.

확장 모니터링

때때로 수신된 HTML 페이지 콘텐츠를 기록하는 것이 필요합니다. 이는 웹 시나리오 단계가 실패하는 경우 특히 유용합니다. 디버그 레벨 5 (trace)가 이 목적을 수행합니다. 이 레벨은 서버프록시 설정 파일에서 설정하거나 런타임 제어 옵션(-R log_level_increase="http poller,N", 여기서 N은 프로세스 번호)을 사용하여 설정할 수 있습니다. 다음 예제들은 디버그 레벨 4가 이미 설정된 상태에서 확장 모니터링을 시작하는 방법을 보여줍니다:

# 모든 http poller의 로그 레벨 증가:
zabbix_server -R log_level_increase="http poller"

# 두 번째 http poller의 로그 레벨 증가:
zabbix_server -R log_level_increase="http poller,2"

확장 웹 모니터링이 필요하지 않은 경우 -R log_level_decrease 옵션을 사용하여 중지할 수 있습니다.