Установка ELK (ElasticSearch/Logstash/Kibana) в Unix/Linux

Установка 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? А вот скриншот того как это выглядит:

Работа elk в Unix/Linux

Работа elk в Unix/Linux

Установка Elasticsearch в Unix/Linux

Установка хорошо расписана в моей теме:

Установка ElasticSearch (один сервер) кластер в Unix/Linux

Если ES уже имеется в системе, пропускаем данный шаг и идем далее.

Установка Logstash в Unix/Linux

Установка хорошо расписана в моей теме:

Установка Logstash в Unix/Linux

Если Logstash уже имеется в системе, пропускаем данный шаг и идем далее.

Установка Kibana в Unix/Linux

Установка хорошо расписана в моей теме:

Установка 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:

Включить 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».

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *