19 Pozycje przeglądarki
Przegląd
Pozycje przeglądarki umożliwiają monitorowanie złożonych witryn internetowych i aplikacji webowych przy użyciu przeglądarki.
Obsługa pozycji przeglądarki jest obecnie eksperymentalna.
Pozycje przeglądarki zbierają dane przez wykonywanie kodu JavaScript zdefiniowanego przez użytkownika oraz pobieranie danych przez HTTP/HTTPS. Ta pozycja może symulować takie działania związane z przeglądarką, jak klikanie, wprowadzanie tekstu, przechodzenie między stronami internetowymi oraz inne interakcje użytkownika z witrynami internetowymi lub aplikacjami webowymi.
Oprócz skryptu można określić opcjonalną listę parametrów (par nazw i wartości) oraz limit czasu.
Pozycja częściowo implementuje standard W3C WebDriver standard 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 punkt końcowy w parametrze WebDriverURL pliku konfiguracyjnego Zabbix server/proxy (jeśli używasz ChromeDrivera, zobacz Security Considerations).
Aby uzyskać lepszą wydajność, rozważ użycie dedykowanego serwera dla środowiska testów webowych.
Kontrole pozycji przeglądarki są wykonywane i przetwarzane przez pollery przeglądarki Zabbix server lub proxy.
W razie potrzeby możesz dostosować liczbę wstępnie tworzonych instancji pollerów przeglądarki w parametrze StartBrowserPollers pliku konfiguracyjnego Zabbix server/proxy.
Do monitorowania złożonych witryn internetowych i aplikacji webowych dostępny jest szablon Website by Browser jako gotowy szablon.
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 Zabbix do monitorowania stron internetowych przy użyciu szablonu Website by Browser można znaleźć w Monitor websites with Browser items.
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 capabilities
Poniższy skrypt:
- Inicjalizuje sesję przeglądarki dla dostępnej przeglądarki na podstawie pierwszej pasującej przeglądarki zgodnie z kolejnością określoną w skrypcie.
- Definiuje capabilities 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 wprowadź:
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 headless, 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.
Pamiętaj, że 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 poniższe 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 poniższe 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 tej maszyny. Pozwala to zdalnie wyświetlać GUI przeglądarki i wchodzić z nim w interakcję.
Wykonywanie zrzutów ekranu
Poniższy skrypt:
- Inicjalizuje sesję przeglądarki.
- Ustawia rozmiar obszaru roboczego przeglądarki w celu określenia rozmiaru zrzutu ekranu (określonego 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 wprowadź:
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:
- Inicjalizuje sesję przeglądarki.
- Definiuje funkcję usuwania zduplikowanych elementów z tablicy (zobacz krok 5).
- Przechodzi do strony (określonej przez parametry, patrz 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 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:
- scheme - {$WEBSITE.SCHEME}
- domain - {$WEBSITE.DOMAIN}
- path - {$WEBSITE.PATH}
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.
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);
}