ELK Stack заметки

Elasticsearch

Обзор возможностей от Михаила Варакина: https://www.youtube.com/watch?v=ZcC3BTChCY0

a) Security

Логин по-умолчанию: elastic Пароль по-умолчанию: changeme Проверка подключения показала, что можно подставлять любой пароль при доступе к серверу (не только changeme)

curl -XGET -u elastic:changeme '192.168.31.15:9200/?pretty'

После стандартной установки выяснилось, что сменить пароль можно если включен x-pack в файле настроек elasticsearch: /etc/elasticsearch/elasticsearch.yml

xpack.security.enabled: true

Однако, после включения этой опции, сервис останавливался. Причина в том, что для поддержки Security необходимо купить лицензию или включить 30-day trial

Включил здесь: https://elk.omega-spb.ru/app/kibana#/management/elasticsearch/license_management/home

root@elk:/usr/share/elasticsearch# bin/elasticsearch-setup-passwords interactive
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
You will be prompted to enter passwords as the process progresses.
Please confirm that you would like to continue [y/N]

После установки пароля, можно проверить авторизацию на вход таким образом:

curl -u elastic:MySecretPass http://192.168.31.15:9200
{
  "name" : "m-j5pNi",
  "cluster_name" : "dragon",
  "cluster_uuid" : "7O6mrdcjRMOjI-ZYL84X2Q",
  "version" : {
    "number" : "6.8.8",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "2f4c224",
    "build_date" : "2020-03-18T23:22:18.622755Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.2",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

b) Data sources

Добавлять источники данных можно через dashboard

Например: nginx

Filebeat

Установка Filebeat

output.elasticsearch:
hosts: ["<es_url>"]
username: "elastic"
password: "<password>"
setup.kibana:
host: "<kibana_url>"

Где \ пароль пользователя elastic, URL доступа к Elasticsearch, и URL of Kibana.

Включаем и конфигируруем nginx module

sudo filebeat modules enable nginx

Правим под себя установки в /etc/filebeat/modules.d/nginx.yml

Запускаем Filebeat

sudo filebeat setup
sudo service filebeat start

Проверяем данные, принятые из Filebeat nginx module

Установка X-Pack

В версии 6.8.8 и выше уже входит

/usr/share/elasticsearch/bin/elasticsearch-plugin install x-pack

Генерация сертификатов на сервер:

/usr/share/elasticsearch/bin/elasticsearch-certgen Создает файл certificate-bundle.zip, который распаковываем в /etc/pki https://www.elastic.co/guide/en/elasticsearch/reference/6.8/certutil.html

Настройка Filebeat

Что-то отсюда https://denisitpro.wordpress.com/2017/02/05/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0-elasticsearchkibanalogstashfilebeat5/

Проверка правил такой командой:

/usr/share/logstash/bin/logstash --path.settings /etc/logstash -t

В таком случае

Sending Logstash logs to /data/logstash/log which is now configured via log4j2.properties
Configuration OK
[2020-04-24T21:06:32,345][INFO ][logstash.runner          ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

Проверка настроек filebeat:

/usr/bin/filebeat test config

Проверка выхода filebeat:

# filebeat test output
logstash: 192.168.31.15:5044...
  connection...
    parse host... OK
    dns lookup... OK
    addresses: 192.168.31.15
    dial up... OK
  TLS... WARN secure connection disabled
  talk to server... OK

Logstash

Создание ключей здесь: https://www.elastic.co/guide/en/logstash/6.8/keystore.html bin/logstash-keystore –path.settings /etc/logstash create

В качестве входных данных, logstash может использовать множество источников:

https://www.elastic.co/guide/en/logstash/6.8/input-plugins.html

Как я понял, в случае захвата данных из внешних источников (других серверов ), в основном, используется filebeat для передачи логов из linux машин, и winlogbeat для анализа event logs Windows серверов.

https://www.elastic.co/downloads/beats

Конфигурация для приема логов с удаленного nginx proxy сервера через filebeat

Пример 1: nginx

Документация здесь: https://www.elastic.co/guide/en/logstash/6.8/plugins-inputs-beats.html

Настраиваем прием в logstash из filebeat через листенер на TCP порту 5044 и передачу логов в elasticsearch.

Пока без фильтров. Для этого, создадим файл /etc/logstash/conf.d/10-nginx4.conf

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => "192.168.31.15:9200"
    user => "elastic"
    password = "MySecretPass"
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" 
    document_type => "%{[@metadata][type]}" 
  }
}

2-ой шаг - добавляем этот источник данных в конвейер приема данных /etc/logstash/pipelines.yml

### nginx4
- pipeline.id: nginx4
  path.config: "/etc/logstash/conf.d/10-nginx4.conf"
  queue.type: persisted
  ### папка куда будем помещать очередь по этому потоку
  path.queue: "/data/logstash/queue"
  ### надо ли дожидаться окончания приема потока данных перед остановкой сервера
  queue.drain: false
  ### максимальная емкость очереди в байтах
  #  to a smaller value, such as 10mb, to produce smaller queues and improve queue performance.
  queue.max_bytes: 10mb
  queue.max_events: 10

3-ий шаг - создаем каталог приема данных из источника

mkdir /data/logstash/queue
chmod logstash: /data/logstash/queue

4-ый шаг - настраиваем filebeats в качестве шлюза для приема данных из внешнего источника по TCP порту 5400

Правим /etc/filebeat/filebeat.yml

 filebeat.inputs:

 - type: log
   enabled: true
   paths:
     - /var/log/*.log
     - /var/log/secure
     - /var/log/messages
       exclude_lines: ['^OK'
       include_lines: ['^ERR', '^WARN']

 - - type: tcp
     max_message_size: 10Mib
     host: "10.10.113.10:5400"

 filebeat.config.modules:
   path: ${path.config}/modules.d/*.yml
   reload.enabled: false

 setup.template.settings:
   index.number_of_shards: 3

 setup.kibana:
   host: "10.10.113.10:5601

 output.logstash:
   hosts: ["10.10.113.10:5044"]

   template.name: "filebeat"
   template.path: "filebeat.template.json"
   template.overwrite: false

 processors:

   - add_host_metadata: ~
   - add_cloud_metadata: ~

5-ый шаг - перезапуск сервиса

systemctl restart logstash