EFK Combat II - Интеграция журнала

Java

file

предисловие

В инфраструктуре 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. Просмотрите результаты журнала, записанные в кибане, следующим образом:file

Лог показывает, что есть 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 в кибане.file

После завершения настройки мы снова открываем интерфейс kibana Discover для просмотра журнала, что, как и ожидалось, идеально!file

Общая проблема

кибана тарабарщина

Основной причиной этого является проблема с форматом файла журнала клиента.Вы можете использоватьfile xxx.logПроверьте формат кодировки файла журнала.Если кодировка ISO8859 в основном искажена, мы можем указать кодировку журнала через кодировку в файле конфигурации filebeat для передачи.

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /app/weaver/Resin/log/xxx.log
  encoding: GB2312

ошибка поля извлечения kibana

file

Как показано выше, это исключение возникает при открытии панели kibana Discover, вам нужно только удалить ES в ES.kibana_1index, а затем вернитесь к Kibana.file

Просмотр окружающих документов

Когда мы просматриваем определенное ключевое слово в журнале терминала, мы обычно проверяем контекстную информацию для облегчения устранения неполадок, например, часто используемые команды.cat xxx.log | grep -C50 keyword, то как реализовать эту функцию в Кибане.file

Найдите ключевые слова в 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-код, чтобы добавить подписку. «Ретвитнуть» плюс «просмотреть», чтобы выработать полезную привычку! Увидимся в следующий раз!

file

Добро пожаловать, чтобы отсканировать код и подписаться на общедоступную учетную запись WeChat илиличный блог