Advertisement
Guest User

Untitled

a guest
Apr 4th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.27 KB | None | 0 0
  1. <h3>Предыстория</h3>
  2. Имеем в "штате" Asterisk 11 и СУБД FireBird 2.5, в которую PBX пишет CDR. Нечасто, но бывает так, что запись в БД прекращается, а узнаем мы об этом тогда, когда нужно что-то посмотреть в CDR. Увидев, что записей нет, перезапускаем Asterisk, запись в БД восстанавливается. В очередной раз не получив важную информацию из CDR, было решено каким-то образом отслеживать факт записи/не записи в CDR.
  3.  
  4. В качестве системы мониторинга мы используем Zabbix 3, поэтому было решено написать простенький скрипт на Python, который будет подключаться к FireBird и проверять время последней записи в таблицу с CDR, если это время превышает 30 минут, то система мониторинга просигнализирует нам об этом.
  5. <cut/>
  6. <h3>Установка Python 3</h3>
  7. Asterisk установлен на уже стареньком Centos 6.8, поэтому для начала устанавливаем свежий Python.
  8.  
  9. Качаем самые свежие на момент написания статьи исходники:
  10.  
  11. <source lang="bash">wget http://www.python.org/ftp/python/3.6.1/Python-3.6.1.tar.xz -O /var/tmp/Python-3.6.1.tar.xz</source>
  12. Идём в указанный выше каталог:
  13.  
  14. <source lang="bash">cd /var/tmp/Python-3.6.1</source>
  15. Выполняем:
  16.  
  17. <source lang="bash">./configure</source>
  18. Собираем:
  19.  
  20. <source lang="bash">make</source>
  21. Устанавливаем:
  22.  
  23. <source lang="bash">make install</source>
  24. Python установится в каталог /usr/local/bin/python3
  25.  
  26. <h3>Установка питоновской библиотеки для связи с FireBird</h3>
  27. Нужно обновить или записать клиентскую библиотеку для нашей версии FireBird. Можно 2.5.5, можно 3.0.2.
  28.  
  29. 2.5.5. уже была, добавляем в этот же каталог /usr/lib64 еще libfbclient.so.3.0.2, создаем, аналогично уже существующим, симлинки libfbclient.so.3 и заменяем симлинк libfbclient.so на такой же, указывающий на libfbclient.so.3.
  30.  
  31. Pip с нашей последней версией python 3.6.1 уже имеется, называется аналогично python3 – pip3.
  32. Устанавливаем библиотеку для работы с FireBird на Linux:
  33.  
  34. <source lang="bash">pip install fdb</source>
  35. <h3>Скрипт подключения к FireBird и получения результата о наличии/отсутствии записи в CDR</h3>
  36. <source lang="python">
  37. #!/usr/local/bin/python3
  38. # Скрипт предназначен для мониторинга заполняемости таблицы cdr в базе
  39. import fdb
  40. from datetime import timedelta, datetime
  41.  
  42. # Соединение
  43. con = fdb.connect(dsn='192.168.7.15:e:/path/db_asterisk.fdb', user='user', password='password')
  44.  
  45. # Объект курсора
  46. cur = con.cursor()
  47.  
  48. # Выполняем запрос
  49. dt = (datetime.now() - timedelta(minutes=30)).replace(microsecond=0)
  50. cur.execute("select iif(exists(select * from cdr c where c.calldate > '" + str(dt) + "'), 1, 0) from rdb$database")
  51.  
  52. # cur.fetchall() возвращает список из кортежей. Адресуемся к единственному значению; + перевод строки
  53. print(str(cur.fetchall()[0][0]))
  54. </source>
  55. В строке соединения, естественно, указываем свои данные (IP, путь, логин, пароль).
  56.  
  57. <h3>Zabbix сервер</h3>
  58. Данная статья не преследует цель научить пользоваться системой мониторинга, поэтому здесь всё кратко, для понимания процесса.
  59.  
  60. Создаём новый элемент данных на узле с Asterisk:
  61.  
  62. <img src="http://s012.radikal.ru/i320/1704/43/8754858e9db5.jpg" alt="image"/>
  63.  
  64. Добавляем триггер на событие:
  65.  
  66. <img src="http://i023.radikal.ru/1704/58/4a9fc4fe65f9.jpg" alt="image"/>
  67.  
  68. <h3>Zabbix агент</h3>
  69. В конец файла /etc/zabbix/zabbix_agentd.conf добавляем строчку:
  70.  
  71. <source lang="bash">UserParameter=CDRWrite.check[*], /path/to_scripts/script.py</source>
  72. И перезапускаем агент:
  73.  
  74. <source lang="bash">service zabbix-agent restart</source>
  75. После проделанного на Zabbix сервер должны начать поступать данные о выполнении скрипта. В случае, если данные не пишутся более 30 минут (что в нашем случае невозможно в рабочее время), система мониторинга нас оповестит об этом.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement