Меню

Сервис для логирования ошибок

Всем разработчикам известна ситуация, когда приложение заглючило и пользователь не может сделать то, что ему нужно. Причины разные: пользователь ввёл неправильные данные, у него медленный интернет и многое другое. Без системы логирования разобрать эти ошибки сложно, а порой невозможно. С другой стороны, система логирования — хороший индикатор проблемных мест в работе системы. Я расскажу, как построить систему логирования в своём проекте (да, ещё раз). В статье расскажу об Elasticsearch + Logstash + Kibana и Prometheus и как их заинтегрировать со своим приложением.

2ГИС — это веб-карта и справочник организаций. У фирмы может быть дополнительный контент — фотографии, скидки, логотип и прочее. И чтобы владельцам бизнеса было удобно управлять этим добром, был создан Личный кабинет. С помощью Личного кабинета можно:

  • Добавлять или изменять контакты организации
  • Загружать фотографии, логотип
  • Смотреть, что делают пользователи при открытии организации и многое другое.

Личный кабинет состоит из двух проектов: бэкенд и фронтенд. Бэкенд написан на PHP версии 5.6, используется фреймворк Yii 1 (да, да). Активно используем Сomposer для управления зависимостями в проекте, автозагрузку классов в соответствии PSR-4, namespace, trait. В будущем планируем обновлять версию PHP до семёрки. В качестве веб-сервера используем Nginx, данные храним в MongoDB и PostgreSQL. Фронтенд написан на JavaScript, используем фреймворк нашего приготовления Catbee. Бэкенд предоставляет API для фронтенда. Далее в докладе буду говорить исключительно про бэкенд.

Вот схема наших интеграций. Нам это напоминает звёздное небо. Если приглядеться, можно увидеть Большую медведицу:

Внешние сервисы разнородные — разрабатываются дюжиной команд, со своим стеком технологий и API. Сценарии интеграции получаются нетривиальными — сначала ходим в один сервис, получаем данные, накладываем свою бизнес-логику, идём ещё в несколько сервисов с новыми данным, объединяем ответы и отдаём результат на фронтенд. И если у пользователя возникает проблема и он не может осуществить желаемое, например, продлить рекламную кампанию, то без системы логирования нам не понять, где была проблема — либо неправильно отправляем данные во внешний сервис, либо неправильно интерпретируем ответ, либо внешний сервис недоступен, либо неправильно накладываем свою бизнес-логику.

У нас было логирование ошибок, но с появлением новых сервисов стало всё труднее отслеживать интеграции и отвечать на запросы техподдержки о возникающей проблеме. Поэтому мы выработали новые требования к нашей системе логирования:

  • Нужно больше контекста об ошибках — что произошло и у какого пользователя.
  • Собирать входящие запросы в удобном виде.
  • Если методы долго отвечают, то нужно уведомить команду об этом.

Логирование ошибок

Исторически сложилось, что в нашей компании для сбора и просмотра логов используется стэк технологий Elasticsearch + Logstash + Kibana, сокращённо ELK. Elasticsearch — NoSQL-хранилище документов, с возможностью полнотекстового поиска. Logstash настроен на приём логов по TCP/UDP-протоколам, читает сообщения из Redis и сохраняет в Elasticsearch. Kibana предоставляет визуальный интерфейс для поиска и отображения собранных данных.

Если у клиента идёт что-то не так, то он обращается в техподдержку из своего аккаунта с описанием проблемы. У нас было логирование ошибок, но не было ни email пользователя, ни вызванного API-метода, ни стэка вызова. В сообщениях была лишь строка из необработанного Exception вида «Запрос вернул некорректный результат». Из-за этого мы искали проблему по времени обращения клиента и ключевым словам, что не всегда было точно — клиент мог обратиться через день, и помочь было очень сложно.

Помучавшись, мы решили, что надо что-то делать и добавили необходимую информацию — email пользователя, API-метод, тело запроса, стэк вызова и наши контроллер и экшен, которые обрабатывали запрос. В итоге мы упростили жизнь техподдержке и себе — ребята нам скидывают email пользователя, а мы по нему находим записи в логах и разбираемся с проблемой. Мы точно знаем, у какого пользователя была проблема, какой метод был вызван и какая часть нашего кода обработала его. Никаких сравнений по времени обращения!

Сообщения об ошибках отправляем во время работы приложения по протоколу UDP в формате Graylog Extended Log Format, или сокращенно GELF. Формат хорош тем, что сообщения могут быть сжаты популярными алгоритмами и разделены на части, тем самым снижая объем передаваемого трафика из нашего приложения в Logstash. Протокол UDP пусть и не гарантирует доставку сообщений, но накладывает минимум накладных расходов на время ответа, поэтому такой вариант нас устраивает. В приложении используем библиотеку gelf-php, которая предоставляет возможности по отправке логов в разных форматах и протоколах. Рекомендую использовать её в своих PHP-приложениях.

Вывод — если ваше приложение работает с внешними пользователями и вам нужно искать ответы на возникающие вопросы техподдержки, смело добавляйте информацию, которая поможет идентифицировать клиента и его действия.
Пример нашего сообщения:

{
    "user_email": "test@test.ru",
    "api_method": "orgs/124345/edit",
    "method_type": "POST",
    "payload": "{'name': 'Новое название'}",
    "controller": "branches/update",
    "message": "Undefined index: 'name'
File: /var/www/protected/controllers/BranchesController.php
Line: 50"
}

Логирование запросов

Логирования запросов в структурированном виде и сбор статистики отсутствовали, поэтому было непонятно, какие методы чаще всего вызываются и сколько по времени отвечают. Это привело к тому, что мы не могли:

  • оценить допустимое время ответа методов.
  • причину возникновения тормозов — на нашей стороне или на стороне внешнего сервиса (помните схему со звёздным небом?)
  • как можно оптимизировать наш код, чтобы уменьшить время ответа.

В рамках данной задачи нам предстояло решить вопросы:

  1. выбор параметров ответа для логирования
  2. отправка параметров в Logstash

Мы используем веб-сервер Nginx, и он умеет писать access-логи в файл. Для решения первой задачи указали новый формат сохранения логов в конфигурации:

log_format main_logstash
'{'
    '"time_local": "$time_local",'
    '"request_method": "$request_method",'
    '"request_uri": "$request_uri",'
     '"request_time": "$request_time",'
     '"upstream_response_time": "$upstream_response_time",'
     '"status": "$status",'
    '"request_id": "$request_id"'
'}';
server {
    access_log /var/log/nginx/access.log main_logstash;
}

Большинство метрик, думаю, вопросов не вызывает, расскажу подробнее про наиболее интересную — $request_id. Это уникальный идентификатор, UUID версии 4, который генерируется Nginx для каждого запроса. Данный заголовок мы пробрасываем в запросе во внешние сервисы и можем отследить ответ запроса в логах других сервисах. Очень удобно при поиске проблем в других сервисах — никаких сравнений по времени, урлу вызванного метода.

Для отправки логов в Logstash используем утилиту Beaver. Устанавливается на все ноды приложения, с которых планируется отправка логов. В конфигурации указывается файл, который будет парситься для получения новых логов, указываются поля, которые будут отправляться с каждым сообщением. Сообщения отправляются в Redis-кластер, из которого Logstash забирает данные. Вот наша конфигурация Beaver:

[/var/log/nginx/access.log]
    type: nginx_accesslog
    add_field: team,lk,project,backend
    tags: nginx_json

По полям type и tags в Logstash по нашим значениям сделана фильтрация и обработка логов, у вас эти значения могут быть свои. Кроме того, добавляем поля team и project, чтобы можно было идентифицировать команду и проект, которым принадлежат логи.

Научившись собирать access-логи, мы перешли к определению SLA методов. SLA, договор на уровень оказания услуг, в нашем случае мы гарантируем, что 95-ый перцентиль по времени ответа методов будет не более 0.4 секунд. Если не укладываемся в допустимое время, то значит, что в приложении либо одна из интеграций тормозит и обращаемся к связанной команде, либо что-то не так в нашем коде и необходима оптимизация.

Вывод по сбору access-логов — мы определили наиболее часто вызываемые методы и их допустимое время ответа.

Вот примеры наших отчётов на одном из измеряемых методов. Первый — чему равны 50, 95 и 99 перцентили времени ответа и среднее время ответа:

Диаграмма статусов ответа:

Среднее время ответа за промежуток времени:

Оповещения команды о падении SLA

После сбора логов нам пришла идея, что нужно оперативно узнавать о падении скорости. Постоянно держать открытым браузер с Kibana, нажимать F5, сравнивать в уме текущее значение 95-ого перцентиля с допустимым оказалось не очень практично — есть много других интересных задач в проекте. Поэтому для формирования оповещений мы добавили интеграцию с системой Prometheus. Prometheus — это система с открытым исходным кодом для сбора, хранения и анализа метрик работающего приложения. Официальный сайт с документацией.

Нам система понравилась тем, что в случае срабатывания триггера можно отправить оповещение на почту. Возможность предоставляется из коробки, без заморочек с доступами к серверам и без написания кастомных скриптов для формирования оповещения. Система написана на языке Go, создатели — компания SoundCloud. Существуют библиотеки для сбора метрик на разными языками — Go, PHP, Python, Lua, C#, Erlang, Haskell и другие.

Я не буду рассказывать, как установить и запустить Prometheus. Если вам интересно это, предлагаю почитать статью. Я сделаю упор на тех моментах, которые имели практическое значение для нас.

Схема интеграции выглядит так — клиентское приложение по адресу отдаёт набор метрик, Prometheus заходит на данный адрес, забирает и сохраняет метрики в своём хранилище.

Давайте разберёмся, как выглядят метрики.

  1. Название — это идентификатор изучаемой характеристики. Например, количество входящих запросов.
  2. У метрики в момент времени есть определённое значение. Время проставляет Prometheus при сборе метрик.
  3. У метрики могут быть лейблы. Они содержат дополнительную информацию о собранном числе. В примере указана нода приложения и API-метод. Основная фишка лейблов в том, что по ним можно осуществлять поиск и делать необходимые выборки данных.

Хранилища данных формата «время — значение» называются Базами данных временных рядов. Это узкоспециализированные NoSQL-хранилище для хранения изменяющихся во времени показателей. Например, количество пользователей на сайте в 10 часов утра, за день, за неделю и так далее. Из-за особенностей решаемых задач и способа хранения такие БД обеспечивают высокую производительность и компактное хранение данных.

Prometheus поддерживает несколько типов метрик. Рассмотрим первый тип, называется Счётчик. Значение Счётчика при новых измерениях всегда растёт вверх. Идеально подходит для измерения общего количества входящих запросов за всю историю — не может быть такого, чтобы сегодня было 100 суммарно запросов, а завтра количество уменьшилось до 80.

Но как быть с измерением времени ответа? Оно не обязательно растёт вверх, более того, может упасть вниз, быть какое-то время на одном уровне, а потом вырасти вверх. Изменение может произойти менее чем за 10 секунд, и нам хочется видеть динамику изменения времени ответа для каждого запроса. К счастью, есть тип Гистограмма. Для формирования необходимо определить интервал измерения времени ответа. В примере возьмём от 0.1 до 0.5 секунды, всё что больше будем считать как Бесконечность.

Вот как выглядит начальное состояние Гистограммы:

api_request_time_bucket{node="api1.2gis.com",handler="/users",le="0.1"} 0
api_request_time_bucket{node="api1.2gis.com",handler="/users",le="0.2"} 0
api_request_time_bucket{node="api1.2gis.com",handler="/users",le="0.3"} 0
api_request_time_bucket{node="api1.2gis.com",handler="/users",le="0.4"} 0
api_request_time_bucket{node="api1.2gis.com",handler="/users",le="0.5"} 0
api_request_time_bucket{node="api1.2gis.com",handler="/users",le="+Inf"} 0

api_request_time_sum{node="api1.2gis.com",handler="/users"} 0
api_request_time_count{node="api1.2gis.com",handler="/users"} 0

На каждое значение из интервала мы создаём Счётчик по определённым правилам:

  1. В названии обязательно должен быть постфикс _bucket
  2. Должен быть лейбл le, в котором указывается значение из интервала. Плюс должен быть Счётчик со значением +Inf.
  3. Должны быть Счётчики с постфиксом _sum и _count. В них сохраняется суммарное общее время всех ответов и количество запросов. Нужны для удобного подсчёта 95-ого перцентиля средствами Prometheus.

Давайте разберёмся, как правильно заполнять Гистограмму временем ответа. Для этого нужно найти серии, у которых значение лейбла le больше либо равно времени ответа, и их увеличить на единицу. Предположим, что наш метод ответил за 0.4 секунды. Мы находим те Счётчики, у которых лейбл le больше либо равен 0.4, и к значению добавляем единицу:

api_request_time_bucket{node="api1.2gis.com",handler="/users",le="0.1"} 0
api_request_time_bucket{node="api1.2gis.com",handler="/users",le="0.2"} 0
api_request_time_bucket{node="api1.2gis.com",handler="/users",le="0.3"} 0
api_request_time_bucket{node="api1.2gis.com",handler="/users",le="0.4"} 1
api_request_time_bucket{node="api1.2gis.com",handler="/users",le="0.5"} 1
api_request_time_bucket{node="api1.2gis.com",handler="/users",le="+Inf"} 1

api_request_time_sum{node="api1.2gis.com",handler="/users"} 0.4
api_request_time_count{node="api1.2gis.com",handler="/users"} 1

Если метод отвечает за 0.1 секунду, то мы увеличиваем все серии. Если отвечает за 0.6 секунд, то увеличиваем лишь счётчик со значением «+Inf». Не забываем увеличивать счётчики api_request_time_sum и api_request_time_count. С помощью Гистограммы можно измерять время ответа, которое за короткий промежуток может часто меняться.

Prometheus поддерживает ещё два типа метрик — Шкала и Сводка результатов. Шкала описывает характеристику, значение которой может как увеличиваться, так и уменьшаться. В задачах не используем, так как такие показатели у нас не измеряются. Сводка результатов — это расширенная Гистограмма, которая сохраняет вычисляемые на стороне приложения квантили. Теоретически можно было бы рассчитывать 95-процентный перцентиль, или 0.95 квантиль, но это добавило бы кода по подсчёту на клиентской стороне и лишило бы гибкости в отчётах — могли бы использовать только вычисленные нами квантили. Поэтому свой выбор остановили на Гистограмме.

Формирование Гистограммы мы реализовали в Nginx на языке Lua. Нашли готовый проект на GitHub, который подключается в конфигурации Nginx и формирует Гистограмму описанным выше способом. Собирать данные нам необходимо с наиболее часто вызываемых методов, которые, как вы помните, мы определили после отправки access-логов в Logstash. Поэтому потребовалось добавить бизнес-логики по проверке, нужно запрос логировать или нет.

В итоге интеграция заняла неделю, вместе с изучением матчасти Prometheus и основ языка Lua. На наш взгляд, это отличный результат. Ещё очень здорово, что на время ответа добавляется незначительный, порядка 5-10 мс, оверхеад из-за формирования Гистограмм и проверки нашей бизнес-логики, что меньше, чем предполагали.

Но есть и минусы у этого решения — не учитываем время запросов, у которых статус не 200. Причина — директива log_by_lua, в которую мы добавили логирование, в таком случае не вызывается. Вот подтверждение. С другой стороны, нам время ответа таких запросов неинтересно, потому что это ошибка. Ещё один минус — Гистограмма хранится в shared-памяти Nginx. При перезапуске Nginx память очищается, и собранные метрики теряются. С этим тоже можно жить — перезапускать Nginx командой reload, и настроить Prometheus, чтобы он чаще забирал метрики.

Вот конфигурация Nginx для создания Гистограммы:

lua_shared_dict prometheus_metrics 10M;

init_by_lua '
    prometheus = require("prometheus").init("prometheus_metrics")
    prometheusHelper = require("prometheus_helper")
    metric_request_time = prometheus:histogram("nginx_http_request_time", {"api_method_end_point", "request_method"})
'

Здесь мы выделяем общую память, подключаем библиотеку и хэлпер с нашей бизнес-логикой и инициализируем Гистограмму — присваиваем имя и лейблы.

За логирование запроса отвечает данная конфигурация:

location / {
    log_by_lua '
        api_method_end_point = prometheusHelper.convert_request_uri_to_api_method_end_point(ngx.var.request_uri, ngx.var.request_method)
        if (api_method_end_point ~= nil) then
            metric_request_time:observe(tonumber(ngx.var.request_time),{api_method_end_point, ngx.var.request_method})
    '
}

Здесь мы в директиве log_by_lua проверяем, нужно ли логировать запрос, и если да, то добавляем его время ответа в Гистограмму.

Метрики отдаются через Nginx по endpoint:

server {
    listen 9099;
    server_name api1.2gis.com;
    location /metrics {
        content_by_lua 'prometheus:collect()';
    }
}

Теперь нужно в конфигурации Prometheus указать ноды нашего приложения для сбора метрик:

  - targets:
      - api1.2gis.com:9099
      - api2.2gis.com:9199
    labels:
      job: bizaccount
      type: nginx
      role: monitoring-api-methods
      team: lk
      project: backend

В разделе targets указываются endpoint наших нод, в разделе labels — лейблы, которые добавляются к собираемым метрикам. По ним определяем назначение метрики и отправителя.

Сбор метрик у нас настроен каждые 15 секунд — Prometheus заходит на указанные ноды и сохраняет себе метрики.

После того, как мы разобрались с метриками, научились их собирать, отдавать в Prometheus, мы перешли к тому, ради чего затевалась интеграция — оповещения на командную почту при падении скорости работы нашего приложения. Вот пример оповещения:

ALERT BizaccountAPI95PercentileUnreachebleGetUsers
        IF (sum(rate(nginx_http_request_time_bucket{le="0.4",api_method_end_point="/users",request_method="GET"}[5m])) by (api_method_end_point, request_method)
/
sum(rate(nginx_http_request_time_count{api_method_end_point="/users",request_method="GET"}[5m])) by (api_method_end_point, request_method)) * 100 < 95
        FOR 5m
        LABELS { severity = "critical", team = "lk"}
        ANNOTATIONS {
                summary = "API-method {{ $labels.request_method}} {{ $labels.api_method_end_point}} is not in SLA",
                description = "For API-method {{ $labels.request_method}} {{ $labels.api_method_end_point }} 95 percentile is unreacheble in last 5 minutes. Current percentile is {{ $value }}.",
        }

У Prometheus лаконичный язык формирования запросов, при помощи которого можно выбирать значения метрик за период и фильтровать по лейблам. В директиве IF с помощью конструкций языка указываем условие срабатывания триггера — если за 0.4 секунды отвечают менее 95 процентов запросов за последние 5 минут. Считается это отношением. В числителе мы высчитываем, сколько запросов укладываются за 0.4 секунды за последние 5 минут:

sum(rate(nginx_http_request_time_bucket{le="0.4",api_method_end_point="/users",request_method="GET"}[5m])) by (api_method_end_point, request_method)

В знаменателе считаем общее количество запросов за последние 5 минут:

sum(rate(nginx_http_request_time_count{api_method_end_point="/users",request_method="GET"}[5m])) by (api_method_end_point, request_method)

Полученную дробь умножаем на 100 и получаем процент запросов, которые отвечают за 0.4 секунды. Функция rate здесь возвращает время ответа за каждый момент в указанный интервале. Функция sum суммирует полученный ряд. Оператор by — это аналог оператора GROUP BY, который выполняет группировку по указанным лейблам.

В разделе FOR указывается интервал между первым срабатываем триггера и моментом, когда нужно отправить оповещения. У нас интервал равен 5 минутам — если за 5 минут ситуация не меняется, то нужно отправить оповещение. В разделе LABELS указываются лейблы с указанием команды и критичности проблемы. В разделе ANNOTATIONS указывается проблемный метод и какой процент запросов отвечает за 0.4 секунды.

В случае возникновения повторяющихся оповещений Prometheus умеет делать дедупликацию, и отправит одно оповещение на командную почту. И это всё из коробки, нам нужно лишь указать правила и интервал срабатывания триггера.

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

Вот как выглядит сообщение:

Заключение

Мы улучшили нашу систему логирования и теперь у нас не возникает проблем с недостатком информации.

  1. При возникновении ошибки мы обладаем достаточной информацией о проблеме. Теперь на 99 процентов запросов техподдержки мы имеет представление, что произошло у пользователя и точно сориентировать техподдержку о проблеме и возможных сроках исправления.
  2. С помощью оповещений мы определяем проблемные места в производительности приложения и оптимизируем их, делая приложение быстрее и надёжнее.
  3. Через Prometheus мы оперативно узнаём о падении скорости, а уже после смотрим в ELK и начинаем детально изучать, что случилось. У связки ELK + Prometheus мы видим большой потенциал, планируем добавить оповещения в случае увеличения ошибок и мониторинг внешних сервисов.

Точно так же как безопасность, регистрация системных сообщений – другой ключевой компонент веб-приложений (или приложений в целом), который отодвигается на второй план из-за старых привычек и неспособности видеть впереди.

То, что многие считают бесполезными набросками цифровой ленты, – это мощные инструменты, позволяющие заглянуть в ваши приложения, исправить ошибки, улучшить слабые места и порадовать клиентов.

Прежде чем мы перейдем к централизованному ведению журналов, давайте сначала рассмотрим, почему ведение журналов ( логирование ) так важно.

Содержание

  1. Два типа (уровня) регистрации сообщений журналов
  2. Логгирование это сила
  3. Боевой дух и продуктивность команды
  4. 1  Graylog
  5. 2 Logstash
  6. 3  Fluentd
  7. 4 Flume
  8. 5  Octopussy
  9. 6  LOGalyze
  10. 7  LogPacker
  11. 8 Logwatch
  12. 9  Syslog-ng
  13. 10 Inav

Два типа (уровня) регистрации сообщений журналов

Компьютеры являются детерминированными системами, кроме случаев, когда это не так.

Как безопасник, я сталкивался со многими случаями, когда наблюдаемое поведение приложения ставило всех в тупик целыми днями, но ключ к разгадке всегда был в журналах.

Каждое программное обеспечение, которое мы запускаем, производит (или, по крайней мере, должно генерировать) журналы, которые сообщают нам, через что они проходили, когда возникала проблемная ситуация.

Теперь, как мне кажется, ведение журнала бывает двух типов: автоматически сгенерированные журналы и сгенерированные программистом журналы.

Обращаем ваше внимание, что этих различий и классификации нету в учебниках, и цитирование меня по этой терминологии доставит вам неприятности. ?

Изображение выше показывает то, что можно назвать автоматически сгенерированным журналом.

В данном конкретном случае это система WordPress, регистрирующая непредвиденное состояние (уведомление) при запуске некоторого кода PHP.

Журналы, подобные этим, создаются постоянно – с помощью инструментов баз данных, таких как MySQL, веб-серверов, таких как Apache, языков программирования и сред, мобильных устройств и даже операционных систем.

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

В такие моменты они копаются глубоко в коде, пытаясь понять, что пошло не так.

Но автоматически сгенерированные журналы могут помочь только так сильно.

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

С точки зрения систем, связанных как приложение, это был просто еще один день в работе – кто-то имел необходимые полномочия для выполнения задачи, и поэтому система выполнила ее.

Здесь нужен дополнительный уровень явной, обширной регистрации, которая создает следы для человеческой стороны вещей.

Это то, что я называю созданными программистом журналами, и они составляют основу чувствительных отраслей, таких как банковское дело.

Вот пример того, как может выглядеть такая схема регистрации:

Логгирование это сила

Итак, с учетом этих двух типов журналов в системе, вот как вы можете использовать их и усилить воздействие.

Боевой дух и продуктивность команды

Как я уже говорил, когда ошибки долго не отслеживаются, разработчики в вашей команде разочаровываются и теряют все больше и больше времени, закрывая свои хвосты.

И вот в чем дело с отладкой – она требует свежего, любопытного ума с самого начала.

И что затрудняет отладку?

По моему опыту, отсутствие ведения журнала или отсутствие знаний о ведении журнала.

Для начала вы можете не осознавать, что ваша любимая база данных – это просто еще одна часть программного обеспечения, которая генерирует журналы, или вы не будете интенсивно регистрировать события в своем приложении (см. Журналы, сгенерированные программистом выше).

Я особенно помню случай, когда приложение перестало отвечать на запросы, и никто не знал, почему.

Несколько дней спустя виновником стало ограничение дискового ввода-вывода из-за чрезмерного трафика.

Потому что никто не удосужился посмотреть журналы,и никто не мог понять, почему система упала.

Если вы регулярно посещаете журнал медленных запросов, вы узнаете, какие операции занимают больше всего времени, и, следовательно, обнаружите небольшие, но важные области, требующие работы.

Часто такие небольшие изменения работают лучше, чем удвоение емкости оборудования.

Невозможно сосчитать, сколько способов решения проблем подарит вам хорошая система журналов.

Возможно, лучшим аргументом является то, что это автоматическое действие, которое когда-то настроено, не нуждается в каком-либо мониторинге и однажды спасет вас от разорения.

В связи с этим давайте рассмотрим некоторые из удивительных сборщиков журналов с открытым исходным кодом (унифицированных инструментов ведения журналов).

Graylog

Как мониторить лог файлы с помощью GrayLog Linux

2 Logstash

Если вы являетесь поклонником или пользователем стека Elastic, стоит попробовать Logstash (стек ELK )

Как и другие инструменты ведения журнала в этом списке, у Logstash,полностью открытый исходный код, дает вам свободу развертывания и использования по своему усмотрению.

Но не вводите себя в заблуждение: Logstash – это иснтрумент, возможности которого намного превосходят любые скромные средства ведения журналов.

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

Конечно, единственным ограничением является то, что он работает только с набором продуктов Elastic, но если вы скоро начнете и хотите масштабироваться, Logstash – это то, что вам нужно!

Fluentd

Среди централизованных инструментов ведения журналов, которые выполняют роль промежуточного уровня для приема данных, Flutend является первым среди равных.

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

Fluentd построен на Ruby, является продуктом с полностью открытым исходным кодом и пользуется большой популярностью благодаря своей гибкости и модульности.

С такими крупными компаниями, как Microsoft, Atlassian и Twilio, использующим эту платформу, Fluentd нечего доказывать. ?

4 Flume

Если на самом деле вам нужны действительно большие наборы данных, и вы в конечном итоге захотите объединить все в нечто вроде Hadoop, Flume – один из лучших вариантов.

Это «чистый» проект с открытым исходным кодом, в том смысле, что он поддерживается нашим любимым Apache Foundation, что означает отсутствие корпоративного плана.

Это может  быть то, что вы точно ищете. ?

Написанный на Java (который продолжает удивлять меня, когда дело доходит до революционных технологий), исходный код Flume полностью открыт.

Flume лучше всего подойдет вам, если вы ищете распределенную отказоустойчивую платформу для загрузки данных для работы в тяжелых условиях.

Octopussy

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

По моему мнению, Octopussy покрывает потребности большинства продуктов (оценочная статистика бесполезна, но, если бы мне пришлось угадывать, я бы сказал, что в реальном мире она учитывает 80% случаев использования)

У Octopussy нет отличного пользовательского интерфейса:

но он компенсирует скорость и отсутствие раздувания.

Исходный код доступен на GitHub, как и ожидалось, и я думаю, что он заслуживает серьезного изучения.

LOGalyze

LOGalyze был коммерческим продуктом, который недавно стал инструментом с открытым исходным кодом.

Хотя я не смог реализовать проект на GitHub, они сделали установщик Windows и весь исходный код загружаемым.

Если вы намерены участвовать в сообществе, вы можете найти подробную информацию о списке рассылки здесь.

LOGalyze – это относительно гибкое и мощное предложение, которое отлично подойдет для развертываний в одной системе, которые стремятся объединить ведение журналов из известных источников, таких как Postfix, Apache и т. д. и выводить их в форматах CSV, PDF, HTML или аналогичных.

Да, он не делает все, но поскольку это был коммерческий продукт в свое время, он делает это довольно хорошо.

LogPacker

Когда дело доходит до выбора инструмента для работы, у меня есть два критерия: он должен быть целенаправленным и опираться на активную бизнес-модель.

Проблема программного обеспечения с открытым исходным кодом, как правило, заключается в том, что через несколько месяцев / лет вероятность застоя или выхода из строя высока.

Там нет подсчета того, сколько инструментов ведения журнала было запущено,а только можно найти количество на кладбище GitHub.

По этому критерию LogPacker – мой любимый.

8 Logwatch

Я уверен, что среди нас есть те, кто не хочет, чтобы вся церемония была связана с «единой», «централизованной» системой ведения журналов.

Их бизнес базируется на отдельных серверах, и они ищут что-то быстрое и эффективное для просмотра своих файлов журналов.

Ну тогда, скажи привет Logwatch.

После установки LogWatch может сканировать системные журналы и создавать отчеты нужного вам типа.

Это несколько устаревшее программное обеспечение (читай «надежное»), хотя оно было написано на Perl.

Итак, вам понадобится Perl 5.6+ на вашем сервере для его запуска.

У меня нет скриншотов, которыми можно поделиться, потому что это чисто командная строка, демонизированный процесс.

Если вы наркоман CLI и любите стиль старой школы, вам понравится Logwatch!

Syslog-ng

Инструмент Syslog-ng был разработан как способ обработки файлов  системного журнала (установленный протокол клиент-сервер для регистрации в системе) в режиме реального времени.

Однако со временем он стал поддерживать другие форматы данных: неструктурированные, SQL и NoSQL.

Как работает протокол системного журнала, довольно четко подытожено на следующем рисунке.

syslog-ng – это надежный инструмент для сбора и классификации журналов промышленного уровня, написанный на языке Си и давно известный в отрасли.

Лучшая часть – это расширяемость, позволяющая вам писать плагины на C, Python, Java, Lua или Perl.

10 Inav

✗ Установите и используйте Log File Navigator – lnav в Ubuntu и CentOS ✗

От глупой командной строки, не требующих настройки инструментов до полномасштабной обработки данных – все это здесь!

Я что-то пропустил? Конечно, я сделал это!

Пожалуйста, дайте мне знать в комментариях, и я буду рад добавить эту сюда

Теги: devops, системы логирования, логи, graylog, elk, loggy, splunk, mongodb, микросервисы

VKDevOpsDeep.png

photo_2021_10_07_15_37_01-1801-136f82.jpg

К логам сервисов и приложений обращаются абсолютно все: администраторы читают логи, чтобы выяснить причину сбоя сервиса; программисты ищут в них исключения; «безопасники» проверяют, что в них нет каких-нибудь необычных записей, характерных для взлома.

Пока у вас один сервер, всё хорошо: каждый специалист может открыть файлы в vim и посмотреть, что ему нужно. А что если серверов у вас много? А что если по этим серверам разбросаны кучи сервисов и приложений? Как людям читать логи со всего этого?

Придётся же читать логи каждого сервиса, каким-то сложным методом находить логи того запроса, что сломался, и искать где именно что-то пошло не так. Как решить эти проблемы?

Существуют популярные системы логирования: Graylog, ELK, Loggy или Splunk

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

Что эта система даёт администраторам?

Им больше не нужно подключаться ко всем серверам, достаточно открыть веб-интерфейс системы логирования и в поиске написать название сломанного сервиса. Например, вы вводите слово Mongo и получаете журнал MongoDB со всех своих серверов, с возможностью фильтровать их по полям.

Мы предполагаем, что где-то возникла ошибка, поэтому добавляем фильтр по полю. Указываем, что «критичность логов» должна быть «ERROR», после чего система нам покажет все ошибки с заданной критичностью. Если администратор не исправляет ошибку, а пишет «постмортем» по вчерашней аварии, он также может добавить фильтр по времени и посмотреть логи за весь вчерашний день, за конкретные его часы и т.д.

Что эта система даёт программистам?

В некоторых компаниях программистам не дают доступ к серверам, с этой системой они могут смотреть все интересующие их логи, не заходя в них! Частой проблемой является поиск сервера, на котором произошло исключение. Мы можем просто написать исключение в строке поиска, найти, на каком сервере это произошло, и посмотреть весь его журнал в считанные секунды. Поверх логов с исключениями можно построить график количества исключений в час/день/и т.д., чтобы отследить возрастание ошибок после деплоя и вовремя откатиться на предыдущий релиз.

Что эта система даёт Q/A?

Во-первых, они по логам могут проанализировать, состояние сервисов после прогона тестов – не появилось ли там новых ошибок. Если же ошибки появились, можно передать программисту ссылку на все эти сообщения.

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

Микросервисы

Это особенный случай. Тут серверов много, на одном сервере может быть несколько одинаковых микросервисов. Какой запрос где сломался, вообще не поймёшь. В таких сложных ситуациях прибегают к практике сквозного логирования, при которой каждому запросу присваивается ID, передающийся от сервиса к сервису на протяжении всей жизни запроса. Этот ID так же добавляют в логи, и когда мы получаем исключение, мы видим не только ошибку, но и в каком конкретно запросе оно произошло.

Вбиваем этот ID в систему логирования и видим полное развитие событий: от начала до конца. Ага, вот запрос прошёл балансировку, вот произошла авторизация пользователя, вот он начал собирать данные, обходя множество микросервисов, и вот тут конкретный микросервис вернул ошибку. Дальше можно проследить и обратную цепочку того, как ошибка прошла весь этот путь обратно и показалась пользователю, но, как правило, это уже не так важно.

Есть вопрос? Напишите в комментариях!

photo_2021_10_07_15_37_01-1801-136f82.jpg

Евгений Холодов

Евгений Холодов


техлид в Dunice

Каждый проект так или иначе имеет жизненные циклы: планирование, разработка MVP, тестирование, доработка функциональности и поддержка. Скорость роста проектов может отличаться, но при этом желание не сбавлять обороты и двигаться только вперёд у всех одинаковые. Перед нами встаёт вопрос: как при работе над крупным проектом минимизировать время на выявление, отладку и устранение ошибок и при этом не потерять в качество?

Существует много различных инструментов для повышения стабильности проекта:

  • статические анализаторы (ESLint, TSLint, Pylint и др.);
  • контейнеризация (Docker, Vagrant и др.);
  • различные виды тестирования (функциональное тестирование, тестирование производительности, системное тестирование, модульное тестирование, тестирование безопасности);
  • менеджеры зависимостей (npm, yarn, pip и др.);
  • логирование + мониторинг;
  • менеджеры процессов;
  • системные менеджеры.

В данной статье я хочу поговорить об одном из таких инструментов — логировании.

Логи — это файлы, содержащие системную информацию о работе сервера или любой другой программы, в которые вносятся определённые действия пользователя или программы.

Логи полезны для отладки различных частей приложения, а также для сбора и анализа информации о работе системы с целью выявления ошибок. Всё это необходимо для контроля работы приложения, так как даже после релиза могут встретиться ошибки, а пользователи не всегда сообщают о багах в техподдержку. Чем больше процессов у вас автоматизировано, тем быстрее будет идти разработка.

Допустим, есть клиентское приложение, балансировщик в лице Nginx, серверное приложение и база данных.

В данном примере не важны язык/фреймворк бэкенда, фронтенда или тип базы данных, а вот про веб-сервер Nginx давайте поговорим. В данный момент Nginx популярнее остальных решений для высоконагруженных сайтов. Среди известных проектов, использующих Nginx: Рамблер, Яндекс, ВКонтакте, Facebook, Netflix, Instagram, Mail.ru и многие другие. Nginx записывает логи по умолчанию, без каких-либо дополнительных настроек.

Логи доступны 2 типов:

  • логи ошибок (logs/error.log) — хранят запросы, которые завершились с ошибкой;
  • логи доступа (logs/access.log) — хранят информацию обо всех запросах, которые были отправлены на сервер.

Клиент отправляет запрос на сервер, и в данной ситуации Nginx будет записывать все входящие запросы. Если возникнут ошибки при обработке запросов, сервером будет записана ошибка.

2020/04/10 13:20:49 [error] 4891#4891: *25197 connect() failed (111: Connection refused) while connecting to upstream, client: 5.139.64.242, server: app.dunice-testing.com, request: "GET /api/v1/users/levels HTTP/2.0", upstream: "http://127.0.0.1:5000/api/v1/users/levels", host: "app.dunice-testing.com"

Всё, что мы смогли бы узнать в случае возникновения ошибки, — это лишь факт наличия таковой, не более. Это полезная информация, но мы пойдём дальше. В данной ситуации помог Nginx и его настройки по умолчанию. Но что же нужно сделать, чтобы решить проблему раз и навсегда? Необходимо настроить логирование на сервере, так как он является общей точкой для всех клиентов и имеет доступ к базе данных.

Первым делом каждый запрос должен получать свой уникальный идентификатор, что поможет отличить его от других запросов. Для этого используем UUID/v4. На случай возникновения ошибки, каждый обработчик запроса на сервере должен иметь обёртку, которая отловит эти самые ошибки.  В этой ситуации может помочь конструкция try/catch, реализация которой есть в большинстве языков.

В конце каждого запроса должен сохраняться лог об успешной обработке запроса или, если произошла ошибка, сервер должен обработать её и записать следующие данные: ID запроса, все заголовки, тело запроса, параметры запроса, отметку времени и информацию об ошибке (имя, сообщение, трассировка стека).

Собранная информация даст не только понимание, где произошла ошибка, но и возможную причину её возникновения. Обычно для решения ошибки информации из лога достаточно, но в некоторых случаях может быть полезен контекст запроса. Для этого необходимо при старте запроса не только генерировать ID запроса, но и сгенерировать контекст, в который мы будем записывать всю информацию по работе сервера, начиная от результата вызова функции и заканчивая результатом запроса к базе данных. Такая реализация даст не только входные данные, но и промежуточные результаты работы сервера, что позволит понять причину появления ошибки.

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

Трассировка — процесс пошагового выполнения программы. В режиме трассировки программист видит последовательность выполнения команд и значения переменных на каждом шаге выполнения программы.

В нашем случае требуется передавать метаинформацию о запросе при взаимодействии серверов и записывать логи в единое хранилище (такими могут быть ClickHouse, Apache Cassandra или MongoDB). Такой подход позволит привязать различные контексты серверов к уникальному идентификатору запроса, а отметки времени — понять последовательность и последнюю выполненную операцию. После этого команда разработки сможет приступить к устранению.

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

С сервером разобрались, что же делать, если у нас сбои даёт клиент и запросы просто не приходят? В такой ситуации нам помогут логи на стороне клиента. Все обработчики должны отправлять информацию на сервер с пометкой, что ошибка с клиента, а также общие сведения: версия и тип браузера, тип устройства и версия операционной системы. Данная информация позволит понять, какой участок кода дал сбой и в каком окружении пользователь взаимодействовал с информацией.

Также есть возможность отправлять уведомления на почту разработчикам, если произошли ошибки, что позволит оперативно узнавать о сбоях в системе. Такие подходы активно используются в системах мониторинга и аналитики логов.

Способы, которые мы рассмотрели в статье, помогут следить за качеством продукта и минимизируют затраты на исправление недочётов в системе.

Лучшие инструменты для управления и анализа логов

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

Ниже мы подробно рассмотрим каждый из инструментов, которые попали в эту статью, но в случае, если у вас есть время только для быстрого ознакомления, вот наши Список лучших инструментов управления журналами:

  1. Менеджер событий SolarWinds Security (бесплатная пробная версия) Этот инструмент автоматически генерирует отчеты HIPAA, PCI DSS, SOX, ISO, NCUA, FISMA, FERPA, GLBA, NERC CIP, GPG13, DISA STIG..
  2. ManageEngine EventLog Analyzer (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ) Инструмент SIEM, который охотится за угрозами злоумышленников. Устанавливается на Windows, Windows Server или Linux.
  3. SolarWinds Papertrail (БЕСПЛАТНЫЙ ПЛАН) Облачная служба имеет функции фильтрации содержимого файлов и может извлекать записи по дате, чтобы помочь вам с вашими задачами управления событиями.
  4. Loggly (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ) Облачный анализатор логов, который передает данные на удаленные серверы для анализа. Доступен в бесплатной и платной версиях.
  5. Сетевой монитор Paessler PRTG (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ) Эта система мониторинга охватывает сети, серверы и приложения; он включает в себя датчик журнала событий Windows и приемник системного журнала.
  6. Splunk Комплексная система управления журналами для MacOS, Linux и Windows.
  7. Fluentd Облачный концентратор для информации файла журнала, собранной агентом в вашей системе.
  8. Logstash Является частью бесплатного Elastic Stack, это инструмент сбора данных журнала.
  9. Kibana Это приложение для просмотра данных Elastic Stack; Команды, доступные с Kibana, включают базовое управление файлами, которое может разбить любой файл журнала по дате.
  10. Graylog Бесплатная система с открытым исходным кодом на основе файлов журналов для Ubuntu, Debian, CentOS и SUSE Linux.
  11. XpoLog Эта утилита может анализировать данные из журналов сервера Apache, журналов событий AWS, Windows и Linux и Microsoft IIS.
  12. Экспедитор системного журнала ManageEngine Бесплатный менеджер сообщений журнала для Windows, который может отфильтровывать ненужные, обычные или неважные сообщения журнала.
  13. Managelogs Бесплатная утилита с открытым исходным кодом для управления журналами веб-сервера Apache..

Как только вы найдете инструмент управления журналами, который вам нравится, вы начнете зависеть от него для ряда задач администратора, включая управление информацией о безопасности и событиями (SIEM) и мониторинг вашей сети и ее оборудования в режиме реального времени. Если ваш любимый инструмент выходит из производства, вам нужно будет быстро найти замену, чтобы вы могли продолжать управлять журналами событий и сортировать все данные журналов..

Contents

  • 1 Лучшие инструменты управления журналами для Windows, Linux и Mac
    • 1.1 1. Менеджер событий SolarWinds Security (бесплатная пробная версия)
    • 1.2 2. ManageEngine EventLog Analyzer (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ)
    • 1.3 3. Papertrail (БЕСПЛАТНЫЙ ПЛАН)
    • 1.4 4. Loggly (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ)
    • 1.5 5. Paessler PRTG Сетевой монитор (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ)
      • 1.5.1 PRTG Windows Event Log Sensor
      • 1.5.2 PRTG Syslog Receiver Sensor
    • 1.6 6. Splunk
    • 1.7 7. Свободно
    • 1.8 8. Logstash
    • 1.9 9. Кибана
    • 1.10 10. Graylog
    • 1.11 11. XpoLog
    • 1.12 12. ManageEngine Syslog Forwarder
    • 1.13 13. Managelogs
  • 2 Архивация журнала
  • 3 Заменить Cronolog

Лучшие инструменты управления журналами для Windows, Linux и Mac

К сожалению, Analog был прекращен еще в 2010 году, но вы можете найти наш следующий список инструментов управления и анализа журналов полезным, чтобы помочь вам найти альтернативу. Нашими критериями при выборе следующих инструментов являются в основном их надежность в различных отраслевых применениях, простота использования и установки, обширная документация и поддержка, а также общая производительность и функции..

1. Менеджер событий SolarWinds Security (бесплатная пробная версия)

Solarwinds Log и Event Manager

В отличие от Cronolog, Менеджер событий SolarWinds Security не бесплатно Тем не менее, вы можете получить доступ к нему на 30-дневную бесплатную пробную версию. Это очень комплексная система управления журналами, и она будет особенно полезна для крупных организаций. Это позволит вам в режиме реального времени контролировать и поможет вам быстро найти каждый журнал событий.

Это программное обеспечение работает на Windows Server операционная система, но она не ограничивается управлением зарегистрированными событиями, которые возникают только в Windows. Менеджер — это кроссплатформенная утилита это будет иметь дело со всеми вашими задачами регистрации системы, независимо от того, из какой операционной системы они берутся.

Удивительная особенность этого менеджера журнала заключается в том, что он проверит информацию в ваших файлах журнала, отдельно отслеживая данные в реальном времени. Это отличная функция безопасности в наши дни передовых постоянных угроз, когда хакеры регулярно меняют файлы журналов, чтобы скрыть свои следы. Это пример того, как SolarWinds Security Event Manager выходит за рамки исторической необходимости проверять, что произошло, когда что-то пошло не так.

Сегодня управление файлами журналов стало функцией безопасности системы и процедур целостности данных.. Благодаря новым требованиям ЕС к ВВПР защита данных стала жизненно важным приоритетом системного администрирования.. Необходимость быстро исправлять утечки данных делает файлы журналов основным источником информации. Дополнительные функции этого инструмента включают в себя управление USB-накопителем и функции анализа событий.

Этот менеджер журналов также является хорошим выбором для сайтов, которые требуют соответствия стандартам. Диспетчер журналов и событий автоматически генерирует HIPAA, PCI DSS, SOX, ISO, NCUA, FISMA, FERPA, GLBA, NERC CIP, GPG13, DISA STIG отчеты для демонстрации соответствия или выделения пробелов для корректирующих действий.

Чувствительные к безопасности сайты нуждаются в гораздо большем количестве программного обеспечения для управления журналами, чем Cronolog. Итак, если вы ищете утилиту для замены и вам также нужны функции SIEM, подумайте о том, что нужно вашей компании сейчас из системы управления журналами, не то, что вы могли сойти с рук, когда Cronolog был впервые написан.

Управление событиями журнала SolarWindsСкачать 30-дневную бесплатную пробную версию на SolarWinds.com

2. ManageEngine EventLog Analyzer (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ)

ManageEngine Event Log Analyzer

ManageEngine EventLog Analyzer это больше, чем файл-сервер журнала. Это Система обнаружения вторжений который ищет угрозы в сети.

Почти каждая единица оборудования и программного обеспечения в вашем бизнесе генерирует сообщения журнала периодически и в ответ на исключительные события. EventLog Analyzer ловит эти сообщения при их перемещении по сети и сохраняет их в файл.

Основным источником сообщений является Журнал событий Windows система и Syslog сообщения, поступающие из систем Linux. EventLog Analyzer также получает сообщения журнала от веб-сервера Apache, систем баз данных, брандмауэров, сетевого оборудования и программного обеспечения для обеспечения безопасности..

Как только сообщения журнала сохраняются в файлах, их необходимо периодически архивировать. Файлы должны быть организованы в логической манере, что облегчает доступ к событиям определенных дат. EventLog Analyzer обрабатывает всю эту работу по управлению файлами журналов. В качестве источника раскрытия информации о несанкционированной деятельности хакеры часто используют файлы журналов для удаления следов своего вторжения. EventLog Manager отслеживает изменения в журналах и блокирует несанкционированный доступ.

Данные журнала являются богатым источником информации о состоянии оборудования вашей системы. модуль анализа EventLog Analyzer использует информацию журнала для аудита доступа пользователей к критическим ресурсам. Это особенно важно при охоте на злоумышленников. Вторжение может быть не только несанкционированным доступом посторонних лиц, но и несоответствующим доступом к данным со стороны персонала..

EventLog Analyzer также проверяет действия приложений, проверяя работу веб-серверов, DHCP-серверов, баз данных и других важных служб в вашей системе. Информация, полученная в результате этих действий по мониторингу, важна как для показателей производительности, так и для безопасности..

ManageEngine EventLog Analyzer устанавливается на Windows, Windows Server и RHEL, Mandrake, SUSE, Fedora и CentOS Linux. Это платный продукт, но есть и бесплатная версия, которая собирает журналы из пяти источников. Вы можете получить 30-дневную бесплатную пробную версию Premium Edition. Сетевая версия, называемая Distributed Edition, также доступна для 30-дневной бесплатной пробной версии..

ManageEngine EventLog AnalyzerDownload 30-дневная бесплатная пробная версия

3. Papertrail (БЕСПЛАТНЫЙ ПЛАН)

Скриншот Papertrail

Papertrail — это система управления бревнами производится SolarWinds, ведущим производителем сетевого программного обеспечения. Основной целью Papertrail является централизация всех данных файла журнала в одном месте, поэтому это журнал агрегатор. Это заметно отличает его от Coronolog, лог-файла синтаксический анализатор. Что сказал, Возможности фильтрации содержимого файлов Papertrail позволяют извлекать записи по дате, чтобы помочь вам в решении задач управления событиями..

Вы можете использовать Papertrail для проверки ряда файлов журнала, включая события Windows, программные сообщения Ruby on Rails, уведомления маршрутизатора и брандмауэра, а также файлы журнала сервера Apache.. Сервис основан на облаке, поэтому вам не нужно беспокоиться о том, будет ли он работать в вашей операционной системе.. Вы получаете доступ к панели инструментов через веб-браузер.

Цена на услугу варьируется в зависимости от объема поиска, который вы через него ставите. Есть бесплатный план это дает вам пропускную способность данных 100 МБ в месяц. Это не очень много, но если вы ограничите покрытие услуг только журналами Apache, вам, возможно, удастся сойти с рук. Самый дешевый платный тариф дает вам надбавку за данные в 1 ГБ в месяц по цене 7 долларов. Платные планы работают по подписке, и вы платите ежемесячную плату.

Каждый план позволяет вам просматривать период данных и архивировать данные за различный промежуток времени. Например, бесплатный сервис позволяет вам работать с данными за последние 48 часов, и вы можете архивировать данные в течение семи дней. Этого было бы достаточно, чтобы подражать Cronolog, потому что для этого, вам нужно только смотреть на данные за один день за один раз.

SolarWinds Papertrail Log ManagementЗарегистрируйся для бесплатного плана

4. Loggly (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ)

Логги события

Loggly это консолидатор журналов, который базируется в облаке. Этот онлайн-сервис также предлагает средства анализа журналов. Большим преимуществом этого облачного подхода является то, что вам не нужно поддерживать какое-либо программное обеспечение для использования утилиты. Ваша локальная система должна быть скоординирована со службой Loggly, чтобы она периодически загружала ваши стандартные файлы журнала на онлайн-сервер.

Как консолидатор, Loggly переформатирует загруженные записи файла журнала в стандартный формат. Это позволяет анализатору обрабатывать записи из нескольких разных источников и позволяет отслеживать события в вашей системе независимо от операционной системы или методологии, которая генерировала эти записи событий. Источники сообщений файла журнала не ограничиваются вашими локальными серверами. Он также может обрабатывать записи, созданные онлайн-серверами, такими как AWS, и может включать в себя сообщения, созданные приложениями, такими как Docker и Logstash..

Возможная точка уязвимости в этой операционной модели заключается в передаче данных. Тем не менее, вы, несомненно, уже используете защищенную систему передачи файлов, такую ​​как FTPS. Встроенная в этот стандарт защита TLS защитит ваши данные во время загрузки. TLS также охватывает передачу данных с сервера Loggly на ваш браузер через HTTPS протокол.

Услуга Loggly предлагается в трех тарифных планах. Пакет начального уровня можно использовать бесплатно. Это называется Loggly Lite. Каждый план имеет лимит обработки данных, и вы можете обнаружить, что ограничения на бесплатную услугу не дают вам достаточно места для ваших данных журнала. Вам разрешено загружать 200 МБ данных журнала в день с помощью Loggly Lite, и система будет хранить каждую запись в течение семи дней..

стандарт Пакет Loggly дает вам возможность загрузки 1 ГБ в день и сохраняет каждую запись в течение 30 дней. Вы также получаете доступ к нескольким учетным записям с платными пакетами. В стандартном пакете вы можете иметь три учетных записи. Пакет с более высокой платой не ограничивает количество пользователей, которых вы можете настроить в своей учетной записи. Тот план, который называется Loggly Enterprise, пакет на заказ с ценами в зависимости от объема загрузки и требуемого периода хранения.

Loggly — это сервис подписки, который вы можете оплачивать ежегодно или ежемесячно. Ты можешь получить 14-дневная бесплатная пробная версия Стандартного плана. Если вы решите не использовать этот план в конце пробного периода, ваша учетная запись будет автоматически переключена на бесплатный план Loggly Lite.

logglyСкачать 13-дневную бесплатную пробную версию

5. Paessler PRTG Сетевой монитор (БЕСПЛАТНАЯ ПРОБНАЯ ВЕРСИЯ)

PRTG Log Monitoring

Paessler PRTG Сетевой монитор это комплексный инструмент мониторинга сетей, серверов и приложений. Управление журналами является важной частью системного администрирования, поэтому Paessler позаботился о том, чтобы включить раздел мониторинга журналов в PRTG.

Каждый интерфейс мониторинга в PRTG называется датчиком. Есть два датчика, которые управляют журналами. Эти Журнал событий Windows датчик и Syslog Receiver датчик.

PRTG Windows Event Log Sensor

13 лучших инструментов управления и анализа логов

Журнал событий Windows API-датчик ловит все сообщения журнала, которые генерирует система Windows. Это включает в себя оповещения приложений и уведомления операционной системы. Датчик контролирует скорость сообщений журнала, а не содержание каждого сообщения. Тем не менее, он классифицирует эти тревоги по источнику или типу события. Датчик генерирует сигнал тревоги на приборной панели, если скорость сообщений журнала событий возрастает. Эти уведомления могут быть отправлены вам в виде электронного письма или SMS-сообщения. Вы можете настроить оповещения так, чтобы они отправлялись разным членам команды в зависимости от их серьезности или источника..

PRTG Syslog Receiver Sensor

Датчик приемника системного журнала PRTG

Датчик приемника системного журнала получает, контролирует и сохраняет сообщения системного журнала. Это дает вам инструмент управления файлами системного журнала, но датчик — это не просто пассивная функция создания файлов. Элемент мониторинга обязанностей получателя генерирует сигналы тревоги, если возникают тревожные условия, например, увеличение скорости создания файла. Вы можете установить условия, которые вызывают оповещения, и вы можете решить, кому и как доставляются уведомления..

Paessler PRTG может контролировать до 100 датчиков. Если вы хотите использовать инструмент для мониторинга всей вашей сети, вам понадобится намного больше датчиков, и за этот уровень обслуживания взимается плата. Вы можете получить 30-дневная бесплатная пробная версия с неограниченным количеством датчиков.

Скачать бесплатную пробную версию (42.6MB) Скачать 30-дневную бесплатную пробную версию

6. Splunk

Скриншот Splunk

Splunk — это комплексная система управления журналами для macOS, Linux и Windows. Система является широко известной утилитой в сообществе системного администратора. Splunk, Inc выпускает три версии своего программного обеспечения для мониторинга сетевых данных. Самая популярная версия называется Splunk Enterprise, которая стоит 173 доллара в месяц. Это система управления сетью, а не просто органайзер файла журнала. к счастью, Splunk также доступен бесплатно, сделать его в наш список альтернатив Cronolog.

Бесплатный Splunk ограничен анализом входных файлов. Вы можете подавать любые ваши стандартные журналы или направлять текущие данные через файл в анализатор. Бесплатная утилита может иметь только одну учетную запись пользователя, и ее пропускная способность ограничена до 500 МБ в день. Система явно не работает с сетевыми оповещениями, но Вы могли бы форсировать эту функцию, получая оповещения, записанные в файл, а затем перешли в Splunk.

Утилита сортировки и фильтрации данных встроена в Splunk, и вы можете записывать в файлы из анализатора. Эти функции могут эмулировать Cronolog, разделяя записи журнала по дате и записывая каждую группу в новые файлы..

7. Свободно

Скриншот Fluentd

Как и Cronolog, Fluentd работает в системах Linux — Debian, CentOS и Ubuntu. Он также может быть установлен на Mac OS, Amazon Linux, RHEL и Windows. Эта облачная утилита выступает в роли концентратора для информации из файла журнала, собранной агентом в вашей системе. Инструмент может собирать потоки данных в реальном времени для создания файлов журналов, а также отслеживать и управлять существующими файлами.. Одним из источников данных, которым Fluentd предназначен для управления, является система журналирования Apache..

Результаты анализа записей журнала могут быть использованы для запуска предупреждений, но они должны обрабатываться Nagios или системой мониторинга на основе Nagios. Fluentd — это проект с открытым исходным кодом, поэтому вы можете скачать исходный код. Этот инструмент можно использовать бесплатно.

Сайт Fluentd является источником программы, а также местом нахождения страницы сообщества, где вы можете получить помощь и совет по запуску инструмента от других пользователей. Базовый пакет может быть расширен с помощью плагинов, написанных другими участниками сообщества. Эти плагины, как правило, бесплатно.

Вы можете использовать много других бесплатных интерфейсов в качестве внешнего интерфейса для Fluentd, например, Kibana. Утилита Fluentd также может быть интегрирована с инструментами, которые включают Elasticsearch, MongoDB и InfluxDB для анализа.

8. Logstash

Скриншот Logstash

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

Logstash — это инструмент сбора данных Elastic Stack. Функции Logstash могут быть адаптированы к подражать Cronolog. Средство создает исходные файлы для анализа другими инструментами, такими как Elasticsearch. Сила этого инструмента в том, что он может сопоставлять данные из нескольких разных источников. Однако, если вы хотите реорганизовать файлы журналов Apache, нет никаких причин, по которым вы не можете ограничить поиск данных только одним исходным файлом журнала..

Возможности Logstash включают в себя разбор файлов, поэтому вы можете использовать эту функцию для разделения файлов журнала по дате.. Выходные данные Logstash могут быть отформатированы, чтобы соответствовать длинному списку утилит для анализа или отображения. Его также можно записать в простой текстовый файл на диске, что и делал Cronolog..

9. Кибана

Скриншот кибана

Эластик производит Kibana, который является отличный бесплатный интерфейс для любого инструмента сбора данных. Другие полезные инструменты в этом списке могут передавать данные в Kibana, поэтому вам не нужно полагаться только на другие программы Elastic Stack для получения данных для этого приложения..

Все возможности Kibana выходят далеко за рамки функции разбора файлов в Cronolog.. Однако широкий спектр команд, доступных в Kibana, включает базовое управление файлами, которое может разбить любой файл журнала по дате. Kibana имеет консоль на командном языке, которая позволяет создавать сценарии и программы для обработки файлов. Тем не менее, если у вас нет навыков программирования, предустановленные средства управления данными интерфейса предоставляют вам множество мощных утилит сортировки и фильтрации данных. это поможет вам управлять файлами журналов.

Интерфейс включает инструменты анализа на основе времени, включая фильтры, так что вы можете легко изолировать записи в файле журнала, которые относятся к определенной дате. Необработанные данные, графики и другие визуализации могут быть записаны в файлы или использованы для создания отчетов. Стандартные отчеты можно запускать периодически, поэтому создание фильтра по дате и настройка его ежедневной работы и вывода в простой текстовый файл даст вам те же самые результаты, которые вы использовали в Cronolog..

Преимущество использования Kibana состоит в том, что он может оказать гораздо большую помощь, чем Cronolog.. Вы можете сравнивать данные из разных источников и визуализировать информацию из всех файлов системного журнала. анализировать производительность и прогнозировать требования к мощности. Чтобы получить полное средство управления данными, вам, вероятно, следует использовать Logstash для сопоставления исходных данных, Elasticsearch для сортировки данных и Kibana для отображения результатов. В Kibana имеется множество возможностей для сбора и обработки данных, поэтому его можно использовать как самостоятельный инструмент для анализа данных..

10. Graylog

Скриншот серого журнала

Graylog является бесплатная система с открытым исходным кодом это может дать вам гораздо больше функциональности, чем просто утилита архивирования журналов. Этот анализатор журналов имеет графический интерфейс пользователя и может работать в Ubuntu, Debian, CentOS и SUSE Linux. Вы также можете запустить его на виртуальной машине в Microsoft Windows и установить систему Graylog в Amazon AWS..

Это средство управления журналами может работать с любыми журналами. Вы можете вводить в него данные из других источников: направлять системные отчеты в файл, создавая собственные журналы. Интерфейс не получает копии журналов, а размещается в оперативных журналах, обновляя информацию, которая поступает в механизм анализа по мере записи новых записей в журнал..

Сценарии действий могут пересылать данные журнала на экран, в другие журналы или в другие приложения.. На панели инструментов отображаются данные в виде гистограмм, круговых диаграмм, линейных графиков и списков с цветовой кодировкой.. Интерфейс включает функцию поиска и запроса, которая позволяет фильтровать записи в журнале, чтобы получать информацию о конкретных типах событий или конкретных источниках..

Graylog обрабатывает агрегированные данные, чтобы упростить отображение на домашней странице панели мониторинга, а также дать возможность указывать условия оповещения для разных источников данных и с течением времени. Эти общие представления данных не единственный вариант, потому что Вы можете развернуть и посмотреть подробные записи это создало резюме. Это делает Graylog инструментом для анализа данных.

Условия оповещения могут быть настроены, и вы можете написать действия, которые будут выполняться в случае возникновения оповещений. Эти действия включают выполнение сценариев или уведомление определенных членов команды по электронной почте или с помощью сообщения Slack..

Это удивительный и очень всеобъемлющий инструмент, который может автоматизировать обработку вашего файла журнала и автоматически выполнять устранение неисправностей..

11. XpoLog

Скриншот XpoLogДва важных элемента Cronolog заключаются в том, что он может разбивать файлы журналов по дате и запускаться автоматически. XpoLog включает в себя обе эти функции. Однако это большое улучшение в Cronolog, поскольку XpoLog включает в себя множество других функций. Это огромное улучшение в этом прекращенном инструменте анализа логов.

XpoLog может анализировать данные из разных источников, включая журналы сервера Apache, журналы событий AWS, Windows и Linux и Microsoft IIS. Утилита может быть установлена ​​на Mac OS X 10.11, macOS 10.12 и 10.13, Windows Server 2008 R2, Windows Server 2012, Windows Server 2016, Windows 8, 8.1 и 10. Это программное обеспечение также можно установить на Linux Kernel 2.6 и более поздних версиях.. Вы можете выбрать облачную версию, если не хотите устанавливать программное обеспечение. Вы можете получить к нему доступ через Chrome, Firefox, Internet Explorer или Microsoft Edge.

Помимо простого управления файлами журналов, механизм анализа XpoLog обнаруживает несанкционированный доступ к файлам и помогает оптимизировать использование приложений и оборудования.. XpoLog собирает данные из выбранных источников и будет контролировать эти файлы что вы включаете в его сферу. После централизации данных XpoLog объединяет все источники данных и создает собственную базу данных записей. Эти записи можно искать и фильтровать для анализа, а результаты можно записывать в файлы. Эта функциональность предлагает такой же анализ файла как Cronolog. Результаты могут быть записаны в файлы или сохранены в виде архивов для просмотра через панель управления XpoLog.

XpoLog это доступно бесплатно. Если вы просто хотите разделить файлы журнала Apache, то бесплатная версия будет достаточно хорошей. Чтобы работать с большими объемами данных и использовать систему для анализа, вам, возможно, придется перейти на один из платных планов.

Бесплатная версия позволяет обрабатывать до 1 ГБ данных в день, и система будет хранить эти данные в течение пяти дней.. Вы всегда можете записать записи в текстовые файлы, чтобы обойти этот пятидневный лимит. Самый дешевый платный план предлагает тот же лимит пропускной способности и срок хранения данных, что и бесплатный сервис, поэтому трудно понять, почему кто-то заплатил бы 9 долларов в месяц за этот пакет. Более дорогие планы дают вам неограниченный срок хранения данных, с самым дешевым неограниченным вариантом, включая пропускную способность 1 ГБ в день за 39 долларов в месяц. Вы получаете постепенно увеличивающиеся суточные пропускные способности для данных в каждой ценовой категории. Лучший план обеспечивает пропускную способность 8 ГБ в день и стоит 534 доллара в месяц. Вы должны платить за услугу ежегодно заранее, даже если цена указана за месяц. Вы также можете купить бессрочную лицензию.

12. ManageEngine Syslog Forwarder

Экспедитор системного журнала ManageEngine

Пересылка системного журнала работает в операционной системе Windows и совершенно бесплатно использовать. Он перехватывает записи системного журнала и направляет их на разные серверы системного журнала в соответствии с базой правил.. Функции сервера пересылки позволяют отфильтровывать несущественные, обычные или неважные сообщения журнала.. Все заблокированные сообщения отправляются в исходный файл журнала, но не отправляются в конечный файл журнала.

База правил Syslog Forwarder позволяет вам ежедневно записывать новые файлы журналов, тем самым эмулируя функциональность Cronolog. Большая разница между Syslog Forwarder и Cronolog заключается в том, что этот существующий менеджер журналов работает в Windows с графическим интерфейсом, тогда как Cronolog был функцией командной строки для систем Unix и Linux..

13. Managelogs

Сайт Managelogs

Вероятно, ближайшая альтернатива Cronolog, Managelogs написана на «С». Утилита не только бесплатная, но исходный код доступен для чтения. Программа специально разработана для управления журналами веб-сервера Apache..

Managelogs имеет различные режимы работы, активируемые переменными, указанными при запуске программы. Вы можете установить утилиту для архивирования файлов журнала по дате, или вы можете указать максимальный размер файла, который будет копировать файл журнала под новым именем, а затем очищать текущий файл журнала, чтобы он мог начинать заново с нуля и создавать новые записи..

Если вы укажете, что журналы должны быть разбиты по дате, Managelogs обеспечит консолидацию файлов между сеансами, поэтому остановка и перезапуск диспетчера сервера не сотрут существующие записи в неполный день..

Архивация журнала

Вы можете написать свою собственную копию Cronolog в виде сценария для Unix или Unix-подобных операционных систем, таких как Linux и Mac OS. Хотя есть много умных вещей, которые вы можете сделать с помощью регулярных выражений и сопоставления с образцом, чтобы выбрать записи на определенную дату, Самый простой способ получить архив журналов в день — написать сценарий копирования, а затем запланировать его запуск в полночь.. Если последние инструкции в сценарии удаляют существующий файл, новые записи будут накапливаться в отдельном файле в течение дня, чтобы снова архивироваться в полночь.

ДАТА = `дата +% Y% m% d`
MV = / USR / бен / мв
LogDir = / Opt / Apache / журналы
LOGARCH = / WWW / журналы
ФАЙЛЫ = «access_log error_log»
CP = / USR / бен / ф
для F в $ ФАЙЛЫ
делать
$ CP $ LOGDIR / $ f $ LOGARCH / $ f. $ DATE.log
$ MV $ LOGDIR / $ f $ LOGDIR / $ f. $ DATE.saved
сделано
cat / dev / null > / Опт / Apache / журналы / access_log

Заменить Cronolog

Не подчеркивайте, что cronolog.org больше не работает или что ни один из сайтов загрузки, которые раньше поставляли Cronolog, больше не перечисляет его. Cronolog был не очень хорош, и вы могли легко написать свою собственную версию всего за пару минут.

Утилиты управления журналами очень полезны, и, несмотря на ограниченные возможности Cronolog, многие системные администраторы стали полагаться на его услуги. Как вы можете видеть из этого обзора, многие другие инструменты управления журналами не только дает вам возможность анализировать файлы журналов по дате, но также дает вам некоторые удивительные возможности визуализации и анализа данных.

Каждая из рекомендаций в нашем списке замен Cronolog можно использовать или попробовать бесплатно. Все эти средства обеспечивают вам лучшее обслуживание, чем самостоятельная репликация Cronolog. Попробуйте любой из этих инструментов и посмотрите, какие из них предоставляют вам дополнительные функции, необходимые для улучшения управления журналами и средствами.

Этот материал мы ориентировали на тех, кто в первый раз сталкивается с логированием серверных служб и web-серверов. Познакомим с уровнями логирования, расскажем об основных типах логов и перечислим инструменты для работы с ними.

Зачем оно вообще нужно, это логирование?

На анализе логов базируется работа большинства ИТ-специалистов. Администраторы  ищут в файлах логирования причины сбоя сервиса. Разработчики опираются на логи, чтобы локализовать и устранить ошибки приложения или веб-сайта. Служба безопасности по логам, как по физическим уликам, определяет вид взлома, оценивает нанесенный ущерб и даже может идентифицировать взломщика. Вот почему логирование мы рекомендуем отладить в первую очередь: в любой непонятной ситуации ответ на вопрос вы будете искать в логах!

Файлы логирования

Файлы логирования

Уровни логирования

В идеале логи пишутся во время работы всех IT-систем, однако если писать все подряд и «складывать в кучу», полезная информация превратится в хаос. Чтобы упростить поиск и чтение логов, их делят на уровни. Основных четыре:

  1. Debug — запись масштабных переходов состояний, например, обращение к базе данных, старт/пауза сервиса, успешная обработка записи и пр.

  2. Warning — нештатная ситуация, потенциальная проблема, может быть странный формат запроса или некорректный параметр вызова.

  3. Error — типичная ошибка.

  4. Fatal — тотальный сбой работоспособности, когда нет доступа к базе данных или сети, сервису не хватает места на жестком диске.

Дополнительно файл логирования может расширяться записями еще двух уровней:

  1. Trace  — пошаговые записи процесса. Полезен, когда сложно локализовать ошибку.

  2. Info — общая информация о работе службы или сервиса.

Работа с уровнями логирования регламентируется методическими документами и внутренними правилами организации. В них может определяться соответствие источника сообщения уровню логирования, значимость, порядок обработки каждого уровня и другие параметры.

Типы логов

Для удобства обработки логов их делят на типы:

  • системные, связанные с системными событиями,

  • серверные, отвечающие за процесс обращения к серверу,

  • почтовые, работающие с отправлениями,

  • логи баз данных, которые отражают процессы обращения к базам данных,

  • авторизационные и аутентификационные, которые отвечают за процесс входа, выхода из системы, восстановление доступа и пр.

У каждого типа логов свой журнал записи. Для проверки логов авторизации нужно идти в журнал доступов, чтобы проверить загрузку системы — в журнал dmesg, за данными о запросах пользователей — в access_log. Когда одни логи пишутся отдельно от других, проще диагностировать ситуацию и найти источник проблемы.

Логи в access_log

Логи в access_log

Инструменты для работы с логами

Сбор, хранение и анализ логов вручную хороши, когда у вас один сервер. Когда серверный парк разрастается, а приложений и сервисов становится больше десяти, работу с логами целесообразно автоматизировать и использовать специальные системы логирования, например, Graylog, ELK, Loggy или Splunk. Некоторые из них позволяют организовать полномасштабный мониторинг, настроить алерт раннего обнаружения конкретной проблемы или установить пороговые значения показателей, коррелирующих с угрозами информационной безопасности. 

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

Хранение логов в облаке

Хранение логов в облаке

Логирование кажется второстепенным процессом, который занимает время, но не дает видимых результатов. Однако это только кажется и только до тех пор, пока не появится реальная проблема, с которой можно разобраться только по логам. И только если они записаны, распределены по уровням, собираются и доступны для анализа.

Привет! Это вторая часть статьи, в которой мы будем разбирать практическое применение платформы Graylog.

В первой части мы разобрали как платформу установить и произвести ее базовую настройку, а сегодня рассмотрим пару примеров применения ее возможностей на практике.

В частности, разберем настройку сбора логов с веб-сервера и возможность визуализировать полученные данные.

Настраиваем сбор логов с сервера

Работаем в web-интерфейсе:

https://graylog.itsft.ru

Начнем со сбора syslog

Создаём UDP Input для системных логов:

System/Overview → Inputs

Выбираем тип Input-а:

Select input → Syslog UDP

(Будем использовать UDP, но если кому-то удобнее использовать tcp — почему бы и да)

Нажимаем кнопку Launch new input.

Title:        SyslogUDP 
Bind address: 0.0.0.0
Port:         10514

Внимание!

Порты меньше чем 1024 использовать можно только через костыли, поэтому будем использовать 10514: 
http://docs.graylog.org/en/2.4/pages/faq.html#how-can-i-start-an-input-on-a-port-below-1024

Остальные значения можно оставить по умолчанию:

Сохраняем конфигурацию, получаем работающий Input:

Для проверки работы Input выполним со своей рабочей станции или с любого другого хоста с linux/mac:

$ echo "Hello world" | nc -w 1 -u graylog.itsft.ru 10514

Переходим в веб-интерфейсе Show received messages, видим полученное сообщение.

Настройки для сервера с которого собираем логи:

Уменьшаем количество логов

В CentOS 7 в /var/log/messages, как правило видим много спама, примерно такого:

May  1 11:01:01 localhost systemd: Created slice User Slice of root.
May  1 11:01:01 localhost systemd: Started Session 541 of user root.
May  1 11:01:01 localhost systemd: Removed slice User Slice of root.

Данные сообщения не несут для нас полезной информации, можем их отключить:

# vim /etc/rsyslog.d/ignore-systemd-session-slice.conf

if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" or $msg contains "Removed session" or $msg contains "Removed slice User Slice of" or $msg contains "Stopping User Slice of") then
    stop

Передаём логи в Graylog:

# vim /etc/rsyslog.d/90-graylog2.conf

Если передаём данные по UDP, как сейчас настроено в инпуте Graylog-а:

*.* @11.22.33.44:10514;RSYSLOG_SyslogProtocol23Format

Но если нужно по TCP, добавляем ещё одну “@”:

*.* @@11.22.33.44:10514;RSYSLOG_SyslogProtocol23Format

После редактирования делаем рестарт сервиса:

# systemctl restart rsyslog.service

Проверяем наличие данных от хоста в Graylog-е. 

На этом настройку сбора syslog считаем завершённой. На случай чрезвычайных ситуаций, или просто для информации, полезны будут оповещения о событиях (ошибках дисков, нехватке памяти, логинах, etc).

Настраиваем оповещения

Для примера — отловим приход oom-killer-а c уведомлением в Slack:

Alerts  →  Alerts & Events  →  Get Started!

Шаг 1: “Event Details”:

Title: oom-killer invoked

Description (Optional):  oom-killer was invoked on server or virtual machine

Priority: Normal

Шаг 2: “Filter & Aggregation”:

Condition Type:  Filter & Aggregation

Search Query: "oom-killer"

(Тут правила построения запроса)

Streams (Optional):  All messages

Search within the last:  10 minutes

Execute search every:  10 minutes

Устанавливаем чекбокс Enable

Create Events for Definition if…   Filter has results

Если в логах уже есть такое событие, можно будет наблюдать его в Filter preview.

Шаг 3: «Fields» — не используем.

Шаг 4: «Notifications»  →  Add Notification:

Choose Notification:  Create New Notification...

Title: Slack notification

Notification Type: Slack Notification

Configuration Color:  можно выбрать цвет

Webhook URL:  Выглядит как https://hooks.slack.com/services/aaa/bbb123 — можно создать его в настройках Slack.

Channel:  #monit  (в какой канал будут приходить данные уведомления).

Custom Message (optional): можно выбрать какие поля оставляем в сообщении.

Остальные настройки можно оставить по умолчанию.

Нажимаем кнопку Execute test notification,  контролируем доставку сообщения в указанный канал Slack-а, и если всё работает — нажимаем кнопку Done.

В Notification Settings ничего изменять не будем:

Шаг 5: «Summary»:  Ещё раз удостоверимся что настройки верны. 

Нажимаем Done.

Тестируем оповещение. На хосте, с которого собираем syslog пишем маленькую программку на С:

# vi memtest1.c

#include <stdio.h>
#include <stdlib.h>
int main (void) {  
  int n = 0;  
  while (1) {  
    if (malloc(1<<20) == NULL) {  
      printf("malloc failure after %d MiBn", n);  
      return 0;  
    }  
    printf ("got %d MiBn", ++n);  
  }  
}

Компилируем и запускаем. Скрипт занимает всю доступную память, после чего приходит oom-killer и его убивает:

# gcc memtest1.c  
# ./a.out
got 1 MiB
...
got 94372 MiB
Killed

В /var/log/messages можем наблюдать данный процесс:

May  4 17:24:50 docker kernel: Out of memory: Kill process 23219 (a.out) score 831 or sacrifice child
May  4 17:24:50 docker kernel: Killed process 23219 (a.out), UID 0, total-vm:659692616kB, anon-rss:2181712kB, file-rss:0kB, shmem-rss:0kB
May  4 17:27:19 docker kernel: dockerd-current invoked oom-killer: gfp_mask=0x201da, order=0, oom_score_adj=-500
May  4 17:27:19 docker kernel: dockerd-current cpuset=/ mems_allowed=0
May  4 17:27:19 docker kernel: CPU: 1 PID: 18617 Comm: dockerd-current Kdump: loaded Tainted: G               ------------ T 3.10.0-1160.21.1.el7.x86_64 #1
May  4 17:27:19 docker kernel: Hardware name: Red Hat KVM, BIOS 1.11.0-2.el7 04/01/2014

В Slack видим оповещение о событии (здесь сообщение стандартное, по умолчанию, но его можно кастомизировать под ваши требования):


Graylog Sidecar

Graylog может собирать также логи сервисов, и вообще практически любые логи.

Будем использовать Graylog Sidecar для управления конфигурацией и бэкенд Filebeat, который собирает события и отправляет на Graylog-сервер. Схема работы для данного кейса:

Картинка отсюда.

Мы будем работать с access-логами веб-сервера nginx, работающего под CentOS linux.

PS:

Готовые контент-паки для различных сервисов (apache, nginx, …) различной степени свежести есть тут.

Но, чтобы разобраться как всё работает мы пойдём своим путём.

Получаем токен

System  →  Sidecars:

Нажимаем на ссылку:

Do you need an API token for a sidecar?   Create or reuse a token for the graylog-sidecar user

Ранее созданные токены также можно найти по этой ссылке.

Вводим имя токена:

Token Name:  myToken

Нажимаем кнопку Create Token

Там же можно скопировать его в буфер обмена, если нужно кнопкой Copy to clipboard, предварительно убрав чекбокс Hide Tokens.

System  →  Inputs:

Выбираем тип инпута Beats, жмём Launch New Input

Настройка в данном случае практически не отличается от той, что делали для syslog

Устанавливаем чекбокс Global:

Title:   graylog-sidecar

Bind address:   0.0.0.0

Port:    5044

Остальное оставляем по умолчанию (разумеется, в продакшн-среде, особенно при передаче сенситивных данных нужно будет добавить SSL-сертификаты, но пока обойдемся без них).

Нажимаем кнопку Save.

Не забываем добавить правило для 5044/tcp в Firewall.

Также нужен будет 443-й порт, но он у нас уже должен быть открыт:

# firewall-cmd --permanent --zone=itsoft --add-port=5044/tcp
# firewall-cmd --reload

System  →  Sidecars  →  Configuration 

В секции Configuration нажимаем кнопку Create Configuration:

Name:  filebeat_conf

Configuration color:    можно выбрать желаемый цвет

collector:   filebeat on linux

Configuration редактируем следующим образом

(paths — путь, где лежат лог-файлы сервиса,
hosts — ip-адрес и порт graylog-сервера):

# Needed for Graylog
fields_under_root: true
fields.collector_node_id: ${sidecar.nodeName}
fields.gl2_source_collector: ${sidecar.nodeId}

filebeat.inputs:
- input_type: log
  paths:
    - /var/log/nginx/access.log
  type: log
output.logstash:
   hosts: ["213.79.122.211:5044"]
path:
  data: /var/lib/graylog-sidecar/collectors/filebeat/data
  logs: /var/lib/graylog-sidecar/collectors/filebeat/log

Нажимаем кнопку Create:

Далее необходимо установить менеджер конфигурации и коллектор на хосте, с которого будет производиться сбор логов:

Sidecar

# rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-sidecar-repository-1-2.noarch.rpm
# yum -y install graylog-sidecar

# vim /etc/graylog/sidecar/sidecar.yml

Обязательно, вносим в файл конфигурации строки:

server_url: "https://graylog.itsft.ru/api/"

server_api_token: "1m6dk8vu3dk6uim9nbvmk1nkup4mvak2mrjfbtom3kgdafg2ms49"

# graylog-sidecar -service install
# systemctl enable graylog-sidecar.service
# systemctl start graylog-sidecar.service
# systemctl status graylog-sidecar.service
● graylog-sidecar.service - Wrapper service for Graylog controlled collector
   Loaded: loaded (/etc/systemd/system/graylog-sidecar.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-05-05 11:11:20 MSK; 6s ago

Полезная информация:

https://graylog.itsft.ru/api/api-browser — REST API Browser

filebeat

# rpm --import https://packages.elastic.co/GPG-KEY-elasticsearch

# vim /etc/yum.repos.d/elastic.repo

[elastic-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

# yum -y install filebeat
# systemctl enable filebeat.service
# systemctl start filebeat.service
# systemctl status filebeat.service
● filebeat.service - Filebeat sends log files to Logstash or directly to Elasticsearch.
   Loaded: loaded (/usr/lib/systemd/system/filebeat.service; enabled; vendor preset: disabled)
   Active: active (running) since Wed 2021-05-05 12:16:37 MSK; 6s ago

Не забываем про правило firewall с соответствующим портом, если это необходимо:

# firewall-cmd --zone=itsoft --add-ports=5044/udp
# firewall-cmd --runtime-to-permanent

Теперь Sidecar должен быть виден в System  →  Sidecars  →  Overview

Назначим созданную конфигурацию на этот Sidecar.

Нажимаем кнопку Administration:

filebeat  →  Configure  →  выбираем нужную конфигурацию:

В открывшемся поп-апе подтверждаем, что всё верно  →  Confirm:

Контролируем статус — Running.

Идём в System  →  Inputs, на инпуте graylog-sidecar нажимаем Show received messages,

наблюдаем логи nginx:

Extractor

Полезные ссылки:

Дебаг grok patterns

Переменные nginx

Просто хранение лога — не та задача к которой мы шли. Нам нужно парсить и анализировать эти логи!

Настраиваем экстрактор:

System  →  Inputs  →  Manage extractors

В секции Add extractor нажимаем единственную кнопку — Get started

Выбираем нужный Sidecar, затем нажимаем кнопку Load Message

Recent message выбирает последнее пришедшее сообщение, но удобнее выбрать нужное сообщение по message_id и index. 

id здесь 6dfdda90-ad89-11eb-9611-5254007a7f25, index - graylog_0

id здесь 6dfdda90-ad89-11eb-9611-5254007a7f25, index — graylog_0

Парсить будем само сообщение:

На поле message нажимаем Select extractor type  →  Grok pattern

Лог nginx по умолчанию имеет формат (можем найти его в nginx.conf):

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

Grok pattern будет выглядеть так:

%{IP:remote_addr} - - [%{HTTPDATE:time_local;date;dd/MMM/yyyy:HH:mm:ss Z}] "%{NOTSPACE:request_method} %{DATA:request_uri} HTTP/%{NUMBER:http_version}" %{NUMBER:http_status_code} %{NUMBER:body_bytes_sent} %{QS:http_referrer} %{QS:http_user_agent} %{QS:http_x_forwarded_for}

Нажимаем Try against example и в Extractor preview проверяем правильность паттерна:

Остальные параметры можно оставить по умолчанию, только имя нужно будет указать:

Condition:   Always try to extract

Extraction strategy:   Copy

Extractor title:   nginx combined

Нажимаем Create extractor

Переходим в меню System  →  Inputs  →  Show received messages, в инпуте graylog-sidecar.

Теперь все новые логи будут содержать отдельные поля message:

Поиск по логам стал намного проще, например:

gl2_source_input:6091644a7f58801671462478 — все сообщения с данного инпута;

gl2_source_input:6091644a7f58801671462478 AND request_method:POST — все сообщения с методом POST;

gl2_source_input:6091644a7f58801671462478 AND NOT http_status_code:200 — не 200-й ответ.

При составлении запроса Graylog подсказывает параметры, что довольно удобно:

Также будет полезно создать Stream (поток).

Он нам нужен будет в дальнейшем:

Streams  →  Create stream

Title:  Sidecars

Description:  Nginx access logs

Index Set:  Default index set

Сохраняем кнопкой Save

Stream создан, но пока неактивен.

Добавляем правило для этого потока (кнопка Manage Rules):

Выбираем нужный Input, создаём правило (кнопка Add stream rule).

В поп-апе New Stream Rule:

Требуется все сообщения из Sidecar-а поместить в этот поток, поэтому:

Type: match input

Value: graylog-sidecar

Сохраняем кнопкой Save.

Правило добавлено, сохраняем кнопкой I’m done!:

Запускаем поток: Start stream

Нажав на имя потока Sidecars можем также просматривать сообщения в нём и производить поиск по этим сообщениям.


Немного бесполезного, но красивого

На этапе установки, в первой части статьи мы прикрутили к graylog-у базу geoip. 

Теперь посмотрим, как её использовать, а также выведем карту мира, визуально демонстрирующую, откуда к нам на сайт приходят посетители.

Создаём data adapter

System  →  Lookup Tables  →  кнопка Data Adapters  →  Create data adapter:

Data adapter type  →  Geo IP — MaxMindTM Databases

Title:  GeoIP

Description:   GeoIP Lookup Table

Name:  geoip

File Path:   /etc/graylog/server/GeoLite2-City.mmdb

Database type:  City database

Остальное по умолчанию.

Для завершения нажимаем кнопку Create adapter.

Когда результаты кешируются — всё становится лучше

Создаём Caches:

System  →  Lookup Tables  →  кнопка Caches  →  кнопка Create cache

Cache Type:  Node-local, in-memory cache

Title:  GeoIP

Description:  GeoIP Cache

Name:  geoip

Остальное можно оставить по умолчанию.

Нажимаем кнопку Create Cache:

Создаём Lookup table:

System  →  Lookup Tables  →  Lookup Tables (активна по умолчанию)  →  Create Lookup Table

Title: GeoIP

Description:  GeoIP Lookup

Name: geoip

Data Adapter:  GeoIP (geoip)

Cache:  GeoIP (geoip)

Нажимаем кнопку Create Lookup Table:

Создаём Pipeline (пайплайны позволяют обрабатывать сообщения из потоков):

Сначала правило:

System  →  Pipelines  →  кнопка Manage rules  →  кнопка Create Rule

Description: Incoming connections

Rule source:

rule "GeoIP lookup: remote_addr"
when
  has_field("remote_addr")
then
  let geo = lookup("geoip", to_string($message.remote_addr));
  set_field("remote_addr_geo_location", geo["coordinates"]);
  set_field("remote_addr_geo_country", geo["country"].iso_code);
  set_field("remote_addr_geo_city", geo["city"].names.en);
end

Нажимаем кнопку Save&Close.

Теперь пайплайн:

System  →  Pipelines  →  кнопка Manage pipelines  →  кнопка Add new pipeline

Title:  Web

Description:  Incoming connections

Наблюдаем сообщение, что только что созданный пайплайн не подключен ни к одному потоку: 

Нажимаем кнопку Edit connections, подключаем:

А также в Stage 0 нажимаем Edit и добавляем к нему правило:

Идём в Streams  →  Sidecars, смотрим новые сообщения…

Проблема — ничего не происходит 🙁  Никаких гео-тегов не видно :((

Проблема возникает из-за порядка обработки правил.

Идём в System  →  Configurations

По умолчанию так:

1    AWS Instance Name Lookup

2    GeoIP Resolver

3    Pipeline Processor

4    Message Filter Chain

А нам нужно так:

1    AWS Instance Name Lookup

2    GeoIP Resolver

3    Message Filter Chain

4    Pipeline Processor

Нажимаем кнопку Update, перетаскиванием располагаем правила в правильном порядке:

Снова идём в Streams  →  Sidecars, смотрим новые сообщения и видим в них искомые геоданные:

Теперь будем смотреть красивую карту:

В Streams  →  Sidecars  добавляем Aggregation:

Нажимаем Edit:

Visualization type: World Map

Rows: remote_addr_geo_location

Сохраняем:  Save

Теперь можно визуально оценить откуда к нам на сайт приходят посетители:


На этом всё, надеемся, что данная информация будет вам полезна.

Данная статья изначально появилась в виде заметки / howto для внутреннего использования, поэтому может местами быть немного запутанной. Ждем ваши вопросы, предложения и замечания в комментариях!

Описание сервиса логирования.

Устройство системы логирования Flexberry Ember

Сервис логирования представляет собой один из доступных во фреймворке Flexberry Ember сервисов и обеспечивает запись сообщений различного уровня в базу данных приложения.

Сервис логирования Flexberry Ember расширяет возможности стандартного логгера фреймворка Ember.js.

При инициализации приложения данный сервис автоматически внедряется с именем logService на уровни:

  • Роут,
  • Компонент,
  • Контроллер.

По умолчанию сервис логирования выключен, существует возможность включить его как программно, так и в файле конфигурации.

Возможности сервиса log

Уровни логирования

Сервис логирования поддерживает семь уровней логирования:

  • ERROR — уровень ошибок;
  • WARN — уровень предупреждений;
  • LOG— уровень логов;
  • INFO— уровень информационных сообщений;
  • DEBUG— уровень отладочных сообщений;
  • DEPRECATION— уровень сообщений о подозрительных и устаревших участках исходного кода;
  • PROMISE— уровень ошибок промисов.

Разработчик может самостоятельно сгенерировать сообщения данных уровней, используя соответствующие методы класса Ember.Logger:

Ember.Logger.error('Текст сообщения об ошибке'); // уровень ошибок
Ember.Logger.warn('Текст предупреждения'); // уровень предупреждений;
Ember.Logger.log('Текст лога'); // уровень логов;
Ember.Logger.info('Информационный текст'); // уровень информационных сообщений;
Ember.Logger.debug('Отладочный текст'); // уровень отладочных сообщений;
Ember.Logger.warn('DEPRECATION "Текст лога"'); // уровень сообщений о подозрительных и устаревших участках исходного кода.

Пользователь в случае необходимости может дождаться выполнения асинхронной операции записи сообщения в базу, используя оператор then. Например:

 Ember.Logger.error('Текст сообщения об ошибке').then(result => {«действия после записи сообщения в БД»});

Кроме того, по завершении промиса инициируется событие с именем уровня ошибки. Например, ERROR, WARN и т.п. Обработчики событий с этими именами можно создать с использованием методов класса Evented.

ERROR — уровень ошибок

На уровень ERROR выводятся следующие сообщения об ошибках:

  • все ошибки времени выполнения приложения, обрабатываемые хуком Ember.onerror;
  • ошибки, формируемые методом Ember.Logger.error;
  • ошибки, возникающие при обработке промисов при помощи обработки события error класса RSVP.Promise.

WARN — уровень предупреждений

На уровень WARN выводятся предупреждения, формируемые методом Ember.Logger.warn.

LOG — уровень логов

На уровень LOG выводятся сообщения, формируемые методом Ember.Logger.log.

INFO — уровень информационных сообщений

На уровень INFO выводятся информационные сообщения, формируемые методом Ember.Logger.info.

DEBUG — уровень отладочных сообщений
На уровень DEBUG выводятся отладочные сообщения, формируемые методом Ember.Logger.debug.

DEPRECATION — уровень сообщений о подозрительных и устаревших участках исходного кода
На уровень DEPRECATION выводятся предупреждения о подозрительных и устаревших участках исходного кода, формируемые методом Ember.Logger.warn, и включающие подстроку ‘DEPRECATION’.

Просмотр сообщений

Фреймворк Flexberry Ember включает в себя модель, а также роуты для отображени списковой формы и формы редактирования для логов.

Для подключения возможности просмотра записанных сообщений в приложение необходимо:

  • добавить необходимый роут в роутер, объявленный в файле /app/router.js:
this.route('i-i-s-caseberry-logging-objects-application-log-l');
  • добавить ссылку в свойство sitemap, объявленное в файле app/controllers/application.js для отображения соответствующего пункта меню:
{
  link: 'i-i-s-caseberry-logging-objects-application-log-l',
  caption: ...,
  title: ...,
  children: null
} 

По умолчанию на списке отображаются следующие столбцы:

  • Время — время создания сообщения;
  • Категория — ERROR, WARN, INFO, LOG, DEBUG, DEPRECATION;
  • Сервер — DNS бэкенда;
  • Браузер — информация о браузере, в котором было запущено клиентское приложение;
  • URL — адрес страницы, с которой было инициировано логирование сообщения;
  • Сообщение — текст сообщения.

Отображение списка сообщений из сервиса логирования

На списковой форме отображения логов имеются две предопределенные пользовательские настройки, их можно увидеть в меню соответствующей формы (эти настройки определяют отображаемые по умолчанию столбцы и сортировку):

  • Message
  • FormattedMessage

Доступные предопределенные настройки пользователя на форме просмотра сообщений лога

По умолчанию используется предопределённая настройка Message.

При необходимости можно использовать предопределённую настройку FormattedMessage для отображения столбца Форматированное сообщение, в котором для сообщений уровня ERROR может содержаться имя файла, строка, стек вызовов, место возникновения ошибки.

Отображение формы просмотра сообщений лога в режиме FormattedMessage

Настройки логирования в файле конфигурации

Конфигурация сервиса логирования устанавливается в файле environment.js.

Пример настроек сервиса логирования в приложении Flexberry Ember представлены ниже.

'use strict';

module.exports = function(environment) {
  ...
  let ENV = {
    ...
    APP: {
      ...
      // Log service settings.
      log: {
        // Flag: indicates whether log service is enabled or not.
        enabled: true,

        storeErrorMessages: true,
        storeWarnMessages: false,
        storeLogMessages: true,
        storeInfoMessages: false,
        storeDebugMessages: false,
        storeDeprecationMessages: false,
        storePromiseErrors: true,
        showPromiseErrors: true,
        errorMessageFilterActive: false,
      }
    }
  };
  ...
  return ENV;
};
  • enabled — флаг, определяющий, включён ли сервис логирования.
  • storeErrorMessages, storeWarnMessages, storeLogMessages, storeInfoMessages, storeDebugMessages, storeDeprecationMessages, storePromiseErrors — флаги, определяющие, осуществлять ли запись сообщений соответствующего уровня в базу данных приложения,
  • showPromiseErrors — флаг, определяющий, нужно ли вызывать исходный обработчик ошибок для промиса до записи соответствующего сообщения об ошибке в базу данных приложения,
  • errorMessageFilterActive — флаг, определяющий, нужно ли применть фильтры логов, заданные в свойстве errorMessageFilters.

Настройки логирования в коде приложения

Разработчик может динамически включать и отключать сервис логирования с испоьзованием оператора:

this.get('logService').set('enabled', true);

Для динамического включения или отключения логирования на требуемом уровне используются операторы:

this.get('logService').set('storeErrorMessages', true) // уровень ошибок
this.get('logService').set('storeWarnMessages', true) // уровень предупреждений;
this.get('logService').set('storeLogMessages', true) // уровень логов;
this.get('logService').set('storeInfoMessages', true) // уровень информационных сообщений;
this.get('logService').set('storeDebugMessages', true) // уровень отладочных сообщений;
this.get('logService').set('storeDeprecationMessages', true) // уровень сообщений о подозрительных и устаревших участках исходного кода.
this.get('logService').set('storePromiseErrors', true) // уровень сообщений об ошибках промисов.

Для фильтрации сообщений, которые записываются в логи, можно использовать свойство errorMessageFilters, которое представляет собой массив объектов следующего вида:

{ category: 'PROMISE', message: 'TransitionAborted' }

В свойстве catrgory объекта указывается требуемый уровень логов, а в свойстве message — фраза, которая может встречаться в логируемом сообщении. При этом если логируемое сообщение содержит указанную фразу, а также имеет указанный уровень лога, то запись в базу данных приложения соответствующего сообщения выполняться не будет.

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

А вот еще интересные материалы:

  • Яшка сломя голову остановился исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного исправьте ошибки
  • Ясность цели позволяет целеустремленно добиваться намеченного где ошибка
  • Сервис гугл плей произошла ошибка почему выскакивает на телефоне самсунг
  • Сервис гугл плей произошла ошибка почему выскакивает на телефоне андроид что делать