ELK Stack заметки

Elasticsearch

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

a) Security

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

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

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

Copy
xpack.security.enabled: true

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

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

Copy
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]

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

Copy
curl -u elastic:MySecretPass http://192.168.31.15:9200
Copy
{ "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

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

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

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

Copy
sudo filebeat modules enable nginx

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

Запускаем Filebeat

Copy
sudo filebeat setup sudo service filebeat start

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

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

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

Copy
/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/

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

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

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

Copy
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:

Copy
# 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

Copy
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

Copy
### 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-ий шаг - создаем каталог приема данных из источника

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

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

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

Copy
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-ый шаг - перезапуск сервиса

Copy
systemctl restart logstash