Комментарии 17
Конечно молодец что пытаетесь оптимизировать рутинные вещи. Но зачем везде пихать то что там не нужно. Ну вот не нужен здесь php совсем
Вот пример который пришел в голову сразу
Вывод на одном пире такой
Второй скрипт
Вывод
Ну и уж если надо выводить состояние
именно в таком виде кормить заббиксу
и не надо никаких php и тп
Надеюсь поможет в дальнейшем ))
Вот пример который пришел в голову сразу
asterisk -rx "sip show registry" | awk 'BEGIN{print "{\n\"data\": ["; } NF>6 {gsub(/:.+/, "", $1); print "\t{ \"{#TRUNKIP}\": \""$1"\" },";} END{print "\t]\n}";}'
Вывод на одном пире такой
{
"data": [
{ "{#TRUNKIP}": "172.21.0.23" },
]
}
Второй скрипт
asterisk -rx "sip show registry" | awk 'BEGIN{print "{\n\"data\": ["; } NF>6 {print "\t{ \"{#TRUNKNAME}\": \""$3"\" },";} END{print "\t]\n}";}'
Вывод
{
"data": [
{ "{#TRUNKNAME}": "050" },
]
}
Ну и уж если надо выводить состояние
asterisk -rx "sip show registry" | awk '$$3 ~ /'$1'/ || $$1 ~ /''$1/ {if($5 ~ /Registered/) print 1; else print 0;}'
именно в таком виде кормить заббиксу
и не надо никаких php и тп
Надеюсь поможет в дальнейшем ))
+4
Спасибо. Действительно, без php будет лучше. Впрочем, главное, чтобы скрипт давал нужный вывод — язык дело вторичное.
0
Создал шаблон низкоуровневого обнаружения — в результате выдается ошибка Value should be a JSON object., хотя zabbix_get возвращает следующее:
ЗЫ скрипты на php а не awk.
m0ps@zabbix:~$ zabbix_get -s pbx.company.com -k asterisk.discovery[ips]{
"data":[
{
"{#TRUNKIP}":"sip.skype.com"
},
{
"{#TRUNKIP}":"natsip.datagroup.com.ua"
},
]
}
ЗЫ скрипты на php а не awk.
0
какая версия заббикс?
у меня все скрипты возвращают примерно тоже самое и все норм, версия заббикса 2.0
Хотя некоторые парсеры json ругаются на не валидность данных из-за последней запятой {
"{#TRUNKIP}":«natsip.datagroup.com.ua»
},
у меня все скрипты возвращают примерно тоже самое и все норм, версия заббикса 2.0
Хотя некоторые парсеры json ругаются на не валидность данных из-за последней запятой {
"{#TRUNKIP}":«natsip.datagroup.com.ua»
},
0
У нас 2.2.3
0
может в новой весии поменялся парсер json и ему уже не нравится запятая в конце?
0
А можешь выгрузить шаблон, возможно я его неправильно создал.
0
ооооо
так это к автору статьи
я то просто работаю с заббиксом
могу предложить проверить вот таким скриптом
буквально сегодня таким методом много проверок заставил автоматом добавляться
Блин парсер схавал переводы строк
так это к автору статьи
я то просто работаю с заббиксом
могу предложить проверить вот таким скриптом
#!/bin/bash
ARRAY=(
one
two
three
four
)
echo -en "{\"data\": ["
for i in ${ARRAY[@]}; do
echo -en "{\"{#QUEUENAME}\":\"$i\"},"
done
echo -en "]}"
буквально сегодня таким методом много проверок заставил автоматом добавляться
Блин парсер схавал переводы строк
0
Проверил вывод скрипта тут: jsonlint.com/ — как и в скриптах из статьи — ошибка валидации. Последняя строка с запятой в конце не нравиться :(
0
решение в лоб
Не очень оптимальное но валидацию проходит
#!/bin/bash
ARRAY=(
one
two
three
four
)
s=""
echo -en "{\"data\": ["
for i in ${ARRAY[@]}; do
echo -en "$s"
s=","
echo -en "{\"{#QUEUENAME}\":\"$i\"}"
done
echo -en "]}"
Не очень оптимальное но валидацию проходит
0
Допилил скрипт из статьи:
ЗЫ В php полный н0ль, так что сори за индусятину :)
trunk_disc.php
#!/usr/bin/php
<?php
error_reporting(1);
exec("/usr/bin/sudo -u asterisk /usr/sbin/asterisk -rx 'sip show registry'", $tr_list);
foreach($tr_list as $line) {
$ar_line = null;
$ar_line[] = trim(substr($line, 0, 40));
$ar_line[] = trim(substr($line, 47, 19));
$ar_line = array_diff($ar_line, array(''));
$ar_line = array_combine(array(0,1), $ar_line);
$trunks[] = $ar_line['1'];
$ip = explode(":", $ar_line['0']);
if (!in_array($ip['0'], $ips)) {
$ips[] = $ip['0'];
}
}
$trunks[0] = '';
$ips[0] = '';
$trunks = array_diff($trunks, array(''));
$ips = array_diff($ips, array(''));
function getJson($items, $name) {
$first = 1;
print "{\n";
print "\t\"data\":[\n\n";
$lastitem = end($items);
foreach ($items as $item) {
if ($item != $lastitem) {
if (!$first) {
print "\t,\n" ;
$first = 0;
}
print "\t{\n";
print "\t\t\"{#$name}\":\"$item\"\n";
print "\t},\n";
} else {
if (!$first) {
print "\t,\n" ;
$first = 0;
}
print "\t{\n";
print "\t\t\"{#$name}\":\"$item\"\n";
print "\t}\n";
}
}
print "\n\t]\n";
print "}\n";
}
if ($argv[1] == 'trunks') {
getJson($trunks, "TRUNKNAME");
}
elseif ($argv[1] == 'ips') {
getJson($ips, "TRUNKIP");
}
else {
print "error";
}
ЗЫ В php полный н0ль, так что сори за индусятину :)
0
Хм… Меня эта запятая тоже поначалу смущала. Но Заббикс ее прекрасно схавал. На днях буду переходить на версию 2.2 — посмотрим как там.
0
У меня тоже один из транков периодически терял регистрацию. Не придумал, зачем мониторить это в заббиксе, ведь первым делом надо починить регистрацию. Не будучи особо гуру в asterisk, в гугле выяснил, что заставить транк перерегистрироваться можно релоадом sip.
Итого получилось нечто вроде:
и было засунуто в cron
Итого получилось нечто вроде:
#!/bin/bash
CID="7383xxxxxxx" #пользователь, под которым подключается глючный транк, дабы отделить от остальных транков
reg=`asterisk -rx "sip show registry"| grep $CID | awk '{print $5}'`
if [ "$reg" != "Registered" ]; then
asterisk -rx "sip reload"
echo `date`" sip reloaded" >> /var/log/sipreg.log
fi
и было засунуто в cron
0
Вы издеваетесь такое писать на PHP?:)
есть встроенная функция json_encode()
function getJson($items, $name) {
$first = 1;
print "{\n";
print "\t\"data\":[\n\n";
$lastitem = end($items);
foreach ($items as $item) {
if ($item != $lastitem) {
if (!$first) {
print "\t,\n" ;
$first = 0;
}
print "\t{\n";
print "\t\t\"{#$name}\":\"$item\"\n";
print "\t},\n";
} else {
if (!$first) {
print "\t,\n" ;
$first = 0;
}
print "\t{\n";
print "\t\t\"{#$name}\":\"$item\"\n";
print "\t}\n";
}
}
print "\n\t]\n";
print "}\n";
}
есть встроенная функция json_encode()
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Мониторинг транков Asterisk с помощью низкоуровнего обнаружения Zabbix