Zabbix для экспорта диаграммы (.PNG-файл
Моя Цель:
Я хотел бы извлечь графики, связанные с хозяевами .формат png. Мои исследования GOOGLE говорят, что у нас нет Zabbix API, предназначенного для выполнения этой задачи. Так мало блогов посоветовали пользователю Chart2.php & CURL. Может кто-нибудь объяснить мне, как это сделать ( конкретные шаги )?
Примечание: извините никогда не работал на php ни на curl
когда я пробовал
curl https://example.com/zabbix/chart2.php?graphid=1552&width=300&height=300
есть, но ссылка не работает
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>The document has moved <a href="/zabbix/openid?graphid=1552&modauthopenid.referrer=https%3A%2F%2Fexample.com%2Fzabbix%2Fchart2.php%3Fgraphid%3D1552">here</a>.</p>
<hr>
<address>Apache/2.2.3 (Red Hat) Server at example.com Port 80</address>
</body></html>
также как могу ли я включить это в вызов Zabbix api (JAVA)?
4 ответов
это работает с обычной аутентификацией пароля, вам нужно адаптировать его к openid, который я не использую, и, скорее всего, вам придется изменить параметры для этого, чтобы работать с curl.
1. wget --save-cookies=z.coo -4 --keep-session-cookies -O - -S --post-data='name=(a zabbix username)&password=(password)&enter=Enter' 'http://example.com/zabbix/index.php?login=1'
2. wget -4 --load-cookies=z.coo -O result.png 'http://example.com/zabbix/chart2.php?graphid=410&width=1778&period=102105&stime=20121129005934'
первый публикует аутентификацию и сохраняет файл cookie. второй загружает тот же файл cookie и извлекает png.
вы, безусловно, хотите реализовать его без использования оболочки, но на языке ваших предпочтений и API JSON-RPC zabbix, из которых уже есть много клиентских библиотек.
хотя AFAIK вам все равно придется войти в систему, чтобы получить изображение графика. По крайней мере, пока.
EDIT:https://support.zabbix.com/browse/ZBXNEXT-562 голосовать (или начать работать над этим)
добавление к вышесказанному, если вы используете Zabbix 2.0, данные curl POST немного изменились.
заменить следующим:
1. wget --save-cookies=z.coo -4 --keep-session-cookies -O - -S --post-data='name=(a zabbix username)&password=(password)&enter=Enter' 'http://example.com/zabbix/index.php?login=1'
следующим образом:
1. wget --save-cookies=z.coo -4 --keep-session-cookies -O - -S --post-data='name=(a zabbix username)&password=(password)&enter=Sign in&autologin=1&request=' 'http://example.com/zabbix/index.php?login=1'
Zabbix позволяет получить необходимые данные с помощью одной команды wget, которая вызывает перенаправление HTTP после входа в систему.
wget --post-data='name=(username)&password=(password)&enter=Enter&request=http%3A%2F%2Fexample.com%2Fzabbix%2Fchart2.php%3Fgraphid%3D410%26width%3D1778%26period%3D102105%26stime%3D20121129005934' -O (image file) 'http://example.com/index.php?login=1'
не забудьте url-кодировать request
значение параметра.
Если вы хотите иметь последний срок, установленный stime
в какое-то далекое будущее. "20200101000000" хорошо работает для меня.
протестировано с Zabbix 1.8.11.
в некоторых случаях вы не можете или не хотите использовать wget
. Оказывается, вам не нужен логин hack, чтобы читать куки и устанавливать их при загрузке изображения. Вам нужен только идентификатор сеанса Zabbix (также называемый auth string), который вы получаете при входе в систему с помощью API. Теперь вы можете просто использовать его, чтобы установить один файл называется zbx_sessionid
и вызовите URL, предоставляющий вам изображение.
В Java:
private byte[] getPng(ZabbixUser user, URL pngUrl) throws IOException
{
HttpURLConnection conn = (HttpURLConnection) pngUrl.openConnection();
conn.setRequestProperty("Cookie", "zbx_sessionid=" + user.getSessionid());
try (InputStream is = conn.getInputStream()) {
return toByteArray(is);
}
}
private static byte[] toByteArray(InputStream is) throws IOException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] byteChunk = new byte[4096];
int n;
while ((n = is.read(byteChunk)) > 0) {
baos.write(byteChunk, 0, n);
}
return baos.toByteArray();
}
ZabbixUser
это немного модели, которую я создал для хранения результата входа в систему вы получаете при входе в систему с "userData": true
. Результирующий объект будет содержать sessionid
.