предисловие
В инфраструктуре EFK нам нужно развернуть Filebeat на стороне клиента, а логи собирать и передавать в LogStash через Filebeat. После парсинга лога в LogStash, лог передается в ElasticSearch, и, наконец, лог просматривается через Kibana.
надEFK Combat 1 - базовая конструкция окруженияБазовая среда EFK была построена.В этой статье мы используем реальные случаи, чтобы пройти передачу данных между тремя и решить некоторые распространенные проблемы при использовании EFK.
Сначала взгляните на фактический бизнес-журнал
2020-01-09 10:03:26,719 INFO ========GetCostCenter Start===============
2020-01-09 10:03:44,267 WARN 成本中心编码少于10位!{"deptId":"D000004345","companyCode":"01"}
2020-01-09 10:22:37,193 ERROR java.lang.IllegalStateException: SessionImpl[abcpI7fK-WYnW4nzXrv7w,]: can't call getAttribute() when session is no longer valid.
at com.caucho.server.session.SessionImpl.getAttribute(SessionImpl.java:283)
at weaver.filter.PFixFilter.doFilter(PFixFilter.java:73)
at com.caucho.server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87)
at weaver.filter.MonitorXFixIPFilter.doFilter(MonitorXFixIPFilter.java:30)
at weaver.filter.MonitorForbiddenUrlFilter.doFilter(MonitorForbiddenUrlFilter.java:133)
Формат журнала состоит из:Основная задача подробностей журнала уровня журнала времени — записать этот журнал в EFK.
конфигурация установки filebeat
- скачатьfilebeat7.5.1
- Загрузите загруженный файл на сервер и разархивируйте его.
tar -zxvf filebeat-7.5.1-linux-x86_64.tar.gz
- Измените файл beat.yml,
filebeat.inputs:
- type: log
enabled: true
paths:
- /app/weaver/Resin/log/xxx.log
В этом разделе настраивается ввод журнала и указывается путь хранения журнала.
output.logstash:
# The Logstash hosts
hosts: ["172.31.0.207:5044"]
Вывод журнала конфигурации в этом абзаце, указывает путь хранения журнала Logstash
- запустить файлбит
./filebeat -e -c filebeat.yml
Если вам нужно начать тихо, используйтеnohup ./filebeat -e -c filebeat.yml &
команда для запуска
конфигурация logstash
Конфигурация logstash в основном разделена на три раздела.input
,filter
,output
.input
Используется для указания входных данных, в основном открытых портов для Filebeat для получения журналов.filter
Используется для указания фильтрации для анализа и фильтрации содержимого журнала.output
Используется для указания выхода, непосредственно настройки адреса ЭС
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://172.31.0.127:9200"]
index => "myindex-%{+YYYY.MM.dd}"
user => "elastic"
password => "xxxxxx"
}
}
После того, как настроим logstash, перезапускаем logstash командойdocker-compose -f elk.yml restart logstash
После описанной выше двухэтапной настройки приложение записывает журналы в файл журнала, а filebeat записывает журналы в logstash. Просмотрите результаты журнала, записанные в кибане, следующим образом:
Лог показывает, что есть 2 проблемы:
- Поскольку информация стека журнала ошибок состоит из нескольких строк, она отображается в виде нескольких строк в кибане, и просмотр данных очень беспорядочный. Исключения стека должны быть отсортированы в одну строку для отображения.
- Журнал должен быть проанализирован и разделен на формат отображения «детали журнала уровня журнала времени».
Оптимизация и обновление
- Установить строки слияния в файлбите
Filebeat по умолчанию является строковой передачей, но наш журнал должен быть журналом с несколькими строками.Если мы хотим объединить несколько строк вместе, нам нужно найти закон журнала. Например, все наши форматы журналов начинаются с формата времени, поэтому мы находимся в файловом бите.filebeat.inputs
Добавьте следующие строки в область
# 以日期作为前缀
multiline.pattern: ^\d{4}-\d{1,2}-\d{1,2}
# 开启多行合并
multiline.negate: true
# 合并到上一行之后
multiline.match: after
- Настроить парсинг логов в logstash
Разберите журнал в формате отображения «детали журнала уровня журнала времени», поэтому нам нужно добавить сегмент фильтра в файл конфигурации logstash.
filter {
grok{
match => {
"message" => "(?<date>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}),\d{3} %{LOGLEVEL:loglevel} (?<des>.*)"
}
}
}
Здесь мы в основном используем синтаксис grok для анализа журналов и фильтрации журналов с помощью регулярных выражений. Вы можете отлаживать с помощью инструмента отладки grok в кибане.
После завершения настройки мы снова открываем интерфейс kibana Discover для просмотра журнала, что, как и ожидалось, идеально!
Общая проблема
кибана тарабарщина
Основной причиной этого является проблема с форматом файла журнала клиента.Вы можете использоватьfile xxx.log
Проверьте формат кодировки файла журнала.Если кодировка ISO8859 в основном искажена, мы можем указать кодировку журнала через кодировку в файле конфигурации filebeat для передачи.
filebeat.inputs:
- type: log
enabled: true
paths:
- /app/weaver/Resin/log/xxx.log
encoding: GB2312
ошибка поля извлечения kibana
Как показано выше, это исключение возникает при открытии панели kibana Discover, вам нужно только удалить ES в ES.kibana_1
index, а затем вернитесь к Kibana.
Просмотр окружающих документов
Когда мы просматриваем определенное ключевое слово в журнале терминала, мы обычно проверяем контекстную информацию для облегчения устранения неполадок, например, часто используемые команды.cat xxx.log | grep -C50 keyword
, то как реализовать эту функцию в Кибане.
Найдите ключевые слова в Kibana, затем найдите конкретную запись журнала, щелкните стрелку вниз слева, а затем нажмите «Просмотреть окружающие документы», чтобы добиться этого.
динамический индекс
Нашей платформе журналов может потребоваться подключение к нескольким бизнес-системам, и в зависимости от бизнес-системы необходимо установить разные индексы.
- Отметить логи в filebeat
- type: log
......
fields:
logType: oabusiness
- Создать индекс на основе тегов в logstash
input {
beats {
port => 5044
}
}
filter {
if [fields][logType] == "oabusiness" {
grok{
match => {
"message" => "(?<date>\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}),\d{3} %{LOGLEVEL:loglevel} (?<des>.*)"
}
}
}
}
output {
elasticsearch {
hosts => ["http://172.31.0.207:9200"]
index => "%{[fields][logType]}-%{+YYYY.MM.dd}"
user => "elastic"
password => "elastic"
}
}
Ну что, друзья мои, содержание этого выпуска здесь полностью. Вы же видите, что здесь одноклассники все отличники. Следующее повышение и прибавка к зарплате будете у вас! Если вы считаете, что эта статья полезна для вас, отсканируйте приведенный ниже QR-код, чтобы добавить подписку. «Ретвитнуть» плюс «просмотреть», чтобы выработать полезную привычку! Увидимся в следующий раз!
Добро пожаловать, чтобы отсканировать код и подписаться на общедоступную учетную запись WeChat илиличный блог