SlideShare a Scribd company logo
1 of 14
Download to read offline
Логгирование.
Зачем? Когда? Сколько?
          Иван Федоров
     Senior Software Engineer

      ivan.fedorov@gmail.com
Введение или зачем нам вообще нужны логи?


•   Анализ поведения и производительности.
•   Диагностика неисправностей.
•   Расследование инцидентов.
•   Моделирование тестовых сценариев.
Что логгировать или когда и сколько?



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

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

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


•   Событие — некое событие происходящее внутри системы.
•   Свойство — именованная характеристика события.
•   Лог — представление потока событий.
•   Запись — представление одного события в логе.
Структура записей в логе.


•   Все записи должны иметь идентичную структуру.
•   Лучше всего использовать только однострочные записи.
•   Оптимальный алфавит для записей — 7bit-ASCII.
•   Оптимальный формат для записей — «Ключ=Значение».
Немного примеров.


• ts=2012-06-09T06:00:00.000000Z level=INFO
  event=ru.devconf.preparation.end devconf.id=2012
  status=0
• ts=2012-06-09T14:45:00.654321Z level=INFO
  event=ru.devconf.speech.start devconf.id=2012
  speech.id=70
• ts=2012-06-09T15:00:00.123456Z level=INFO
  event=ru.devconf.speech.show_slide devconf.id=2012
  speech.id=70 slide.id=7
Стандартные элементы.


• ts — Время события.
• level — Уровень события.
• event — Уникальное имя или тип события.
• guid/*.id — уникальный идентификатор события или
  элемента.
• event=*.start|*.end|*.error — обозначение этапа
  события.
• status — для этапов *.end и *.error обозначает код
  завершения.
Время события.

                            ts=
• Используйте единый формат записи времени во всех логах.
• Всегда следите за системным временем на ваших серверах.
  Сохраняйте время с максимальной точностью, используйте NTP!
• Избегайте неоднозначностей трактовки времени, сохраняйте
  время в UTC или используйте числовое смещение времени.
  Не используйте текстовое указание часовых поясов.


        ts=YYYY-MM-DDTHH:MM:SS.SSSSSSZ
      ts=YYYY-MM-DDTHH:MM:SS.SSSSSS+0400
Уровни события.

                           level=
•   FATAL — Система или компонент не могут продолжать работу.
•   ERROR — Внутренние ошибки в отдельных компонентах.
•   INFO — Основные события, необходимые для работы системы.
•   DEBUG — Иногда хочется немного подробностей.
•   TRACE — Если ваша система позволяет полностью отключить
    вызов некоторые методов на боевых системах, то можно
    добавить логгирование всего!


                         level=INFO
Тип события.

                         event=
• Типы всех событий должны быть уникальны, увидев значение
  поля «event» вы должны однозначно понимать где оно
  произошло.
• Достаточно удобным является формат, который принят в
  Java‑мире: разделенные точками пространства имён.


      event=ru.devconf.speech.show_slide
Идентификаторы.

                      guid/*.id=
• Для каждой цепочки связанных событий должен быть
  уникальный идентификатор, который позволит связать все
  события воедино.
• Если у объекта есть естественный ключ — используте его.
• Если естественного ключа нет, сгенерируйте уникальный ключ.


            devconf.id=2012 section.id=common
        guid=f5b092d2-da90-11e1-85f8-17a6b5fa5717
Что осталось за кадром?

          Генерация и обработка логов.
• Обеспечьте себя удобным инструментарием, если ваша система
  ведения логов неудобна — замените её.
• Собирайте логи в одном месте и обрабатывайте их
  централизованно, только так можно гарантировать
  достоверность полученных данных.
• Для сбора логов можно использовать различные системы и
  подходы, например, rsyslog или Graylog2.
Вопросы?


•   Иван Федоров, Senior Software Engineer
•   ivan.fedorov@gmail.com
•   http://oxyum.moikrug.ru/
•   http://ru.linkedin.com/in/oxyum

More Related Content

What's hot

От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...SQALab
 
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...SECON
 
Selenium grid. OK version
Selenium grid. OK versionSelenium grid. OK version
Selenium grid. OK versionNikita Makarov
 
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETMicro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETDev2Dev
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Fwdays
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке СиPositive Hack Days
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Fwdays
 
Внедрение автоматизации тестирования на Сервисной Шине
Внедрение автоматизации тестирования на Сервисной ШинеВнедрение автоматизации тестирования на Сервисной Шине
Внедрение автоматизации тестирования на Сервисной ШинеSQALab
 
Скриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПОСкриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПОFedor Malyshkin
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Ontico
 
Нагрузочное тестирование по-живому
Нагрузочное тестирование по-живомуНагрузочное тестирование по-живому
Нагрузочное тестирование по-живомуAnton Stepanenko
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5SQALab
 
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...Аліна Шепшелей
 
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Yandex
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)Pavel Tsukanov
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 

What's hot (20)

От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
От Зефира в коробке к Structure Zephyr или как тест-менеджеру перекроить внут...
 
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
SECON'2017, Щеглова Нина, Как мы делаем это: тестирование в ecommerce междуна...
 
Selenium grid. OK version
Selenium grid. OK versionSelenium grid. OK version
Selenium grid. OK version
 
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NETMicro orm для жизни. Кожевников Дмитрий D2D Just.NET
Micro orm для жизни. Кожевников Дмитрий D2D Just.NET
 
Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"Anton Tsitou "Cycle ORM and Graphs"
Anton Tsitou "Cycle ORM and Graphs"
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
 
Формальная верификация кода на языке Си
Формальная верификация кода на языке СиФормальная верификация кода на языке Си
Формальная верификация кода на языке Си
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
 
Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"Serghei Iakovlev "Chaos engineering in action"
Serghei Iakovlev "Chaos engineering in action"
 
Внедрение автоматизации тестирования на Сервисной Шине
Внедрение автоматизации тестирования на Сервисной ШинеВнедрение автоматизации тестирования на Сервисной Шине
Внедрение автоматизации тестирования на Сервисной Шине
 
Скриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПОСкриптовой язык Groovy и его применение в рамках разработки ПО
Скриптовой язык Groovy и его применение в рамках разработки ПО
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 
Нагрузочное тестирование по-живому
Нагрузочное тестирование по-живомуНагрузочное тестирование по-живому
Нагрузочное тестирование по-живому
 
Let's Talk About Junit 5
Let's Talk About Junit 5Let's Talk About Junit 5
Let's Talk About Junit 5
 
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
Dmitriy Kouperman Working with legacy systems. stabilization, monitoring, man...
 
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
Евгения Фирсова "Выкладка вёрстки — просто, быстро, безопасно"
 
Ldv slides
Ldv slidesLdv slides
Ldv slides
 
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
ORM технологии в .NET (Nhibernate, Linq To SQL, Entity Framework)
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 

Viewers also liked (18)

About Mybestplay.com
About Mybestplay.comAbout Mybestplay.com
About Mybestplay.com
 
Diapos practico histo
Diapos practico histoDiapos practico histo
Diapos practico histo
 
Bni Presentation
Bni PresentationBni Presentation
Bni Presentation
 
Swiss Testing Day 2013 - How to avoid the testing swiss cheese syndrome
Swiss Testing Day 2013 - How to avoid the testing swiss cheese syndromeSwiss Testing Day 2013 - How to avoid the testing swiss cheese syndrome
Swiss Testing Day 2013 - How to avoid the testing swiss cheese syndrome
 
Jeff Korb
Jeff KorbJeff Korb
Jeff Korb
 
Mikhail Gromov - How Does He Do It?
Mikhail Gromov - How Does He Do It?Mikhail Gromov - How Does He Do It?
Mikhail Gromov - How Does He Do It?
 
87 pdfsam crossman - texto y atlas de neuroanatomia
87 pdfsam crossman - texto y atlas de neuroanatomia87 pdfsam crossman - texto y atlas de neuroanatomia
87 pdfsam crossman - texto y atlas de neuroanatomia
 
Miembro superior 1 (nx power lite)
Miembro superior 1 (nx power lite)Miembro superior 1 (nx power lite)
Miembro superior 1 (nx power lite)
 
Cockroach Report Tess
Cockroach Report TessCockroach Report Tess
Cockroach Report Tess
 
Greening Your Hospital
Greening Your HospitalGreening Your Hospital
Greening Your Hospital
 
Práctico de Histología - Unidad 1
Práctico de Histología - Unidad 1Práctico de Histología - Unidad 1
Práctico de Histología - Unidad 1
 
Case Fiat500 And Alfa Mito
Case Fiat500 And Alfa MitoCase Fiat500 And Alfa Mito
Case Fiat500 And Alfa Mito
 
Napoleon
NapoleonNapoleon
Napoleon
 
Histo respiratorio
Histo respiratorioHisto respiratorio
Histo respiratorio
 
Powerpoint over mijn hobby
Powerpoint over mijn hobbyPowerpoint over mijn hobby
Powerpoint over mijn hobby
 
Histología del Sistema Respiratorio
Histología del Sistema RespiratorioHistología del Sistema Respiratorio
Histología del Sistema Respiratorio
 
Pal práctico!!!
Pal práctico!!!Pal práctico!!!
Pal práctico!!!
 
Sample Marketing Presentation
Sample Marketing PresentationSample Marketing Presentation
Sample Marketing Presentation
 

Similar to Логгирование. Зачем? Когда? Сколько?

Devconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логированииDevconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логированииAlex Popov
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструментыRoman Dvornov
 
Автоматизация задач с помощью EEM
Автоматизация задач с помощью EEMАвтоматизация задач с помощью EEM
Автоматизация задач с помощью EEMCisco Russia
 
Информационная безопасность в веб - основы
Информационная безопасность в веб - основыИнформационная безопасность в веб - основы
Информационная безопасность в веб - основыAlex Chistyakov
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"OdessaJS Conf
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyDmytro Zharii
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...jazzteam
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьAndrey Bibichev
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Ontico
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Nikolay Sivko
 
Бинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыБинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыd_olex
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Fwdays
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Ontico
 

Similar to Логгирование. Зачем? Когда? Сколько? (20)

Devconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логированииDevconf 2014 Трассировка событий при логировании
Devconf 2014 Трассировка событий при логировании
 
Sivko
SivkoSivko
Sivko
 
SPA инструменты
SPA инструментыSPA инструменты
SPA инструменты
 
Автоматизация задач с помощью EEM
Автоматизация задач с помощью EEMАвтоматизация задач с помощью EEM
Автоматизация задач с помощью EEM
 
Информационная безопасность в веб - основы
Информационная безопасность в веб - основыИнформационная безопасность в веб - основы
Информационная безопасность в веб - основы
 
Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"Nikita Galkin "5 production Node.js stories"
Nikita Galkin "5 production Node.js stories"
 
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfyЧитабельные отчеты для автоматизации на C# / Gallio / BDDfy
Читабельные отчеты для автоматизации на C# / Gallio / BDDfy
 
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
SECON'2016. Парамонов Сергей, Автоматизируй это! Как не погрязнуть в рутине п...
 
Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...Расширяемая платформа для создания и управления автоматизированными тестами н...
Расширяемая платформа для создания и управления автоматизированными тестами н...
 
Архитектура в Agile: слабая связность
Архитектура в Agile: слабая связностьАрхитектура в Agile: слабая связность
Архитектура в Agile: слабая связность
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
Monitoring driven эксплуатация / Николай Сивко (HeadHunter)
 
Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)Monitoring-driven эксплуатация (rootconf2015)
Monitoring-driven эксплуатация (rootconf2015)
 
SIEM для ИТ
SIEM для ИТSIEM для ИТ
SIEM для ИТ
 
Бинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективыБинарные уязвимости и эксплойты: технологии и перспективы
Бинарные уязвимости и эксплойты: технологии и перспективы
 
Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"Всеволод Поляков "История одного мониторинга"
Всеволод Поляков "История одного мониторинга"
 
UI+unit testing in iOS
UI+unit testing in iOSUI+unit testing in iOS
UI+unit testing in iOS
 
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
Хорошо поддерживаемое в продакшне приложение / Николай Сивко (okmeter.io)
 
Team workflow
Team workflowTeam workflow
Team workflow
 

Логгирование. Зачем? Когда? Сколько?

  • 1. Логгирование. Зачем? Когда? Сколько? Иван Федоров Senior Software Engineer ivan.fedorov@gmail.com
  • 2. Введение или зачем нам вообще нужны логи? • Анализ поведения и производительности. • Диагностика неисправностей. • Расследование инцидентов. • Моделирование тестовых сценариев.
  • 3. Что логгировать или когда и сколько? Логгировать надо всё, что хотя бы в теории может сломаться или выполняться некорректно. • Запуск, настройка и завершение сервисов и модулей. • Ошибки, внутренние и внешние. • Все операции связанные с аутентификацией и авторизацией. • Запуск и завершение функциональных блоков, циклов и т.д.
  • 4. Практическая работа или какими должны быть хорошие логи? • Четкая структура, единая для всего проекта. • Каждое событие должно иметь уникальное имя. • Каждый объект должен иметь уникальный идентификатор. • Каждая запись должна иметь уровень важности. • Время каждой записи должно быть указано с максимальной точностью.
  • 5. Немного терминологии. • Событие — некое событие происходящее внутри системы. • Свойство — именованная характеристика события. • Лог — представление потока событий. • Запись — представление одного события в логе.
  • 6. Структура записей в логе. • Все записи должны иметь идентичную структуру. • Лучше всего использовать только однострочные записи. • Оптимальный алфавит для записей — 7bit-ASCII. • Оптимальный формат для записей — «Ключ=Значение».
  • 7. Немного примеров. • ts=2012-06-09T06:00:00.000000Z level=INFO event=ru.devconf.preparation.end devconf.id=2012 status=0 • ts=2012-06-09T14:45:00.654321Z level=INFO event=ru.devconf.speech.start devconf.id=2012 speech.id=70 • ts=2012-06-09T15:00:00.123456Z level=INFO event=ru.devconf.speech.show_slide devconf.id=2012 speech.id=70 slide.id=7
  • 8. Стандартные элементы. • ts — Время события. • level — Уровень события. • event — Уникальное имя или тип события. • guid/*.id — уникальный идентификатор события или элемента. • event=*.start|*.end|*.error — обозначение этапа события. • status — для этапов *.end и *.error обозначает код завершения.
  • 9. Время события. ts= • Используйте единый формат записи времени во всех логах. • Всегда следите за системным временем на ваших серверах. Сохраняйте время с максимальной точностью, используйте NTP! • Избегайте неоднозначностей трактовки времени, сохраняйте время в UTC или используйте числовое смещение времени. Не используйте текстовое указание часовых поясов. ts=YYYY-MM-DDTHH:MM:SS.SSSSSSZ ts=YYYY-MM-DDTHH:MM:SS.SSSSSS+0400
  • 10. Уровни события. level= • FATAL — Система или компонент не могут продолжать работу. • ERROR — Внутренние ошибки в отдельных компонентах. • INFO — Основные события, необходимые для работы системы. • DEBUG — Иногда хочется немного подробностей. • TRACE — Если ваша система позволяет полностью отключить вызов некоторые методов на боевых системах, то можно добавить логгирование всего! level=INFO
  • 11. Тип события. event= • Типы всех событий должны быть уникальны, увидев значение поля «event» вы должны однозначно понимать где оно произошло. • Достаточно удобным является формат, который принят в Java‑мире: разделенные точками пространства имён. event=ru.devconf.speech.show_slide
  • 12. Идентификаторы. guid/*.id= • Для каждой цепочки связанных событий должен быть уникальный идентификатор, который позволит связать все события воедино. • Если у объекта есть естественный ключ — используте его. • Если естественного ключа нет, сгенерируйте уникальный ключ. devconf.id=2012 section.id=common guid=f5b092d2-da90-11e1-85f8-17a6b5fa5717
  • 13. Что осталось за кадром? Генерация и обработка логов. • Обеспечьте себя удобным инструментарием, если ваша система ведения логов неудобна — замените её. • Собирайте логи в одном месте и обрабатывайте их централизованно, только так можно гарантировать достоверность полученных данных. • Для сбора логов можно использовать различные системы и подходы, например, rsyslog или Graylog2.
  • 14. Вопросы? • Иван Федоров, Senior Software Engineer • ivan.fedorov@gmail.com • http://oxyum.moikrug.ru/ • http://ru.linkedin.com/in/oxyum