Дмитрий Рашевский
12.04.2020
5678

Использование ElasticSearch для Asterisk

Введение ELK Stack. ElasticSearch. Установка и настройка Kibana. Установка и настройка Logstash. Установка и настройка Filebeat. Установка и настройка Заключение Введение В сфере ИТ возникают проблемы с количеством логов. Для разных систем она хранится в разных директориях, а порой даже на разных серверах. Из-за такого разнообразия возникает вопрос. А можно ли хранить все логи централизованно? […]

  1. Введение
  2. ELK Stack.
  3. ElasticSearch. Установка и настройка
  4. Kibana. Установка и настройка
  5. Logstash. Установка и настройка
  6. Filebeat. Установка и настройка
  7. Заключение

Введение

В сфере ИТ возникают проблемы с количеством логов. Для разных систем она хранится в разных директориях, а порой даже на разных серверах. Из-за такого разнообразия возникает вопрос. А можно ли хранить все логи централизованно? Конечно можно и в этом поможет целый комплекс ПО ElasticSearch + Logstash + Kibana. Зачастую он называется ELS Stack. И в этой статье мы рассмотрим. Как его настроить для сбора логов с Астериск.

ELK Stack

ELK Stack – это стек программ, который помогает обрабатывать, хранить и выводить в удобном виде логи различных программ. В этот программный комплекс входят следующие ПО:

  • ElasticSearch
  • Logstash
  • Kibana
  • Filebeat

В нашем примере это будет выглядеть следующим образом: Filebeat будет собирать логи на сервере Астериск, отправлять в сборщик и анализатор логов Logstash, который в свою очередь перенаправит их в ElasticSearch и с помощью web интерфейса Kibana мы сможем смотреть собранные в ElasticSearch логи.

Схема ELK Stack
Схема ELK Stack

Теперь давайте подробно рассмотрим каждое ПО отдельно и расскажем, как его устанавливать и настраивать для работы.

Все работы будут проводиться на системе Centos 7.

ElasticSearch. Установка и настройка

Elasticsearch — это система поиска и анализа с открытым исходным кодом с целью абсолютно всех видов сведений, в том числе текстовые, числовые, геопространственные, структурированные и неструктурированные. Elasticsearch создан в Apache Lucene. Популярен собственным простым API-интерфейсом. Elasticsearch считается основным компонентом Elastic Stack.

Итак, установка ElasticSearch состоит из нескольких пунктов:

  1. Установка Java
  2. Подключение репозитория
  3. Установка из репозитория

Начнем с установки Java SE на нашу систему. Для начала перейдем на официальный сайт Oracle и скачаем нужный файл *-linux-x64.rpm (https://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html).

RPM пакет с Oracle
RPM пакет с Oracle
Для того чтобы скачать файл, вам будет необходимо зарегистрироваться на сайте Oracle. Иначе получить пакеты не получиться

С помощью WINSCP  переносим наш скаченный пакет на линукс машину. В этом примере это будет /root/. Теперь подключаемся по SSH к серверу и переходим в директорию. Куда мы сохраняли rpm пакет. Отсюда будем выполнять команду

# yum localinstall jre-8u241-linux-x64.rpm

Установка Java
Установка Java

На этом Java установлена. Теперь перейдем к установке ElasticSearch. Сперва подключим публичный ключ репозитория. Затем создадим запись с обращением к репозиторию в файле /etc/yum.repos.d/elasticsearch.repo и выполним установку.

# rpm —import https://artifacts.elastic.co/GPG-KEY-elasticsearch

# vim /etc/yum.repos.d/elasticsearch.repo

 

[elasticsearch-7.x]

name=Elasticsearch repository for 7.x packages

baseurl=https://artifacts.elastic.co/packages/7.x/yum

gpgcheck=1

gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch

enabled=1

autorefresh=1

 

# yum install -y elasticsearch

Настройка репозитория ElasticSearch
Установка ElasticSearch

На этом установка окончена. Осталось запустить сервис.

# systemctl enable elasticsearch.service# systemctl start elasticsearch.service

Теперь приступим к настройке ElasticSearch. Все конффигурации этого ПО находятся в следующем файле /etc/elasticsearch/elasticsearch.yml. Для настройки нам необходимо изменить два параметра: path.data и network.host.

  • Path.data – директория для хранения данных
  • network.host – указывается какие сети будем слушать.
Поскольку ElasticSearch по умолчанию слушает все сети, надо network.host изменить на 127.0.0.1, чтобы прослушивался только локальный интерфейс. Т.к. Мы все настраиваем на той же машине. Где установлен Asterisk: path.data: /var/lib/elasticsearch network.host: 127.0.0.1
Конфигурация ElasticSearch

Внеся все настройки перезапускаем сервис командой

systemctl restart elasticsearch

В итоге у вас сервер должен слушать порт 9200 TCP, по умолчанию.

Kibana. Установка и настройка

Kibana — это приложение с открытым исходным кодом, которое находится на вершине стека Elastic Stack и может искать и отображать данные, проиндексированные в Elasticsearch. Приложение известно как инструмент построения диаграмм для Elastic Stack, Kibana также выступает в качестве пользовательского интерфейса для мониторинга данных.

Это прилоение устанавливается аналогично ElasticSearch. Изначально подключаем публичный ключ репозитория. Указываем конфиги для отдельного репозитория, откуда будет производиться установка и выполняем установку.

# rpm —import https://artifacts.elastic.co/GPG-KEY-elasticsearch

# vim /etc/yum.repos.d/kibana.repo

 

[kibana-7.x]

name=Kibana repository for 7.x packages

baseurl=https://artifacts.elastic.co/packages/7.x/yum

gpgcheck=1

gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch

enabled=1

autorefresh=1

 

# yum install kibana

Настройка репозитория ElasticSearch
Настройка репозитория ElasticSearch
Установка ElasticSearch
Установка ElasticSearch

Установка произведена, теперь надо зупустить ПО.

# systemctl enable kibana.service# systemctl start kibana.service

По умолчанию Kibana работает на порту 5601 TCP. Из-за NodeJS на котором она написана старт сервиса происходит с задержкой.

Logstash. Установка и настройка

Logstash — это обработчик данных на стороне сервера с открытым исходным кодом, который одновременно получает данные из множества источников, преобразует их и затем отправляет в ElasticSearch.

Установка Logstash аналогична предыдущим пунктам. Но т. к. репозиторий подключен. Поэтому для установки потребуется только одна команда, еще нужно будет добавить сервис в автозагрузку.

# yum install logstash# systemctl enable logstash.service

Установка Logstash
Установка Logstash

Для настройки Logstash создадим файл в директории конфигов сервиса.

# vim /etc/logstash/conf.d/logstash.conf

И добавим в него следующие строки:

input {

  beats {

    port => 5044

  }

}

 

 

filter {

    if [type] == «asterisk_debug» {

 

        if [message] =~ /^\[/ {

            grok {

                match => {

                    «message» => «\[%{SYSLOGTIMESTAMP:log_timestamp}\] +(?<log_level>(?i)(?:debug|notice|warning|error|verbose|dtmf|fax|security)(?-i))\[%{INT:thread_id}\](?:\[%{DATA:call_thread_id}\])? %{DATA:module_name}\:(?: +[=|-]{2})? %{GREEDYDATA:log_message}»

                }

                add_field => [ «received_timestamp», «%{@timestamp}» ]

                add_field => [ «process_name», «asterisk» ]

            }

            date { match => [ «log_timestamp», «MMM  d HH:mm:ss», «MMM dd HH:mm:ss» ] }

    

    

            if ![log_message] {

                mutate {

                    add_field => {«log_message» => «»}

                }

            }

    

            if [log_message] =~ /^Executing/ and [module_name] == «pbx.c» {

                grok {

                    match => {

                        «log_message» => «Executing +\[%{DATA:dialplan_extension}@%{DATA:dialplan_context}:%{INT:dialplan_priority}\] +%{DATA:asterisk_app}\(\»%{DATA:originating_channel}\», \»%{GREEDYDATA:asterisk_app_data}\»\)»

                    }

                }

             if ![asterisk_app_data] {

                    mutate {

                        add_field => {«asterisk_app_data» => «»}

                    }

                }

    

            }

          if [message] =~ /\s+==\s+/ {

                if [module_name] and [module_name] =~ /^(pbx|app_stack)\.c/ and [log_message] =~ /^Spawn extension/ {

                    grok {

                        match => {

                            «log_message» => «^Spawn extension \(%{DATA:dialplan_context}, %{DATA:dialplan_extension}, %{DATA:dialplan_priority}\) exited (non-zero|\S+) on ‘${DATA:originating_channel}'»

                        }

                    }

                }

    

                if [module_name] and [module_name] == «app_mixmonitor.c» and [log_message] =~ /^(End|Begin) MixMonitor Recording/ {

                    grok {

                        match => {

                            «log_message» => «^(?<mixmonitor_action>(?:End|Begin)) MixMonitor Recording %{GREEDYDATA:mixmonitor_record_channel}»

                        }

                    }

                }

    

                if [module_name] and [module_name] == «manager.c» {

                    if [log_message] =~ /^Manager ‘\S+’ logged (on|off) from/ {

                        grok {

                            match => {

                                «log_message» => «Manager ‘%{DATA:manager_user}’ (?<manager_user_status>logged (?:on|off)) from %{IP:manager_listen_ip}»

                            }

                        }

                    }

                }

    

                }

            }

        }

    }

}

 

output {

        elasticsearch {

            hosts    => «localhost:9200»

            index    => «aster-%{+YYYY.MM.dd}»

        }

#stdout { codec => rubydebug }

}

Рассмотрим подробнее разделы

  • Input – в этом разделе указывается порт, который будет слушать logstash
  • filter – в этом разделе описываются правила, для анализа, обработки и отправки через раздел output
  • output – раздел, отвечающий за назначение отправки обработанных данных

Закончили настройку logstash. Запускаем его:

# systemctl start logstash.service

Настройка Logstash
Настройка Logstash

На этом настройка обработчика логов завершена. Остался маленький шаг — это установка и настройка отправщика логов Filebeat.

Filebeat. Установка и настройка

Filebeat помогает упростить простые вещи, предлагая легкий способ пересылки и централизации логов и файлов.

Это ПО должно находится на сервере, откуда будем брать логи. В нашем случае все находится в одном месте.

Установка происходит из того же репозитория, что и ElasticSearch, поэтому для установки нам потребуется одна команда

# yum install filebeat

Установка Filebeat
Установка Filebeat

Теперь, когда установка закончена, перейдем к конфигурированию сервиса отправки логов. Для этого откроем файл с настройками /etc/filebeat/filebeat.yml и внесем туда некоторые изменения.

filebeat:

  prospectors:

    # Asterisk /var/log/asterisk/debug

    —

      paths:

        — /var/log/asterisk/debug

      input_type: log

      document_type: asterisk_debug

      include_lines: [«^[[]»]

 

output.logstash:

  # The Logstash hosts

  hosts: [«127.0.0.1:5044»]

 

logging.level: info

logging.selectors: [«*»]

Конфигурация Filebeat
Конфигурация Filebeat
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Остались вопросы?

Я - Першин Артём, менеджер компании Voxlink. Хотите уточнить детали или готовы оставить заявку? Укажите номер телефона, я перезвоню в течение 3-х секунд.

VoIP оборудование


ближайшие курсы

10 доводов в пользу Asterisk

Распространяется бесплатно.

Asterisk – программное обеспечение с открытым исходным кодом, распространяется по лицензии GPL. Следовательно, установив один раз Asterisk вам не придется дополнительно платить за новых абонентов, подключение новых транков, расширение функционала и прочие лицензии. Это приближает стоимость владения станцией к нулю.

Безопасен в использовании.

Любое программное обеспечение может стать объектом интереса злоумышленников, в том числе телефонная станция. Однако, сам Asterisk, а также операционная система, на которой он работает, дают множество инструментов защиты от любых атак. При грамотной настройке безопасности у злоумышленников нет никаких шансов попасть на станцию.

Надежен в эксплуатации.

Время работы серверов некоторых наших клиентов исчисляется годами. Это значит, что Asterisk работает несколько лет, ему не требуются никакие перезагрузки или принудительные отключения. А еще это говорит о том, что в районе отличная ситуация с электроэнергией, но это уже не заслуга Asterisk.

Гибкий в настройке.

Зачастую возможности Asterisk ограничивает только фантазия пользователя. Ни один конструктор шаблонов не сравнится с Asterisk по гибкости настройки. Это позволяет решать с помощью Asterisk любые бизнес задачи, даже те, в которых выбор в его пользу не кажется изначально очевидным.

Имеет огромный функционал.

Во многом именно Asterisk показал какой должна быть современная телефонная станция. За многие годы развития функциональность Asterisk расширилась, а все основные возможности по-прежнему доступны бесплатно сразу после установки.

Интегрируется с любыми системами.

То, что Asterisk не умеет сам, он позволяет реализовать за счет интеграции. Это могут быть интеграции с коммерческими телефонными станциями, CRM, ERP системами, биллингом, сервисами колл-трекинга, колл-бэка и модулями статистики и аналитики.

Позволяет телефонизировать офис за считанные часы.

В нашей практике были проекты, реализованные за один рабочий день. Это значит, что утром к нам обращался клиент, а уже через несколько часов он пользовался новой IP-АТС. Безусловно, такая скорость редкость, ведь АТС – инструмент зарабатывания денег для многих компаний и спешка во внедрении не уместна. Но в случае острой необходимости Asterisk готов к быстрому старту.

Отличная масштабируемость.

Очень утомительно постоянно возвращаться к одному и тому же вопросу. Такое часто бывает в случае некачественного исполнения работ или выбора заведомо неподходящего бизнес-решения. С Asterisk точно не будет такой проблемы! Телефонная станция, построенная на Asterisk может быть масштабируема до немыслимых размеров. Главное – правильно подобрать оборудование.

Повышает управляемость бизнеса.

Asterisk дает не просто набор полезных функций, он повышает управляемость организации, качества и комфортности управления, а также увеличивает прозрачность бизнеса для руководства. Достичь этого можно, например, за счет автоматизации отчетов, подключения бота в Telegram, санкционированного доступа к станции из любой точки мира.

Снижает расходы на связь.

Связь между внутренними абонентами IP-АТС бесплатна всегда, независимо от их географического расположения. Также к Asterisk можно подключить любых операторов телефонии, в том числе GSM сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.