XI. Журналювання

Вважайте журналювання (logs) потоками подій

Журналювання забезпечує наочне уявлення про поведінку запущеного застосунку. Зазвичай у серверних середовищах журнали записуються у файл на диску ("logfile"), але це лише один з форматів виведення.

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

12-факторний застосунок ніколи не переймається маршрутизацією і зберіганням свого потоку виведення. Застосунок не повинен записувати журнал у файл або керувати файлами журналів. Замість цього кожен запущений процес записує свій потік подій без буферизації в стандартний вивід stdout. В development середовищі розробник має можливість переглядати цей потік в терміналі, щоб спостерігати за поведінкою застосунку.

В staging та production розгортаннях потік виведення кожного процесу перехоплюється середовищем виконання, збирається разом з усіма іншими потоками виведення застосунку і спрямовується до одного або кількох кінцевих пунктів призначення для перегляду і довгострокового архівування. Ці кінцеві пункти призначення не видимі для застосунку і не налаштовуються ним, вони керуються середовищем виконання. Для цього можуть бути використані маршрутизатори журналів з відкритим вихідним кодом (наприклад, Logplex та Fluentd).

Потік подій застосунку може бути направлений у файл або переглянутий у терміналі в режимі реального часу. Найважливішим є те, що потік може бути направлений у систему індексування та аналізу журналів, таку як Splunk, або систему зберігання даних загального призначення, таку як Hadoop/Hive. Ці системи мають широкі можливості та гнучкість для детального аналізу поведінки застосунку протягом тривалого часу, в тому числі:

  • Виявлення конкретних подій у минулому;
  • Побудова графіків трендів (наприклад, кількість запитів за хвилину);
  • Активне оповіщення відповідно до визначених користувачем евристичних правил (наприклад, попередження, коли кількість помилок за хвилину перевищує певний поріг).