Как я мониторинг разворачивал

10.05.23

Администрирование - Мониторинг

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

Скачать исходный код

Наименование Файл Версия Размер
monitoring.zip
.zip 40,72Mb
16
.zip 40,72Mb 16 Скачать

Всем привет

Всем привет, меня зовут Андрей. Я программист 1С, работаю в отделе ИТ крупной коммерческой компании. Мой опыт в разработке 1С около восьми лет. Люблю сложные задачи, мемасы и всё новое.

 

С чего все начиналось

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

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

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

Задача досталась мне и звучала примерно следующим образом: «надо организовать мониторинг основной системы, чтобы можно было понять, где у нас проблемы. В видео Оптимизация запросов в 7 ТБ базе 1С были показаны красивые дашборды с графиками, было бы здорово, если бы у нас было так же.»

 

Стек и первая версия проекта

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

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

1. Grafana - основной инструмент для визуализации данных.

2. Prometheus - база данных временных рядов, для сбора и хранения метрик.

3. Docker - средство контейнеризации, для того, чтобы всё это запускалось с помощью магической команды 

docker-compose up -d


Мне развернули небольшой сервер на Debian, я создал папку с проектом и начал работу. Не буду описывать все сотни проб и ошибок, поэтому просто скажу, что после изучения кучи официальной документации у меня получилась первая версия версия проекта, которая запускалась и работала. Prometheus был настроен на сбор метрик только с самого себя и, зайдя в Grafana, можно было уже пощупать инструмент и построить какие-либо графики.

 
 Первая версия проекта

 

Windows exporter

После того, как всё заработало, я вздохнул с облегчением, теперь можно приступать к основной задаче сбора метрик с сервера. Я не стал долго думать и выбрал Windows exporter из списка экспортеров, предоставленных в официальной документации к Prometheus. Его установка и настройка была довольно простой. Необходимо с помощью стандартной утилиты sc.exe создать службу, которая будет запускать необходимый файл с нужными параметрами, и добавить URL адрес экспортера в настройки Prometheus.

 
 Изменения в проекте

После добавления windows exporter я смог получить какие-то реальные данные и добавил несколько графиков. Большинство запросов для них можно найти в документации к самому экспортеру.

 

 

Сбор замеров APDEX

Следующим этапом для меня стала отправка метрик из 1С. Вдохновившись статьей Метрики, графики, статистика = Prometheus + Grafana, я решил организовать сбор метрик без создания http-сервиса. Поэтому добавил в стек еще один сервис - pushgateway (его основное назначение можно прочесть в указанной статье). Для 1С я создал очень простую обработку, которая раз в 15 секунд делала довольно простой запрос в базу, забирала подготовленные данные и отправляла их HTTP запросом в pushgateway, а он, в свою очередь, предоставлял их prometheus. Метрики были следующие:

  1. Общая продолжительность выполнения в разрезе ключевой операции. (Counter)
  2. Общее количество выполненных ключевых операций. (Counter)

С помощью этих двух метрик я смог получить среднее время выполнения ключевых операций и количество выполняемых операций в единицу времени.

 
 Изменения в проекте

 

 

Prometheus MSSQL Exporter

Далее, для полноты картины, необходимо было собрать метрики с MSSQL. Для этого я так же заглянул в документацию к Prometheus и в списке экспортеров нашел Prometheus MSSQL Exporter, который прекрасно работает в docker и имеет простейшие настройки. После его добавления, я дополнил дашборд группой графиков MSSQL.

 
 Изменения в проекте

 

 

Первые итоги

После получения первой версии дашборда, где были собраны начальные графики по работе windows сервера, MSSQL и 1С, я показал его своему руководителю. Мы смотрели на всё это дело около недели, и единственный вывод, который был сделан - это то, что никаких серьезных проблем с железом у нас нет.

 

Новая задача

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

 

Grafana Loki

Про сбор и агрегацию технологического журнала информации в интернете было еще меньше. Я бы сказал, ее вообще практически нет. Единственные упоминания, которые я находил - это агрегация логов с помощью ELK (Elasticsearch, Logstash и Kibana). Потратив 3-4 рабочих дня в попытках хотя бы как-то запустить эту машину, я натыкался на новые и новые препятствия. В конце концов стало понятно, что это решение не для нас. Оно слишком ресурсоемкое, требует очень большого бэкграунда, да и как потом объяснять людям, что с этим всем делать.

Уже не помню, как это произошло, но я наткнулся на Grafana Loki. Сервис описывал себя как агрегатор логов, вдохновленный Prometheus, который:

  1. Легко масштабировать
  2. Экономит данные
  3. Прост в эксплуатации

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

Loki состоит из двух частей: 

  • Loki - сервис, который является своего рода базой данных хранения журналов и позволяет запрашивать их с помощью встроенного языка LogQL
  • Promtail - агент, поставляемый с Loki, который собирает и отправляет данные журналов. Агентом, на самом деле, может являться и другие ПО, от того же ELK, но я решил пользоваться встроенным решением.

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

 
 Изменения в проекте

 

Без проблем не обошлось

Основные проблемы меня ждали при настройке Promtail.

Первое, с чем я столкнулся, - это подход к структуре хранения технологического журнала. У нас он был настроен, полагаю, более или менее классическим образом: много папок с отборами, чтобы это можно было хоть как-то пытаться читать и находить проблемы. Плюс все это хранилось 48 часов, и кто имеет представление о ТЖ, тот понимает, что это просто огромная куча файлов на много гигабайт занимаемого пространства. Если promtail указать путь к подобной структуре, то он из-за тысячи файлов просто начнет съедать всю память и процессор на сервере и в конце концов случится большая беда.

Эту проблему я решил довольно простым способом, добавив еще одну настройку в файл logcfg.xml

 
 C:\Program Files\1cv8\conf\logcfg.xml

Такая настройки сильно урезала количество файлов в папке, и получилось, что мы хранили текущий и предыдущий час логов. С такой конфигурацией promtail ел 200-300 Мбайт оперативной памяти и 0.5% процессора в нагрузке, что меня вполне устраивало.

Следующая неприятная проблема случилась с тем, что если создавать службу с помощью sc.exe - она отказывалась запускаться. Это, наверное, связано с тем, что программа изначально писалась под Unix системы и для Windows разработчики не сильно старались. Решить эту проблему проблему помогла утилитка, найденная на просторах интернета, которая называется WinSW. По сути это просто обертка для любого исполняемого файла с помощью которой можно создать службу Windows.

Также отмечу еще один нюанс с структурой хранения. 1С внутри корневой папки ТЖ создает подпапки с названием, состоящим из службы и ID процесса. Также 1С любит создавать и убивать свои процессы по необходимости. Если получилась такая ситуация, что 1С хочет удалить папку с завершившимся процессом, а Promtail читает из неё логи, то она не сможет этого сделать, пока не будет перезапущен Promtail. Поэтому необходимо добавить задание в планировщик, которое будет раз в сутки перезапускать службу Promtail'а, чтобы очищать эти папки.

Остальные проблемы были связаны с настройкой самого promtail, так как 1С пишет логи очень не стандартно. В частности: 

  • Часть времени записи есть в название файла , а часть в строке лога.
  • Запись одного события многострочна.
  • Внутри строки лога одни поля имеют вид key=value, а некоторые просто являются значениями.
 
 config.yaml

 

Магия Loki

Для демонстрации мощности Loki приведу пример запроса для получения событий установки блокировки, длительность которых была больше 1 секунды и поле WaitConnections было не пустым:

{event="TLOCK"} | pattern `<_>-<duration>,<_>WaitConnections=<wait_conn>,` | duration > 1000000 | wait_conn =~`\S+`

Разберу выражение, чтобы стало чуть понятнее. Запрос к Loki состоит из обработчиков, разделенных вертикальной чертой. Наш запрос стоит из четырех обработчиков:

  1. {event="TLOCK"} - селектор потока журнала, который говорит, что мы выбираем все записи с событием "TLOCK". Обязательная начальная часть запроса. Стиль, вдохновленный Prometheus.
  2. pattern `<_>-<duration>,<_>WaitConnections=<wait_conn>,` - этот обработчик приводит запись журнала к определенному паттерну и вычисляет дополнительные поля для дальнейшей обработки. В нашем случае мы вычисляем поля duration и wait_conn.
  3. duration > 1000000 - думаю этот обработчик вполне очевиден, мы отбираем все записи, длительность которых больше 1 000 000 микросекунд, то есть больше 1 секунды.
  4. wait_conn =~`\S+` - этот обработчик говорит нам, что поле wait_conn должно удовлетворять регулярному выражению \S+, которое означает, что wait_conn должен быть заполнен.

 

 

Итог

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

Общая схема работы мониторинга выглядит так:

 

 

P.S.

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

В этой статье я намеренно не делал упора на техническую составляющую, так как с ней она превратится в книгу.

К статье я прикрепил архив с проектом Git (только без папки .git), в котором лежат все файлы с конфигурациями, заполнен файл README.md и .gitignore.

мониторинг grafana prometheus pushgateway windows_exporter prometheus-mssql-exporter loki promtail winsw

См. также

Мониторинг баз и серверов 1С

Журнал регистрации Мониторинг Платформа 1С v8.3 Платные (руб)

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

9000 руб.

28.08.2019    31105    14    21    

66

Конфигурация Session Monitor

Мониторинг Инструменты администратора БД Платформа 1С v8.3 Россия Платные (руб)

Конфигурация Session Monitor предназначена для мониторинга сервера 1С с целью отслеживания чрезмерной нагрузки от конкретных сеансов и скорости реакции рабочих процессов.

1500 руб.

01.12.2020    14372    33    0    

48

Yellow Watcher - Жёлтый наблюдатель за информационными базами

Мониторинг Платформа 1С v8.3 Абонемент ($m)

Программный комплекс мониторинга качества работы информационных баз. Статистика возникновения управляемых блокировок (тип, последняя строка контекста, контекст). Анализ длительных запросов по данным из технологического журнала. Анализ потребления ресурсов СУБД запросами и статистика ожиданий по данным из Query Store. Монитор информационной базы - получение плана запроса для сеанса 1С. Блокировки СУБД по данным block_report Extented Events, длительные запросы по данным из query_post_execution_showplan Extented Events.

1 стартмани

12.02.2024    3223    27    sdf1979    11    

53

Проверка доступа к интернет на сервере 1С

Мониторинг Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Абонемент ($m)

Инструмент для проверки интернет - соединения на сервере 1С

3 стартмани

23.11.2023    1888    5    1395969    4    

2

Магия преобразований Vector, часть 3: журнал регистрации + прямой экспорт ошибок в Sentry

Журнал регистрации Мониторинг Абонемент ($m)

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

1 стартмани

19.11.2023    755    3    AlexSTAL    0    

6

Магия преобразований Vector, часть 2: технологический журнал

Технологический журнал Мониторинг Абонемент ($m)

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

1 стартмани

15.11.2023    827    4    AlexSTAL    0    

8

Магия преобразований: ЖР, ТЖ, RAS/RAC, логи - универсальное решение Vector

Мониторинг Журнал регистрации Технологический журнал Абонемент ($m)

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

1 стартмани

13.11.2023    3138    4    AlexSTAL    0    

42

Чем Service Discovery поможет 1С-нику и его клиентам?

Тестирование QA Мониторинг Бесплатно (free)

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

08.11.2023    2968    ktb    0    

18
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. dsdred 3318 10.05.23 08:52 Сейчас в теме
Тоже не так давно настраивал монитор промитеус + графана.
Отличная статья.
GATTUSO; andreysidor4uk; +2 Ответить
2. Ifoxy 16 10.05.23 10:09 Сейчас в теме
Отличная статья. Очень полезная!
andreysidor4uk; +1 Ответить
3. starik-2005 3036 10.05.23 10:31 Сейчас в теме
4. G_117284249425563207239 10.05.23 11:57 Сейчас в теме
Крутая статья!
andreysidor4uk; +1 Ответить
5. frkbvfnjh 787 10.05.23 12:11 Сейчас в теме
Наконец-то кто то написал про Графану, вопрос в том смогу ли я понять прочитанное... Но статья нужная!
kasper076; andreysidor4uk; +2 Ответить
6. sevushka 303 10.05.23 13:03 Сейчас в теме
А зачем все так усложнять?
мониторинг - заббикс, практически "из коробки" все работает. и железо, и мс скл.
Apdex в 1с, блокировки (latch, lock) и прочее - есть сервисы В.Гилева, которые уже много лет как работают, причем даже в бесплатной версии они достаточно неплохи. Ну и ставятся они за несколько часов (если первый раз), и написаны на 1с и для 1с. Минус - если нужна аналитика за длительный период то это деньги, но многим хватает 3 дня в бесплатной версии.
Какие задачи решились после внедрения "вот этого всего"? Убедились, что нет нагрузок на железо (причем далеко не факт, что выбрали все нужные параметры) и нашли несколько взаимоблокировок?
Ни в коем случае не критикую саму статью, это очень здорово, что нач отдела дал отдохнуть 1снику, и вместо задач заказчиков он делал общественно-админско-полезные задачи для отдела.
demidrole; Artem.Po; EugeneSemyonov; Semen_pro; Evg-Lylyk; andreysidor4uk; +6 1 Ответить
7. andreysidor4uk 194 10.05.23 14:06 Сейчас в теме
(6) Первое почему: это то, что по моему мнению, это не усложнение, а просто настроенный набор инструментов.
Zabbix - это тоже инструмент который надо настроить. Просто для его настройки уже есть огромное количество статей, многие это делали и это не выглядит чем-то сложным.
Второе почему - это поставленная задача. Мне указали пример, который хотел бы видеть руководитель. И показал он именно Grafana, а не zabbix, который, в прочем, у нас тоже есть. Но почему у нас две системы мониторинга - это внутренняя история, не для огласки.
Третье почему: это просто вкусовщина. Для меня Grafana выглядит намного лучше, чем zabbix.
Четвертое почему: все инструменты собраны в одном месте, мне не нужно открывать 1С, смотреть в кучи абсолютно разных интерфейсов. Всё выглядит одинаково, в одном месте. Работает чётко и быстро. И это сильно подкупает.
Пятое почему: это абсолютно бесплатно и это просто масштабируется (очень не факт, что это понадобится, но такая возможность есть).

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

По поводу решенных проблем пока рано судить, инструмент новый и мы его еще меняем, добавляем одни графики, убираем другие.
На текущий момент самый полезный инструмент - это Loki. Анализ ТЖ - сказка, всё быстро и легко. Как было написано в статье - пару проблем уже решили и сейчас, раз в неделю, собираемся и делаем анализ ТЖ и ищем другие ошибки.
AlexSTAL; kuza_87; demidrole; Artem-B; kuntashov; Semen_pro; d4rkmesa; dsdred; Sergant; +9 Ответить
9. siamagic 10.05.23 14:33 Сейчас в теме
(7) Из написанного пользу представляет только тж. свистелка в виде графаны дает нулевую информативность. к тому же все есть в штатном мониторинге винды. От анализа кластера 1с также толку будет больше ну вы только в начале пути - поэтому не понимаете.
Semen_pro; +1 6 Ответить
19. sevushka 303 11.05.23 05:47 Сейчас в теме
(7) Спасибо, вполне аргументированный ответ.
demidrole; Semen_pro; andreysidor4uk; +3 Ответить
8. SGordon1 10.05.23 14:23 Сейчас в теме
про не обновляется конфа в начале статьи - запутывает читателя.... А счастливый конец то наступил, нашли грабельки?
andreysidor4uk; +1 Ответить
10. andreysidor4uk 194 10.05.23 14:33 Сейчас в теме
(8) Не обновляется конфигурация поставщика конечно же. А конфигурация в целом дописывается нон-стоп. =)
Пока грабельки не найдены, но инструмент новый и мы в процессе)
11. kser87 2439 10.05.23 15:32 Сейчас в теме
Крутейшая статья. Фактически готовая инструкция. Спасибо автору
andreysidor4uk; +1 Ответить
12. Dach 373 10.05.23 18:08 Сейчас в теме
(0) не знаю, какой IDE Вы пользуетесь, но поставьте себе плагин Spell Checker и ru-словарь для него (или аналоги) - в readme и прочих файлах много орфографических ошибок

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

За единый сервис в докер - однозначно плюс, еще не тестил, но думаю должно все заработать, раз уже заработало ранее.
andreysidor4uk; +1 Ответить
13. andreysidor4uk 194 10.05.23 18:31 Сейчас в теме
(12) Спасибо за замечание, учту на будущее. =)
Проект git взят из существующего репозитория на внутреннем gitlab. Я удалял оттуда наши логины, пароли, IP адреса и т.д. и забыл про это написать в README...
14. Dach 373 10.05.23 18:34 Сейчас в теме
(13) нагрузку, создаваемую контейнерами - отслеживаете как-то? через portainer, например? Будет хорошо, если покажете скриншоты нагрузки контейнеров

Ну или хотя бы скрин команды htop с хостовой машины с докером, чтобы понимать какой расход ресурсов примерно будет
15. andreysidor4uk 194 10.05.23 18:49 Сейчас в теме
(14) За нагрузкой особо не следил, так как заходя на сервер в htop нагрузки совсем никакой.
Прикрепленные файлы:
16. Dach 373 10.05.23 19:12 Сейчас в теме
(15) а какой объем логов ТЖ за 1 час при тех настройках, что сделаны? в моменты пиковых нагрузок, в середине дня например

"Если получилась такая ситуация, что 1С хочет удалить папку с завершившимся процессом, а Promtail читает из неё логи, то она не сможет этого сделать, пока не будет перезапущен Promtail. Поэтому необходимо добавить задание в планировщик, которое будет раз в сутки перезапускать службу Promtail'а, чтобы очищать эти папки."

и вот это не особо понятно:
- во-первых, он что - "держит" все папки, из которых что-то читал (даже если вотпрямщас не читает оттуда)?
- во-вторых - как перезапуск его службы помогает - папки сами удаляются что ли?
17. andreysidor4uk 194 10.05.23 19:52 Сейчас в теме
(16) Сколько получается за 1 час не могу сказать, нет такой информации. При текущих настройках все логи, что в prometheus, что в loki хранятся 15 дней. Я прикрепил файл с данными занимаемого пространства в текущий момент.


во-первых, он что - "держит" все папки, из которых что-то читал (даже если вотпрямщас не читает оттуда)?

Да, именно, он не дает удалять эти папки. И при попытке зайти в такую папку или удалить ее - будет ошибка доступа, скрин тоже приложу.

во-вторых - как перезапуск его службы помогает - папки сами удаляются что ли?

Да, все верно. Стоит только остановить службу promtail и папки сразу же исчезнут. Думаю стоит написать issue на гитлаб по этому поводу, но у меня пока руки не дошли.
Прикрепленные файлы:
18. PerlAmutor 129 11.05.23 05:20 Сейчас в теме
Никто не сталкивался с проблемой, когда при слишком частом обновлении в браузере, который показывает дашборды графаны забивается вся память и он просто прекращает показывать что-либо, висит с диалогом, что страница не отвечает? Мы поигрались с графаной какое-то время, смотреть графики НЕ в реальном времени стало не интересно. Вернулся к обычному анализу ТЖ.
20. andreysidor4uk 194 11.05.23 07:07 Сейчас в теме
(18) Пока такой проблемы не встречал, возможно пофиксили.
Для ТЖ можно оставить из стека только Grafana, Loki, Promtail и радоваться удобному анализу. Анализ журнала через Loki - это прям другой уровень ощущений, рекомендую)))
21. bulpi 215 11.05.23 08:13 Сейчас в теме
"уменьшение времени проведения заказа покупателя.

За первые три месяца было проделано довольно много работы"

Вы живете в какой-то другой вселенной. За 3 месяца я разбираюсь в задаче с нуля, пишу конфу, внедряю, обучаю сотрудников, сопровождаю. И мониторинг не нужен, так как все работает быстро.
Где я свернул не туда ?
23. andreysidor4uk 194 11.05.23 08:31 Сейчас в теме
(21) Поздравляю, надеюсь мы когда-то достигнем вашего уровня!
kuza_87; mip128; d4rkmesa; +3 Ответить
22. JohnyDeath 301 11.05.23 08:19 Сейчас в теме
Отличная статья.
Я у себя тоже развернул похожую красоту. Пока не сделал APDEX и ТЖ, но это прямо в ближайших планах.
Но зато есть мониторинг Журнала регистрации: вывел в табло общее количество ошибок ЖР и ниже табличкой сами ошибки. Сам ЖР экспортируется в Кликхаус прекрасной утилитой https://github.com/akpaevj/OneSTools.EventLog.
Еще прикрутил мониторинг используемых лицензий и прочих внутренних показателей 1с-сервера с помощью https://github.com/JohnyDeath/prometheus_1C_exporter
Прикрепленные файлы:
triviumfan; kuntashov; maksa2005; andreysidor4uk; +4 Ответить
24. andreysidor4uk 194 11.05.23 08:34 Сейчас в теме
(22) Спасибо
И спасибо за отличные ссылки, не находил этих инструментов. Изучу, возьму на вооружение, думаю пригодится)
32. triviumfan 93 12.05.23 16:00 Сейчас в теме
25. JohnyDeath 301 11.05.23 09:28 Сейчас в теме
Можете показать обработку по отправке данных APDEX?
Для 1С я создал очень простую обработку, которая раз в 15 секунд делала довольно простой запрос в базу, забирала подготовленные данные и отправляла их HTTP запросом в pushgateway
26. andreysidor4uk 194 11.05.23 10:00 Сейчас в теме
(25) Специально не выкладывал обработку, потому что она была написана на коленке и пока что не очень подходит для презентации, но видимо придется)))
Прикрепленные файлы:
PrometheusExporter.epf
kuntashov; JohnyDeath; +2 Ответить
41. JohnyDeath 301 07.07.23 11:37 Сейчас в теме
(26) Подскажи, пожалуйста, зачем ты в коде счетчик по количеству операций и их длительность суммируешь с предыдущим отправленным значением?
Значение = ТекущиеЗначения.Получить(Стр.КлючеваяОперация + "count");
		Если Значение = Неопределено Тогда
			Значение = 0;	
		КонецЕсли;
		Значение = Значение + Стр.КоличествоВыполнений;
		
		ЗаписатьМетрику(
			Запись,
			ИмяМетрики,
			Значение,
			Новый Структура("operation", Стр.КлючеваяОперация)
		);
Показать

т.е. получается, что у меня в Замерах есть две записи одной и той же ключевой операции с длительностью, допустим, 10 сек. каждая
Отправляем в прометей данные: Количество = 2, Длительность = 20
Далее появляется еще 3 записи по 15 сек. каждая.
И в этот раз отправится не (Количество = 3 и Длительность = 45), а (Количество = 5 и Длительность = 65).
Почему сделано именно так?
42. andreysidor4uk 194 08.07.23 10:51 Сейчас в теме
(41) В Prometheus есть несколько возможных типов метрик. Histogram и Summary я отмел из-за их сложности и отсуствия времени для разбирательства. Остался тип Gauge, который подходит для величин, которые могут увеличиваться и уменьшаться. Но он мне не подходит, так как я хотел видеть две метрики: средняя длительность выполнения операций и количество операций в единицу времени, что бы их вычислить надо иметь метрики с типом Counter. А Counter - это монотонно увеличивающийся счетчик, который я и организовал.
Возможно вам еще даст чуть больше информации прочтение документации по типам метрик.
https://prometheus.io/docs/concepts/metric_types/
28. user1946710 11.05.23 16:44 Сейчас в теме
Тоже в свое время "игрался" с плагинами и прочей оберткой для графаны, в итоге нашел свой идеал в связке telegraf-》influxdb - 》grafana. На дашбоарде вывожу смесь из API данных надерганых из различных серверов, БД, ПО и даже есть данные спарсеные с html страниц. В общем что угодно без ограничений и привязки к забиксам, пртг и прочему
JohnyDeath; andreysidor4uk; +2 Ответить
29. JohnyDeath 301 11.05.23 21:34 Сейчас в теме
(28)
В этой связке
telegraf-》influxdb - 》grafana

telegraf - это https://github.com/telegraf/telegraf ? Т.е. вся информация сначала отдается из какой-то системы/БД в бот телеграму, который перекидывает её в influxdb, уже к которой прикручена графана? Всё верно?

что угодно без ограничений и привязки к забиксам, пртг и прочему

А чем в данном случае influxdb отличается от забикса, пртг и "прочего"? Это такая же СУБД, заточенная на хранение временных рядов. В чем преимущества?
30. andreysidor4uk 194 12.05.23 06:38 Сейчас в теме
(29) Могу ответить про телеграф. Вы немного не тот телеграф нашли, вот нужный https://www.influxdata.com/time-series-platform/telegraf/.
JohnyDeath; +1 Ответить
31. user1946710 12.05.23 13:10 Сейчас в теме
(29)
Телеграф и ИнлюксБД были выбраны как связка которая позволяет выполнить любое действие а его результат записать в БД с минимум усилий. К примеру есть http rest API строка которая нам возвращает определенные данные в формате json вот такая строка конфигурации телеграфа запросит эти данные, распарсит, и запишет в БД.

[[inputs.http]]
insecure_skip_verify=true
urls = ["https://_____/api/table.json?username=&passhash=&content=sensors&id=6338&columns=objid,type,name,device,host,status,group"]
interval = "16s"
method = "GET"
data_format = "json"
json_query = "sensors"
tag_keys = ["objid"]
json_string_fields = ["type","name","device","host","status_raw","group"]
name_override = "http"

А вот такая строка конфига запускает скрипт который вернет данные в формате csv и сложет в БД

[[inputs.exec]]
# graylog search message cp fan


commands = ["/Python39/Script/greylog/greylog_CP_fan.sh"]
interval = "300s"
timeout = "25s"
data_format = "csv"
csv_header_row_count = 0
csv_column_names = ["Mytime","IP"]
csv_skip_rows = 0
csv_skip_columns = 0
csv_delimiter = "&"
csv_comment = ""
csv_trim_space = true
csv_tag_columns = ["Mytime"]
name_override = "exec_grlcpfan"
[inputs.exec.tags]
influxdb_database = "exec_grlcpfan"


Дальше с стороны графаны стандартный плагин включенные в графану по работе с инфлюкс и обычными запросами выдергиваем из БД нужные данные
SEL ECT IP fr om "100h"."exec_grlcpfan" where IP =~ // AND time >= now()-3000s

И рисуем эти данные как угодно , пример дашборда на скриншоте

В целом мой подход при поверхностном осмотре может показатся сложным, но если разобраться - он позволит вывести в графану что угодно без лишних стеков и прослоек . При желании можно сложить скрипты в kron а хранить данные в PostgreSQL или любая другая вариация которая даст нам то же, но будет по моему мнению излишне усложненной.
Прикрепленные файлы:
JohnyDeath; andreysidor4uk; +2 Ответить
33. JohnyDeath 301 12.05.23 16:05 Сейчас в теме
(31) как это "без лишних стеков", если вы предлагаете свой стек из как минимум двух новых технологий?
34. user1946710 12.05.23 19:57 Сейчас в теме
Без лишних - в плане этот стек универсальный. Я собираю данные из десятка различных серверов с различными сервисами + запрашиваю напрямую из различных БД, и есть даже скрипты которые открывают нужные страницы и парсят нужные данные из html. Мой подход позволит работать с чем угодно, многие другие решения ограничены своим предназначением и набором функционала.
andreysidor4uk; +1 Ответить
35. ropots 19.05.23 10:31 Сейчас в теме
Спасибо за статью, очень заинтересовался.
Все получилось кроме ms sql exporter почему 4000 порт?
и в docker-compose.yml какой ip должен быть?
в Prometheus Targets Endpoint mssql_exporter ошибка,порт 1443 должен быть использован?
Вообщем не могу понять какая служба берет данные метрики с MS SQL
36. andreysidor4uk 194 19.05.23 18:03 Сейчас в теме
(35) 4000 - это порт, на котором будут доступны метрики, если перейти по адресу http://<IP сервера монторинга>:4000/metrics
В docker-compose.yml в адресе сервера должен быть IP адрес сервера MSSQL.
Прометеус в таргетах может ругаться из-за того, что служба mssql_exporter не поднимается. Возможно она поднимается как раз из-за неправильных параметров.
47. ropots 26.10.23 07:23 Сейчас в теме
(36)
Добрый день, можете показать состав файла

filename: C:\_APP\promtail\positions.yaml
48. andreysidor4uk 194 26.10.23 08:20 Сейчас в теме
(47) Добрый день, да, конечно. Файл в текущий момент времени выглядит вот так:
positions:
  H:\TECH_LOGS\_FOR_LOKI\crserver_4836\23102607.log: "798"
  H:\TECH_LOGS\_FOR_LOKI\crserver_4836\23102608.log: "0"
  H:\TECH_LOGS\_FOR_LOKI\httpd_35780\23102607.log: "103521"
  H:\TECH_LOGS\_FOR_LOKI\httpd_35780\23102608.log: "32790"
  H:\TECH_LOGS\_FOR_LOKI\mmc_34752\23102607.log: "0"
  H:\TECH_LOGS\_FOR_LOKI\mmc_34752\23102608.log: "0"
  H:\TECH_LOGS\_FOR_LOKI\ragent_7436\23102607.log: "1388875"
  H:\TECH_LOGS\_FOR_LOKI\ragent_7436\23102608.log: "506634"
  H:\TECH_LOGS\_FOR_LOKI\rmngr_42452\23102607.log: "611723730"
  H:\TECH_LOGS\_FOR_LOKI\rmngr_42452\23102608.log: "214893943"
  H:\TECH_LOGS\_FOR_LOKI\rphost_2736\23102607.log: "271770"
  H:\TECH_LOGS\_FOR_LOKI\rphost_3808\23102607.log: "4061128"
  H:\TECH_LOGS\_FOR_LOKI\rphost_11252\23102607.log: "25088"
  H:\TECH_LOGS\_FOR_LOKI\rphost_14844\23102607.log: "3531592"
  H:\TECH_LOGS\_FOR_LOKI\rphost_25616\23102607.log: "654632153"
  H:\TECH_LOGS\_FOR_LOKI\rphost_25616\23102608.log: "144402541"
  H:\TECH_LOGS\_FOR_LOKI\rphost_26000\23102607.log: "51034"
  H:\TECH_LOGS\_FOR_LOKI\rphost_33548\23102607.log: "635157063"
  H:\TECH_LOGS\_FOR_LOKI\rphost_33548\23102608.log: "106582438"
  H:\TECH_LOGS\_FOR_LOKI\rphost_34008\23102607.log: "23810"
  H:\TECH_LOGS\_FOR_LOKI\rphost_38388\23102607.log: "912624"
  H:\TECH_LOGS\_FOR_LOKI\rphost_42036\23102607.log: "2112659"
  H:\TECH_LOGS\_FOR_LOKI\rphost_42632\23102607.log: "1864189"
  H:\TECH_LOGS\_FOR_LOKI\rphost_44268\23102607.log: "8234147"
  H:\TECH_LOGS\_FOR_LOKI\rphost_44912\23102607.log: "22538628"
  H:\TECH_LOGS\_FOR_LOKI\rphost_48208\23102608.log: "917115"
  H:\TECH_LOGS\_FOR_LOKI\rphost_50708\23102607.log: "20544"
  H:\TECH_LOGS\_FOR_LOKI\rphost_51088\23102607.log: "5017089"
  H:\TECH_LOGS\_FOR_LOKI\rphost_51572\23102607.log: "9254727"
  H:\TECH_LOGS\_FOR_LOKI\rphost_51572\23102608.log: "195270568"
  H:\TECH_LOGS\_FOR_LOKI\rphost_53512\23102607.log: "6107015"
  H:\TECH_LOGS\_FOR_LOKI\rphost_53600\23102607.log: "58121471"
  H:\TECH_LOGS\_FOR_LOKI\rphost_53600\23102608.log: "113177044"
  H:\TECH_LOGS\_FOR_LOKI\rphost_53700\23102607.log: "3057523"
Показать
49. ropots 26.10.23 09:42 Сейчас в теме
(48) т.е. изначально он просто пустой, promtail сам туда пишет свои точки остановки, верно?
50. andreysidor4uk 194 26.10.23 10:31 Сейчас в теме
(49) Да, всё верно. Promtail сам создает и заполняет этот файл.
37. ptica 26.05.23 20:20 Сейчас в теме
Спасибо. Очень интересно. Как понимаю в loki есть метки которые относятся ко всему файлу, например filename и есть метки которые мы можем получить из строки, например event, user. То есть если мы извлекаем логи из одного файла, то у всех строк будет одинаковая метка filename но в общем случае разные event, user. Но можно ли как то получить метку из одной строки и применить ее для остальных строк? Такая задача есть для файлов логов jenkins, там вначале лога есть строка с информацией на какой машине выполняется pipeline, и очень бы хотелось сделать из этой строки метку которую применить к остальным строкам, чтобы потом удобно фильтровать логи по имени машины.
andreysidor4uk; +1 Ответить
38. andreysidor4uk 194 28.05.23 18:53 Сейчас в теме
(37) Вообще я намеренно убирал тег filename, так как 1С генерит слишком много уникальных имен файлов, а документация Loki не рекомендует делать метки с большим количеством уникальных значений.
Буквально на прошлой неделе нам понадобилось добавить в лог информацию о pid процесса, по которому пишутся логи, а он находится как раз в части имени файла. Я не стал добавлять его как метку (по тем же причинам, что и filename), а добавил просто в начало записи каждого лога. Конфигурация promtail:
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: C:\_APP\promtail\positions.yaml

clients:
  - url: http://<IP сервера с Loki>:3100/loki/api/v1/push

# Конфиг
scrape_configs:
  - job_name: ones-tj
    pipeline_stages:
      - multiline:
          firstline: '^.*[\d]{2}:[\d]{2}.[\d]+-[\d]+,'
          max_wait_time: 3s
          max_lines: 5000
      - regex:
          expression: "^.*(?P<time>[\\d]{2}:[\\d]{2}.[\\d]+)-(?P<duration>[\\d]+?),(?P<event>\\S+?),.*process=(?P<process>\\S+?),"
      - regex:
          expression: "^.*p:processName=(?P<processName>\\S+?),"
      - regex:
          expression: "^.*Usr=(?P<user>.*?),"
      - template:
          source: timestamp
          template: '{{ $val := .filename | regexFind "[1-9][0-9][0-1][0-9][0-3][0-9][0-2][0-9]" }}20{{ $val | substr 0 2 }}-{{ $val | substr 2 4 }}-{{ $val | substr 4 6 }}T{{ $val | substr 6 8 }}:{{ .time }}+03:00'
      - template:
          source: pid
          template: '{{ $val := .filename | regexFind "_[0-9]+" }}{{ $val | regexFind "[0-9]+"}}'
      - template:
          source: message
          template: 'pid={{ .pid }},{{ .Entry }}'
      - labels:
          event:
          user:
      - timestamp:
          format: RFC3339Nano
          source: timestamp
      - output:
          source: message
      - labeldrop:
          - filename
      - metrics:
          event_duration:
            type: Counter
            description: "Event duration from ones tj"
            source: duration
            prefix: promtail_onestj_
            max_idle_duration: 24h
            config:
              action: add

    static_configs:
      - targets:
          - localhost
        labels:
          job: ones-tj
          __path__: H:\TECH_LOGS\_FOR_LOKI\**\*.log
Показать


Вычленение pid и добавление его в начало лога это вот эти две настройки:
      - template:
          source: pid
          template: '{{ $val := .filename | regexFind "_[0-9]+" }}{{ $val | regexFind "[0-9]+"}}'
      - template:
          source: message
          template: 'pid={{ .pid }},{{ .Entry }}'

Вам надо сделать примерно тоже самое, только изменить регулярку и новую метку добавить в labels, а добавление в сам лог - по желанию. Надеюсь помог =)
39. ybuuth 33 20.06.23 08:52 Сейчас в теме
Крутейший пост. А как связаны Локи и Прометеус? у вас на схеме они стрелками связаны, но из текста я не увидел их связь
Взял ваши настройки для Промтейла, но он отказался запускаться пока не изменил timestamp на другую переменную (time), может кому поможет.
- template:
          source: time
          template: '{{ $val := .filename | regexFind "[1-9][0-9][0-1][0-9][0-3][0-9][0-2][0-9]" }}20{{ $val | substr 0 2 }}-{{ $val | substr 2 4 }}-{{ $val | substr 4 6 }}T{{ $val | substr 6 8 }}:{{ .time }}+03:00'
      - labels:
          event:
          user:
      - timestamp:
          format: RFC3339Nano
          source: time
Показать
andreysidor4uk; +1 Ответить
40. andreysidor4uk 194 20.06.23 20:19 Сейчас в теме
(39) Спасибо. Loki так же предоставляет метрики как и остальные сервисы. Prometheus собирает эти метрики, так он связан на схеме. В тексте об этом я не говорил, так как это не очень важная деталь, но связь как таковая есть, по-этому она указана на схеме =)
43. kuza_87 28 08.08.23 12:39 Сейчас в теме
Большое спасибо за интересную и содержательную статью. Буду скоро тоже мониторинг разворачивать и воспользуюсь твоими доработками. подскажи, какие параметры сервера на Debian для всех твоих служб? (память/проц/ядра)
44. andreysidor4uk 194 15.08.23 21:01 Сейчас в теме
(43) Параметры в фото. RAM даже много выделено, думаю и 4-5GB хватило бы с головой. Диск тоже выделен в 200GB только из-за того, что логи и собираемые метрики хранятся 30 дней, а не 2 недели (по-умолчанию)
Прикрепленные файлы:
45. ybuuth 33 23.09.23 22:08 Сейчас в теме
Андрей, мне кажется что в вашем compose.yaml у Графаны должна быть строка копирования ваших источников данных, которые вы определили в каталоге grafana/provisioning/datasources
volumes:
    # Grafana's DB files
      - grafana_data:/var/lib/grafana
    #автоподключение источника данных prometheus, loki
      - ./grafana/provisioning/datasources:/etc/grafana/provisioning/datasources

У вас я ее не увидел, каким образом вы копируете? Я еще разбираюсь в докере, может быть детский вопрос. Буду признателен за помощь
andreysidor4uk; +1 Ответить
46. andreysidor4uk 194 06.10.23 15:22 Сейчас в теме
(45) Добрый день. Может я не правильно понял вопрос, но за каталог grafana/conf/provisioning/datasources отвечает строка:
- ./grafana/conf:/etc/grafana

Все вложенные каталоги прокинуться автоматически.
Оставьте свое сообщение