Как мы научились автоматически отслеживать ошибки в 1С

04.02.20

База данных - Администрирование СУБД

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

Intro

В прошлом году мы развернули ElasticSearh и загрузили туда логи из Журнала регистрации 1С по основным нашим базам. Разово исправили ошибки и потом периодически просматривали статистику. Это была несистемная работа, которая занимала время, была нерегулярной и весьма непредсказуемой.

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

Плюсы такого решения:

  1. Оно системное и не зависит от человеческого фактора.
  2. Частоту проверки можно поставить любую, хоть раз в минуту. Т.е. оно оперативнее.
  3. Правила на события можно настроить очень гибкие, которые человек, проверяющий elastic, может не обнаружить.

Минусы тоже есть:

  1. Спам о повторяющихся ошибках, на которые мы не можем повлиять.

Итак, для решения этой задачи была выбрана ElastAlert, которая как будто специально была написана под наши требования.

ElastAlert — это фреймворк, написанный на питоне, который позволяет непрерывно мониторить ElasticSearch на предмет аномалий, различных пиков и всяких прочих паттернов. ElastAlert состоит из двух компонент: 1. Правила мониторинга, 2. Правила оповещения. Все довольно просто.

Виды правил

ElastAlert поддерживает следующие виды правил:

  1. Частотные события (frequency) — когда событие произошло X раз за Y времени
  2. Резкий скачок (spike) — когда норма событий, по сравнению с другими периодом, увеличивается или уменьшается.
  3. Тишина в эфире (flatline) — когда меньше, чем X событий за Y времени.
  4. Черно-белые списки (blacklist/whitelist) — когда случается событие, одно из полей которого попадает в черный или белый список.
  5. Любое событие (any) — любое событие по заданному фильтру.
  6. Изменение (change) — когда у поля два разных значения за определенный период времени
  7. И многие другие, см.здесь

Виды оповещений

Оповещения в ElastAlert есть уже готовые на любой вкус и цвет, но если готовые не устраивают, то можно дописать свои. Инструкция по написанию своих оповещений здесь.

Виды готовых оповещений: CommandEmail, Jira, OpsGenie, SNS, HipChat, Stride, MS TeamsSlack, Mattermost, Telegram, GoogleChat, PagerDuty, PagerTree, Exotel, TwilioVictorOps, Gitter, ServiceNow, Debug, Stomp, Alerta, HTTP POST, Alerter, Line Notify, theHive, Zabbix.

Как начать

Установить с помощью PIP

$ pip install elastalert

И еще

$ pip install "setuptools>=11.3"
$ python setup.py install

Установим клиент Elasticsearch:

$ pip install "elasticsearch>=5.0.0"

Дальше открываем файл config.yaml и настраиваем наш ElastAlert.

Основные параметры:

  1. rules_folder  — папка в которой лежат правила
  2. es_host  — адрес, где установлен ElasticSearch
  3. es_port  — порт ElasticSearch
  4. es_username — необязательный параметр, логин к ElasticSearch
  5. es_password — необязательный параметр, пароль к ElasticSearch.

Создадим индексы в ElasticSearch для ElastAlert c помощью elastalert-create-index:

$ elastalert-create-index
New index name (Default elastalert_status)
Name of existing index to copy (Default None)
New index elastalert_status created
Done!

Переходим к созданию правил. В папке example_rules вы найдете несколько примеров использования правил. Но я приложу наши, с продакшена:

 # Имя хоста  
 es_host: hostname 
 # Имя правила. Не должно повторяться!
 name: frequencyERP
 # Вид правила
 type: frequency
 
 # Настройки дат. Важно указать конкретный формат, иначе работать не будет.
 use_local_time: true
 timestamp_field: Дата
 timestamp_type: custom
 timestamp_format: "%Y-%m-%dT%H:%M:%S"

 # Имя лога в ElasticSearch
 index: 1c-eventlog-*

 # Ключ группировки
 query_key: "ИнформационнаяБаза"
 # Количество событий
 num_events: 100
 # За какой период проверяем
 timeframe:
   hours: 1
 
 # Раздел фильтрации
 filter:
 # Term - точное соответствие
 term:
 ИнформационнаяБаза: "osn"
 # Query - вхождение слова
 query:
 query_string:
   query: "Уровень: Ошибка" 
 
 # Раздел оповещения
 alert:
 # Способ оповещения 
 email:
  from_addr: "admin@somedomain.com"
  email: "support@somedomain.com" 
 alert_subject: "Превышение количества ошибок в <Имя базы>"
 smtp_host: "XXX.XXX.XXX.XXX"
 smtp_port: XX

Тестируем правило:

$ elastalert-test-rule example_rules/example_frequency.yaml

Если все ок, то запускаем в прод. Указываем конфиг с папкой правил, чтобы работали все правила, находящиеся в ней:

$ python -m elastalert.elastalert --verbose --config config.yaml

Наслаждаемся.

Как это работает у нас

Для себя мы настроили два вида правил:

  1. Частота одной ошибки в час (больше 10)
  2. Частота всех ошибок в час (больше 100)

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

Пример кейса: коллеги от бизнеса поменяли все пароли для доступа к одному из сервисов и 1С безуспешно щемилась в сервис и писала ошибки в журнал регистрации. ElastAlert сообщил нам об этом и мы узнали о проблеме и пофиксили ее.

Пример сообщения от ElastAlert в службу поддержки:

 frequencyERP
 At least 10 events occurred between 2020-01-24 14:15 RTZ 2 (зима) and 2020-01-24 15:15 RTZ 2 (зима)
 id: hEXa1m8BFUH0tc2HXGmC
 index: 1c-eventlog
 type: record
 numhits: 1110
 nummatches: 24
 ВспомогательныйIPПорт: 
 Данные: 
 Дата: 2020-01-24T12:15:38Z
 ИмяПользователя: XXX
 ИмяПриложения: BackgroundJob
 ИнформационнаяБаза: XXX
 Комментарий: ОбщийМодуль.XXX.Модуль(173)}: Ошибка при вызове метода контекста (ЗаполнитьЗначенияСвойств) ЗаполнитьЗначенияСвойств(СтрокаРТиУ, СтрокаЗНЗ, , "Субконто1");
 по причине:
 Недопустимое значение параметра (параметр номер '4') (Поле 'Субконто1' объекта 'Документ табличная часть строка: Расшифровка затраты' не обнаружено).
 Идентификатор записи: 45ed0c07-692f-4f86-9059-468f1910657c
 Компьютер: xxx
 КраткоеОписание: ОбщийМодуль.XXX.Модуль
 Метаданные: РегистрСведений.ПроизошедшиеБизнесСобытия
 ОсновнойIPПорт: XXX
 Пользователь: 36a7befd-7119-438c-9400-56153da57a0c
 ПредставлениеДанных: 
 ПредставлениеМетаданных: Регистр сведений. Произошедшие бизнес-события
 ПредставлениеПриложения: Фоновое задание
 ПредставлениеСобытия: ОбработкаБизнесСобытий
 РабочийСервер: XXX
 Сеанс: 1427
 Событие: ОбработкаБизнесСобытий
 Соединение: 658922
 Ссылка: 
 СтатусТранзакции: Нет транзакции
 Транзакция: 
 Уровень: Ошибка

Выводы

Мы убрали человеческий фактор в контроле ошибок Журнала регистрации, теперь у нас за это отвечает робот. Повысили оперативность реагирования на ошибки. Научились работать с фреймворком ElastAlert.

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

В планах: настроить дополнительные правила для возникновения новых ошибок, которых еще не было в логах. Настроить работу ElastAlert как службы с помощью Supervisor.

Мы ищем разработчиков в наш дружный коллектив. Описание вакансии

ElastAlert ElasticSearch ELK Мониторинг

См. также

Администрирование СУБД Системный администратор Платформа 1С v8.3 Бесплатно (free)

Пользовался ранее https://infostart.ru/1c/articles/1120161/#, но она устарела, т.к. службы запускаются через systemctl, да и сами службы слегка изменились. Возможно, где-то на ИТС уже есть нужная инструкция, но мне не попалась.

15.11.2024    299    Baser    2    

1

HighLoad оптимизация Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Россия Бесплатно (free)

Мы исследуем проблему долгого выполнения запросов PostgreSQL при использовании конструкции VALUES: когда она возникает, как на нее можно повлиять, а главное, почему ее продуманная отработка важна для более быстрого функционирования решений на базе 1С

12.11.2024    829    Tantor    19    

14

HighLoad оптимизация Администрирование СУБД Механизмы платформы 1С Программист Платформа 1С v8.3 ИТ-компания Россия Бесплатно (free)

В данной статье мы рассмотрим, как работает механизм временных таблиц на postgres на платформе 8.3.23 и что изменилось в нем при добавлении новых возможностей в платформе 8.3.25. А также на примере покажу, как понимание работы платформы позволяет оптимизировать СУБД для работы с 1С.

29.10.2024    3142    Tantor    38    

34

Администрирование СУБД Системный администратор Программист Бесплатно (free)

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

08.10.2024    733    AlexSvoykin    1    

7

Администрирование СУБД Системный администратор Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Анализ и решение ошибок СУБД. Во время реиндексации базы Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Не удалось найти объект "ИмяБазы.dbo._RefSInf21806", так как он не существует, или отсутствуют разрешения. Во время проверки целостности Ошибка СУБД: Microsoft SQL Server Native Client 11.0: Недопустимое имя объекта "dbo._RefSInf21806".

19.09.2024    4348    Xershi    10    

17

HighLoad оптимизация Администрирование СУБД Архивирование (backup) Системный администратор Программист Платформа 1С v8.3 Бесплатно (free)

Бэкап в Postgres состоит из набора граблей, которые нужно обойти для успешного восстановления. Они заложены в самых неожиданных местах от предмета резервного копирования (база или кластер) до структуры каталогов. Один неверный шаг и восстановление будет невозможным. Почему нельзя было сделать проще, как в MS SQL или Oracle? Почему бэкап в Postgres оставляет впечатление чьей-то лабораторной работы? Статья адресована прежде всего специалистам 1С, избалованным комфортом в MS SQL, в суровых буднях импортозамещения на Postgres.

13.08.2024    2971    1CUnlimited    9    

4
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. wowik 890 04.02.20 15:51 Сейчас в теме
+1. Круто! У нас пока так работает https://infostart.ru/public/997513/ .
Andreeei; axae; Xershi; YPermitin; +4 Ответить
2. slozhenikin_com 303 04.02.20 16:21 Сейчас в теме
(1) Молодцы! У ElastAlert есть крутая настройка по срабатыванию по событиям. Это прям плюс.
YPermitin; +1 Ответить
12. Xershi 1555 05.02.20 00:21 Сейчас в теме
(1) спасибо за идею. Внешнюю обработку с регламентом написать как 2 пальца. И не нужно сервисы раскатывать!
Но у автора задача шире, но и знания нужны смежные и задач по ним не так уж и много.
rpgshnik; Andreeei; +2 Ответить
13. axae 110 05.02.20 07:18 Сейчас в теме
(1) Честно, для задачи смотреть ошибки по журналу регистрации не вижу смысла аж Elastic разворачивать. Сделано, как у вас, только регламентное отправляет новые записи ошибок и плюс сообщения о нарушении прав доступа не в почту, а в web-сервис отдельной базы 1С и телеграм.
14. slozhenikin_com 303 05.02.20 07:43 Сейчас в теме
(13) нам нужен для быстрого анализа лога, не только ошибок. Например, быстро посмотреть почему лог транзакций растет. Попробуйте, классно работает.
23. pm74 203 05.02.20 17:03 Сейчас в теме
(14)
посмотреть почему лог транзакций растет.

sql лог имеете в виду ?
28. bugagashenka 203 05.07.21 06:49 Сейчас в теме
(13)Честно, я бы глянул, как Ваше регламентное задание пытается получить ошибки за последний час, если размеры журнала давно перевалили уровень киоска у дома. Штатные средства имеют место на существование, если 1С нормально успевает обрабатывать файлы, но, увы, лично у меня даже при попытке чтения в несколько потоков и поминунтно(!) вызывались только дикие тормоза и отстутствие стабильности. Поэтому пришлось пилить скрипт для парса файлов журнала и выгрузку данных в ES. И теперь любые, даже самые сложные отборы, даже по комментарию, отрабатывают не более нескольких секунд.
33. axae 110 26.07.21 09:41 Сейчас в теме
(28)
ипт для парса файлов журнала и выгрузку данных в ES. И теперь любые, даже сам
Не-не, если есть задача искать что-то по журналу регистрации, то конечно нужен ES. У меня-то задача была попроще - отслеживать появление только новых ошибок в журнале, чтобы отработать их. Поиск не требовался. Если извлечение журнала за последний час требует больше двух минут, то нужно чем-то сторонним обрабатывать журналы. Но я наверное просто не представляю, чем еще можно извлечь данные из журнала, кроме как им самим...
3. VmvLer 04.02.20 16:53 Сейчас в теме
Кружок "Крутые перцы" считать открытым, все садимся по кочкам и хвалим свое болото.
Andreeei; YPermitin; for_sale; +3 8 Ответить
10. slozhenikin_com 303 04.02.20 22:59 Сейчас в теме
(3) Это Вы так завуалировано написали что я потратил время на то, чтобы написать статью и поделиться опытом? Браво!
bugagashenka; Bassgood; wowik; Бубузяка; user1064367; +5 Ответить
16. sovetnik 05.02.20 11:03 Сейчас в теме
(3)
ые перцы" считать открытым, все садимся по кочкам и хвалим свое болото.


Конструктивно!
17. VmvLer 05.02.20 11:13 Сейчас в теме
(16) по факту так и произошло, разве нет?
18. slozhenikin_com 303 05.02.20 11:19 Сейчас в теме
(17) зачем нужен Инфостарт? Чтобы делиться опытом. Можете называть это бахвальством или кружком "Крутые перцы". Суть не меняется.
bladeson; user598655_ilia-bers; +2 Ответить
19. VmvLer 05.02.20 11:24 Сейчас в теме
(18) и? вас смущает что я назвал диспут кружком "Крутые перцы"?
хорошо, как мне вас назвать - "Вялые балаболы"?
не пойму, что не так в определении очевидного)
29. bugagashenka 203 05.07.21 06:51 Сейчас в теме
(19) Вы дверью ошиблись, кружок "Неадекваты" в другом крыле.
bladeson; +1 Ответить
4. Xershi 1555 04.02.20 17:59 Сейчас в теме
Интересная концепция. На винде это все работает?
Как влияет на производительность?
И ключевой момент можно ли разово запустить на ЖР, чтобы увидеть ошибки за указанный период? Допустим установили систему месяц назад, пользователи жалуются, но никто ничего не делает или не можем воспроизвести ошибку.
9. slozhenikin_com 303 04.02.20 22:56 Сейчас в теме
(4) На Винде и раскатывали. Влияния на производительность не обнаружили, т.к. стоит на отдельном сервере. Единственное, раз в 10 минут выгружается журнал регистрации, но оно не тормозит совсем.

Можно разово выгрузить ЖР за месяц в Эластик и с помощью Кибаны или Графаны быстро проанализировать логи.

https://slozhenikin.com/2019/10/04/elk-vremya-izumitelnykh-istorii/
11. Xershi 1555 05.02.20 00:17 Сейчас в теме
(9) ну у меня таких возможностей врятли получится. Скорее всего будет все на 1 сервере. Диски возможно разные будут.
Тогда буду админам скидывать курить.
15. slozhenikin_com 303 05.02.20 07:45 Сейчас в теме
(11) Основная нагрузка на оперативную память. Если ее недостаточно, то лучше не ставить.
5. kwazi 659 04.02.20 18:17 Сейчас в теме
а почему не ЦКК из набора КИП?
6. leemuar 21 04.02.20 20:32 Сейчас в теме
(5) Скорее всего цена, КИП сильно не бесплатный
8. slozhenikin_com 303 04.02.20 22:50 Сейчас в теме
(6) не первоочередное. Быстрее и эффективнее в данном случае развернуть ElastAlert.
7. slozhenikin_com 303 04.02.20 22:49 Сейчас в теме
(5) спасибо за идею.
Но, у нас уже был Эластик и нужно было к нему прикрутить оповещалку.
Во-вторых только ради этого покупать ЦКК не хочется.

У нас запущен проект по переезду на новый сервер, там уже купим КИП и напишу по результатам:)
20. comol 5107 05.02.20 12:55 Сейчас в теме
Graylog и Clickhouse не предлагать, да? :)
21. slozhenikin_com 303 05.02.20 13:25 Сейчас в теме
(20) Предлагать, конечно. Насколько я понял, graylog умеет и алерты слать? В чем его плюсы, по сравнению с моей схемой?
22. comol 5107 05.02.20 13:47 Сейчас в теме
(21) Ну все и не опишешь, например логи может не в эластике хранить :))). Грузить их может в многопоточном режиме через стриминговый сервис или сервис очередей... Интерфейс опять же есть хоть какой то... Может аккумалировать и управлять разными источниками логов... можно настроить автоархивацию и т.п. Ну и конечно в очередной раз повторюсь логи в эластике - зашквар.
25. slozhenikin_com 303 06.02.20 15:29 Сейчас в теме
(22) Что Вы описываете, похоже на высоконагруженные системы. Нам в данный момент с Эластиком комфортно: при выгрузке ничего не висит и лог за месяц занимает 18 гигов. Чистим периодически. Когда станем побольше, задумаемся о других способах.

Спасибо за информацию.
30. bugagashenka 203 05.07.21 07:15 Сейчас в теме
(22)проходили это. Выгрузка штатными средствами безумно долгая. Даже в 10 потоков и по одной минуте. Была мысль положить все в отдельную базу MSSQL и морду написать на 1С. Но все уперлось в отборы и поиск стал ничуть не лучше штатного. В эластике ищет моментально.
И почему зашквар непонятно, если есть инструмент, он работает лучше остальных, его проще админить и он гораздо быстрее остальных
31. comol 5107 05.07.21 12:41 Сейчас в теме
(30) 1) Если он работает лучше и быстрее вашей поделки это не значит "лучше остальных".
2) у нас graylog + kafka + clickhouse работает намного лучше
3) Недавно Овсянкин кидал ссылку на инструмент opensource для логов в clickhouse.
Впрочем каждый для себя решает
32. bugagashenka 203 05.07.21 17:47 Сейчас в теме
(31) воу, воу, палехче, к чему напряг?
Какой моей поделки? И что именно лучше?
2. Как именно логи выгружаются? Если штатно, то большой лог опухнет выгружать.
3. Чем больше инструментов, тем лучше, каждый для своей экосистемы выбирает лучшее для себя. И я так и не получил ответа, почему эластик зашквар. Банально, 140Гб жр легко кладется в эластик, и очень быстро ищется. Секунды по всему срезу
24. bulpi 217 06.02.20 14:45 Сейчас в теме
ЭЭЭЭ... Ну я такое делал для себя, только на 1с. Не так все круто и красиво, но зато доступно любому 1с-нику, который ничего не знает про ElastAlert и ElasticSearh
26. slozhenikin_com 303 06.02.20 15:30 Сейчас в теме
(24) Расскажите о своей разработке, наверняка тоже круто!

Насчет "ничего не знает" - давайте развиваться. Мир не сошелся на 1С.
27. adapter 418 07.02.20 11:32 Сейчас в теме
функционал оповещение об ошибках есть и здесь:
LogManager
https://infostart.ru/public/283362/
Оставьте свое сообщение