Зачем нужны логи и как за ними следить?
Пролог
Очень часто мелкие компании (да и крупные тоже) не используют никакие сервисы ни для анализа логгируемых данных, ни для получения моментальных уведомлений с критическими сигналами.
Задача и способ ее решения
Всё надо делать вручную. Что-то пошло не так? Подключаемся к серверу по SSH, вспоминаем нужные команды, ищем информацию. Пытаемся как-то ее зафильтровать по IP, стране, другому пользовательскому поведению. В большинстве случаев никакой подсветки, черно-белый интерфейс и 100% возможность пропустить важные детали. Задача усложняется, если имеем несколько серверов, каждый из которых пишет свой лог (аггрегация может быть, но, допустим, с задержкой).
Именно по всем вышеуказанным причинам пришла в голову идея сделать небольшой сервис с возможностью следить за логами через удобный интерфейс. Так появился getlogs.online. Конечно, есть много других похожих сервисов, но, как говорится, опыт бесценен, а опыт программирования - еще более бесценен.
Момент деплоя в продакшен настал и что же сервис умеет на данном этапе?
Взаимодействие с серверами
1. "Запрос - ответ"
Самый простой и прямой способ, когда ваш код ничего не знает про сервис чтения логов. Но при этом, сервис знает данные доступа к вашему серверу. Вся работа ведется по SSH. Конечно, далеко не все желают делиться паролями к своим серверам, а тем более production серверам. Поэтому, идем далее.
2. "Слушатель"
Способ взаимодействия основан на ожидании команд от удаленного сервера, т.е. сервис слушает, что хочет сервер - получить список команд для запуска, передать результаты выполнения команд и т.д. Сервис предоставляет возможность скачать PHP скрипт, который кладется на сервер клиента в любое место и просто запускается из командной строки. Код скрипта открытый и тем самым можно убедиться, что он не посылает ничего, кроме запрошенных логов.
3. "Получатель"
В случае с этим способом взаимодействия ни сервер ни сервис ничего не запрашивают и не ждут. Вы просто скачиваете PHP библиотеку, подключаете ее к своему проекту в соответствии с короткой инструкцией и посылаете через нее логгируемые данные на сервис.
Интерфейс
Сервис не требует регистрации. Вы просто создаете рабочее пространство, которое привязывается к вашему IP адресу и получаете отдельную ссылку (которой можно делиться с кем угодно). Учитывая, что IP адреса могут ротироваться между пользователями в рамках одной сети, вы можете закрыть своё пространство паролем.
Также в планах на ближайший релиз - возможность привязать пространство к email, чтобы легко находить его с другого рабочего устройства. Возможно, эта стратегия изменится и будет заменена на обычную регистрацию.
Далее создается соединение с сервером с одним из 3-х типов взаимодействия, и создается задача с использованием одной из доступных команд. В некоторых полях можно использовать регулярные выражения или динамически-заменяемые переменные. Чтобы узнать подробности, нужно нажать на иконку с вопросом синего цвета.
В настоящее время доступны 3 команды:
- cat - чтение всего лога
- head - чтение N-первых строк лога
- tail - онлайн слежение за логом
После этого можно открывать задачу и запускать ее. Каждая задача имеет свой "окно", где можно управлять опциями - поиск, сортировка, подсветка. Некоторые опции доступны не для всех команд (например, при использовании команды tail невозможно использовать опцию сортировки).
После запуска задачи и начала поступления данных, результаты будут выводиться в user-friendly таблице, которая автоматически прокручивается (скроллится) к последним полученным данным (lifehack: если навести мышь на область таблицы, скролл встанет на паузу).
Полученные результаты можно скачать (пока что в том же формате, в котором они были получены). Максимально-доступный для хранения и скачивания объем логов зависит от типа рабочего пространства.
Что дальше?
Просто для себя, а также для тех, кто заинтересовался, но недостаточно увлекся на данном этапе, мы создали страницу с планом развития, который будет постоянно обновляться (планирования, релизы).
Но если вкратце, то мы планируем добавить аналитику в виде графиков и выборок (в том числе с подзадачами), а также на первом месте стоит функционал с моментальными / периодичными email-уведомлениями (которые потом могут быть расширены до взаимодействия с API различных мессенджеров, типа slack).
Контакты
Если вас заинтересовал сервис и есть мысли, которыми не жалко поделиться, или вопросы, то можно воспользоваться telegram: https://t.me/thewind.