Архив метки: zabbix

Еще один полезный SQL запрос для Zabbix

Получение триггеров с учетом зависимостей. Т.е. Если некий тригер А зависит от триггера Б, то его в списке не будет.

SELECT (UNIX_TIMESTAMP()-triggers.lastchange)/60 as minut,hosts.host,        triggers.description,        triggers.comments,        triggers.triggerid FROM triggers INNER JOIN functions ON triggers.triggerid=functions.triggerid INNER JOIN items ON items.itemid=functions.itemid INNER JOIN hosts ON hosts.hostid=items.hostid INNER JOIN hosts_groups ON hosts_groups.hostid=hosts.hostid INNER JOIN groups ON groups.groupid=hosts_groups.groupid WHERE hosts.status = 0   AND items.status = 0   AND triggers.status = 0   AND triggers.priority=5   AND triggers.value=1 and ((UNIX_TIMESTAMP()-triggers.lastchange)/60)>15 and triggers.triggerid in (select triggerid_up from trigger_depends where triggerid_down in (SELECT triggers.triggerid FROM triggers INNER JOIN functions ON triggers.triggerid=functions.triggerid INNER JOIN items ON items.itemid=functions.itemid INNER JOIN hosts ON hosts.hostid=items.hostid INNER JOIN hosts_groups ON hosts_groups.hostid=hosts.hostid INNER JOIN groups ON groups.groupid=hosts_groups.groupid WHERE hosts.status = 0   AND items.status = 0   AND triggers.status = 0   AND triggers.priority=5   AND triggers.value=1 and ((UNIX_TIMESTAMP()-triggers.lastchange)/60)>15 group by triggerid))  group by triggers.triggerid

Отправляем сообщения пользователям Telegram из коммандной строки. FreeBSD

1) Ставим из портов trelegram-cli

cd /usr/ports/net-im/telegram
make install

2) Заходим в telegram-cli, регистрируемся. По help — список комманд.

Нюансы: сначала нужно добавить контакты. Отправлять сообщения тоже можно не сразу, а только после выполнения комманды contact_list. Или запускать telegram-cli с ключем -W

Пробелы в именах при операциях с коммандами необходимо заменять на _

Например отправка сообщения:

msg Gribov_Pavel "Привет"

3) Для получения списка контактов и их состояния, можно использовать что-то типа на PHP (требует доработки):

#!/usr/local/bin/php
<?php

/* 
 * (с) 2016 Грибов Павел
 * http://грибовы.рф * 
 * Если исходный код найден в сети - значит лицензия GPL v.3 * 
 * В противном случае - код собственность ГК Яртелесервис, Мультистрим, Телесервис, Телесервис плюс * 
 */
$path="/usr/local/bin/telegram-cli";  //где находится консольный телеграм whereis telegram-cli

function GetContacts(){    
    global $path;
    $result=array();
    $rez=`( echo "contact_list" ; echo "safe_quit" ) | $path -RCW -U root | grep -v halt | grep -v "All" | grep "under" -A 100000 | grep -v "licen" `;
    $res_arr=  explode("\n", $rez);    
    foreach ($res_arr as $value) {	
	$value=trim($value);
	$value=preg_replace("/[^a-zA-ZА-Яа-я0-9\s]/","", $value);
	if ($value!=""){
	 $value=  str_replace(" ", "_", $value);
	 $result[$value]["name"]=$value;
	};
    };
    return $result;
};
function StatusInfo($contact_list){
    return $contact_list;
};
 $contact_list=GetContacts();
 $contact_list=StatusInfo($contact_list);
 var_dump($contact_list);
?>

Из огромных минусов такого способа информирования — нельзя знать наверняка, получил контакт сообщение или нет. Во первых нет в API получения статуса отправленого сообщения, а во вторых  — при свернутом в трей телеграмме, статус контакта будет offline. Т.е. нет уверенности, на самом деле контакт в оффлайне, или у него приложение просто свернуто. Этот огромный жирный минус перечеркивает все достоинства Telegram, и соответственно использовать его для информирования например событий  в Zabbix не представляется возможным

 

Zabbix: Получаем по известному триггеру (triggerid) номера телефонов для оповещения

Мега запрос..

SELECT
  sendto
FROM media
WHERE userid IN (SELECT
  userid
FROM (SELECT
  users_groups.userid
FROM operations
INNER JOIN opmessage_grp
  ON opmessage_grp.operationid = operations.operationid
INNER JOIN users_groups
  ON opmessage_grp.usrgrpid = users_groups.usrgrpid
WHERE operations.actionid IN (SELECT
  actionid
FROM conditions
WHERE conditiontype = 2
AND value = 15266
UNION ALL
SELECT
  actionid
FROM conditions
WHERE conditiontype = 0
AND value IN (SELECT
  groups.groupid
FROM triggers
INNER JOIN functions
  ON triggers.triggerid = functions.triggerid
INNER JOIN items
  ON items.itemid = functions.itemid
INNER JOIN hosts
  ON hosts.hostid = items.hostid
INNER JOIN hosts_groups
  ON hosts_groups.hostid = hosts.hostid
INNER JOIN groups
  ON groups.groupid = hosts_groups.groupid
WHERE triggers.triggerid = 15266)
UNION ALL
SELECT
  actionid
FROM conditions
WHERE conditiontype = 1
AND value IN (SELECT
  hosts.hostid
FROM triggers
INNER JOIN functions
  ON triggers.triggerid = functions.triggerid
INNER JOIN items
  ON items.itemid = functions.itemid
INNER JOIN hosts
  ON hosts.hostid = items.hostid
INNER JOIN hosts_groups
  ON hosts_groups.hostid = hosts.hostid
INNER JOIN groups
  ON groups.groupid = hosts_groups.groupid
WHERE triggers.triggerid = 15266))
UNION ALL
SELECT
  opmessage_usr.userid
FROM operations
INNER JOIN opmessage_usr
  ON opmessage_usr.operationid = operations.operationid
WHERE operations.actionid IN (SELECT
  actionid
FROM conditions
WHERE conditiontype = 2
AND value = 15266
UNION ALL
SELECT
  actionid
FROM conditions
WHERE conditiontype = 0
AND value IN (SELECT
  groups.groupid
FROM triggers
INNER JOIN functions
  ON triggers.triggerid = functions.triggerid
INNER JOIN items
  ON items.itemid = functions.itemid
INNER JOIN hosts
  ON hosts.hostid = items.hostid
INNER JOIN hosts_groups
  ON hosts_groups.hostid = hosts.hostid
INNER JOIN groups
  ON groups.groupid = hosts_groups.groupid
WHERE triggers.triggerid = 15266)
UNION ALL
SELECT
  actionid
FROM conditions
WHERE conditiontype = 1
AND value IN (SELECT
  hosts.hostid
FROM triggers
INNER JOIN functions
  ON triggers.triggerid = functions.triggerid
INNER JOIN items
  ON items.itemid = functions.itemid
INNER JOIN hosts
  ON hosts.hostid = items.hostid
INNER JOIN hosts_groups
  ON hosts_groups.hostid = hosts.hostid
INNER JOIN groups
  ON groups.groupid = hosts_groups.groupid
WHERE triggers.triggerid = 15266))) AS us
GROUP BY userid)
AND mediatypeid = 5;

Zabbix — MySQL запрос на выборку текущих активных алертов

SELECT groups.name,
       hosts.hostid,
       hosts.host,
       triggers.description,
       triggers.comments,
       triggers.triggerid,
       triggers.priority
FROM triggers
INNER JOIN functions ON triggers.triggerid=functions.triggerid
INNER JOIN items ON items.itemid=functions.itemid
INNER JOIN hosts ON hosts.hostid=items.hostid
INNER JOIN hosts_groups ON hosts_groups.hostid=hosts.hostid
INNER JOIN groups ON groups.groupid=hosts_groups.groupid
WHERE hosts.status = 0
  AND items.status = 0
  AND triggers.status = 0
  AND triggers.priority=3
  AND triggers.value=1;

Выбираем кто из пользователей Zabbix видит хост:

SELECT  
    usrgrp.usrgrpid ,  
    usrgrp.name  AS  user_group ,  
    groups.name  as  host_group , 
    host 
FROM  users  
    JOIN users_groups   ON  users.userid  =  users_groups.userid  
    JOIN usrgrp ON  users_groups.usrgrpid  =  usrgrp.usrgrpid  
    JOIN rights  ON  usrgrp.usrgrpid  =  rights.groupid  
    JOIN groups ON  rights.id  =  groups.groupid  
    JOIN hosts_groups  ON  groups.groupid  =  hosts_groups.groupid  
    JOIN hosts on  hosts_groups.hostid  =  hosts.hostid
    where hosts.hostid=1025;

Получение данных dashboard с Zabbix сервера..

Ну очень хочется например вытащить данные с панели dashboard zabbix на сторонний ресурс.. Ну например в целях интеграции с какой-то CMS. Поможет в этом следующий запрос:

SELECT h.host,t.triggerid,g.name group_name,t.priority priority 
FROM   hosts h,items i,hosts_groups hg,groups g,functions f, triggers t  
WHERE  h.status = 0 AND h.hostid = i.hostid AND hg.groupid = g.groupid AND hg.hostid = h.hostid AND i.status = 0 AND i.itemid = f.itemid AND t.triggerid = f.triggerid AND t.VALUE = 1 AND t.status = 0
GROUP  BY t.triggerid,g.name, t.priority;