В этой статье используется лицензионное соглашение «Signature 4.0 International (CC BY 4.0)», добро пожаловать на перепечатку или изменение для использования, но вам необходимо указать источник.Атрибуция 4.0 Международная (CC BY 4.0)
Автор этой статьи: Су Ян
Создано: 4 мая 2020 г. Статистические слова: 12679 слов Время чтения: 26 минут на чтение Ссылка на эту статью:Поиск teay.com/2020/05/04/…
Используйте Docker для создания среды ELK
В этой статье речь пойдет о том, как использовать Docker для сборки ELK (Elasticsearch, Logstash, Kibana).
В этой статье будет представлена конструкция, состоящая из двух частей: среды для разработки, тестирования и общих требований к анализу, а также среды, которую можно использовать для общего производства после эластичного расширения.
Поскольку при удобстве Docker полное время работы не превышает 15 минут, если вы не знакомы с Docker, то можете просмотреть предыдущие статьи.
написать впереди
Для удобства построения используемGitHub.com/Деви Энтони/…Этот проект с открытым исходным кодом поддерживает три последние версии технологического стека ELK, а именно 7.x, 6.x и 5.x. В этой статье будет использоваться последняя версия.
В качестве базовой среды для разработки и тестирования можно использовать виртуальную машину 1c2g.Конечно, чем больше машинных ресурсов, тем выше будет эффективность работы наших сервисов, и тем больше будет мощность обработки данных при этом . Для общей производственной среды рекомендуется выделять больше ресурсов в соответствии с вашей конкретной ситуацией.
Давайте сначала поговорим о создании тестовой среды.
тестовая среда разработки
Загрузите проект в нужное место с помощью команды Git Clone.
git clone https://github.com/deviantony/docker-elk.git /app/docker-elk
Cloning into '/app/docker-elk'...
remote: Enumerating objects: 1729, done.
remote: Total 1729 (delta 0), reused 0 (delta 0), pack-reused 1729
Receiving objects: 100% (1729/1729), 410.25 KiB | 11.00 KiB/s, done.
Resolving deltas: 100% (705/705), done.
Прежде чем приступить к проекту, давайте сначала разберемся с базовой структурой каталогов.
├── docker-compose.yml
├── docker-stack.yml
├── elasticsearch
│ ├── config
│ │ └── elasticsearch.yml
│ └── Dockerfile
├── extensions
│ ├── apm-server
│ ├── app-search
│ ├── curator
│ ├── logspout
├── kibana
│ ├── config
│ │ └── kibana.yml
│ └── Dockerfile
├── LICENSE
├── logstash
│ ├── config
│ │ └── logstash.yml
│ ├── Dockerfile
│ └── pipeline
│ └── logstash.conf
└── README.md
Хорошо видно, что проект в основном использует корневую директориюdocker-compose.ymlВ качестве начальной конфигурации и при первом запуске создайте образы контейнеров связанных служб.
Как только вы поймете, как работает проект, вы можете использоватьdocker-compose up
чтобы начать проект.
docker-compose up
Creating network "docker-elk_elk" with driver "bridge"
Creating volume "docker-elk_elasticsearch" with default driver
Building elasticsearch
Step 1/2 : ARG ELK_VERSION
Step 2/2 : FROM docker.elastic.co/elasticsearch/elasticsearch:${ELK_VERSION}
7.6.2: Pulling from elasticsearch/elasticsearch
c808caf183b6: Downloading [==> ] 3.736MB/85.21MB
d6caf8e15a64: Downloading [===================> ] 13.69MB/34.71MB
b0ba5f324e82: Download complete
d7e8c1e99b9a: Downloading [=> ] 11.71MB/321.6MB
85c4d6c81438: Waiting
3119218fac98: Waiting
914accf214bb: Waiting
...
Creating docker-elk_elasticsearch_1 ... done
Creating docker-elk_logstash_1 ... done
Creating docker-elk_kibana_1 ... done
Attaching to docker-elk_elasticsearch_1, docker-elk_logstash_1, docker-elk_kibana_1
logstash_1 | OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
elasticsearch_1 | Created elasticsearch keystore in /usr/share/elasticsearch/config
logstash_1 | WARNING: An illegal reflective access operation has occurred
logstash_1 | WARNING: Illegal reflective access by com.headius.backport9.modules.Modules (file:/usr/share/logstash/logstash-core/lib/jars/jruby-complete-9.2.9.0.jar) to method sun.nio.ch.NativeThread.signal(long)
logstash_1 | WARNING: Please consider reporting this to the maintainers of com.headius.backport9.modules.Modules
logstash_1 | WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
logstash_1 | WARNING: All illegal access operations will be denied in a future release
elasticsearch_1 | OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
elasticsearch_1 | {"type": "server", "timestamp": "2020-05-03T03:47:40,483Z", "level": "INFO", "component": "o.e.e.NodeEnvironment", "cluster.name": "docker-cluster", "node.name": "0d05db8360df", "message": "using [1] data paths, mounts [[/usr/share/elasticsearch/data (/dev/sda2)]], net usable_space [83.6gb], net total_space [97.9gb], types [ext4]" }
elasticsearch_1 | {"type": "server", "timestamp": "2020-05-03T03:47:40,493Z", "level": "INFO", "component": "o.e.e.NodeEnvironment", "cluster.name": "docker-cluster", "node.name": "0d05db8360df", "message": "heap size [247.5mb], compressed ordinary object pointers [true]" }
kibana_1 | {"type":"log","@timestamp":"2020-05-03T03:47:40Z","tags":["info","plugins-service"],"pid":6,"message":"Plugin \"case\" is disabled."}
Журнал во время процесса запуска будет аналогичен приведенному выше, потому что при первом запуске необходимо загрузить соответствующее зеркало с официального склада зеркал веб-сайта, поэтому это будет медленнее. Когда вы видите журнал вывода терминала, аналогичный приведенному выше, это означает, что служба запущена.
Для проверки мы можем использовать браузер или инструменты, такие как curl, для доступа к адресу машины плюс номер порта 9200 и использовать имя пользователя по умолчанию.elastic
и пароль по умолчаниюchangeme
для доступа к HTTP-порту Elasticsearch, если все в порядке, вы увидите результаты, подобные приведенным ниже.
{
"name" : "0d05db8360df",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "Mq2EZX59TqW7ysGx7Y-jIw",
"version" : {
"number" : "7.6.2",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f",
"build_date" : "2020-03-26T06:34:37.794943Z",
"build_snapshot" : false,
"lucene_version" : "8.4.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Не спешите сейчас заходить в Kibana, давайте перейдем к настройкам конфигурации.
Сбросить встроенный пароль пользователя
использоватьdocker-compose exec -T elasticsearch bin/elasticsearch-setup-passwords auto --batch
Команда сбрасывает пароль по умолчанию для учетной записи службы по умолчанию.
docker-compose exec -T elasticsearch bin/elasticsearch-setup-passwords auto --batch
Changed password for user apm_system
PASSWORD apm_system = YkELBJGOT6AxqsPqsi7I
Changed password for user kibana
PASSWORD kibana = FxRwjm5KRYvHhGEnYTM9
Changed password for user logstash_system
PASSWORD logstash_system = A4f5VOfjVWSdi0KAZWGu
Changed password for user beats_system
PASSWORD beats_system = QnW8xxhnn7LMlA7vuI7B
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = OvjEGR13wjkOkIbWqaEM
Changed password for user elastic
PASSWORD elastic = PGevNMuv7PhVnaYg7vJw
После сохранения пароля нам нужноdocker-compose.yml
Служба elasticsearch в конфигурационном файлеELASTIC_PASSWORD
Удалите это, чтобы гарантировать, что служба начнет использовать только пароль (хранилище ключей), который мы только что сбросили. И информацию в конфигурационных файлах kibana и logstash нужно заменить, иelasticПароль пользователя обновлен. В начале мы упомянули связанные файлы в структуре каталогов. На данный момент вы можете изменить следующие три файла:
- kibana/config/kibana.yml
- logstash/config/logstash.yml
- logstash/pipeline/logstash.conf
Следует отметить, что для конвейера logstash требуется учетная запись с высокими привилегиями.Во время текущего процесса тестирования и разработки можно использовать эластичную учетную запись и пароль для сброса.Для использования в рабочей среде см. официальную документацию.Configuring Security in LogstashПримите меры и назначьте новую выделенную учетную запись.
После изменения конфигурации выполняемdocker-compose restart
Перезапустите соответствующие службы.
docker-compose restart
Restarting docker-elk_kibana_1 ... done
Restarting docker-elk_logstash_1 ... done
Restarting docker-elk_elasticsearch_1 ... done
Если в журнале нет 401 или отказа в доступе, с сервисом все в порядке.
Использование консоли Кибана
После запуска мы используем браузер для доступа к серверу IP + порт 5601 и открываем консоль kibana.
После входа в систему с эластичной учетной записью и паролем вы можете увидеть интерфейс Kibana.Если вы используете его впервые, вы увидите интерфейс приветствия.
После входа в систему и первого использования вы можете рассмотреть возможность импорта демонстрационных данных, чтобы помочь понять основные функции Kibana.
Далее идет процесс свободного исследования, :)
Отключить платные компоненты
Откройте интерфейс настроек, выберите «Управление лицензиями» в модуле Elasticsearch, и вы увидите, что программное обеспечение по умолчанию запустит месячную пробную версию расширенных функций.
существуетОфициальная подпискаНа странице мы можем увидеть официально поддерживаемые типы подписки.В общем, если нет особых требований, просто используйте базовую версию.
Если вы хотите узнать текущее рабочее состояние программного обеспечения, помимо входа в систему и просмотра состояния хоста и контейнера, мы также можем легко и быстро увидеть рабочее состояние и использование ресурсов каждой службы в одном узел на интерфейсе мониторинга.
Выберите «Вернуться к базовой лицензии» и выберите вернуться к базовой версии. Вы можете видеть, что весь интерфейс намного проще. Если вы не платите, вы можете использовать программное обеспечение на законных основаниях и со спокойной душой.
Конечно, вы также можете указать в файле конфигурации elasticsearch.ymlxpack.license.self_generated.type
превратиться вbasic
для отключения функций, связанных с X-Pack.
xpack.license.self_generated.type: basic
Подключайтесь к различным программам/системам для сбора логов и настраивайте свой визуальный интерфейс или API.У нас будет возможность поговорить позже, а затем продолжить разговор о том, как дальше собирать и настраивать ELK.
Изменено из производственной среды официального примера
Основным требованием производственной среды является высокая доступность.В обычных реализациях развертывается «множество копий/экземпляров», несколько машин, несколько стоек и даже несколько регионов.
В этой статье сначала поговорим о самом простом мультиинстансе.
предварительная подготовка
Если вы хотите запустить ELK с Docker в рабочей среде, есть некоторые необходимые системные настройки.
Сначала отрегулируйтеvm.max_map_count
, настройте его как минимум на 262144 или больше. существует/etc/sysctl.conf
Просто добавьте следующее.
vm.max_map_count = 262144
sysctl -w vm.max_map_count=262144
затем отрегулируйтеulimits
а такжеnprocedit
, поскольку мы используем контейнеры для запуска приложений, связанных с ELK, мы можем напрямую изменить конфигурацию ES в файле конфигурации compose:
ulimits:
memlock:
soft: -1
hard: -1
Продолжаем настраивать, закрываем обмен памятью, а также модифицируем конфигурацию ES в файле конфигурации compose:
environment:
bootstrap.memory_lock: "true"
Размер кучи Java также необходимо настроить. Значение по умолчанию выглядит следующим образом, что слишком мало для производственной среды. Для получения дополнительной информации см.здесь.
environment:
ES_JAVA_OPTS: "-Xmx1g -Xms1g"
Если вы его реально используете в продакшене, то обязательно включите TLS и аутентификацию по паролю.Чтобы не расширять пространство (и чтобы было лень обращаться за wildcard сертификатом/настраивать самоподпись) сначала используйте метод закрытия конфигурация безопасности, чтобы игнорировать этот параметр :)
Изменить конфигурацию для поддержки нескольких экземпляров
Официальное решение с несколькими экземплярами (Это официальное руководство), определяем три разные службы в compose, а затем используем первую службу в качестве мастера, чтобы выставить службу внешнему миру. Сначала мы основываемся на этой схеме и вносим некоторые коррективы.
Сначала создайте каталог данных, требуемый службой, и предоставьте необходимые разрешения.
mkdir -p data/{es01,es02,es03}
chmod g+rwx data/*
chgrp 0 data/*
Раньше в одном узле данные, которые мы монтировали, использовали схему тома данных контейнера, здесь мы можем рассмотреть возможность замены предыдущей схемы сопоставлением файлов с большей производительностью, и, конечно, мы также можем сотрудничать с ней.плагин для храненияиспользовать:
volumes:
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:ro
- ./data:/usr/share/elasticsearch/data:rw
Учитывая, что конфигурация между несколькими экземплярами почти одинакова, и если она слишком многословна для отдельного обслуживания, мы можемelasticsearch.yml
Конфигурация внутри compose записывается в файл конфигурации compose с использованием переменных окружения:
environment:
cluster.name: "docker-cluster"
network.host: "0.0.0.0"
bootstrap.memory_lock: "true"
xpack.license.self_generated.type: "basic"
xpack.security.enabled: "false"
xpack.monitoring.collection.enabled: "true"
ES_JAVA_OPTS: "-Xmx1g -Xms1g"
Кроме того, поскольку задействована сеть с несколькими узлами, необходимо дополнительно указать имена узлов и другую информацию об этих экземплярах:
version: "3.2"
services:
elasticsearch01:
environment:
node.name: "es01"
discovery.seed_hosts: "es02,es03"
cluster.initial_master_nodes: "es01,es02,es03"
elasticsearch02:
environment:
node.name: "es02"
discovery.seed_hosts: "es01,es03"
cluster.initial_master_nodes: "es01,es02,es03"
elasticsearch03:
environment:
node.name: "es03"
discovery.seed_hosts: "es01,es02"
cluster.initial_master_nodes: "es01,es02,es03"
Наконец, в соответствии с рекомендуемым режимом на официальном сайте, пусть одна из машин поддерживает открытые извне порты и обменивается данными с внешним миром.
ports:
- 9200:9200
- 9300:9300
На этом настройка нескольких экземпляров завершена.
Обновить конфигурацию Logstash
Есть две вещи, которые необходимо обновить logstash. Во-первых, запустить службу после запуска только что определенного экземпляра elasticsearch. Кроме того, конфигурацию можно переписать таким же образом, чтобы облегчить последующее обслуживание.
logstash:
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro
- ./logstash/pipeline:/usr/share/logstash/pipeline:ro
depends_on:
- elasticsearch01
- elasticsearch02
- elasticsearch03
Тогда нужно обновитьlogstash/config/logstash.yml
в конфигурацииxpack.monitoring.elasticsearch.host
информацию, чтобы убедиться, что не будет проблем с запуском.
xpack.monitoring.elasticsearch.hosts: [ "http://es01:9200" ]
а такжеlogstash/pipeline/logstash.conf
в конфигурацииoutput. elasticsearch
Информацияhosts => "es01:9200"
.
Обновить конфигурацию Кибаны
Есть три места, которые нужно обновить, два из которых такие же, как Logstash, и еще одно нужно указатьELASTICSEARCH_URL
Адрес — это адрес экземпляра elasticsearch, где мы предоставляем сервис.
kibana:
volumes:
- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro
ports:
- "5601:5601"
depends_on:
- elasticsearch01
- elasticsearch02
- elasticsearch03
environment:
- ELASTICSEARCH_URL=http://es01:9200
- xpack.security.enabled=false
и требует дополнительных обновленийkibana/config/kibana.yml
в конфигурацииelasticsearch.hosts
Полевая информация:
elasticsearch.hosts: [ "http://es01:9200" ]
полный профиль
Вышеупомянутая конфигурация завершается следующим образом:
version: "3.2"
services:
elasticsearch01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
container_name: es01
volumes:
- ./data/es01:/usr/share/elasticsearch/data:rw
ports:
- 9200:9200
- 9300:9300
environment:
node.name: "es01"
cluster.name: "docker-cluster"
network.host: "0.0.0.0"
discovery.seed_hosts: "es02,es03"
cluster.initial_master_nodes: "es01,es02,es03"
bootstrap.memory_lock: "true"
xpack.license.self_generated.type: "basic"
xpack.security.enabled: "false"
xpack.monitoring.collection.enabled: "true"
ES_JAVA_OPTS: "-Xmx1g -Xms1g"
ulimits:
memlock:
soft: -1
hard: -1
networks:
- elk
elasticsearch02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
container_name: es02
volumes:
- ./data/es02:/usr/share/elasticsearch/data:rw
environment:
node.name: "es02"
cluster.name: "docker-cluster"
network.host: "0.0.0.0"
discovery.seed_hosts: "es01,es03"
cluster.initial_master_nodes: "es01,es02,es03"
bootstrap.memory_lock: "true"
xpack.license.self_generated.type: "basic"
xpack.security.enabled: "false"
xpack.monitoring.collection.enabled: "true"
ES_JAVA_OPTS: "-Xmx1g -Xms1g"
ulimits:
memlock:
soft: -1
hard: -1
networks:
- elk
elasticsearch03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
container_name: es03
volumes:
- ./data/es03:/usr/share/elasticsearch/data:rw
environment:
node.name: "es03"
cluster.name: "docker-cluster"
network.host: "0.0.0.0"
discovery.seed_hosts: "es01,es02"
cluster.initial_master_nodes: "es01,es02,es03"
bootstrap.memory_lock: "true"
xpack.license.self_generated.type: "basic"
xpack.security.enabled: "false"
xpack.monitoring.collection.enabled: "true"
ES_JAVA_OPTS: "-Xmx1g -Xms1g"
ulimits:
memlock:
soft: -1
hard: -1
networks:
- elk
logstash:
build:
context: logstash/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml:ro
- ./logstash/pipeline:/usr/share/logstash/pipeline:ro
ports:
- "5000:5000/tcp"
- "5000:5000/udp"
- "9600:9600"
environment:
LS_JAVA_OPTS: "-Xmx1g -Xms1g"
networks:
- elk
depends_on:
- elasticsearch01
- elasticsearch02
- elasticsearch03
kibana:
build:
context: kibana/
args:
ELK_VERSION: $ELK_VERSION
volumes:
- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml:ro
ports:
- "5601:5601"
networks:
- elk
depends_on:
- elasticsearch01
- elasticsearch02
- elasticsearch03
environment:
- ELASTICSEARCH_URL=http://es01:9200
- xpack.security.enabled=false
networks:
elk:
driver: bridge
На самом деле, если вы используете все официальные образы без вторичной настройки, такой как установка плагинов, вы можете изменить их на официальное имя образа.
После запуска службы откройте kibana, и вы увидите, что среда ELK с несколькими экземплярами настроена.
разное
Официальный документ веб-сайта содержит множество описаний содержимого конфигурации, и заинтересованные студенты могут узнать о нем больше, например, это Important System Configuration , тот же принцип применим и к некоторым другим приложениям.
Чтобы узнать, как использовать различные сервисы битов для отчетов о журналах, вы можете обратиться к официальномуобразец файла.
Наконец
Далее я напишу интересный и простой в использовании контент вокруг лога, это первый.
--EOF
Теперь у меня есть небольшая группа по метанию, в которую входят друзья, которые любят метать.
Без рекламы мы будем вместе болтать о софте, HomeLab и вопросах программирования, а также время от времени будем делиться технической информацией о салоне в группе.
Друзья, которые любят бросать, могут отсканировать код, чтобы добавить друзей. (Пожалуйста, укажите источник и цель, иначе не пройдет проверку)