16 июня 2010 г.

Графики и Zabbix

Пришлось тут на днях мне решать нетривиальную задачу. По работе для мониторинга трафика используем систему Zabbix. Перед входом в саму систему еще необходимо пройти http-авторизацию. Это были, так сказать, исходные данные.

Мне же требовалось сделать так, чтобы некий пользователь получал информацию только о некоторых клиентах (доступ к ограниченному количеству графиков), поэтому разрулить самой системой мониторинга данный запрос не удавалось.

Поначалу пробовал решить данную задачу через cURL. Провозившись пару дней понял, что результата я достигну, но вот сам результат будет не тот, что мне был необходим.

В итоге повторно побродив по форуму Zabbix'а наткнулся на следующий тред. После небольших размышлений я пришёл к выводу, что это то, что мне нужно. Далее, оставалось только немного переделать предложенный скрипт. Вот что получилось у меня.

Файл скрипта get_chart.sh:

#!/usr/local/bin/bash

# Create:
# 29-05-2009
# nelsonab at pobox (removethis) dot com
# get_chart.sh user password chartid

# Modify:
# 15-10-2010
# wildestboar at mail dot ru
# get_chart.sh chartname chartid

# From:
# http://www.zabbix.com/forum/showpost.php?p=46908&postcount=4

# How it works:
# First we need to log into the zabbix system and receive a session id
# cookie. Then when we have the cookie we can then retrieve the graph.
# The cookie file is deleted after every execution and requested anew
# to prevent stale cookies.

zbx_host="http://http_login:http_password@domain.tld" // Здесь указывается адрес нашей системы мониторинга, где http_login и http_password - соответственно логин и пароль для прохождения http-авторизации

width=500 // ширина графика
period=86400 // период отображаемого графика в секундах (в нашем случае - 1 день)
name=zabbix_login // логин в zabbix'е
password=password_login // пароль в zabbix'е

result = $(wget --save-cookies=cookies.txt --keep-session-cookies --post-data "name=$name&password=$password&enter=Enter" -O - -q $zbx_host/index.php?login=1 | grep window.location)

if [ "$result" ]
then
  echo "Authenticated successfully, getting graph"
  wget --load-cookies=cookies.txt -O $1.jpg -q "$zbx_host/chart2.php?graphid=$2&width=$width&period=$period"
fi

rm cookies.txt


У данного скрипта как мы видим два входных аргумента - название файла для графика и номер id графика. По результату выполнения данного скрипта на выходе получаем файл изображения.

Файл запуска генерации графиков и вывода их в браузер index.php:

<?php

  exec ('./get_chart.sh chart1 574');
  exec ('./get_chart.sh chart2 570');
  exec ('./get_chart.sh chart3 569');
  exec ('./get_chart.sh chart4 582');

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Language" content="ru">
  <meta http-equiv="Content-Type" content="text/html; charset=koi8r">
  <title>Суточные графики</title>
</head>

<body>
  <table border=0 width=100% height=100%>
    <tr>
      <td align=center colspan=2>
        <h1>Суточные графики</h1>
      </td>
    </tr>
    <tr valign=center>
      <td align=center>
        <img src="chart1.jpg">
      </td>
      <td align=center>
        <img src="chart2.jpg">
      </td>
    </tr>
    <tr valign=center>
      <td align=center>
        <img src="chart3.jpg">
      </td>
      <td align=center>
        <img src="chart4.jpg">
      </td>
    </tr>
  </table>
</body>
</html>


Итого, у нас на выходе получается 6 файлов: два описанных выше, и 4 сгенерированных файлов-картинок: chart{1,4}.jpg

Ко всему этому добавил ещё два стандартных в общем-то файла под Apache: .htaccess и .htpasswd

Содержимое файла .htaccess:

DirectoryIndex index.php
AuthName "Restricted Only"
AuthType Basic
AuthUserFile path_to_file/.htpasswd
Require valid-user


А файл .htpasswd генерируется утилитой htpasswd, например, так:

htpasswd -cmb .htpasswd http_login http_password


Ну и результатом всего, после набора url является следующая картинка:


 (640x400, 167Kb)

Комментариев нет:

Отправить комментарий