Требования к системе
Для работы с данным руководством вам потребуется следующее.
- Память – 1,5 ГБ и выше
- Docker Engine – версия 18.06.0 или новее
- Docker Compose – версия 1.26.0 или новее
Установите необходимые пакеты, указанные ниже:
## На Debian/Ubuntu
sudo apt update && sudo apt upgrade
sudo apt install curl vim git
## На RHEL/CentOS/RockyLinux 8
sudo yum -y update
sudo yum -y install curl vim git
## На Fedora
sudo dnf update
sudo dnf -y install curl vim git
Шаг 1 – Установите Docker и Docker Compose
Используйте приведенное ниже руководство для установки Docker Engine на вашу систему.
- Как установить Docker на CentOS 8
- Как установить Docker и запустить Docker контейнеры в Ubuntu
- Как установить Docker в CentOS
- Как установить и использовать Docker Compose на CentOS 8
Добавьте системного пользователя в группу docker.
Шаг 2 – Обеспечение контейнеров Elastic stack (ELK).
Начнем с клонирования файлов с Github, как показано ниже
git clone https://github.com/deviantony/docker-elk.git
cd docker-elk
Откройте файл развертывания для редактирования:
vim docker-compose.yml
Файл развертывания стека Elastic состоит из 3 основных частей.
Elasticsearch – с портами:
- 9200: Elasticsearch HTTP
- 9300: Elasticsearch TCP транспорт
Logstash – с портами:
5044: Logstash Beats input
5000: Logstash TCP вход
9600: API мониторинга Logstash
Kibana – с портом 5601
В открытом файле вы можете сделать следующие настройки:
Настройка Elasticsearch
Файл конфигурации для Elasticsearch хранится в файле elasticsearch/config/elasticsearch.yml.
Таким образом, вы можете настроить среду, задав имя кластера, сетевой хост и лицензирование, как показано ниже
elasticsearch:
environment:
cluster.name: my-cluster
xpack.license.self_generated.type: basic
Чтобы отключить платные функции, необходимо изменить параметр xpack.license.self_generated.type с trial (самогенерируемая лицензия дает доступ только ко всем функциям x-pack на 30 дней) на basic.
Настройка Kibana
Файл конфигурации хранится в файле kibana/config/kibana.yml.
Здесь вы можете указать переменные окружения, как показано ниже.
kibana:
environment:
SERVER_NAME: kibana.example.com
Настройка JVM
Обычно и Elasticsearch, и Logstash начинают с 1/4 от общей памяти хоста, выделенной под JVM Heap Size.
Вы можете настроить память, задав следующие параметры.
Для Logstash (пример с увеличением памяти до 1 ГБ)
logstash:
environment:
LS_JAVA_OPTS: -Xmx1g -Xms1g
Для Elasticsearch (пример с увеличением памяти до 1 ГБ)
elasticsearch:
environment:
ES_JAVA_OPTS: -Xm1g -Xms1g
Настройка имен пользователей и паролей
Чтобы настроить имена пользователей, пароли и версию, отредактируйте файл .env.
vim .env
Внесите необходимые изменения в версию, имена пользователей и пароли.
ELASTIC_VERSION=<VERSION>
## Passwords for stack users
#
# User 'elastic' (built-in)
#
# Superuser role, full access to cluster management and data indices.
# https://www.elastic.co/guide/en/elasticsearch/reference/current/built-in-users.html
ELASTIC_PASSWORD='StrongPassw0rd1'
# User 'logstash_internal' (custom)
#
# The user Logstash uses to connect and send data to Elasticsearch.
# https://www.elastic.co/guide/en/logstash/current/ls-security.html
LOGSTASH_INTERNAL_PASSWORD='StrongPassw0rd1'
# User 'kibana_system' (built-in)
#
# The user Kibana uses to connect and communicate with Elasticsearch.
# https://www.elastic.co/guide/en/elasticsearch/reference/current/built-in-users.html
KIBANA_SYSTEM_PASSWORD='StrongPassw0rd1'
Шаг 3 – Настройка постоянных томов.
Для того чтобы стек Elastic сохранял данные, нам необходимо правильно сопоставить тома.
В файле YAML у нас есть несколько томов, которые нужно сопоставить.
В этом руководстве я настрою вторичный диск, подключенный к моему устройству.
Определите диск.
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part
├─rl-root 253:0 0 35G 0 lvm /
└─rl-swap 253:1 0 4G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
└─sdb1 8:17 0 10G 0 part
Отформатируйте диск и создайте на нем файловую систему XFS.
sudo parted --script /dev/sdb "mklabel gpt"
sudo parted --script /dev/sdb "mkpart primary 0% 100%"
sudo mkfs.xfs /dev/sdb1
Смонтируйте диск по нужному пути.
sudo mkdir /mnt/datastore
sudo mount /dev/sdb1 /mnt/datastore
Проверьте, был ли смонтирован диск.
$ sudo mount | grep /dev/sdb1
/dev/sdb1 on /mnt/datastore type xfs (rw,relatime,seclabel,attr2,inode64,logbufs=8,logbsize=32k,noquota)
Создайте постоянные тома на диске.
sudo mkdir /mnt/datastore/setup
sudo mkdir /mnt/datastore/elasticsearch
Установите правильные разрешения.
sudo chmod 775 -R /mnt/datastore
sudo chown -R $USER:docker /mnt/datastore
На системах на базе Rhel настройте SELinux, как показано ниже.
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Создайте внешние тома:
Для Elasticsearch
docker volume create --driver local \
--opt type=none \
--opt device=/mnt/datastore/elasticsearch \
--opt o=bind elasticsearch
Для настройки
docker volume create --driver local \
--opt type=none \
--opt device=/mnt/datastore/setup \
--opt o=bind setup
Проверьте, были ли созданы тома.
$ docker volume list
DRIVER VOLUME NAME
local elasticsearch
local setup
Просмотреть более подробную информацию о томе.
$ docker volume inspect setup
[
{
"CreatedAt": "2022-05-06T13:19:33Z",
"Driver": "local",
"Labels": {},
"Mountpoint": "/var/lib/docker/volumes/setup/_data",
"Name": "setup",
"Options": {
"device": "/mnt/datastore/setup",
"o": "bind",
"type": "none"
},
"Scope": "local"
}
]
Вернитесь к файлу YAML и добавьте эти строки в конец файла.
$ vim docker-compose.yml
.......
volumes:
setup:
external: true
elasticsearch:
external: true
Теперь у вас должен быть готовый файл YAML.
Шаг 4 – Приведение в действие стека Elastic
После внесения необходимых изменений запустите стек Elastic с помощью команды:
docker-compose up -d
Вывод:
[+] Building 6.4s (12/17)
=> [docker-elk_setup internal] load build definition from Dockerfile 0.3s
=> => transferring dockerfile: 389B 0.0s
=> [docker-elk_setup internal] load .dockerignore 0.5s
=> => transferring context: 250B 0.0s
=> [docker-elk_logstash internal] load build definition from Dockerfile 0.6s
=> => transferring dockerfile: 312B 0.0s
=> [docker-elk_elasticsearch internal] load build definition from Dockerfile 0.6s
=> => transferring dockerfile: 324B 0.0s
=> [docker-elk_logstash internal] load .dockerignore 0.7s
=> => transferring context: 188B
........
После завершения проверьте, запущены ли контейнеры:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
096ddc76c6b9 docker-elk_logstash "/usr/local/bin/dock…" 9 seconds ago Up 5 seconds 0.0.0.0:5000->5000/tcp, :::5000->5000/tcp, 0.0.0.0:5044->5044/tcp, :::5044->5044/tcp, 0.0.0.0:9600->9600/tcp, 0.0.0.0:5000->5000/udp, :::9600->9600/tcp, :::5000->5000/udp docker-elk-logstash-1
ec3aab33a213 docker-elk_kibana "/bin/tini -- /usr/l…" 9 seconds ago Up 5 seconds 0.0.0.0:5601->5601/tcp, :::5601->5601/tcp docker-elk-kibana-1
b365f809d9f8 docker-elk_setup "/entrypoint.sh" 10 seconds ago Up 7 seconds 9200/tcp, 9300/tcp docker-elk-setup-1
45f6ba48a89f docker-elk_elasticsearch "/bin/tini -- /usr/l…" 10 seconds ago Up 7 seconds 0.0.0.0:9200->9200/tcp, :::9200->9200/tcp, 0.0.0.0:9300->9300/tcp, :::9300->9300/tcp docker-elk-elasticsearch-1
Проверьте, запущен ли Elastic search:
$ curl http://localhost:9200 -u elastic:StrongPassw0rd1
{
"name" : "45f6ba48a89f",
"cluster_name" : "my-cluster",
"cluster_uuid" : "hGyChEAVQD682yVAx--iEQ",
"version" : {
"number" : "8.1.3",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "39afaa3c0fe7db4869a161985e240bd7182d7a07",
"build_date" : "2022-04-19T08:13:25.444693396Z",
"build_snapshot" : false,
"lucene_version" : "9.0.0",
"minimum_wire_compatibility_version" : "7.17.0",
"minimum_index_compatibility_version" : "7.0.0"
},
"tagline" : "You Know, for Search"
}
Шаг 5 – Доступ к дашборду Kibana.
На этом этапе вы можете приступить к работе и получить доступ к дашборду Kibana, работающему на порту 5601.
Но сначала разрешите необходимые порты через брандмауэр.
##На Firewalld
sudo firewall-cmd --add-port=5601/tcp --permanent
sudo firewall-cmd --add-port=5044/tcp --permanent
sudo firewall-cmd --reload
##На UFW
sudo ufw allow 5601/tcp
sudo ufw allow 5044/tcp
Теперь зайдите в Kibana с помощью URL http://IP_Address:5601 или http://Domain_name:5601.
Войдите в систему, используя учетные данные, установленные для пользователя Elasticsearch:
Username: elastic
Password: StrongPassw0rd1
Теперь, чтобы доказать, что стек ELK работает так, как нужно.
Мы отправим некоторые данные/записи журнала.
Logstash позволяет нам отправлять содержимое через TCP, как показано ниже.
cat /path/to/logfile.log | nc -q0 localhost 5000
Например:
cat /var/log/syslog | nc -q0 localhost 5000
Шаг 6 – Очистка
Если вы хотите полностью удалить стек Elastic (ELK) и все постоянные данные, используйте команду:
$ docker-compose down -v
[+] Running 5/4
⠿ Container docker-elk-kibana-1 Removed 10.5s
⠿ Container docker-elk-setup-1 Removed 0.1s
⠿ Container docker-elk-logstash-1 Removed 9.9s
⠿ Container docker-elk-elasticsearch-1 Removed 3.0s
⠿ Network docker-elk_elk Removed 0.1s
Свежие комментарии