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&amp;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.