ELK = Elasticsearch + Logstash + Kibana

Установка ELK

Столкнулся с проблемой, что поставил разные версии Elastic и filebeat; filebeat и его конфиг filebeat.template.json также оказались от разных версий (так и не понял как так произошло). Возможно поэтому в /var/log/filebeat/filebeat были 400-ые ошибки. А может быть шаблон неправильный был (старая версия). Ну и намучался я.

/var/log/filebeat/filebeat
2017-11-16T14:11:44+03:00 WARN Can not index event (status=400): {"type":"mapper_parsing_exception","reason":"Failed to parse mapping [_default_]: Mapping definition for [error] has unsupported parameters:  [properties : {code={type=long}, message={norms=false, type=text}, type={ignore_above=1024, type=keyword}}]","caused_by":{"type":"mapper_parsing_exception","reason":"Mapping definition for [error] has unsupported parameters:  [properties : {code={type=long}, message={norms=false, type=text}, type={ignore_above=1024, type=keyword}}]"}}

Не читайте слишком старые руководства. И делайте с умом. Редко кто пишет, какие могут быть ошибки. Используйте документацию вендора. Мана по filebeats

Устанавливаем Java 8

sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
sudo apt-get -y install oracle-java8-installer

Устанавливаем ELK + filebeat

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.deb
sudo dpkg -i elasticsearch-6.0.0.deb
 
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.0.0.deb
sudo dpkg -i logstash-6.0.0.deb
 
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-amd64.deb
sudo dpkg -i kibana-6.0.0-amd64.deb
 
# filebeat, можно также ставить и другие биты
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-amd64.deb
sudo dpkg -i filebeat-6.0.0-amd64.deb

Настройка ELK

Настройка ElasticSearch

vim /etc/elasticsearch/elasticsearch.yml, раскомментировать и поправить cluster.name (elk) и node.name (ubuntu-16).

# sudo /etc/init.d/elasticsearch start # вариант запуска сервиа
sudo service elasticsearch start

Проверка работоспособности:

curl http://localhost:9200

Для модуля nginx из filebeats нужно поставить плагины (об этом я узнал из лога /var/log/filebeat/filebeat):

sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent
sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip
# перезапускаем
sudo service elasticsearch restart

Настройка Logstash

Можно обойтись без Logstash, в filebeats есть опция писать в Elasticsearch сразу. Logstash нужен, чтобы «собирать» логи с кучи серверов, например.

Конфигурация (базовая лежит в /etc/logstash/logstash.yml):

sudo vim /etc/logstash/conf.d/input-beats.conf
# вставить это:
input {
  beats {
    port => 5044
  }
}
sudo vim /etc/logstash/conf.d/output-elasticsearch.conf
# вставить это:
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    sniffing => true
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
  }
}

Запускаем:

sudo service logstash start

Проверка работы:

netstat -ntl | grep 5044 # слушание порта поднимается спустя время (@see анекдот про JAVA)

# так можно запустить в консоли и написать что-нибудь в STDIN, получить в "режиме echo" обратно в STDOUT
sudo /usr/share/logstash/bin/logstash -e 'input { stdin { } } output { stdout {} }'

Kibana

sudo service kibana start

Проверка:

curl --head http://localhost:5601

или в браузере:

http://localhost:5601

Beats

Выше мы поставили filebeat. Остальные можно взять на странице загрузок https://www.elastic.co/downloads

FIXME не работает (думаю, поправят). Установка дашбордов (не обязательно):

mkdir -p ~/ELK/beats
cd ~/ELK/beats
wget http://download.elastic.co/beats/dashboards/beats-dashboards-1.3.1.zip
unzip beats-dashboards-1.3.1.zip
cd beats-dashboards-1.3.1/
./load.sh

Мана

Filebeat

Ставим модули ingest-user-agent и ingest-geoip для ES (см выше, если забыли).

Filebeat можно настроить на отправку в Logstash, или напрямую в ES.

sudo vim /etc/filebeat/filebeat.yml

Раскомментировать и поправить output.elasticsearch (если будем писать сразу в ES):

output.logstash:
  # The Logstash hosts
  hosts: ["localhost:5044"]

Запуск:

sudo service filebeat start

ES ругался на отсутствие индекса.

Добавить в ES индекс можно так (вручную) - если использовать Logshash (FIXME еще не проверял):

curl -XPUT 'http://localhost:9200/_template/filebeat' -d@/etc/filebeat/filebeat.template.json -H "Content-Type: application/json"
# Удалить можно так:
# curl -XDELETE 'http://localhost:9200/_template/filebeat'

Если сразу писать в ES:

sudo vim /etc/filebeat/filebeat.yml
# добавить
setup.template.overwrite: true
# перезапустить и посмотреть, что в логе
sudo service filebeat restart
# в логе должна быть строчка "Elasticsearch template with name 'filebeat-6.0.0' loaded"
sudo less /var/log/filebeat/filebeat

Проверить можно в Dev Tools, выполнив GET _cat/templates или через курл:

curl 'http://localhost:9200/_cat/templates'

Проверка в Kibana

http://localhost:5601/app/kibana#/dev_tools/console?_g=()
GET _cat/indices?v

Ссылки