문서
원본 보기17 브라우저 항목
개요
브라우저 아이템은 브라우저를 사용하여 복잡한 웹사이트와 웹 애플리케이션을 모니터링할 수 있게 해줍니다.
브라우저 아이템 지원은 현재 실험적 기능입니다.
브라우저 아이템은 사용자 정의 JavaScript 코드를 실행하고 HTTP/HTTPS를 통해 데이터를 검색하여 데이터를 수집합니다. 이 아이템은 클릭, 텍스트 입력, 웹 페이지 탐색 및 웹사이트나 웹 애플리케이션과의 기타 사용자 상호작용과 같은 브라우저 관련 작업을 시뮬레이션할 수 있습니다.
스크립트 외에도 선택적으로 매개변수 목록(이름과 값의 쌍)과 타임아웃을 지정할 수 있습니다.
이 아이템은 웹 테스트 엔드포인트로 Selenium Server 또는 일반 WebDriver(예: ChromeDriver)와 함께 W3C WebDriver 표준을 부분적으로 구현합니다.
아이템이 작동하려면 Zabbix 서버/프록시 구성 파일의 WebDriverURL 매개변수에서 엔드포인트를 설정해야 합니다(ChromeDriver를 사용하는 경우 보안 고려사항 참조).
더 나은 성능을 위해 웹 테스트 환경을 위한 전용 서버 사용을 고려하세요.
브라우저 아이템 점검은 Zabbix 서버 또는 프록시 브라우저 폴러에 의해 실행되고 처리됩니다.
필요한 경우 Zabbix 서버/프록시 구성 파일의 StartBrowserPollers 매개변수에서 브라우저 폴러의 미리 포크된 인스턴스 수를 조정할 수 있습니다.
복잡한 웹사이트와 웹 애플리케이션 모니터링을 위해 Website by Browser 템플릿이 기본 제공 템플릿으로 제공됩니다.
설정
아이템 설정 폼의 유형 필드에서 Browser를 선택한 후 필수 필드를 입력하세요.

모든 필수 입력 필드는 빨간색 별표로 표시됩니다.
Browser 아이템에 대한 특정 정보가 필요한 필드는 다음과 같습니다:
| 필드 | 설명 |
|---|---|
| 키 | 아이템을 식별하는 데 사용될 고유 키를 입력하세요. |
| 매개변수 | 속성과 값 쌍으로 스크립트에 전달할 변수를 지정하세요. 사용자 매크로가 지원됩니다. 지원되는 내장 매크로를 확인하려면 지원되는 매크로 테이블에서 "Browser-type item"을 검색하세요. |
| 스크립트 | 매개변수 필드를 클릭하거나 옆의 연필 아이콘을 클릭할 때 열리는 모달 편집기에서 JavaScript 코드를 입력하세요. 이 코드는 메트릭 값을 반환하는 로직을 제공해야 합니다. 코드는 모든 매개변수, Zabbix에서 추가한 모든 추가 JavaScript 객체 및 Browser 아이템 JavaScript 객체에 접근할 수 있습니다. 참고: JavaScript 가이드. |
| 타임아웃 | JavaScript 실행 타임아웃 (1-600초; 초과 시 오류가 반환됩니다). 스크립트에 따라 타임아웃이 발생하는 데 더 오래 걸릴 수 있습니다. 타임아웃 매개변수에 대한 자세한 정보는 일반 아이템 속성을 참조하세요. |
예제
Website by Browser 템플릿을 사용하여 웹사이트 모니터링을 위한 Zabbix 설정 예제는 브라우저 아이템으로 웹사이트 모니터링을 참조하세요.
기본 스크립트
다음 스크립트는:
- 브라우저 세션을 초기화합니다.
- 지정된 URL로 이동합니다.
- 성능 항목과 세션 통계를 수집하고, JSON 문자열로 반환합니다.
Script 필드에 다음을 입력하세요:
var browser = new Browser(Browser.chromeOptions());
try {
browser.navigate("http://example.com");
browser.collectPerfEntries();
}
finally {
return JSON.stringify(browser.getResult());
}
사용자 정의 기능으로 브라우저 초기화
다음 스크립트는:
- 스크립트 내에서 지정된 순서대로 첫 번째로 일치하는 브라우저를 기반으로 사용 가능한 브라우저에 대한 브라우저 세션을 초기화합니다.
- Chrome, Firefox, Microsoft Edge 브라우저의 헤드리스 모드와 같이 각 브라우저별 옵션과 페이지 로드 전략을 포함한 브라우저 기능을 정의합니다.
Script 필드에 다음을 입력하세요:
var browser = new Browser({
"capabilities":{
"firstMatch":[
{
"browserName":"chrome",
"pageLoadStrategy":"normal",
"goog:chromeOptions":{
"args":[
"--headless=new"
]
}
},
{
"browserName":"firefox",
"pageLoadStrategy":"normal",
"moz:firefoxOptions":{
"args":[
"--headless"
]
}
},
{
"browserName":"MicrosoftEdge",
"pageLoadStrategy":"normal",
"ms:edgeOptions":{
"args":[
"--headless=new"
]
}
},
{
"browserName":"safari",
"pageLoadStrategy":"normal"
}
]
}
});
GUI로 브라우저 초기화
기본적으로 브라우저 세션(Safari 제외)은 헤드리스 모드로 초기화되며, 이는 브라우저의 그래픽 사용자 인터페이스(GUI)가 표시되지 않음을 의미합니다.
다음 스크립트는 GUI가 활성화된 브라우저 세션을 초기화합니다.
WebDriver가 브라우저 바이너리를 찾을 수 없는 경우 경로를 수동으로 지정할 수 있습니다.
var opts = Browser.chromeOptions();
opts.capabilities.alwaysMatch['goog:chromeOptions'].args = [];
// GUI로 Firefox 세션을 초기화하려면 다음 줄의 주석을 해제하세요:
// var opts = Browser.firefoxOptions();
// opts.capabilities.alwaysMatch['moz:firefoxOptions'].binary = 'usr/bin/firefox';
// opts.capabilities.alwaysMatch['moz:firefoxOptions'].args = [];
// GUI로 Microsoft Edge 세션을 초기화하려면 다음 줄의 주석을 해제하세요:
// var opts = Browser.edgeOptions();
// opts.capabilities.alwaysMatch['ms:edgeOptions'].binary = 'usr/bin/microsoft-edge';
// opts.capabilities.alwaysMatch['ms:edgeOptions'].args = [];
var browser = new Browser(opts);
테스트가 원격 서버나 컨테이너에서 실행되는 경우 VNC(Virtual Network Computing) 클라이언트를 사용하여 머신의 VNC 서버에 연결할 수 있습니다. 이를 통해 브라우저의 GUI를 원격으로 보고 상호 작용할 수 있습니다.
스크린샷 촬영
다음 스크립트는:
- 브라우저 세션을 초기화합니다.
- 스크린샷 크기를 결정하기 위해 브라우저의 뷰포트 크기를 설정합니다 (매개변수로 지정, 아래 참조).
- URL로 이동합니다 (매개변수로 지정, 아래 참조).
- 세션 통계를 수집하고, 스크린샷을 촬영하여 수집된 통계에 추가합니다.
- 오류 메시지와 스크린샷을 캡처하여 오류를 처리합니다.
- 수집된 결과를 JSON 문자열로 반환합니다.
이 스크립트는 아이템 구성 폼의 매개변수도 사용합니다:
- webURL - http://example.com
- width - 1920
- height - 1080
Script 필드에 다음을 입력하세요:
var browser, result;
var browser = new Browser(Browser.chromeOptions());
try {
var params = JSON.parse(value); // Parse the JSON string containing parameters passed from Zabbix.
browser.setScreenSize(Number(params.width), Number(params.height))
browser.navigate(params.webURL);
result = browser.getResult();
result.screenshot = browser.getScreenshot();
}
catch (err) {
if (!(err instanceof BrowserError)) {
browser.setError(err.message);
}
result = browser.getResult();
result.error.screenshot = browser.getScreenshot();
}
finally {
return JSON.stringify(result);
}
Zabbix 로그인 확인
다음 스크립트는:
- 브라우저 세션을 초기화합니다.
- 페이지로 이동합니다(아래 참조, 매개변수로 지정됨).
- 사용자명과 비밀번호를 입력합니다(아래 참조, 매개변수로 지정됨).
- 로그인 버튼을 찾고 클릭합니다.
- 로그아웃 버튼을 찾고 클릭합니다.
- 로그인 전후와 로그아웃 후의 성능 데이터를 수집합니다.
- 오류 메시지와 스크린샷을 캡처하여 오류를 처리합니다.
- 수집된 결과를 JSON 문자열로 반환합니다.
이 스크립트는 항목 구성 폼의 매개변수도 사용합니다:
- webURL - http://{HOST.CONN}/index.php
- username - {$USERNAME}
- password - {$PASSWORD}
스크립트 필드에 다음을 입력하세요:
var browser, result;
browser = new Browser(Browser.chromeOptions());
try {
var params = JSON.parse(value); // Parse the JSON string containing parameters passed from Zabbix.
browser.navigate(params.webURL);
browser.collectPerfEntries("open page");
var el = browser.findElement("xpath", "//input[@id='name']");
if (el === null) {
throw Error("cannot find name input field");
}
el.sendKeys(params.username);
el = browser.findElement("xpath", "//input[@id='password']");
if (el === null) {
throw Error("cannot find password input field");
}
el.sendKeys(params.password);
el = browser.findElement("xpath", "//button[@id='enter']");
if (el === null) {
throw Error("cannot find login button");
}
el.click();
browser.collectPerfEntries("login");
el = browser.findElement("link text", "Sign out");
if (el === null) {
throw Error("cannot find logout button");
}
el.click();
browser.collectPerfEntries("logout");
result = browser.getResult();
}
catch (err) {
if (!(err instanceof BrowserError)) {
browser.setError(err.message);
}
result = browser.getResult();
result.error.screenshot = browser.getScreenshot();
}
finally {
return JSON.stringify(result);
}
링크 찾기
다음 스크립트는:
- 브라우저 세션을 초기화합니다.
- 배열에서 중복 요소를 제거하는 함수를 정의합니다 (5단계 참조).
- 페이지로 이동합니다 (아래 매개변수로 지정).
- 페이지에서 링크를 찾습니다.
- 중복 링크를 제거하여 고유하게 만듭니다.
- "http"로 시작하는 링크만 추출합니다.
- 추출된 링크를 특정 구조로 형식화합니다.
- 오류 메시지와 스크린샷을 캡처하여 오류를 처리합니다.
- 수집된 결과를 JSON 문자열로 반환합니다.
스크립트는 또한 아이템 구성 양식의 매개변수를 사용합니다:
- scheme - {$WEBSITE.SCHEME}
- domain - {$WEBSITE.DOMAIN}
- path - {$WEBSITE.PATH}
Script 필드에 다음을 입력하세요:
var browser, result;
browser = new Browser(Browser.chromeOptions());
try {
var params = JSON.parse(value); // Parse the JSON string containing parameters passed from Zabbix.
function uniq(a) {
return a.sort().filter(function (item, pos, ary) {
return !pos || item != ary[pos - 1];
});
}
browser.navigate(params.scheme + '://' + params.domain + params.path);
var el = browser.findElements("link text", "");
var links = [];
for (var n = 0; n < el.length; n++) {
links.push(el[n].getAttribute('href'));
}
links = uniq(links);
result = [];
for (i = 0; i < links.length; i++) {
if (links[i].match(/^http.*/)) {
var row = {};
row["{#URL}"] = links[i];
result.push(row);
}
}
}
catch (err) {
if (!(err instanceof BrowserError)) {
browser.setError(err.message);
}
result = browser.getResult();
result.error.screenshot = browser.getScreenshot();
}
finally {
return JSON.stringify(result);
}