Разверните свой стек ELK с помощью Docker Compose

0 Акции
0
0
0
0

Введение

В этом руководстве вы узнаете, как установить ELK STack с помощью Docker Compose на сервер под управлением Ubuntu (версия 22.04). ELK Stack включает в себя Elasticsearch, Kibana и Logstash.

  • Elasticsearch — поисковая и аналитическая система.
  • Kibana — это пользовательский интерфейс для анализа данных.
  • Logstash может анализировать журналы, связанные с приложениями.
Предпосылки
  • Сервер под управлением Ubuntu 22.04 или более поздней версии: доступ по SSH к этому серверу и доступ с правами root или sudo.
  • Базовые знания Docker, Docker Compose, ElasticSearch и YAML

Шаг 1 — Установка Docker Compose

Если на вашем сервере уже установлен Docker Compose, вы можете пропустить этот шаг. Сначала подключитесь к серверу по SSH, используя следующую команду:

ssh holu@<your_host>

Обязательно обновите пакеты apt и установите cURL:

sudo apt-get update && sudo apt-get install curl -y

Убедившись, что curl установлен, мы можем использовать скрипт быстрой установки, предоставляемый Docker, чтобы установить Docker, а также Docker Compose:

curl https://get.docker.com | sh

Эта команда скачивает скрипт с get.docker.com и “передаёт” его в sh (передаёт скачанный скрипт sh, который его запускает и устанавливает Docker). Последнее, что мы можем сделать, — это добавить себя в группу Docker, чтобы не использовать sudo каждый раз при использовании команды docker.

sudo usermod -aG docker holu

Обязательно выйдите из системы и войдите снова, чтобы изменения вступили в силу.

Шаг 2 — Создание docker-compose.yaml

Файл docker-compose.yaml Он будет использоваться для объявления всей инфраструктуры стека ELK. Он также используется для создания нескольких контейнеров одной командой.

Создайте новую папку на вашем сервере и создайте файл docker-compose.yaml Создайте в нем:

mkdir elk-stack && cd elk-stack && touch docker-compose.yaml

Мы хотим использовать Docker Compose для создания трех контейнеров Docker:


Чтобы создать эти три контейнера, добавьте в файл следующее содержимое docker-compose.yaml Добавлять:

version: "3"
services:
setup:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
environment:
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- KIBANA_PASSWORD=${KIBANA_PASSWORD}
container_name: setup
command:
- bash
- -c
- |
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 30; done;
echo "Setting kibana_system password";
until curl -s -X POST -u "elastic:${ELASTIC_PASSWORD}" -H "Content-Type: application/json" http://elasticsearch:9200/_security/user/kibana_system/_password -d "{\"password\":\"${KIBANA_PASSWORD}\"}" | grep -q "^{}"; do sleep 10; done;
echo "All done!";
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.1
# give the container a name
# this will also set the container's hostname as elasticsearch
container_name: elasticsearch
environment:
- discovery.type=single-node
- cluster.name=elasticsearch
- bootstrap.memory_lock=true
# limits elasticsearch to 1 GB of RAM
- ES_JAVA_OPTS=-Xms1g -Xmx1g
# The password for the 'elastic' user
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- xpack.security.http.ssl.enabled=false
kibana:
image: docker.elastic.co/kibana/kibana:8.12.1
container_name: kibana
ports:
- 5601:5601
environment:
# remember the container_name for elasticsearch?
# we use it here to access that container
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
- ELASTICSEARCH_USERNAME=kibana_system
- ELASTICSEARCH_PASSWORD=${KIBANA_PASSWORD}
# Change this to true if you want to sent
# telemetry data to kibana developers
- TELEMETRY_ENABLED=false

В настоящее время отсутствует один элемент — файл .env. Файл .env используется для хранения секретных данных, таких как пароли и токены API, чтобы удалить их из конфигурации или кода. Docker Compose автоматически обнаруживает файл .env и заменяет переменные, например ${MY_VARIABLE}, на переменную env.

Создайте env и добавьте следующие строки:

ELASTIC_PASSWORD=<your-elastic-password>
KIBANA_PASSWORD=<your-kibana-password>

Теперь вы можете запустить docker compose, чтобы все заработало:

docker compose up -d

Выход:

[+] Running 3/4
⠇ Network elk-stack_default Created
:heavy_check_mark: Container kibana Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch Started

Вы можете использовать команду докер пс Используйте для проверки того, все ли работает так, как ожидалось.

holu@<your_host>:~/elk-stack$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
<id> docker.elastic.co/kibana/kibana:8.12.1 "<command>" About a minute ago Up About a minute 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp kibana
<id> docker.elastic.co/elasticsearch/elasticsearch:8.12.1 "<command>" About a minute ago Up About a minute 9200/tcp, 9300/tcp elasticsearch

Теперь вы можете запустить Kibana в веб-браузере, введя :5601 Открыть в адресной строке.

С именем пользователя эластичный и пароль, ранее сохраненный в файле .env Вы решили войти в систему.


Если вы видите эту страницу при входе в систему, нажмите “Исследовать самостоятельно”.


Теперь вы можете получить доступ к домашней странице Kibana. Она выглядит так:


Шаг 3 – Logstash

Теперь пришло время добавить последний элемент пазла — Logstash. Logstash может анализировать логи ваших приложений и передавать результаты анализа в Elasticsearch.

docker-compose.yaml Отредактируйте и добавьте четвертый контейнер в разделе “Сервисы” в разделе “kibana”.

logstash:
image: docker.elastic.co/logstash/logstash:8.12.1
container_name: logstash
command:
- /bin/bash
- -c
- |
cp /usr/share/logstash/pipeline/logstash.yml /usr/share/logstash/config/logstash.yml
echo "Waiting for Elasticsearch availability";
until curl -s http://elasticsearch:9200 | grep -q "missing authentication credentials"; do sleep 1; done;
echo "Starting logstash";
/usr/share/logstash/bin/logstash -f /usr/share/logstash/pipeline/logstash.conf
environment:
- xpack.monitoring.enabled=false
- ELASTIC_USER=elastic
- ELASTIC_PASSWORD=${ELASTIC_PASSWORD}
- ELASTIC_HOSTS=http://elasticsearch:9200
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf

Настройка Logstash немного сложнее. Вам понадобится дополнительный файл конфигурации logstash.conf. Logstash работает по принципу конвейера. Это файл, описывающий действия Logstash (откуда берутся логи, как их анализировать и куда их отправлять). Конвейер будет находиться в файле logstash.conf.

Это одна из самых основных линий вещей, которые вы можете иметь:

input {
file {
path => "/var/log/dpkg.log"
start_position => "beginning"
}
}
filter { }
output {
elasticsearch {
hosts => "${ELASTIC_HOSTS}"
user => "elastic"
password => "${ELASTIC_PASSWORD}"
index => "logstash-%{+YYYY.MM.dd}"
}
stdout { }
}

Всё довольно понятно. В качестве входных данных он принимает файл (в данном случае /var/log/dpkg.log), а вывод отправляет в Elasticsearch и stdout.

Поместите приведенный выше пример в файл logstash.conf.

Каталог elk-stack теперь должен содержать следующие файлы:

elk-stack/
├── .env
├── docker-compose.yaml
└── logstash.conf

Теперь вы можете запустить Logstash с помощью следующей команды:

docker compose up -d

Выход:

[+] Running 4/4
:heavy_check_mark: Container logstash Started
:heavy_check_mark: Container setup Started
:heavy_check_mark: Container elasticsearch Running
:heavy_check_mark: Container kibana Running

Теперь вы можете получить доступ к Logstash из Kibana. Для начала вам нужно создать представление данных Logstash.

Перейдите на страницу «Обзор аналитики». Вы должны увидеть что-то вроде этого:


Создайте представление данных, нажав кнопку “Создать представление данных”:


После сохранения представления данных вы сможете увидеть отчеты, поступающие из Logstash:


Шаг 4 — Уничтожить стек

Наконец, чтобы остановить стек и удалить контейнеры, выполните следующую команду:

docker compose down

Выход:

[+] Running 5/5
:heavy_check_mark: Container logstash Removed
:heavy_check_mark: Container elasticsearch Removed
:heavy_check_mark: Container kibana Removed
:heavy_check_mark: Container setup Removed
:heavy_check_mark: Network elk-stack_default Removed

Результат

У вас должен быть запущен стек ELK с Docker Compose. Далее нужно добавить генераторы отчётов, например Filebeat, или ознакомиться с официальной документацией.

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

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

Вам также может понравиться