Jump to content
iT4iT.CLUB

Search the Community

Showing results for tags 'maps'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Forums

  • Operating systems
    • UNIX
    • Mac OS
    • Windows
  • Monitoring System
    • Zabbix
  • Network hardware
    • Cisco Systems
    • MikroTik
    • Ubiquiti Networks
  • Microcontrollers
    • Arduino

Blogs

There are no results to display.

There are no results to display.

Categories

  • Zabbix
    • Templates
  • Arduino
    • Espressif Systems
    • Libraries
  • UNIX

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Found 1 result

  1. Доброе время суток. Более года назад мне потребовалось выдергивать карты сетей из web интерфейса zabbix, но эта потребность была не долгой, и вскоре все было забыто. И вот недавно, разбирая закрома, наткнулся на реализацию этой идеи. Зачем это нужно? Большинству людей, пользующихся системами мониторинга, достаточно того интерфейса, который предоставляет разработчик. А разработчик обычно останавливается на реализации web интерфейса. Можно забыть про всякие виджеты, push уведомления или иные способы оповещения "из коробки". Это сильно угнетает т.к у меня нет возможности постоянно смотреть на дашборд в ожидании каких либо событий. Да и вообще я могу быть погруженным в другие людские заботы или, что еще боле серьезное, отсутствовать на рабочем месте. Чтобы как-то исправить две последние ситуации были реализованы следующие дополнения Push уведомления: Android, iOS, Windows - очень удобно получать информацию о проблемных узлах прямо на телефон. Порой решения проблемы приходят в голову быстрее, чем кто-либо еще о ней узнает. Мониторинг триггеров в GUI под Windows - пока что сырая, но вполне работоспособная система позволяющая получать всплывающие уведомления, сопровождающиеся звуковым оповещениям и интерфейсом для быстрого доступа к узлу. Теперь захотелось пойти немного дальше и позволить удаленным приложениям забирать актуальные карты сетей по их идентификатору в zabbix интерфейсе. А также в планах вывести общую карту сети на большой монитор для всех коллег. И делать это, хотелось бы, не светя учетными данными пользователей zabbix и не нагружая сам сервер. В общем, эта мелочь будет описана в данной теме. И так, что нам понадобится. Т.к наличие zabbix подразумевает наличие web сервера и PHP, то вы даже не догадаетесь, на чем мы все будем писать? или догадаетесь? ... эээ блин! Первым делом нам необходимо дополнить арсенал PHP модулем CURL. В данный момент у меня все это хозяйство крутиться на Ubuntu 16.04 с PHP-7.1 и добавить модуль можно следующим способом. sudo apt-get update sudo apt-get install php7.1-curl sudo /etc/init.d/apache2 reload Создаем на нашем web сервере, в произвольном месте, файл graphics.php со следующим содержимым <?PHP if(false) { ini_set('error_reporting', E_ALL); ini_set('display_errors', 1); ini_set('display_startup_errors', 1); } $settings = array( 'request' => '', 'name' => 'guestlogin', 'password' => 'guestpassword', 'autologin' => '', 'enter' => 'Sign in' ); function putImage($data = false) { header('Content-Type: image/png'); header('Content-Transfer-Encoding: binary'); if($data) echo $data; } if(isset($_GET['sysmapid']) and preg_match('/^[0-9]{1,2}$/', $_GET['sysmapid'])) { $imageUrl = 'http://localhost/zabbix/'; $imageTmp = base64_encode(microtime(null)); $imagePng = '/tmp/zabbixTrigger_map'.$_GET['sysmapid']; $cookie = '/tmp/zabbixTrigger_cookie'; if(file_exists($imagePng)) { if(time() - filemtime($imagePng) < 30) { putImage(); exit(file_get_contents($imagePng)); } unlink($imagePng); } $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $settings); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); $post = (file_exists($cookie)) ? 'map.php?sysmapid='.$_GET['sysmapid'] : 'index.php'; curl_setopt($ch, CURLOPT_URL, $imageUrl.$post); $data = curl_exec($ch); if(curl_getinfo($ch, CURLINFO_CONTENT_TYPE) != 'image/png') { curl_setopt($ch, CURLOPT_URL, $imageUrl.'map.php?sysmapid='.$_GET['sysmapid']); $data = curl_exec($ch); file_put_contents($imageTmp, $data, LOCK_EX); $finfo = finfo_open(FILEINFO_MIME_TYPE); if(finfo_file($finfo, $imageTmp) == 'image/png') { file_put_contents($imagePng, $data, LOCK_EX); putImage($data); } else echo 'error'; unlink($imageTmp); } else { file_put_contents($imagePng, $data, LOCK_EX); putImage($data); } curl_close($ch); } ?> Что здесь происходит. Скрипт пытается авторизоваться на zabbix сервере. Советую, для этих целей, использовать гостевую учетную запись. И минуя прочий html шлак, забирает картинку по её идентификатору. Как узнать идентификатор нужной нам карты сети? Для этого откройте карту в дашборд zabbix, и в строке запроса, вы увидите её порядковый номер. Нас интересует переменная sysmapid, именно её мы будем использовать для передачи идентификатора для graphics.php Теперь о том, как передать данные для авторизации гостевой учетной записи. $settings = array( 'request' => '', 'name' => 'guestlogin', 'password' => 'guestpassword', 'autologin' => '', 'enter' => 'Sign in' ); Данный массив представляет собой список всех форм участвующих в авторизации пользователя. И пусть Вас не пугает их количество, на самом деле их ровно столько, сколько в самом интерфейсе zabbix. Вам необходимо исправить только поля с именем пользователя и пароля. Жизненно необходимо указать http путь до zabbix сервера, это делается в переменной $imageUrl = 'http://localhost/zabbix/'; Также имеются переменные, описывающие, где будут храниться временные файлы изображений и cookie на нашем сервере $imagePng = '/tmp/zabbixTrigger_map'.$_GET['sysmapid']; $cookie = '/tmp/zabbixTrigger_cookie'; Скрипт кэширует изображения во временном каталоге и отдает его, если не прошло более 30 секунд с момента его создания. Также во временном каталоге будет храниться файл cookie необходимый для работы curl. ВАЖНО: не переносите эти файлы в рабочий каталог web сервера! Таким образом, мы забираем у zabbix карты сетей без передачи какой либо конфиденциальной информации. Можно дополнить скрипт и отдавать только определенные карты и только конкретным хостам. В общем, есть почва для размышлений.
×
×
  • Create New...