このセクションではJavaScript言語のDuktapeで実装されたZabbixの追加機能とサポートされているグローバルJavaScript関数について説明します。
ZabbixオブジェクトはZabbixの内部機能とのインタラクションを提供します。
メソッド | 説明 |
---|---|
log(loglevel, message) |
ログレベル<loglevel>を使用して<message>をZabbixログに書き込みます(設定ファイルのDebugLevelパラメータを参照) |
例:
以下のエイリアスを使用することができます:
エイリアス | ~へのエイリアス |
---|---|
console.log(object) | Zabbix.log(4, JSON.stringify(object)) |
console.warn(object) | Zabbix.log(3, JSON.stringify(object)) |
console.error(object) | Zabbix.log(2, JSON.stringify(object)) |
ログに記録されるすべてのメッセージの合計サイズは、スクリプト実行ごとに8MBに制限されます。
メソッド | 説明 |
---|---|
sleep(delay) |
JavaScriptの実行をdelay ミリ秒遅らせます。 |
例(実行を15秒遅らせる):
このオブジェクトは、単純な HttpRequest を行うための cURL ハンドルをカプセル化したものです。エラーは例外として投げられます
HttpRequestはZabbix 5.4から採用された新しい名称です。以前はCurlHttpRequestと呼ばれていました。 Zabbix 5.4からメソッド名も変更されました。旧オブジェクト/メソッド名は非推奨となり、Zabbix 6.0以降サポートは廃止となります。
Method | Description |
---|---|
addHeader(value) |
HTTPヘッダーフィールドを追加します。このフィールドは、clearHeader() メソッドでクリアされるまで、以降のすべてのリクエストに使用されます。単一の HttpRequest オブジェクトに追加できるヘッダーフィールドの合計長は、128KBに制限されています (特殊文字とヘッダー名を含む)。 |
clearHeader() |
HTTPヘッダーをクリアします。ヘッダーフィールドが設定されていない場合、HttpRequest は、投稿されるデータがJSON形式であればContent-Typeをapplication/jsonに設定し、それ以外の場合はtext/plainに設定します。 |
connect(url) |
HTTP CONNECT リクエストを URL に送信し、応答を返します。 |
customRequest(method, url, data) |
最初のパラメータで任意の HTTP メソッドを指定できます。オプションの data ペイロードを含むメソッド要求を URL に送信し、応答を返します。 |
delete(url, data) |
オプションの data ペイロードを含む HTTP DELETE リクエストを URL に送信し、応答を返します。 |
getHeaders(<asArray>) |
受信したHTTPヘッダーフィールドのオブジェクトを返します。asArray パラメータは、"true"(例: getHeaders(true) )、"false"、または未定義に設定できます。"true"に設定すると、受信したHTTPヘッダーフィールドの値は配列として返されます。これは、複数の同じ名前のヘッダーのフィールド値を取得するために使用する必要があります。設定されていないか、"false"に設定されている場合、受信した HTTPヘッダーフィールドの値は文字列として返されます。 |
get(url, data) |
オプションのdataペイロードを含むHTTP GETリクエストをURLに送信し、応答を返します。 |
head(url) |
HTTP HEADリクエストをURLに送信し、応答を返します。 |
options(url) |
HTTP OPTIONSリクエストをURLに送信し、応答を返します。 |
patch(url, data) |
オプションのdataペイロードを含むHTTP PATCH要求をURLに送信し、応答を返します。 |
put(url, data) |
オプションのdataペイロードを含むHTTP PUTリクエストをURLに送信し、応答を返します。 |
post(url, data) |
オプションのdataペイロードを含むHTTP POSTリクエストをURLに送信し、応答を返します。 |
getStatus() |
最後のHTTPリクエストのステータス コードを返します。 |
setProxy(proxy) |
HTTPプロキシを"proxy"値に設定します。このパラメータが空の場合、プロキシは使用されません。 |
setHttpAuth(bitmask, username, password) |
'bitmask'パラメータで有効なHTTP認証方法(HTTPAUTH_BASIC、HTTPAUTH_DIGEST、HTTPAUTH_NEGOTIATE、HTTPAUTH_NTLM、HTTPAUTH_NONE)を設定します。 HTTPAUTH_NONEフラグを使用すると、HTTP認証を無効にできます。 例: request.setHttpAuth(HTTPAUTH_NTLM \| HTTPAUTH_BASIC、ユーザー名、パスワード) request.setHttpAuth(HTTPAUTH_NONE) |
trace(url, data) |
オプションのdataペイロードを含むHTTP TRACE要求をURLに送信し、応答を返します。 |
例:
try {
Zabbix.log(4, 'jira webhook script value='+value);
var result = {
'tags': {
'endpoint': 'jira'
}
},
params = JSON.parse(value),
req = new HttpRequest(),
fields = {},
resp;
req.addHeader('Content-Type: application/json');
req.addHeader('Authorization: Basic '+params.authentication);
fields.summary = params.summary;
fields.description = params.description;
fields.project = {"key": params.project_key};
fields.issuetype = {"id": params.issue_id};
resp = req.post('https://jira.example.com/rest/api/2/issue/',
JSON.stringify({"fields": fields})
);
if (req.getStatus() != 201) {
throw 'Response code: '+req.getStatus();
}
resp = JSON.parse(resp);
result.tags.issue_id = resp.id;
result.tags.issue_key = resp.key;
} catch (error) {
Zabbix.log(4, 'jira issue creation failed json : '+JSON.stringify({"fields": fields}));
Zabbix.log(4, 'jira issue creation failed : '+error);
result = {};
}
return JSON.stringify(result);
XMLオブジェクトは、item 内のXMLデータの処理と、ローレベルディスカバリープリプロセッシングおよびウェブフックを可能にします。
XMLオブジェクトを利用するためには,libxml2がサポートされた状態で server / proxy がコンパイルされている必要があります。
メソッド | 説明 |
---|---|
XML.query(data, expression) |
XPathを使用してノードコンテンツを取得します。ノードが見つからない場合はnullを返します。expression - XPath式 data - 文字列としてのXMLデータ |
XML.toJson(data) |
XML形式のデータをJSONに変換 |
XML.fromJson(object) |
JSON形式のデータをXMLに変換 |
例:
Input:
<menu>
<food type = "breakfast">
<name>Chocolate</name>
<price>$5.95</price>
<description></description>
<calories>650</calories>
</food>
</menu>
Output:
{
"menu": {
"food": {
"@type": "breakfast",
"name": "Chocolate",
"price": "$5.95",
"description": null,
"calories": "650"
}
}
}
XMLからJSONへの変換は、以下の規則に従って処理されます(JSONからXMLへの変換は、逆の規則が適用されます)。
1. XML の属性は、名前の先頭に '@' を付加したキーに変換されます。
例:
Input:
Output:
2. セルフクロージングの要素(<foo/>)は、'null'値を持つものとして変換されます。
例:
Input:
Output:
3. 空の属性(""の値)は、空文字列('')の値として変換されます。
例:
Input:
Output:
4. 同じ要素名を持つ複数の子ノードは、値の配列を値とする1つのキーに変換されます。
例:
Input:
Output:
5. text 要素に属性がなく、子要素もない場合は、文字列として変換されます。
例:
Input:
Output:
6. text 要素に子がなく、属性がある場合、text の内容はキーが 'text'、値が content の要素に変換され、
属性はシリアライズ規則 1 のとおりに変換され ます。
例:
Input:
Output:
Duktapeでは、追加のグローバルJavaScript関数が実装されています:
try {
b64 = btoa("utf8 string");
utf8 = atob(b64);
}
catch (error) {
return {'error.name' : error.name, 'error.message' : error.message}
}
md5(data) - データのMD5ハッシュを計算する
sha256(data) - データのSHA256ハッシュを計算する
hmac('<hash type>',key,data) - HMACハッシュを16進形式の文字列として返します。 MD5 および SHA256 ハッシュ タイプがサポートされています。 キーとデータパラメータはバイナリデータをサポートします。例:
hmac('md5',key,data)
hmac('sha256',key,data)
sign(hash,key,data) - 計算された署名 (SHA-256 を使用した RSA 署名) を文字列として返します。ここで:
hash - 'sha256' のみが許可され、それ以外の場合はエラーがスローされます。
key - 秘密鍵。PKCS#1 または PKCS#8 標準に対応している必要があります。鍵はさまざまな形式で提供できます:
キーは、ユーザー マクロ/シークレット マクロ/ボールトから読み込むこともできます。
data - 署名されるデータ。文字列 (バイナリ データもサポートされます) またはバッファ (Uint8Array/ArrayBuffer) にすることができます。
署名の計算には OpenSSL または GnuTLS が使用されます。Zabbix がこれらの暗号化ライブラリなしでビルドされた場合、エラーが発生します (「OpenSSL または GnuTLS ライブラリがありません」)。
この機能は、Zabbix 6.0.15 以降でサポートされています。