Использовать будем Grafana версии 10.2, Promtail и Loki версии 2.9.2. Если кто-то вообще ничего не знает про используемый стек, посмотрите краткое описание вот здесь. Работать все будет под Windows, для Linux изменения должны быть чисто косметические. Статья написана для быстрого старта, поэтому здесь не будет разбираться быстродействие, настройка прав доступа, разнообразие визуализаций Grafana и прочее. Скачиваем бинарники Grafana вот здесь. Если выбрана Enterpise лицензия, то можно вместо бинарников получить ошибку Sorry, our service is currently not available in your region. В этом случае выбирайте OSS. Бинарники Loki и Promtail лежат вот здесь   Если кому-то не нравятся бинарники, то вот подробная документация по установке Promtail и Loki. Дефолтный конфиг версии 2.9.2 для Promtail здесь, а для Loki тут. Если нужна другая версия, меняйте в ссылках v2.9.2 на нужную.  Логи будут такого формата Пример записи в логе Обратите особое внимание на свой формат даты и времени. Часовой пояс может быть явно указан в логах, можно настроить часовой пояс через конфиг promtail. Здесь он будет в конфиге. В разных часовых поясах легко запутаться, особенно если логи собираются на разных серверах и вдвойне легко запутаться если все происходит в облаке. Для тестирования я себе делал генератор логов. Выдает он более-менее осмысленный контент нужного мне формата и нужного мне количества. У кого нет готовых логов для тестов, желательно заранее сделать файлик в котором будет хотя бы сотня записей. А для настройки Promtail достаточно вообще одной строки. У Promtail есть два параметра, которые сильно помогут в настройке --dry-run данные не отправляются в Loki, также логфайл будет читаться с одного и того же места при каждом запуске. Можно не добавлять новые записи при каждом изменении конфига и запуске Promtail, достаточно одной строки. --inspect в консоль выводится отладочная информация. Для настройки Promtail добавляем в логфайл одну запись и запускаем Promtail. Конфиг меняем с каждым запуском для тестирования изменений. Выглядит это вот так Теперь будет настройка конфига по частям. Если удобнее смотреть все сразу, то дальше весь конфиг целиком. Для настройки берем дефолтный конфиг, вот эту часть оставляем как есть Дальше меняем path и job. job logs метка для имени конфигурации (конфигураций может быть несколько) path путь к файлу (или файлам) логов. Если у вас настроен log file rotation, то хорошо проверьте шаблон, чтобы promtail точно находил новые файлы. Дальше настраиваем непосредственно разбор логов. Разбор происходит по определенным стадиям/этапам, подробности в документации. Для разбора строки используем регулярку с именованными группами. Имя группы будет использовано на следующих этапах. Для json или logfmt есть стандартные настройки, изобретать регулярки для разбора json не нужно. Результат разбора Дальше стадия меток, тут мы указываем какие метки будут у записи. Результат ниже, обратите внимание на то, какие были метки до, и какие стали после. Теперь очень важная часть - установка времени для записи. В моем примере в логах часовой пояс явно не указан, поэтому часовой пояс выставлен через конфиг. Если у вас не так, location выкидываете, format меняете под свой. В Promtail используется Go формат для времени и дат. Кто с этим форматом незнаком, вот шпаргалка. Коды таймзон для конфига можно посмотреть здесь. Результат работы этапа ниже, обратите внимание что дата поменялась на 2 дня. В файле логов дата 1 ноября, обработка происходит 3 ноября. По умолчанию в записи будет проставлено время обработки лога. Тщательно протестируйте этот этап, особенно если логи создаются в облаке. Дальше выкидываем лишние метки, filename нам не нужен, time тоже не нужен, потому что со временем записи в логе мы разобрались на предыдущей стадии. Результат работы этапа Теперь создадим новое поле msgData используя шаблон, данные для нового поля будут из старого поля msg. Выглядит немного кривовато, но это сделано специально. Для того чтобы показать как можно менять строковое содержания логов еще при работе Promtail, до того как они попадут в Loki. Здесь из строки выкидываются tenant, severity, node и time, т.к. эти данные все равно будут в метках. Если надо оставить строку как есть, тогда этот и следующий этап можно просто убрать из конфига. Результат работы этапа - строка лога Заключительный этап - указываем источник данных для строки лога, это поле из предыдущего этапа. Итоговая запись - строка и метки Конфиг целиком У Promtail есть свой простенький веб-клиент, порт по умолчанию 9080, можно использовать для проверки работоспособности и администрирования, выглядит клиент вот так  Здесь все просто, используете дефолтный конфигурационный файл и все работает. По умолчанию Loki отсылает какую-то статистику на свои сервера. Чтобы это отключить раскомментируйте эти строчки Для проверки работоспособности Loki зайдите в браузере (или в любом веб клиенте) по ссылке http://localhost:3100/ready. В ответе должно быть ready, еще может быть такой ответ Ingester not ready: waiting for 15s after being ready, подождите указанные 15 секунд и попробуйте еще раз. У Loki есть свое API, cправка тут. Из полезного на начальной стадии может быть ендпойнт для метрик http://localhost:3100/metrics. Запускаем файл grafana-10.2.0\bin\grafana-server.exe и заходим на http://localhost:3000. Логин пароль при первом запуске admin/admin, Grafana сразу предложит его сменить. Loki должен быть запущен и в нем должны быть данные. В меню Home Connections Data sources жмем на кнопку Add new data source   Там выбираем Loki   В поле Connection вводим http://127.0.0.1:3100   Внизу формы жмем на Save & Test и дожидаемся подтверждения успешно установленного соединения   В правом верхнем углу жмем на кнопку explore data   Откроется форма для создания и редактирования запросов   Кликнув по кнопке Label browser можно посмотреть какие метки и какие у них значения есть в базе, составить и выполнить запрос   Если у вас в базе есть данные, то выглядеть это будет примерно как на картинке ниже. Это основное место для написания и отладки запросов  Сначала нужно создать дашборд, в меню Home Dashboards жмем на кнопку New, в выпадающем списке выбираем New dashboard. Дальше жмем на кнопку Add visualization. Выбираем созданный на предыдущем шаге Loki datasource. В правом верхнем углу меняем тип визуализации на Logs  Меняем Panel title на Raw logs и включаем галочки Time и Enable log details   Жмем на кнопку Apply   Заходим в свойства дашборда   Здесь заходим на вкладку Variables и жмем на кнопку Add variable, имя переменной tenantid, остальное как на картинке ниже   Создаем еще одну переменную, все тоже самое, только для nodeid.  Создаем третью переменную с названием filter и типом Text box   Панель теперь выглядит так. Жмем edit чтобы поменять запрос   Запрос будет такой. Обратите внимание на line_format, так можно менять отображение записей лога.  В итоге выглядеть все будет как на картинке ниже, можно выбирать tenant, severity и отфильтровать по содержимому лога.  Жмем на кнопку Add выбираем Visualization   Выставляем свойства как указано на картинке ниже   Запрос будет такой  Обратите внимание что в запросе нет переменных, которые есть в запросе для панели Raw Logs. Поэтому в чарте будут использоваться все данные за выбранный промежуток времени,  фильтрации не будет. При желании можно в запрос добавить переменные и тогда данные в чарте и в панели Raw Logs будут одинаковые. Цвета для конкретных значений можно выбрать кликнув по тонкой цветной полоске на легенде   Или добавив нужные значение на вкладке Overrides в свойствах чарта  В итоге наш чарт будет выглядеть вот так  Grafana классный инструмент для визуализации данных, Loki и Promtail дают возможность достаточно просто настроить сбор и хранение логов. Сочетание этих инструментов дает очень хороший результат при небольших усилиях. Надеюсь статья будет полезной. C# Developer