9 웹 모니터링

원본 보기

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 변수의 양식 데이터에서 사용될 때 자동으로 URL 인코딩되지만, raw post에서 사용되거나 URL에서 직접 사용될 때는 수동으로 URL 인코딩해야 합니다.
헤더 HTTP 헤더는 요청을 수행할 때 사용됩니다. 기본 헤더와 사용자 정의 헤더를 사용할 수 있습니다.
헤더는 시나리오 레벨의 드롭다운 목록에서 선택한 에이전트 유형에 따라 기본 설정을 사용하여 할당되며, 단계 레벨에서 사용자 정의로 정의되지 않는 한 모든 단계에 적용됩니다.
단계 레벨에서 헤더를 정의하면 시나리오 레벨의 드롭다운 목록에서 'User-Agent'를 선택하여 할당된 기본 헤더를 제외하고 이전에 정의된 모든 헤더가 자동으로 무시됩니다.
그러나 'User-Agent' 기본 헤더도 단계 레벨에서 지정하여 재정의할 수 있습니다.
시나리오 레벨에서 헤더를 해제하려면, 단계 레벨에서 헤더 이름을 지정하고 값을 비워두어야 합니다.
헤더는 HTTP 프로토콜에서 나타나는 것과 동일한 구문을 사용하여 나열해야 하며, 선택적으로 CURLOPT_HTTPHEADER cURL 옵션에서 지원하는 일부 추가 기능을 사용할 수 있습니다.
예시:
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에서 사용해서는 안 됩니다.

스텝 구성

스텝 매개변수:

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

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

웹 모니터링 스텝을 어떻게 구성할 수 있는지에 대한 실제 예제도 참조하세요.

태그 구성

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

태그 지정을 통해 웹 시나리오와 웹 모니터링 아이템을 필터링할 수 있습니다.

인증 구성

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

인증 매개변수:

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

cat client.crt client.key > client.pem

표시

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

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

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

Extended monitoring

Sometimes it is necessary to log received HTML page content. This is especially useful if some web scenario step fails. Debug level 5 (trace) serves that purpose. This level can be set in server and proxy configuration files or using a runtime control option (-R log_level_increase="http poller,N", where N is the process number). The following examples demonstrate how extended monitoring can be started provided debug level 4 is already set:

# Increase log level of all http pollers:
zabbix_server -R log_level_increase="http poller"

# Increase log level of second http poller:
zabbix_server -R log_level_increase="http poller,2"

If extended web monitoring is not required it can be stopped using the -R log_level_decrease option.