ELK Stack заметки
Elasticsearch
Обзор возможностей от Михаила Варакина: https://www.youtube.com/watch?v=ZcC3BTChCY0
a) Security
Логин по-умолчанию: elastic Пароль по-умолчанию: changeme Проверка подключения показала, что можно подставлять любой пароль при доступе к серверу (не только changeme)
После стандартной установки выяснилось, что сменить пароль можно если включен x-pack в файле настроек elasticsearch: /etc/elasticsearch/elasticsearch.yml
Однако, после включения этой опции, сервис останавливался. Причина в том, что для поддержки 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]
После установки пароля, можно проверить авторизацию на вход таким образом:
{
"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>"
Где \
Включаем и конфигируруем nginx module
Правим под себя установки в /etc/filebeat/modules.d/nginx.yml
Запускаем Filebeat
Проверяем данные, принятые из Filebeat nginx module
Установка X-Pack
В версии 6.8.8 и выше уже входит
Генерация сертификатов на сервер:
/usr/share/elasticsearch/bin/elasticsearch-certgen Создает файл certificate-bundle.zip, который распаковываем в /etc/pki https://www.elastic.co/guide/en/elasticsearch/reference/6.8/certutil.html
Настройка Filebeat
Проверка правил такой командой:
В таком случае
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-ий шаг - создаем каталог приема данных из источника
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-ый шаг - перезапуск сервиса