Установка ELK (ElasticSearch/Logstash/Kibana) в Unix/Linux
Для тех, кто не знает, Elastic стек (ELK стек) — это инфраструктурная программа, состоящая из нескольких компонентов, разработанных компанией Elastic.
Компоненты включают:
- Elasticsearch — Высокомасштабируемая поисковая система полнотекстового поиска и аналитики данных с открытым исходным кодом. Данная утилита позволяет быстро (а главное, — режиме реального времени) хранить, искать и анализировать большие объемы данных. Обычно он используется в качестве базового механизма / технологии, которая обеспечивает помощь приложениям со сложными функциями поиска.
- Logstash — Механизм сбора событий, который обеспечивает конвейер в реальном времени. Он может принимать данные из нескольких источников и преобразовывать их в документы JSON.
- Kibana — Утилита с открытым исходным кодом которая визуализирует работу Elasticsearch. Он используется для взаимодействия с данными, хранящимися в индексах Elasticsearch. Kibana имеет веб-интерфейс, который позволяет быстро создавать и обмениваться динамическими панелями мониторинга, отображающими изменения в запросах Elasticsearch в реальном времени.
- FileBeat — Утилита с открытым исходным кодом, которая работает в качестве агентов на серверах, для отправки различных типов оперативных данных в Elasticsearch.
И сейчас я расскажу как можно установить сие чудо.
Имеется:
- ELK — 192.168.13.195 — собственно сам сервер.
- Filebeats — 192.168.13.150 — взял одну машину в качестве примера.
Установка ELK (ElasticSearch/Logstash/Kibana) в Unix/Linux
Я уже описывал установку некоторых компонентов и сейчас я объединю воедино. И начну с установки компонентов.
У меня не будет сильно много нод ( я не вижу смысла в этом т.к я использую ELK для тестовых целей) и я буду использовать всего лишь 1 машину. Это не столь важно, т.к можно настроить и на нескольких. Для примеров, хватит с головой.
Как будет работать ELK? А вот скриншот того как это выглядит:
Установка Elasticsearch в Unix/Linux
Установка хорошо расписана в моей теме:
Установка ElasticSearch (один сервер) кластер в Unix/Linux
Если ES уже имеется в системе, пропускаем данный шаг и идем далее.
Установка Logstash в Unix/Linux
Установка хорошо расписана в моей теме:
Установка Logstash в Unix/Linux
Если Logstash уже имеется в системе, пропускаем данный шаг и идем далее.
Установка Kibana в Unix/Linux
Установка хорошо расписана в моей теме:
Если Kibana уже имеется в системе, пропускаем данный шаг и идем далее.
Настройка ELK в Unix/Linux
Пришло время настроить все это дело и запустить…
-==Настройка ElasticSearch===-
Настроим «memory lock» для различных типов ОС.
Если имеется Systemd на хосте:
# vim /usr/lib/systemd/system/elasticsearch.service
Раскомментируйте строку:
LimitMEMLOCK=infinity
Сохраните и выйдите.
Открываем еще один файл:
# vim /etc/sysconfig/elasticsearch
И раскомментируйте строку (60-я строка):
MAX_LOCKED_MEMORY=unlimited
Еще открываем один файл:
# vim /etc/elasticsearch/elasticsearch.yml
И прописываем:
bootstrap.memory_lock: true
Запускаем:
# systemctl daemon-reload
И перезапускаем Elasticsearch:
# systemctl restart elasticsearch
Если имеется SysV на хосте:
Открываем:
# vim /etc/sysconfig/elasticsearch
Раскомментируйте строку:
MAX_LOCKED_MEMORY=unlimited
Сохраните и выйдите.
Еще открываем один файл:
# vim /etc/elasticsearch/elasticsearch.yml
И прописываем:
bootstrap.memory_lock: true
И перезапускаем Elasticsearch:
# service elasticsearch restart
Если имеется Upstart на хосте:
Открываем:
# vim /etc/default/elasticsearch
Прописываем:
MAX_LOCKED_MEMORY=unlimited
Еще открываем файл:
# vim /etc/sysconfig/elasticsearch
Раскомментируйте строку:
MAX_LOCKED_MEMORY=unlimited
Сохраните и выйдите.
Еще открываем один файл:
# vim /etc/elasticsearch/elasticsearch.yml
И прописываем:
bootstrap.memory_lock: true
И перезапускаем Elasticsearch:
# service elasticsearch restart
Тестирование!
И проверяем чтобы было:
mlockall: true
Проверим, открылся ли порт:
$ netstat -natp | grep 9[2-3]00
Проверим работу:
$ curl -XGET 'localhost:9200/_nodes?filter_path=**.mlockall&pretty' $ curl -XGET 'localhost:9200/?pretty'
ИЛИ:
# curl 'http://127.0.0.1:9200/_nodes/process?pretty'
PS: Если поменяли IP, то стоит использовать именно его! И конечно же, не забываем менять все это дело в конфигурации.
Идем дальше.
-==Настройка LogStash===-
Если у вас нет DNS, то придется добавить свой собственный IP-адрес вашего ELK-сервера в subjectAltName (SAN). Это позволит вашим серверам собирать логи. И для этого, потребуется ключик.
Необходимо создать новый SSL сертификат. Сначала отредактируйте файл:
# vim /etc/pki/tls/openssl.cnf
В [ v3_ca ] разделе, прописываем:
subjectAltName = IP: 192.168.13.195
Где, localhost — Это ваш ИП адрес сервера с логстешем.
……….СПОСОБ 1 — использовать IP……….
Генерируем сертификат:
# openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash-forwarder.key -out /etc/pki/tls/certs/logstash-forwarder.crt
У меня это — 192.168.13.195!
……….СПОСОБ 2 — использовать доменное имя……….
# openssl req -config /etc/pki/tls/openssl.cnf -subj '/CN=ELK_domain_name/'-x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout /etc/pki/tls/private/logstash-forwarder.key -out /etc/pki/tls/certs/logstash-forwarder.crt
Где:
ELK_domain_name — Ваше доменное имя!
Перезапустим:
# service logstash restart
Идем дальше.
Настраиваем input, output, filter файлы для Logstash.
-===INPUT==-
# vim /etc/logstash/conf.d/input.conf
И он имеет следующее содержание:
input { beats { port => 5044 ssl => true ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt" ssl_key => "/etc/pki/tls/private/logstash-forwarder.key" } }
-===OUTPUT==-
# vim /etc/logstash/conf.d/output.conf
И он имеет следующее содержание:
output { elasticsearch { hosts => ["localhost:9200"] sniffing => true manage_template => false index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" document_type => "%{[@metadata][type]}" } }
-===FILTER==-
# vim /etc/logstash/conf.d/filter.conf
И он имеет следующее содержание:
filter { if [type] == "syslog" { grok { match => { "message" => "%{SYSLOGLINE}" } } date { match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] } } }
Проверьте файлы конфигурации Logstash:
# logstash --configtest -f /etc/logstash/conf.d/rsyslog.conf
И перезапускаем службу:
# service logstash restart
Идем дальше.
-==Настройка Kibana===-
Редактируем конфиг:
# vim /etc/kibana/kibana.yml
Приводим к такому виду:
server.host: "localhost" server.name: "ELK" elasticsearch.url: "http://localhost:9200" elasticsearch.pingTimeout: 1500 elasticsearch.requestTimeout: 30000 i18n.defaultLocale: "en"
Перезапустим:
# service nginx restart # service kibana restart
Смотрим, открылся ли порт:
# netstat -natp | grep 5601
Теперь установим nginx и настроим его как обратный прокси — это позволит заходить на кибану с публичного IP-адреса.
Подключаем EPEL:
И выполняем:
# yum -y install nginx httpd-tools
И создаем конфиг:
# vim /etc/nginx/conf.d/kibana.conf
И прописываем:
server { listen 80; server_name elk_local; access_log /var/log/nginx/access-elk.log; error_log /var/log/nginx/error-elk.log info; auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/my_user_for_kibana; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache_bypass $http_upgrade; } }
PS: Для более лучшей защиты, рекомендуют использовать SSL (т.к я его сгенерировал выше, можно заюзать). Под стройкой listen 80, прописываем:
listen 443 ssl; ssl on; ssl_certificate /etc/pki/tls/certs/logstash-forwarder.crt; ssl_certificate_key /etc/pki/tls/private/logstash-forwarder.key;
Но это самоподписанный сертификат и он будет обозначен красным цветом, по этому, можно заюзать следующую статью:
Установка certbot для получения сертификата от letsencrypt в Unix/Linux
Создать новый файл аутентификации:
# htpasswd -c /etc/nginx/my_user_for_kibana kibana_admin kibana_admin_PW
Пере(запускаем) службу:
# service nginx restart
Смотрим, открылся ли порт:
# netstat -natp | grep 80
Идем дальше.
Установка Filebeat в Unix/Linux
Установка хорошо расписана в моей теме:
Установка Filebeat в Unix/Linux
Как я и говорил, он служит для отправки логов на logstash. Я на этом завершаю свою статью «Установка ELK (ElasticSearch/Logstash/Kibana) в Unix/Linux».
А почему про kiban-у ни слова? Про нее напиши.