ブラウザーアイテムを使用すると、ブラウザーを使用して複雑なWebサイトやWebアプリケーションを監視できます。
ブラウザーアイテムのサポートは現在実験的なものです。
ブラウザーアイテムは、ユーザー定義のJavaScriptコードを実行し、HTTP/HTTPS経由でデータを取得することでデータを収集します。 このアイテムは、クリック、テキスト入力、Webページのナビゲーション、その他のWebサイトやWebアプリケーションでのユーザー操作など、ブラウザー関連のアクションをシミュレートできます。
スクリプトに加えて、オプションでパラメーターのリスト(名前と値のペア)やタイムアウトを指定できます。
このアイテムは、W3C WebDriver標準を部分的に実装しており、Selenium ServerまたはプレーンなWebDriver(例:ChromeDriver)をWebテストエンドポイントとして使用します。 アイテムを動作させるには、Zabbix サーバー/プロキシの設定ファイルでWebDriverURLパラメーターにエンドポイントを設定してください(ChromeDriverを使用する場合は、セキュリティに関する考慮事項を参照)。 パフォーマンス向上のため、Webテスト環境用に専用サーバーの使用を検討してください。
ブラウザーアイテムのチェックは、Zabbixサーバーまたはプロキシのブラウザーポーラーによって実行および処理されます。 必要に応じて、Zabbix サーバー/プロキシの設定ファイルでStartBrowserPollersパラメーターを使用して、ブラウザーポーラーの事前フォークインスタンス数を調整できます。
複雑なWebサイトやWebアプリケーションの監視には、Website by Browserテンプレートが標準テンプレートとして利用できます。
アイテム設定フォームのタイプフィールドで「ブラウザー」を選択し、必要なフィールドに入力します。

すべての必須入力フィールドには赤いアスタリスクが付いています。
ブラウザーアイテムに固有の情報が必要なフィールドは次のとおりです。
| フィールド | 説明 |
|---|---|
| キー | アイテムを識別するために使用される一意のキーを入力します。 |
| パラメーター | スクリプトに渡す変数を属性と値のペアで指定します。 ユーザーマクロがサポートされています。サポートされている組み込みマクロを確認するには、サポートされているマクロテーブルで「ブラウザータイプのアイテム」を検索してください。 |
| スクリプト | パラメーターフィールドをクリックするか、その横の鉛筆アイコンをクリックすると開くモーダルエディターにJavaScriptコードを入力します。このコードはメトリック値を返すロジックを提供する必要があります。 コードは、すべてのパラメーター、すべての追加JavaScriptオブジェクト、およびZabbixによって追加されたブラウザーアイテムJavaScriptオブジェクトにアクセスできます。 参考: JavaScriptガイド。 |
| タイムアウト | JavaScript実行のタイムアウト(1~600秒;これを超えるとエラーが返されます)。 スクリプトによっては、タイムアウトが発生するまでに時間がかかる場合があります。 タイムアウトパラメーターの詳細については、一般的なアイテム属性を参照してください。 |
Website by Browser テンプレートを使用してWebサイトを監視するためのZabbixのセットアップ方法の例については、BrowserアイテムでWebサイトを監視するを参照してください。
以下のスクリプトは、次の処理を行います。
スクリプト フィールドに以下を入力します。
var browser = new Browser(Browser.chromeOptions());
try {
browser.navigate("http://example.com");
browser.collectPerfEntries();
}
finally {
return JSON.stringify(browser.getResult());
}以下のスクリプトは:
スクリプト フィールドに以下を入力します:
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"
}
]
}
});デフォルトでは、ブラウザセッション(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をリモートで表示および操作できます。
以下のスクリプトは:
このスクリプトは、アイテム設定フォームからのパラメータも使用します:
スクリプト フィールドに以下を入力します:
var browser, result;
var browser = new Browser(Browser.chromeOptions());
try {
var params = JSON.parse(value); // Zabbixから渡されたパラメータを含むJSON文字列を解析します。
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);
}以下のスクリプトは、
また、アイテム設定フォームのパラメータも使用します。
スクリプト フィールドには、以下を入力します。
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);
}以下のスクリプトは:
また、アイテム設定フォームのパラメータも使用します:
スクリプト フィールドに以下を入力します:
var browser, result;
browser = new Browser(Browser.chromeOptions());
try {
var params = JSON.parse(value); // Zabbixから渡されたパラメータを含むJSON文字列を解析します。
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);
}