По мере роста вашей инфраструктуры становится решающим к роботам и надежной централизованной системе регистрации. Централизация журнала становится ключевым аспектом различных его задач и предоставляет вам обзор всей вашей системы.
Лучшим решением является совокупность журналов из всех контейнеров, которые обогащены метаданными, чтобы он предоставляет вам лучшую варианту прослеживаемости и поставляется с удивительной поддержкой сообщества. Это где стек лосятся в картинку. Лось, также известный как упругий стек, представляет собой комбинацию современных инструментов с открытым исходным кодом, таким как Elasticsearch, Logstash и Kibana. Это полное решение для концов, вы можете использовать для вашей системы.
Каждый компонент имеет определенную роль для воспроизведения: elasticsearch лучше всего подходит для хранения RAW logs, logstash помогает собирать и преобразовать журналы в постоянный формат, и Kibana добавляет большой слой визуализации и помогает вам управлять своей системой в удобном манера.
В этом руководстве вы узнаете, как развернуть лося и начать агрегационные журналы контейнеров. Здесь мы собираемся комбинировать лось с Filebeat Чтобы агрегировать контейнерные журналы. Для этого мы собираемся построить пользовательский документ докера.
Шаг 1 — Настройка файлаBeat:
Давайте начнем с конфигурации файла. Во-первых, вы должны создать DockerFile для создания изображения
$ mkdir filebeat_docker && cd $_ $ touch Dockerfile && nano Dockerfile
Теперь откройте Dockerfile
В вашем предпочтительном текстовом редакторе и скопируйте/вставьте ниже указанные строки:
FROM docker.elastic.co/beats/filebeat:7.5.1 COPY filebeat.yml /usr/share/filebeat/filebeat.yml USER root RUN mkdir /usr/share/filebeat/dockerlogs RUN chown -R root /usr/share/filebeat/ RUN chmod -R go-w /usr/share/filebeat/
В filebeat_docker
каталог, создать filebeat.yml
Файл, который содержит конфигурацию для файла. Для этого руководства мы собираемся использовать минимальный filebeat.yml
файл.
filebeat.inputs: - type: docker containers: path: "/usr/share/dockerlogs/data" stream: "stdout" ids: - "*" cri.parse_flags: true combine_partial: true exclude_files: ['\.gz$'] processors: - add_docker_metadata: host: "unix:///var/run/docker.sock" filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false output.logstash: hosts: ["127.0.0.1:5044"] log files: logging.level: error logging.to_files: false logging.to_syslog: false loggins.metrice.enabled: false logging.files: path: /var/log/filebeat name: filebeat keepfiles: 7 permissions: 0644 ssl.verification_mode: none
Теперь пришло время создать изображение Docker FileBeat:
$ docker build -t filebeatimage . Sending build context to Docker daemon 3.584kB Step 1/6 : FROM docker.elastic.co/beats/filebeat:7.5.1 7.5.1: Pulling from beats/filebeat c808caf183b6: Already exists a07383b84bc8: Pull complete a3c8dd4531b4: Pull complete 5547f4a87d0c: Pull complete d68e041d92cd: Pull complete 7cfb3f76a272: Pull complete 748d7fe7bf07: Pull complete Digest: sha256:68d87ae7e7bb99832187f8ed5931cd253d7a6fd816a4bf6a077519c8553074e4 Status: Downloaded newer image for docker.elastic.co/beats/filebeat:7.5.1 ---> 00c5b17745d1 Step 2/6 : COPY filebeat.yml /usr/share/filebeat/filebeat.yml ---> f6b75829d8d6 Step 3/6 : USER root ---> Running in 262c41d7ce58 Removing intermediate container 262c41d7ce58 ---> 1ffcda8f39cf Step 4/6 : RUN mkdir /usr/share/filebeat/dockerlogs ---> Running in 8612b1895ac7 Removing intermediate container 8612b1895ac7 ---> 483d29e65dc7 Step 5/6 : RUN chown -R root /usr/share/filebeat/ ---> Running in 4a6ad8b22705 Removing intermediate container 4a6ad8b22705 ---> b779a9da7ac9 Step 6/6 : RUN chmod -R go-w /usr/share/filebeat/ ---> Running in bb9638d12090 Removing intermediate container bb9638d12090 ---> 85ec125594ee Successfully built 85ec125594ee Successfully tagged filebeatimage:latest
Чтобы проверить, было ли изображение было успешно построено:
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE filebeatimage latest 85ec125594ee 7 seconds ago 514MB
Для filebeat_elk
Контейнер, вы создали два монтажа с помощью параметра -В
;
/var/lib/docker/контейнеры:/usr/share/dockerlogs/data
: У вас есть сопоставленные журналы Docker Host Machine, которые находятся в/var/lib/docker/контейнеры
к/usr/share/dockerlogs/data
внутри контейнера докера. Обратите внимание, что вы использовали: к
Что обозначает, что имеет разрешение только для чтения.- Тогда как
/var/run/docker.sock
Связывается с демоном Docker контейнера FileBeat, который позволяет контейнеру FileBeaT собирать метаданные докера и записываний контейнеров.
Установка файлов по деб:
Есть альтернативный способ установить файлбет в вашем хост-машине. На момент написания, версия FileBeat — 7.5.1
Вы можете скачать последнюю версию файлов FileBeat из здесь Отказ
Чтобы установить загруженные .deb
файл:
$ wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.5.1-amd64.deb $ sudo dpkg -i filebeat-7.5.1-amd64.deb
Вы можете найти файл конфигурации в /etc/filebeat/filebeat.yml
каталог.
Шаг 2 — Настройка лося или упругих стеков
Вы можете использовать удаленный сервер для проведения стека ELK или может запустить контейнеры в пределах вашей существующей системы.
Прежде чем идти, убедитесь, что следующие порты слушают:
- Elasticsearch — Порт
9200
и порт9300.
- Логисташ — порт
5044.
- Кибана — Порт
5601.
Elasticsearch:
Мы собираемся использовать последний официальный образ Elasticsearch по настоящее время. Так что начните, потянув изображение из докера Hub:
$ docker pull docker.elastic.co/elasticsearch/elasticsearch:7.5.1 7.5.1: Pulling from elasticsearch/elasticsearch c808caf183b6: Already exists 05ff3f896999: Pull complete 82fb7fb0a94e: Pull complete c4d0024708f4: Pull complete 136650a16cfe: Pull complete 968db096c092: Pull complete 42547e91692f: Pull complete Digest: sha256:b0960105e830085acbb1f9c8001f58626506ce118f33816ea5d38c772bfc7e6c Status: Downloaded newer image for docker.elastic.co/elasticsearch/elasticsearch:7.5.1 docker.elastic.co/elasticsearch/elasticsearch:7.5.1
Теперь создайте имя каталога как Docker_elk
, где все ваши файлы конфигурации и DockerFile будут проживать:
$ mkdir docker_elk && cd $ _
Внутри Docker_elk
Создайте другой каталог для elasticsearch
и создать Dockerfile
и elasticsearch.yml
Файлы:
$ mkdir elasticsearch && cd $_ $ touch Dockerfile && touch elasticsearch.yml
Открыть elasticsearch.yml
Файл в предпочтительном текстовом редакторе и скопируйте настройку конфигурации, как это:
--- cluster.name: "docker-cluster" network.host: 0.0.0.0 xpack.license.self_generated.type: basic xpack.security.enabled: true xpack.monitoring.collection.enabled: true
Обратите внимание, что вы можете установить xpack.license.sels_generated.type
от Базовый
к пробный
Если вы хотите оценить коммерческую особенность X-PACK в течение 30 дней.
Откройте dockerfile в предпочтительном текстовом редакторе и скопируйте указанные ниже строки и вставьте его как оно:
FROM docker.elastic.co/elasticsearch/elasticsearch:7.5.1 COPY --chown=elasticsearch:elasticsearch ./elasticsearch.yml /usr/share/elasticsearch/config/
Команда Chowne
это изменить владелец файла в elasticsearch
как другие файлы в контейнере.
Кибана:
Теперь вы собираетесь настроить DockerFile для Kibana, и снова вы должны вытащить новейшее изображение из эластичного реестра Docker:
$ docker pull docker.elastic.co/kibana/kibana:7.5.1 7.5.1: Pulling from kibana/kibana c808caf183b6: Already exists e12a414b7b04: Pull complete 20714d0b39d8: Pull complete 393e0a5bccf2: Pull complete b142626e938b: Pull complete b28e35a143ca: Pull complete 728725922476: Pull complete 96692e1a8406: Pull complete e4c3cbe1dbbe: Pull complete bb6fc46a19d1: Pull complete Digest: sha256:12b5e37e0f960108750e84f6b2f8acce409e01399992636b2a47d88bbc7c2611 Status: Downloaded newer image for docker.elastic.co/kibana/kibana:7.5.1 docker.elastic.co/kibana/kibana:7.5.1
Внутри вашего Docker_elk
Создайте каталог и внутри него, вы должны создать Dockerfile
а также kibana.yml
Файлы:
$ mkdir kibana && cd $_ $ touch Dockerfile && touch kibana.yml
kibana.yml
будет состоять из следующих конфигураций. Обратите внимание, что вы должны изменить значения elasticsearch.user
и elasticsearch.password.
:
--- server.name: kibana server.host: "0" elasticsearch.hosts: [ "http://elasticsearch:9200" ] xpack.monitoring.ui.container.elasticsearch.enabled: true elasticsearch.username: elastic elasticsearch.password: yourstrongpasswordhere
Тогда как в Dockerfile
, будет выглядеть что-то вроде этого:
FROM docker.elastic.co/kibana/kibana:7.5.1 COPY ./kibana.yml /usr/share/kibana/config/
Logstash:
Контейнерное изображение для logstash доступно от эластичного реестра Docker. Опять же на момент написания текущей версии 7.5.1, вы можете найти последнюю версию logstash здесь Отказ
$ docker pull docker.elastic.co/logstash/logstash:7.5.1 7.5.1: Pulling from logstash/logstash c808caf183b6: Already exists 7c07521065ed: Pull complete d0d212a3b734: Pull complete 418bd04a229b: Pull complete b22f374f97b1: Pull complete b65908943591: Pull complete 2ee12bfc6e9c: Pull complete 309701bd1d88: Pull complete b3555469618d: Pull complete 2834c4c48906: Pull complete bae432e5da20: Pull complete Digest: sha256:5bc89224f65459072931bc782943a931f13b92a1a060261741897e724996ac1a Status: Downloaded newer image for docker.elastic.co/logstash/logstash:7.5.1 docker.elastic.co/logstash/logstash:7.5.1
Теперь создайте каталог для logstash внутри Docker_elk
и добавьте необходимые файлы, как показано ниже:
$ mkdir logstash && cd $_ $ touch Dockerfile && touch logstash.yml
Скопируйте ниже упомянутую строку в logstash.yml
Отказ Убедитесь, что вы вводите правильное имя пользователя и пароль в xpack.monitoring.elasticsearch.username.
и xpack.monitoring.elasticsearch.password
соответственно:
--- http.host: "0.0.0.0" xpack.monitoring.elasticsearch.hosts: [ "http://elasticsearch:9200" ] xpack.monitoring.enabled: true xpack.monitoring.elasticsearch.username: elastic xpack.monitoring.elasticsearch.password: yourstrongpasswordhere
Теперь добавьте следующие строки в свой Dockerfile
:
FROM docker.elastic.co/logstash/logstash:7.5.1 COPY ./logstash.yml /usr/share/logstash/config/ COPY ./logstash.conf /usr/share/logstash/pipeline/
Помимо этого, вы должны создать logstash.conf file.
. Здесь, в эластичном обществе, вы найдете хозяин
, Пользователь
и пароль
Убедитесь, что вы измените значения согласно вашей системе:
input { tcp { port => 5000 codec => json } } output { elasticsearch { hosts => "elasticsearch:9200" user => elastic password => yourstrongpasswordhere } }
Как вы проходите с настройкой компонентов вашего стека, структура каталогов вашего проекта должна выглядеть что-то подобное:
. ├── elasticsearch │ ├── Dockerfile │ └── elasticsearch.yml ├── kibana │ ├── Dockerfile │ └── kibana.yml └── logstash ├── Dockerfile ├── logstash.conf └── logstash.yml 3 directories, 7 files
Теперь пришло время создать Docker Compose файл, который позволит вам запустить стек.
Шаг 3 — Docker Compose
Создать Docker-Compose.yml
Файл в Docker_elk
каталог. Здесь вы собираетесь определить и запустить вашу многофункциональную приложение состоят из elasticsearch, kibana и logstash.
Вы можете скопировать указанный ниже контекст в файле docker-compose.yml. Пожалуйста, убедитесь, что вы измените Elastic_password
и Es_java_opts
значения. Для этого руководства Es_java_opts
Установлено на 256 МБ, но в реальных мировых сценариях вы можете увеличить размер кучи согласно требованию.
version: '3.2' services: elasticsearch: build: context: elasticsearch/ volumes: - type: volume source: elasticsearch target: /usr/share/elasticsearch/data ports: - "9200:9200" - "9300:9300" environment: ES_JAVA_OPTS: "-Xmx256m -Xms256m" ELASTIC_PASSWORD: yourstrongpasswordhere discovery.type: single-node networks: - elk_stack logstash: build: context: logstash/ ports: - "5000:5000" - "9600:9600" environment: LS_JAVA_OPTS: "-Xmx256m -Xms256m" networks: - elk_stack depends_on: - elasticsearch kibana: build: context: kibana/ ports: - "5601:5601" networks: - elk_stack depends_on: - elasticsearch networks: elk_stack: driver: bridge volumes: elasticsearch:
Теперь, чтобы построить стек лося, вам необходимо запустить следующую команду в вашем Docker_elk
каталог:
$ docker-compose up -d Starting elastic_elk ... done Starting kibana_elk ... done Starting logstash_elk ... done
Чтобы гарантировать, что трубопровод работает все хорошо, запустите следующую команду, чтобы увидеть индексы Elasticsearch:
$ curl 'localhost:9200/_cat/indices?v' -u elastic:yourstrongpasswordhere health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open .triggered_watches m-l01yMmT7y2PYU4mZ6-RA 1 0 0 0 6.5kb 6.5kb green open .watcher-history-10-2020.01.10 SX3iYGedRKKCC6JLx_W8fA 1 0 1523 0 2mb 2mb green open .management-beats ThHV2q9iSfiYo__s2rouIw 1 0 6 1 40.5kb 40.5kb green open .ml-annotations-6 PwK7Zuw7RjytoWFuCCulJg 1 0 0 0 283b 283b green open .monitoring-kibana-7-2020.01.10 8xVnx0ksTHShds7yDlHQvw 1 0 1006 0 385.4kb 385.4kb green open .monitoring-es-7-2020.01.10 CZd89LiNS7q-RepP5ZWhEQ 1 0 36412 340 16.4mb 16.4mb green open .apm-agent-configuration e7PRBda_QdGrWtV6KECsMA 1 0 0 0 283b 283b green open .ml-anomalies-shared MddTZQ7-QBaHNTSmOtUqiQ 1 0 1 0 5.5kb 5.5kb green open .kibana_1 akgBeG32QcS7AhjBOed3LA 1 0 1105 28 687.1kb 687.1kb green open .ml-config CTLI-eNdTkyBmgLj3JVrEA 1 0 22 0 56.6kb 56.6kb green open .ml-state gKx28CMGQiuZyx82bNUoYg 1 0 0 0 283b 283b green open .security-7 krH4NlJeThyQRA-hwhPXEA 1 0 36 0 83.6kb 83.6kb green open .logstash 7wxswFtbR3eepuWZHEIR9w 1 0 0 0 281b 281b green open .kibana_task_manager_1 ft60q2R8R8-nviAyc0caoQ 1 0 2 1 16.2kb 16.2kb yellow open filebeat-7.5.1-2020.01.10-000001 1-RGhyG9Tf-wGcepQ49mmg 1 1 0 0 283b 283b green open .monitoring-alerts-7 TLxewhFyTKycI9IsjX0iVg 1 0 6 0 40.9kb 40.9kb green open .monitoring-logstash-7-2020.01.10 dc_S5BhsRNuukwTxbrxvLw 1 0 4774 0 1.1mb 1.1mb green open .watches x7QAcAQZTrab-pQuvonXpg 1 0 6 6 120.2kb 120.2kb green open .ml-notifications-000001 vFYzmHorTVKZplMuW7VSmw 1 0 52 0 81.6kb 81.6kb
Теперь пришло время заплатить нашу приборную панель Kibana. Откройте свой браузер и войдите в URL http://your-ip-addr - здесь: 5601
Отказ Теперь введите заранее определенное имя пользователя и пароль; В нашем случае это эластичный
и YourstrongPasswaswayere
, соответственно.
В вашей панели инструментов Kibana перейдите на вкладку «Управление» и «Кибана» нажмите «|». Указатели индекса Отказ В первом ряду вы найдете FileBeat- * Индекс, который уже был идентифицирован Kibana.
Теперь перейдите в тег Discover на панели инструментов Kibana и просмотрите ваши журналы контейнера вместе с метаданными под выбранным узором индекса, что может выглядеть что-то подобное:
Заключение:
Теперь вы установили и настроили стек ELK на Host Machine, который собирается собрать RAW Log от вашего Docker в стек, который позже можно проанализировать или можно использовать для отладки приложений.
Оригинал: «https://dev.to/appfleet/docker-centralized-logging-with-elk-stack-5407»