Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <h3>Предыстория</h3>
- Имеем в "штате" Asterisk 11 и СУБД FireBird 2.5, в которую PBX пишет CDR. Нечасто, но бывает так, что запись в БД прекращается, а узнаем мы об этом тогда, когда нужно что-то посмотреть в CDR. Увидев, что записей нет, перезапускаем Asterisk, запись в БД восстанавливается. В очередной раз не получив важную информацию из CDR, было решено каким-то образом отслеживать факт записи/не записи в CDR.
- В качестве системы мониторинга мы используем Zabbix 3, поэтому было решено написать простенький скрипт на Python, который будет подключаться к FireBird и проверять время последней записи в таблицу с CDR, если это время превышает 30 минут, то система мониторинга просигнализирует нам об этом.
- <cut/>
- <h3>Установка Python 3</h3>
- Asterisk установлен на уже стареньком Centos 6.8, поэтому для начала устанавливаем свежий Python.
- Качаем самые свежие на момент написания статьи исходники:
- <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>
- Идём в указанный выше каталог:
- <source lang="bash">cd /var/tmp/Python-3.6.1</source>
- Выполняем:
- <source lang="bash">./configure</source>
- Собираем:
- <source lang="bash">make</source>
- Устанавливаем:
- <source lang="bash">make install</source>
- Python установится в каталог /usr/local/bin/python3
- <h3>Установка питоновской библиотеки для связи с FireBird</h3>
- Нужно обновить или записать клиентскую библиотеку для нашей версии FireBird. Можно 2.5.5, можно 3.0.2.
- 2.5.5. уже была, добавляем в этот же каталог /usr/lib64 еще libfbclient.so.3.0.2, создаем, аналогично уже существующим, симлинки libfbclient.so.3 и заменяем симлинк libfbclient.so на такой же, указывающий на libfbclient.so.3.
- Pip с нашей последней версией python 3.6.1 уже имеется, называется аналогично python3 – pip3.
- Устанавливаем библиотеку для работы с FireBird на Linux:
- <source lang="bash">pip install fdb</source>
- <h3>Скрипт подключения к FireBird и получения результата о наличии/отсутствии записи в CDR</h3>
- <source lang="python">
- #!/usr/local/bin/python3
- # Скрипт предназначен для мониторинга заполняемости таблицы cdr в базе
- import fdb
- from datetime import timedelta, datetime
- # Соединение
- con = fdb.connect(dsn='192.168.7.15:e:/path/db_asterisk.fdb', user='user', password='password')
- # Объект курсора
- cur = con.cursor()
- # Выполняем запрос
- dt = (datetime.now() - timedelta(minutes=30)).replace(microsecond=0)
- cur.execute("select iif(exists(select * from cdr c where c.calldate > '" + str(dt) + "'), 1, 0) from rdb$database")
- # cur.fetchall() возвращает список из кортежей. Адресуемся к единственному значению; + перевод строки
- print(str(cur.fetchall()[0][0]))
- </source>
- В строке соединения, естественно, указываем свои данные (IP, путь, логин, пароль).
- <h3>Zabbix сервер</h3>
- Данная статья не преследует цель научить пользоваться системой мониторинга, поэтому здесь всё кратко, для понимания процесса.
- Создаём новый элемент данных на узле с Asterisk:
- <img src="http://s012.radikal.ru/i320/1704/43/8754858e9db5.jpg" alt="image"/>
- Добавляем триггер на событие:
- <img src="http://i023.radikal.ru/1704/58/4a9fc4fe65f9.jpg" alt="image"/>
- <h3>Zabbix агент</h3>
- В конец файла /etc/zabbix/zabbix_agentd.conf добавляем строчку:
- <source lang="bash">UserParameter=CDRWrite.check[*], /path/to_scripts/script.py</source>
- И перезапускаем агент:
- <source lang="bash">service zabbix-agent restart</source>
- После проделанного на Zabbix сервер должны начать поступать данные о выполнении скрипта. В случае, если данные не пишутся более 30 минут (что в нашем случае невозможно в рабочее время), система мониторинга нас оповестит об этом.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement