Как мы научились автоматически отслеживать ошибки в 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 Мониторинг

См. также

Инструкция по установке Postgres для OLTP приложений и 1С. Часть 1. Базовая конфигурация

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

В Postgres достаточно подробная документация, и, видимо, поэтому при инсталляции Postgres для 1С большинство параметров приходится выставлять самим. Параметров в Postgres много, а составить эффективную комбинацию не так просто. Все упрощается, если рассмотреть профиль нагрузки, например, 1С это прежде всего профиль OLTP нагрузки – так устроены его метаданные (объекты). Если сосредоточиться на оптимизации профиля OLTP, понимание Postgres сразу упростится.

15.02.2024    1998    1CUnlimited    14    

26

Очистка устаревших патчей в конфигурациях на базе БСП

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

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

01.02.2024    1108    Sergey1CSpb    19    

14

Как запустить сервер лицензирования 1С на примере облачной платформы

Администрирование СУБД Россия Бесплатно (free)

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

25.01.2024    1387    doctor_it    15    

16

Обслуживание индексов MS SQL Server: как, когда и, главное, зачем?

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

Казалось бы, базовое знание: «индексы надо обслуживать, чтобы запросы выполнялись быстро». Но обслуживание индексов выполняется долго и может мешать работе пользователей. Кроме того, в последнее время популярны разговоры о том, что индексы можно вообще не обслуживать – насколько это оправданно? Рассмотрим: на что влияет обслуживание индексов, когда надо и когда не надо его выполнять, и если надо – как это сделать так, чтобы никому не помешать?

16.01.2024    5015    Филин    10    

42

Резервное копирование журнала транзакций, наконец-то!

Архивирование (backup) Администрирование СУБД Россия Бесплатно (free)

Постараюсь объяснить, зачем нужно резервное копирование именно журнала транзакций, а не только базы данных, и почему я словно сбросил груз, настроив его - как, покажу, естественно. Кстати, будут скрипты T-SQL (с подробными комментариями) - отличный способ сделать администрирование базы более уютным.

04.12.2023    5409    n_mezentsev    15    

23

Дефрагментация индексов MS SQL для платформы 8.3.22

Инструменты администратора БД Администрирование СУБД Абонемент ($m)

Начиная с 8.3.22 фирма "1С" убрала блокировки БД на уровне страниц; если БД расположена в MS SQL, то стала возникать проблема при дефрагментации индексов с использованием команды ALTER INDEX REORGANIZE. Предлагаю модификацию известного скрипта, который позволяет обойти эту проблему.

1 стартмани

15.11.2023    1841    16    baturo    6    

12

Мигрируем с MS SQL на PostgreSQL

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

Переход с MS SQL на PostgreSQL сопряжен с рисками для бизнеса и неизбежно вызывает множество вопросов. Статья посвящена тому, как заранее подготовиться к предстоящей миграции, провести нагрузочное тестирование, выявить возможные проблемы перехода и провести необходимую оптимизацию.

13.11.2023    9693    ivanov660    31    

72

Неочевидный баг Истории данных, убивающий rphost

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

Расследование о том, почему команда ИсторияДанных.ОбновитьИсторию() убивала rphost.

08.11.2023    5842    dsdred    48    

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

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


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

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

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

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

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

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