Установка стека ELK 6.x на debian 9

!!! заметка в процессе создания !!!

В этой статье постараюсь описать сам процесс установки, настройки, и примеры работы. 


Сперва давайте разберёмся ху-из-ху. Итак, ELK-стек - набор программ (Elasticsearch, Logstash, Kibana) от компании Elastic.io которые предоставляют функции сбора, хранения и представления  и анализа журналируемой информации, в частности логов.


Последовательность передачи данных между элементами стека


Filebeat > Logstash > ElasticSearch > Kibana


Теперь по порядку, о каждом продукте:

FileBeat  отправляет данные с пета (управляемой машины) в ELK стек. Есть как версии под Linux так и под Windows.





Logstash — это инструмент для управления журналами. Он поддерживает журналы практически любых типов, включая журналы системных событий, журналы регистрации ошибок и журналы пользовательских приложений. Он может получать данные из множества источников — включая системные журналы, журналы систем обмена сообщениями (например, rabbitmq) и журналы jmx, — и может выводить данные множеством способов, в том числе на электронную почту, в объекты Websocket и в решение Elasticsearch.

Elasticsearch — это механизм полнотекстового поиска и анализа в реальном времени, который хранит данные журналов, индексированные компонентом Logstash. Он основывается на библиотеке механизма поиска Apache Lucene и предоставляет данные через интерфейсы REST и Java API. Решение Elasticsearch является масштабируемым и предназначено для использования распределенными системами.

Kibana — это графический web-интерфейс для поиска, анализа и визуализации данных журналов, хранимых в индексах Elasticsearch. Он использует REST-интерфейс решения Elasticsearch для извлечения данных и позволяет создавать настраиваемые панели для представления данных, а также выполнять запросы и фильтровать данные.

Установка пакетов на сервере.

# apt-get install apt-transport-https -y
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list

# apt-get update
# apt-get install -y openjdk-8-jdk
# apt-get install elasticsearch logstash kibana


Настройка пакетов

Правка файла etc/kibana/kibana.yml
hostname: ip-адрес 

Настройка Logstash
Положить файл с шаблоном разбора в папку /conf.d
Пример файла шаблона, сбор логов nginx:
input {
  beats {
    port => 5044
    host => "0.0.0.0"
  }
}
filter {
  if [fileset][module] == "nginx" {
    if [fileset][name] == "access" {
      grok {
        match => { "message" => ["%{IPORHOST:[nginx][access][remote_ip]} - %{DATA:[nginx][access][user_name]} \[%{HTTPDATE:[nginx][access][time]}\] \"%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}\" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} \"%{DATA:[nginx][access][referrer]}\" \"%{DATA:[nginx][access][agent]}\""] }
        remove_field => "message"
      }
      mutate {
        add_field => { "read_timestamp" => "%{@timestamp}" }
      }
      date {
        match => [ "[nginx][access][time]", "dd/MMM/YYYY:H:m:s Z" ]
        remove_field => "[nginx][access][time]"
      }
      useragent {
        source => "[nginx][access][agent]"
        target => "[nginx][access][user_agent]"
        remove_field => "[nginx][access][agent]"
      }
      geoip {
        source => "[nginx][access][remote_ip]"
        target => "[nginx][access][geoip]"
      }
    }
    else if [fileset][name] == "error" {
      grok {
        match => { "message" => ["%{DATA:[nginx][error][time]} \[%{DATA:[nginx][error][level]}\] %{NUMBER:[nginx][error][pid]}#%{NUMBER:[nginx][error][tid]}: (\*%{NUMBER:[nginx][error][connection_id]} )?%{GREEDYDATA:[nginx][error][message]}"] }
        remove_field => "message"
      }
      mutate {
        rename => { "@timestamp" => "read_timestamp" }
      }
      date {
        match => [ "[nginx][error][time]", "YYYY/MM/dd H:m:s" ]
        remove_field => "[nginx][error][time]"
      }
    }
  }
}
output {
  elasticsearch {
    hosts => localhost
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}
Хорошо описаны примеры на домашнем сайте ELK: 
https://www.elastic.co/guide/en/logstash/6.2/logstash-config-for-filebeat-modules.html

Установка пакетов на клиенте. 

# apt-get install apt-transport-https -y
# wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | apt-key add -
# echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | tee -a /etc/apt/sources.list.d/elastic-6.x.list
# apt-get update
# apt-get install filebeat

или через curl

curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.1-amd64.deb
dpkg -i filebeat-6.5.1-amd64.deb

Настройка Filebeat на клиенте

в папке module.d переименовать нужный модуль из *.yml.disabled в файл *.yml
прописать адрес сервера Elasticsearch в filebeat.yml
запустить скрипт автонастройки 
# filebeat setup
прописать адрес сервера Logstash в filebeat.yml.
и включить и перезапустить сервис: 
systemctl enable filebeat 
systemctl restart filebeat




Комментарии

Популярные сообщения из этого блога

Удаление раздела SWAP и расширение раздела Debian

Защита проводной сети по протоколу 802.1x

Установка и настройка Storage Space Direct