Адрес фактического центра электронной коммерции SpringBoot (35k+star):GitHub.com/macro-positive/…
Резюме
ELK
Все знают систему сбора логов, но есть еще и система сбора логовEFK
, должно быть много друзей, которые не знают! здесьF
ОтноситсяFluentd
, у него есть функция сбора журналов, аналогичная Logstash, но использование памяти составляет менее одной десятой от того, что у Logstash, и он имеет превосходную производительность и очень легкий. В этой статье будет подробно рассказано об использовании Fluentd, который в основном используется для сбора логов приложений SpringBoot, надеюсь, он будет полезен всем!
Введение во Fluentd
Fluentd — это функция сбора журналов с открытым исходным кодом, предназначенная для создания единого уровня сбора журналов для пользователей, и может использоваться с Elasticsearch и Kibana для создания системы сбора журналов EFK. Что такое унифицированный уровень сбора журналов? Взгляните на картинку ниже, чтобы увидеть ясно!
Установить
существует"Вы все равно ходите на сервер собирать логи, разве не восхитительно построить систему сбора логов! 》Построение системы сбора логов ELK было представлено в , здесь будет представлена не установка Elasticsearch и Kibana, а установка Fluentd в среде Docker.
- Загрузите Docker-образ Fluentd;
docker pull fluent/fluentd:v1.10
- конфигурация по умолчанию
fluent.conf
файл скопирован в/mydata/fluentd/
В каталоге информация о конфигурации выглядит следующим образом:
<source>
@type forward
@id input1
@label @mainstream
port 24224
</source>
<filter **>
@type stdout
</filter>
<label @mainstream>
<match docker.**>
@type file
@id output_docker1
path /fluentd/log/docker.*.log
symlink_path /fluentd/log/docker.log
append true
time_slice_format %Y%m%d
time_slice_wait 1m
time_format %Y%m%dT%H%M%S%z
</match>
<match **>
@type file
@id output1
path /fluentd/log/data.*.log
symlink_path /fluentd/log/data.log
append true
time_slice_format %Y%m%d
time_slice_wait 10m
time_format %Y%m%dT%H%M%S%z
</match>
</label>
- Чтобы запустить службу Fluentd, она должна быть открыта.
24221~24224
Четыре порта используются для приема различных типов логов;
docker run -p 24221:24221 -p 24222:24222 -p 24223:24223 -p 24224:24224 --name efk-fluentd \
-v /mydata/fluentd/log:/fluentd/log \
-v /mydata/fluentd/fluent.conf:/fluentd/etc/fluent.conf \
-d fluent/fluentd:v1.10
- Первый запуск может завершиться неудачей, вы можете перезапустить его после изменения прав доступа к каталогу;
chmod 777 /mydata/fluentd/log/
- использовать
root
Пользователь входит внутрь контейнера Fluentd;
docker exec -it --user root efk-fluentd /bin/sh
- Установите плагин Elasticsearch для Fluentd;
fluent-gem install fluent-plugin-elasticsearch
- Если вы все еще хотите использовать
docker-compose
Чтобы установить EFK за один раз, вы можете использовать следующий скрипт,注意
использоватьuser:root
Нет необходимости изменять права доступа к каталогу для запуска!
version: '3'
services:
elasticsearch:
image: elasticsearch:6.4.0
container_name: efk-elasticsearch
user: root
environment:
- "cluster.name=elasticsearch" #设置集群名称为elasticsearch
- "discovery.type=single-node" #以单一节点模式启动
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小
- TZ=Asia/Shanghai
volumes:
- /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
- /mydata/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
ports:
- 9200:9200
- 9300:9300
kibana:
image: kibana:6.4.0
container_name: efk-kibana
links:
- elasticsearch:es #可以用es这个域名访问elasticsearch服务
depends_on:
- elasticsearch #kibana在elasticsearch启动之后再启动
environment:
- "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址
- TZ=Asia/Shanghai
ports:
- 5601:5601
fluentd:
image: fluent/fluentd:v1.10
container_name: efk-fluentd
user: root
environment:
- TZ=Asia/Shanghai
volumes:
- /mydata/fluentd/log:/fluentd/log
- /mydata/fluentd/fluent.conf:/fluentd/etc/fluent.conf
depends_on:
- elasticsearch #kibana在elasticsearch启动之后再启动
links:
- elasticsearch:es #可以用es这个域名访问elasticsearch服务
ports:
- 24221:24221
- 24222:24222
- 24223:24223
- 24224:24224
- Использовать новый файл конфигурации
fluent.conf
Замените исходный файл конфигурации, затем перезапустите службу Fluentd, новый файл конфигурации будет приведен ниже.
Сведения о конфигурации Fluentd
Далее давайте представим, как настроить файл конфигурации Fluentd, сначала опубликуем полную конфигурацию, а затем подробно объясним некоторые моменты конфигурации.
полностью настроен
<source>
@type tcp
@id debug-input
port 24221
tag debug
<parse>
@type json
</parse>
</source>
<source>
@type tcp
@id error-input
port 24222
tag error
<parse>
@type json
</parse>
</source>
<source>
@type tcp
@id business-input
port 24223
tag business
<parse>
@type json
</parse>
</source>
<source>
@type tcp
@id record-input
port 24224
tag record
<parse>
@type json
</parse>
</source>
<filter record>
@type parser
key_name message
reserve_data true
remove_key_name_field true
<parse>
@type json
</parse>
</filter>
<match fluent.**>
@type stdout
output_type json
</match>
<match **>
@type elasticsearch
host 192.168.3.101
port 9200
type_name docker
logstash_format true
logstash_prefix docker-${tag}-logs
logstash_dateformat %Y-%m-%d
flush_interval 5s
include_tag_key true
</match>
Анализ точек конфигурации
<source>
Определяет источник сбора логов, который может быть tcp, udp, tail (файл), forward (tcp+udp), http и т. д.
Здесь собираем логи от tcp запросов, порт указан24221
, и установите тег наdebug
.
<source>
@type tcp
@id debug-input
port 24221
tag debug
<parse>
@type json
</parse>
</source>
<parse>
Определяет, как анализировать необработанные данные и преобразовывать журналы в формат JSON.
Например, мы можем преобразовать журнал отладки в JSON и настроить его следующим образом.
<source>
@type tcp
@id debug-input
port 24221
tag debug
<parse>
@type json
</parse>
</source>
<filter>
Для собранных журналов можно выполнить ряд операций, например распечатать журналы на консоли или проанализировать журналы.
Конфигурация для печати всех журналов на консоль:
<filter **>
@type stdout
</filter>
для тега какrecord
log источника, мы включимmessage
Атрибуты конвертируются в формат JSON, если не конвертируются,message
Свойство будет строкой.
<filter record>
@type parser
key_name message
reserve_data true
remove_key_name_field true
<parse>
@type json
</parse>
</filter>
<match>
Определяет, куда окончательно выводятся собранные логи, которые могут быть выведены на стандартный вывод (консоль), в файл, elasticsearch, mongo и т. д.
Здесь мы используемelasticsearch
для хранения информации журнала,logstash_format
,logstash_prefix
,logstash_dateformat
Он в основном используется для управления созданием имени индекса журнала Формат индекса текущей конфигурации для создания журнала отладки:docker-debug-logs-2020-06-03
,flush_interval
Используется для управления интервалом вывода журнала в elasticsearch.
<match **>
@type elasticsearch
host 192.168.3.101
port 9200
type_name docker
logstash_format true
logstash_prefix docker-${tag}-logs
logstash_dateformat %Y-%m-%d
flush_interval 5s
include_tag_key true
</match>
заменить файл конфигурации
заменить оригинал/mydata/fluentd/fluent.conf
Файл конфигурации, а затем перезапустите службу, наша служба Fluentd может начать сбор журналов.
docekr restart efk-fluentd
Использовать с SpringBoot
На самом деле, принцип сбора журналов Fluentd такой же, как и у Logstash: он собирает журналы через порт tcp, поэтому нам нужно только изменить исходный порт адреса сбора журналов Logstash в файле конфигурации logback на порт Fluentd.
- Исправлять
logback-spring.xml
конфигурационный файл;
<!--DEBUG日志输出到LogStash-->
<appender name="LOG_STASH_DEBUG" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${LOG_STASH_HOST}:24221</destination>
</appender>
<!--ERROR日志输出到LogStash-->
<appender name="LOG_STASH_ERROR" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${LOG_STASH_HOST}:24222</destination>
</appender>
<!--业务日志输出到LogStash-->
<appender name="LOG_STASH_BUSINESS" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${LOG_STASH_HOST}:24223</destination>
</appender>
<!--接口访问记录日志输出到LogStash-->
<appender name="LOG_STASH_RECORD" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${LOG_STASH_HOST}:24224</destination>
</appender>
- Если ваш Fluentd не развернут на исходном сервере Logstash, вам также необходимо изменить
application-dev.yml
в конфигурацииlogstash.host
Атрибуты.
logstash:
host: localhost
- Получите наше приложение SpringBoot и запустите его.
Просмотр журналов в Кибане
На данный момент наша система сбора журналов EFK завершена, и ее нужно использовать только в Kibana.
- существует
Management->Kibana->Index Patterns
можно создать вIndex Patterns
, Адрес доступа к сервису Kibana:http://192.168.3.101:5601
- Проверьте журнал после завершения создания, вы увидите, что функция сбора журнала точно такая же, как и в системе ELK, которую мы создали ранее.
Logstash vs Fluentd
Далее давайте сравним различные аспекты двух инструментов сбора журналов.
Контраст | Logstash | Fluentd |
---|---|---|
использование памяти | Начало около 1G | Старт около 60м |
использование процессора | выше | ниже |
Поддержка плагинов | Богатый | Богатый |
Общий разбор журнала | Поддержка синтаксического анализа grok (на основе регулярных выражений) | Поддержка разбора регулярных выражений |
определенный тип журнала | Поддержка основных форматов, таких как JSON | Поддержка основных форматов, таких как JSON |
Фильтрация данных | служба поддержки | служба поддержки |
отправка буфера данных | Поддержка плагинов | Поддержка плагинов |
Рабочая среда | Реализация JRuby, зависящая от среды JVM | CRuby, реализация C, зависит от среды Ruby |
поддержка резьбы | Поддержка многопоточности | Многопоточность ограничена GIL |
использованная литература
Официальная документация:docs.fluentd.org/
Адрес исходного кода проекта
публика
проект торгового центраПолный набор учебных пособий сериализуется,Обратите внимание на публичный аккаунтПолучите это прямо сейчас.