Showing posts with label logstash. Show all posts
Showing posts with label logstash. Show all posts

Monday, February 3, 2020

Logstash: конфигурируем сбор логов

В данной статье рассмотрим варианты конфигураций логстеша(опции filter{}).
Для начала сделаем авто рестарт конфигурации, чтобы постоянно не перезапускать службу логстеша. Добавляем к параметрам запуска параметр config.reload.automatic
ExecStart=/usr/share/logstash/bin/logstash  ...  "--config.reload.automatic"
Далее => systemctl daemon-reload и перезапуск самого логстеша.

filter{ ...}
#пример форматирования даты-времени
 if "json" in [tags] { #находим в тегах json и применяем данный паттерн
    date {
      match => ["[json][@timestamp]", "yyyy-MM-dd HH:mm:ss"]
      timezone => "Europe/Moscow" #применяем временные настройки
      target => "[json][@timestamp]"
    }
  }

#пример поиска текста по полю [json][message], который не равен тексту ERROR
if [json][message] !~ "ERROR"{
        mutate {
            remove_field => ["input"]} #удаляем поле из вывода
           rename => { "FName" => "Firstname"} #переименование
   gsub => [ "EmailId", "\.", "_" ] #замена . в поле EmailId на _
           strip => ["Firstname", "Lastname"]
           uppercase => [ "Gender" ]

}
mutate позволяет выполнять различные изменения данных в полях. Вы можете переименовать, конвертировать, извлекать и модифицировать поля в событиях.
Параметр gsub используется для сопоставления регулярного выражения и значения поля, а также для замены всех соответствий замещающей строкой.
Параметр strip используется для извлечения пробелов.
Параметр uppercase предназначен для преобразования строки в верхний регистр.

Фильтр Grok

Это мощный и популярный плагин для преобразования неструктурированных данных в структурированные, для упрощения запросов и фильтрации этих данных. В общих чертах Grok позволяет сопоставить строку и шаблон (который основан на регулярном выражении) и отобразить определенные части строки на свои поля. Общий синтаксис шаблона Grok выглядит следующим образом:
%{PATTERN:FIELDNAME}
PATTERN — имя шаблона, который соответствует тексту. FIELDNAME — идентификатор для соответствующего фрагмента текста.

#пример для Apache, двойной грок, т.к. не всегда апач заполняет все поля. В этом случае вывод не формируется. В примере указано, что если поле msg заполнено, то его нужно отфильтровать.
if "apache_access" in [tags] {
    grok {
                match => { "message" => "%{IPORHOST:[remote_ip]} %{IPORHOST:[next_ip]} %{IPORHOST:[remote_ip1]} - \[%{HTTPDATE:[timestamp]}\] \"%{WORD:[method]} %{DATA:[url]} HTTP/%{NUMBER:[http_version]}\" %{NUMBER:response_code:int} %{NUMBER:bytes:int} \"-\"\s*%{GREEDYDATA:msg}"}
                remove_field => "message"
    }
    grok {
                match => [ "msg", "\s*\*\*%{NUMBER:referrer:int}/%{NUMBER:referrer2:int}\*\*\s*%{GREEDYDATA:user}" ]
    }
    mutate {
        remove_field => ["input", "ecs", "@version", "agent", "next_ip", "http_version", "remote_ip1"]
    }
  }

Вот так выглядит строка из лога, которую нужно пройти двойным гроком.
Jan 31, 2020 @ 11:09:58.304     -     111.222.233.119 10.218.188.117 123.222.2.119 - [31/Jan/2020:11:09:58 +0300] "POST /url/somemethod HTTP/1.1" 200 457 "-" **0/54046** user_some

С помощбю Kibana вы можете отфильтровать свой лог. Указываете формат, в котором поступают данные и далее с помощью фильтров настраиваете формат лога.

Успехов!

Tuesday, January 28, 2020

ELK: логи

Немного теории про логи (из книги Pranav SHukla и SHarat_Kumar ElasticSearch)
 
Логи — это записи об инцидентах или наблюдениях. Логи создаются широким спектром ресурсов, таких как системы, приложения, устройства и т.д. 
Типовой лог:
Log = Timestamp + Data
Логи используются для следующих целей.
Устранение неполадок. Когда сообщается о баге или проблеме, в первую очередь информацию об этом нужно искать в логе. Например, при отслеживании стека исключений в логах можно легко найти причину проблемы.
• Понимание поведения системы/приложения. Во время работы приложения/системы лог работает как черный ящик. Изучая логи, вы поймете, что происходит внутри системы/приложения. Например, в логах можно отслеживать время, использованное разными фрагментами кода внутри приложения, и таким образом выявить узкие места и оптимизировать код для лучшей производительности.
• Аудит. Многие организации должны придерживаться тех или иных процедур проверки на соответствие и вынуждены вести логи. Например, входы пользователей в систему или их транзакции обычно хранятся в логах определенный промежуток времени, чтобы можно было провести аудит или анализ злоумышленной деятельности пользователей/хакеров.
• Предиктивная аналитика. С развитием машинного обучения, искусственного интеллекта и методов извлечения данных появился новый тренд — предиктивная аналитика.Как правило, используется для анализа пользовательских действий и показа ему рекламы=)
Каждая система записывает логи в своем собственном формате, поэтому администратору или конечному пользователю важно уметь разбираться в форматах логов, созданных каждой системой/приложением. Поскольку форматы различаются, поиск по разным типам логов может быть затруднительным, поэтому на помощь спешит Logstash.

Logstash — популярный движок сбора данных с открытым исходным кодом. Он также имеет возможности работы с контейнерами в реальном времени. Logstash позволяет легко строить контейнеры для сбора данных из широкого спектра источников и обрабатывать их, дополнять, унифицировать и отправлять на хранение в различные места. Logstash предоставляет набор плагинов, известных как фильтры ввода и плагины вывода. 

Перечислим некоторые из особенностей Logstash.
Гибкая архитектура, основанная на плагинах. Logstash содержит более 200 плагинов, разработанных компанией Elastic и сообществом открытого исходного кода. Вы можете использовать их для объединения, сопоставления и организации различных источников ввода, фильтров и выводов, а также создания контейнеров для обработки данных.
• Расширяемость. Компонент Logstash написан на Jruby и поддерживает гибкую архитектуру. Допускается создание собственных плагинов для персональных нужд.
• Централизованная обработка данных. Данные из любых источников можно легко извлекать с применением разнообразных плагинов ввода, а также дополнять их, изменять и отправлять различным получателям.
• Универсальность. Logstash поддерживает обработку всех типов логов, таких как логи Apache, NGINIX, системные логи, логи событий Windows. Он также предоставляет сбор метрик из широкого спектра приложений через TCP и UDP. Logstash может трансформировать запросы HTTP в события, поддерживает такие приложения, как Meetup, GitHub, JIRA и др. Возможен также сбор данных из имеющихся реляционных/NoSQL баз данных и очередей, включая Kafka, RabbitMQ и т.п. Контейнер обработки данных Logstash может быть легко масштабирован горизонтально. Начиная с Logstash 5, поддерживаются постоянные очереди, благодаря чему обеспечивается возможность надежно обрабатывать большие объемы входящих событий/данных.
Совместная работа. Logstash имеет высокую связность с компонентами Elasticsearch, Beats и Kibana, что облегчает создание сквозных решений для анализирования логов.