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

Публикация № 1189910

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

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

Друзья, сегодня я хочу рассказать вам об одной интересной технологии, которая точно поможет повысить качество ваших систем на базе 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.

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

Специальные предложения

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

sql лог имеете в виду ?
3. VmvLer 04.02.20 16:53 Сейчас в теме
Кружок "Крутые перцы" считать открытым, все садимся по кочкам и хвалим свое болото.
Andreeei; YPermitin; for_sale; +3 8 Ответить
10. slozhenikin_com 268 04.02.20 22:59 Сейчас в теме
(3) Это Вы так завуалировано написали что я потратил время на то, чтобы написать статью и поделиться опытом? Браво!
Bassgood; wowik; Бубузяка; user1064367; +4 Ответить
16. sovetnik 05.02.20 11:03 Сейчас в теме
(3)
ые перцы" считать открытым, все садимся по кочкам и хвалим свое болото.


Конструктивно!
17. VmvLer 05.02.20 11:13 Сейчас в теме
(16) по факту так и произошло, разве нет?
18. slozhenikin_com 268 05.02.20 11:19 Сейчас в теме
(17) зачем нужен Инфостарт? Чтобы делиться опытом. Можете называть это бахвальством или кружком "Крутые перцы". Суть не меняется.
19. VmvLer 05.02.20 11:24 Сейчас в теме
(18) и? вас смущает что я назвал диспут кружком "Крутые перцы"?
хорошо, как мне вас назвать - "Вялые балаболы"?
не пойму, что не так в определении очевидного)
4. Xershi 957 04.02.20 17:59 Сейчас в теме
Интересная концепция. На винде это все работает?
Как влияет на производительность?
И ключевой момент можно ли разово запустить на ЖР, чтобы увидеть ошибки за указанный период? Допустим установили систему месяц назад, пользователи жалуются, но никто ничего не делает или не можем воспроизвести ошибку.
9. slozhenikin_com 268 04.02.20 22:56 Сейчас в теме
(4) На Винде и раскатывали. Влияния на производительность не обнаружили, т.к. стоит на отдельном сервере. Единственное, раз в 10 минут выгружается журнал регистрации, но оно не тормозит совсем.

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

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

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

Спасибо за информацию.
24. bulpi 173 06.02.20 14:45 Сейчас в теме
ЭЭЭЭ... Ну я такое делал для себя, только на 1с. Не так все круто и красиво, но зато доступно любому 1с-нику, который ничего не знает про ElastAlert и ElasticSearh
26. slozhenikin_com 268 06.02.20 15:30 Сейчас в теме
(24) Расскажите о своей разработке, наверняка тоже круто!

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

См. также

Выявляем и оптимизируем ресурсоемкие запросы 1С:Предприятия

Производительность и оптимизация (HighLoad) Администрирование СУБД Технологический журнал Структура метаданных v8::Запросы Бесплатно (free)

Обычно предметом оптимизации являются заранее определенные ключевые операции, т.е. действия, время выполнения которых значимо для пользователей. Причиной недостаточно быстрого выполнения ключевых операций может быть неоптимальный код, неоптимальные запросы либо же проблемы параллельности. Если выясняется, что основная доля времени выполнения ключевой операции приходится на запросы, то осуществляется оптимизация этих запросов. При высоких нагрузках на сервер СУБД в оптимизации нуждаются и те запросы, которые потребляют наибольшие ресурсы. Такие запросы не обязательно связаны с ключевыми операциями и заранее неизвестны. Но их также легко выявить и определить контекст их выполнения, чтобы оптимизировать стандартными методами.

24.05.2020    3671    0    DataReducer    19    

Настоящий краудфандинг. Даешь сравнение двух СУБД!

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

Первый вариант сравнения двух СУБД. Каждый может внести правку и получить SM. Приветствуются конструктивные комментарии, начинающиеся словами "Автор ничего не понимает".

11.05.2020    1719    0    Mari_Kuznetzova    20    

Эти занимательные временные таблицы

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 Бесплатно (free)

Кое-что интересное о временных таблицах и работе платформы 1С с ними.

06.04.2020    8632    0    YPermitin    0    

1С + Apache + SSL: Перевод опубликованной базы на защищенное соединение https с сертификатом от Let's encrypt windows

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

Есть куча инструкции про связку с ISS, решил добавить свои 5 копеек, как я это настраивал на Apache на Windows.

02.03.2020    2286    0    rst_filippov    5    

Ошибка при обновлении: Записи регистра сведений стали неуникальными: Двоичные данные файлов

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

Способ обойти ошибку обновления Записи регистра сведений стали неуникальными: ДвоичныеДанныеФайлов.

26.02.2020    2549    0    dubovenko_m    9    

Контроль места на дисках

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

Один из последних случаев на работе. Диск, на котором хранились файлы базы, "развалился", база потеряна. Начали искать копию базы. Копии базы делались на другой диск, но оказалось, что на том диске нет места и копии не делались несколько дней. Так было потеряно несколько дней работы фирмы, кому-то выговор, кого-то уволили((.

20.02.2020    2687    0    wowik    20    

Нюансы лицензирования 1С

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

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

19.02.2020    7555    0    fixin    112    

Автономный сервер. Часть 2 - утилита управления

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

Утилита управления "Автономным сервером" может не только управлять. Какие возможности можно использовать уже сегодня? Разбираем с примерами и ищем отличия от привычных методов.

21.12.2019    8009    0    -vito-    26    

Автономный сервер. Часть 1 - новый вариант сервера

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

В Платформе версии 8.3.14 появился новый вариант серверной архитектуры - "Автономный сервер" (бета-версия). Выясняем, что это такое, какова сфера его применения, что он позволяет уже сейчас, чего можно ожидать.

21.12.2019    10100    0    -vito-    19    

ELK. Время изумительных историй!

Журнал регистрации Работа с интерфейсом v8 1cv8.cf Бесплатно (free)

Всем привет! Сегодня хочу рассказать вам несколько полезных историй про то как нам помог Elastic search в связке с Kibana. Про сам Elastic рассказывать не буду, уже все давным давно описали и до меня. Все обычно говорят что это полезно, это классно. В то же время, очень мало кто рассказывает про практические ситуации: когда и как помог Elastic. Итак, начнем.

31.10.2019    7510    0    slozhenikin_com    27    

Обслуживание баз данных. Не так просто, как кажется

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 1cv8.cf Бесплатно (free)

Считаете, что обслуживание индексов и статистик дело простое? Что ж, это не всегда так.

14.10.2019    15127    0    YPermitin    28    

Кластер серверов 1С

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

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

24.09.2018    40233    0    a.doroshkevich    67    

Оптимизируй это! Или MS SQL и Экспертный подход творят чудеса!

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 Бесплатно (free)

В статье речь пойдет про взаимодействие сервера 1С с MS SQL. Мы очень часто слышим, как важно оптимизировать все критические участки системы заблаговременно, в плановом режиме, как надо, «от и до» во всех деталях. Но в реальной жизни бывает по-другому. Очень часто клиенты обращаются к нам, когда система уже не дает работать: «спасите, помогите, болит очень сильно, надо решать». Об одном из таких случаев я и хотел бы вам сегодня рассказать.

11.07.2017    32013    0    R.Tsarenko    32    

PostgreSQL на Windows – реальная альтернатива для высоконагруженных систем на базе 1С

Производительность и оптимизация (HighLoad) Администрирование СУБД v8 Бесплатно (free)

Многие интересуются PostgreSQL, но не знают, насколько хорошо будет она работать с уже существующими системами. «Инфософт» - одна из первых компаний, кто опробовал PostgreSQL на Windows. О своем опыте перехода рассказывает руководитель отдела информационных технологий компании.      

23.06.2017    41522    0    a.doroshkevich    113    

Пример работы с SQLDMO

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

SQLDMO из 1С.

27.06.2013    3520    2    imm0rtal    2