Пришлось тут на днях мне решать нетривиальную задачу. По работе для мониторинга трафика используем систему 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 является следующая картинка:

Мне же требовалось сделать так, чтобы некий пользователь получал информацию только о некоторых клиентах (доступ к ограниченному количеству графиков), поэтому разрулить самой системой мониторинга данный запрос не удавалось.
Поначалу пробовал решить данную задачу через 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 является следующая картинка:

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