17 Pozycja przeglądarki
Przegląd
Pozycje Browser umożliwiają monitorowanie złożonych witryn internetowych i aplikacji webowych za pomocą przeglądarki.
Obsługa pozycji Browser jest obecnie eksperymentalna.
Pozycje Browser zbierają dane, wykonując zdefiniowany przez użytkownika kod JavaScript i pobierając dane przez HTTP/HTTPS. Ta pozycja może symulować takie działania związane z przeglądarką, jak klikanie, wprowadzanie tekstu, nawigowanie po stronach internetowych oraz inne interakcje użytkownika z witrynami internetowymi lub aplikacjami webowymi.
Oprócz skryptu można określić opcjonalną listę parametrów (pary nazwy i wartości) oraz limit czasu.
Ta pozycja częściowo implementuje standard W3C WebDriver z użyciem Selenium Server lub zwykłego WebDrivera (na przykład ChromeDriver) jako punktu końcowego testów webowych.
Aby pozycja działała, ustaw parametr WebDriverURL w pliku konfiguracyjnym Zabbix server/proxy (jeśli używasz ChromeDriver, zobacz Security Considerations).
Aby uzyskać lepszą wydajność, rozważ użycie dedykowanego serwera dla środowiska testów webowych.
Sprawdzenia pozycji Browser są wykonywane i przetwarzane przez procesy browser pollers serwera Zabbix lub proxy.
W razie potrzeby można dostosować liczbę wstępnie rozwidlonych instancji browser pollers w pliku konfiguracyjnym Zabbix server/proxy, w parametrze StartBrowserPollers.
Do monitorowania złożonych witryn internetowych i aplikacji webowych dostępny jest szablon Website by Browser jako szablon dostępny od razu po instalacji.
Konfiguracja
W polu Type formularza konfiguracji pozycji wybierz Browser, a następnie wypełnij wymagane pola.

Wszystkie obowiązkowe pola wejściowe są oznaczone czerwoną gwiazdką.
Pola wymagające określonych informacji dla pozycji Browser to:
| Field | Description |
|---|---|
| Key | Wprowadź unikalny klucz, który będzie używany do identyfikacji pozycji. |
| Parameters | Określ zmienne, które mają zostać przekazane do skryptu jako pary atrybut-wartość. Obsługiwane są makra użytkownika. Aby sprawdzić, które wbudowane makra są obsługiwane, wyszukaj frazę "Browser-type item" w tabeli obsługiwanych makr. |
| Script | Wprowadź kod JavaScript w modalnym edytorze, który otwiera się po kliknięciu w pole parametru lub ikonę ołówka obok niego. Kod ten musi zawierać logikę zwracania wartości metryki. Kod ma dostęp do wszystkich parametrów, wszystkich dodatkowych obiektów JavaScript oraz obiektów JavaScript pozycji Browser dodanych przez Zabbix. Zobacz także: Przewodnik po JavaScript. |
| Timeout | Limit czasu wykonania JavaScript (1-600 s; jego przekroczenie spowoduje zwrócenie błędu). Należy pamiętać, że w zależności od skryptu wyzwolenie limitu czasu może potrwać dłużej. Więcej informacji o parametrze Timeout można znaleźć w sekcji ogólnych atrybutów pozycji. |
Przykłady
Przykład konfiguracji Zabbixa do monitorowania witryn internetowych przy użyciu szablonu Website by Browser można znaleźć w sekcji Monitorowanie witryn internetowych za pomocą pozycji przeglądarki.
Domyślny skrypt
Poniższy skrypt:
- Inicjalizuje sesję przeglądarki.
- Przechodzi pod określony adres URL.
- Zbiera wpisy wydajności i statystyki sesji, a następnie zwraca je jako ciąg JSON.
W polu Skrypt wprowadź:
var browser = new Browser(Browser.chromeOptions());
try {
browser.navigate("http://example.com");
browser.collectPerfEntries();
}
finally {
return JSON.stringify(browser.getResult());
}
Inicjalizacja przeglądarki z niestandardowymi możliwościami
Poniższy skrypt:
- Inicjuje sesję przeglądarki dla dostępnej przeglądarki na podstawie pierwszej pasującej przeglądarki w kolejności określonej w skrypcie.
- Definiuje możliwości przeglądarki, w tym strategię ładowania strony oraz opcje specyficzne dla każdej przeglądarki, takie jak tryb headless dla przeglądarek Chrome, Firefox i Microsoft Edge.
W polu Script wpisz:
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"
}
]
}
});
Inicjalizacja przeglądarki z GUI
Domyślnie sesje przeglądarki (z wyjątkiem Safari) są inicjalizowane w trybie bez interfejsu graficznego, co oznacza, że graficzny interfejs użytkownika (GUI) przeglądarki nie jest wyświetlany.
Poniższy skrypt inicjalizuje sesję przeglądarki z włączonym GUI.
Jeśli WebDriver nie może zlokalizować pliku binarnego przeglądarki, możesz ręcznie określić ścieżkę.
var opts = Browser.chromeOptions();
opts.capabilities.alwaysMatch['goog:chromeOptions'].args = [];
// Aby zainicjalizować sesję Firefox z GUI, odkomentuj następujące linie:
// var opts = Browser.firefoxOptions();
// opts.capabilities.alwaysMatch['moz:firefoxOptions'].binary = 'usr/bin/firefox';
// opts.capabilities.alwaysMatch['moz:firefoxOptions'].args = [];
// Aby zainicjalizować sesję Microsoft Edge z GUI, odkomentuj następujące linie:
// 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);
Jeśli testy są uruchamiane na zdalnym serwerze lub w kontenerze, możesz użyć klienta Virtual Network Computing (VNC), aby połączyć się z serwerem VNC maszyny. Umożliwia to zdalne wyświetlanie i interakcję z graficznym interfejsem przeglądarki.
Zrób zrzuty ekranu
Następujący skrypt:
- Inicjuje sesję przeglądarki.
- Ustawia rozmiar obszaru wyświetlania przeglądarki, aby określić rozmiar zrzutu ekranu (określony jako parametry, patrz poniżej).
- Przechodzi do adresu URL (określonego jako parametr, patrz poniżej).
- Zbiera statystyki sesji, wykonuje zrzut ekranu i dodaje go do zebranych statystyk.
- Obsługuje błędy, przechwytując komunikaty o błędach i zrzut ekranu.
- Zwraca zebrane wyniki jako ciąg JSON.
Skrypt używa również parametrów z formularza konfiguracji pozycji:
- webURL - http://example.com
- width - 1920
- height - 1080
W polu Script wpisz:
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);
}
Sprawdzenie logowania do Zabbix
Poniższy skrypt:
- Inicjalizuje sesję przeglądarki.
- Przechodzi do strony (określonej jako parametr, patrz poniżej).
- Wprowadza nazwę użytkownika i hasło (określone jako parametry, patrz poniżej).
- Wyszukuje i klika przycisk logowania.
- Wyszukuje i klika przycisk wylogowania.
- Zbiera dane wydajności przed logowaniem i po nim, a także po wylogowaniu.
- Obsługuje błędy przez przechwytywanie komunikatów o błędach i zrzutu ekranu.
- Zwraca zebrane wyniki jako ciąg JSON.
Skrypt używa również parametrów z formularza konfiguracji pozycji:
- webURL - http://{HOST.CONN}/index.php
- username - {$USERNAME}
- password - {$PASSWORD}
W polu Script wprowadź:
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);
}
Znajdowanie linków
Poniższy skrypt:
- Inicjuje sesję przeglądarki.
- Definiuje funkcję do usuwania zduplikowanych elementów z tablicy (zobacz krok 5).
- Przechodzi do strony (określonej jako parametry, zobacz poniżej).
- Znajduje linki na stronie.
- Usuwa zduplikowane linki, aby zapewnić ich unikalność.
- Wyodrębnia tylko linki zaczynające się od "http".
- Formatuje wyodrębnione linki do określonej struktury.
- Obsługuje błędy, przechwytując komunikaty o błędach i zrzut ekranu.
- Zwraca zebrane wyniki jako ciąg JSON.
Skrypt używa również parametrów z formularza konfiguracji pozycji:
- scheme - {$WEBSITE.SCHEME}
- domain - {$WEBSITE.DOMAIN}
- path - {$WEBSITE.PATH}
W polu Script wpisz:
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);
}