Дмитрий Барышников
01.06.2020
8911

Использование Elasticsearch и Kibana для сбора логов в Asterisk

В данной статье мы продолжим рассмотрение стека ELK. Детальней разберем настройку ElasticSearch, а также рассмотрим Kibana как инструмент для визуализации логов. Изучить первоначальную настройку и узнать немного теории про стек ELK вы можете, заглянув в статью «Использование ElasticSearch для Asterisk». Настройка Для начала создадим конфигурационнай файл для logstash, открываем файл o /etc/logstash/conf.d/logstash.conf  и вносим туда […]

В данной статье мы продолжим рассмотрение стека ELK. Детальней разберем настройку ElasticSearch, а также рассмотрим Kibana как инструмент для визуализации логов.

Изучить первоначальную настройку и узнать немного теории про стек ELK вы можете, заглянув в статью «Использование ElasticSearch для Asterisk».

Информер! Тестирование проводим на том же сервере, что и наш Asterisk + freePBX. В рабочем решению делать так не рекомендуется, т.к. стек ELK потребляет слишком много ресурсов.

Настройка

Для начала создадим конфигурационнай файл для logstash, открываем файл o /etc/logstash/conf.d/logstash.conf  и вносим туда следующее:

input {
  beats {
	port => 5044
  }
}
# Парсим сообщения по заданным паттернам Grok
filter {
  if [type] == "asterisk-log"  {
	grok {
      patterns_dir => [ "/usr/share/logstash/patterns" ]
  	match => { "message" => "\[(%{TIMESTAMP_ISO8601:datetime}|%{SYSLOGTIMESTAMP:datetime})\]\s*%{ASTLEVEL:asterisk_severity}\s*\[%{ASTPID:asterisk_pid}\](\[%{ASTCHANNEL_ID:asterisk_channel}\])?\s*%{ASTSRC:asterisk_source}:\s*%{GREEDYDATA:asterisk_data}" }
	}
  }
  if [type] == "asterisk-cdr" {
	csv {
  	separator => ","
  	# На тот случай если захотите парсить CDR-CSV
  	columns => ["accountcode","src","dst","dcontext","clid","channel","dstchannel","lastapp","lastdata","start","answer","end","duration","billsec","disposition",
"amaflags","userfield","uniqueid"]
  	convert => {
  	#  "accountcode" => "string"
  	#  "src" => "string"
  	#  "dst" => "string"
  	#  "dcontext" => "string"
  	#  "clid" => "string"
  	#  "channel" => "string"
  	#  "dstchannel" => "string"
	  #  "lastapp" => "string"
  	#  "lastdata" => "string"
         "start" => "date_time"
         "answer" => "date_time"
         "end" => "date_time"
         "duration" => "integer"
         "billsec" => "integer"
  	#  "disposition" => "string"
  	#  "amaflags" => "string"
  	#  "userfield" => "string"
  	#  "uniqueid" => "string"
  	}
  } }
}
# Отбравка данных в ElasticSearch
output {
  elasticsearch {
	hosts => "localhost:9200"
	user => elastic
	password => changeme
    manage_template => false
	index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
  # for debug purpose of pipeline with command: ./logstash -f /etc/logstash/conf.d/logstash.conf
  # stdout { codec => rubydebug  }
}

Т.к. мы используем Grok для парсинга данных из логов, то необходимо его установить, а также дополнительные зависимости. Выполняем

·         wget --no-check-certificate https://github.com/jordansissel/grok/tarball/master -O grok.tar.gz
·         tar zxf grok.tar.gz
·         yum install -y gcc gperf make libevent-devel pcre-devel tokyocabinet-devel
·         make grok
·         make install
·         ldconfig

Создаем каталог patterns в директории /usr/share/logstash/ а в нём файл asterisk-grok-patterns, в который вносим следующее:

ASTLEVEL (?:VERBOSE|ERROR|NOTICE|INFO|DEBUG|DTMF|WARNING)
ASTPID [0-9]+
ASTCHANNEL_ID C\-[A-Za-z0-9]+
ASTSRC [-a-z._0-9\/]+

Далее Вносим настройки в файл /etc/filebeat/filebeat.yml

#----------------------------- Logstash prospectors ---------------------------
filebeat.inputs:
- input_type: log
  enabled: true
  paths:
	- /var/log/asterisk/full*
  document_type: asterisk-log
  encoding: "utf-8"
  scan_frequency: 5s
 
  env: production
 
#----------------------------- Logstash output --------------------------------
output.logstash:
  # The Logstash hosts
  hosts: ["127.0.0.1:5044"]
 
xpack.monitoring:
  enabled: true
  elasticsearch:
	hosts: ["http://127.0.0.1:9200"]
 
#================================ Logging =====================================
logging.level: debug
logging.selectors: ["*"]

В данном файле, мы говорим, что парсить будем логи Full.

Информер! Не забудьте указать параметр  enabled: true, иначе парсинг производиться не будет.

Теперь, после того как все настройки внесены, мы можем перейти на веб-интерфейс Kibana для создания паттернов. Напоминаю, что Kibana использует порт 5601

Окно авторизации

Далее перейдем в настройки patterns как показано на рисунке и создадим новый паттерн.

Создание паттерна

Далее выбираем доступный нам pattern, который начинается со слов filebeat и вносим его имя целиком в index name

Создание паттерна 2

После нажатия кнопки next выбираем Time Filter, нам доступен только timestamp

Фильтр по времени

После настройки паттернов переходим в раздел Discover и там выбираем наш паттерн по  которому будем смотреть логи.

Выбор паттерна

После этого, в строке поиска и можем написать ключевое слово, по которому будем делать визуализацию, для примера возьмём слово warning.

Визуализация логов

Как видим на скриншоте, у нас встречался всего 1 warning, который как раз и отражен на графике.

На этом настройка ElasticSearch + Kibana, для Asterisk завершена.

Подписаться
Уведомление о
guest
0 Комментарий
Inline Feedbacks
View all comments

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

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

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

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

ближайшие Вебинары

ONLINE

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 сим-карты и настроить маршрутизацию вызовов по наиболее выгодному тарифу. Всё это позволяет экономить с первых минут пользования станцией.