logo

Select Sidearea

Populate the sidearea with useful widgets. It’s simple to add images, categories, latest post, social media icon links, tag clouds, and more.
hello@youremail.com
+1234567890

Мониторинг вызовов 1С с помощью Zabbix

Мониторинг вызовов 1С с помощью Zabbix

Практически вся работа 1С состоит из вызовов. Во время вызова происходят операции получения и записи данных. Их длительность — очень важный показатель работы системы. Возможности системы мониторинга позволяют копить и анализировать данные за разные периоды, что может быть крайне полезным при расследовании причин появления различных проблем. Одна из таких проблем, которая очень распространена и хорошо узнаваема — концентрация регламентных заданий в одно время в большом количестве баз. Этот пример наглядно демонстрирует зависимость загруженности сервера, длительности вызовов, а также снижение нагрузки и сокращение длительности после внесения в систему изменений.

График длительности вызовов 1С в Zabbix

С статье продемонстрирован способ мониторинга длительности вызовов и применения этих данных для решения задачи оптимизации. Все действия выполнялись на системе под управлением Debian 10, соответственно при обработке данных использованы характерные для таких систем команды, вроде awk. Для адаптации решения под Windows можно найти аналоги команд для него, либо запускать скрипт в cygwin

Вызовы 1С

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

Время вызовов для сеансов в Консоли кластеров 1С

Получение данных

Для получения данных незаменим ras сервер. Это консольное приложение, способное возвращать в командную строку в виде понятного вывода (в виде ключ: значение) всю информацию, которая отображается в Консоли управления кластером в Windows. Его необходимо установить вместе с платформой 1С.

После установки необходимо запустить в качестве службы файл ras из папки bin в каталоге установки 1С. Станет возможным подключаться к ras серверу с помошью клиента rac и получать информацию, аналогичную информации из консоли кластера в Windows. Для получения справки по командам можно вызвать каждую команду с ключом help. Здесь https://github.com/1oss/ras_man можно посмотреть справки из всех команд.

То, что необходимо для реализации мониторинга вызовов, возвращается командой process. За получение данных от 1С и их обработку отвечает скрипт:

#!/bin/bash
if [[ $1 == "cluster list" ]] ; then
  CMD="/opt/1C/v8.3/x86_64/rac $1"
  if [[ -z $2 ]] ; then
    ${CMD} | awk -F':' '{\
    printf "{\"data\":[", "%s"; \
    do{
      printf "{", "%s"; \
      do{
        gsub(/[\t ]*/,"",$1)
        gsub("-","",$1)
        gsub(/[\t ]*/,"",$2)
        gsub("\"","",$2)
        printf "\"{#"toupper($1)"}\":\""$2"\"", "%s"; \
        getline;\
        if($0 != "") printf ",", "%s";\
      }while($0 != "")
      getline;\
      printf "}", "%s"; \
      if($0) printf ",", "%s";\
    }while($0)
    print "]}"; \
    }'
  else
    ${CMD} | awk -F':' -v PROP=$2 '{\
      gsub(/[\t ]*/,"",$1)
      gsub(/[\t ]*/,"",$2)
      if($1 == PROP) printf $2, "%s"; \
  }'
  fi
  exit;
fi
CMD="/opt/1C/v8.3/x86_64/rac $1 --cluster $2"
KEY=""
if [[ -n $3 ]] ; then
  KEY=$3;
fi
${CMD} | awk -F':' -v mykey=$KEY '\
BEGIN{\
  arr["total_count"] = 0;\
  arr["total_bgjobs_count"]=0;\
  arr["total_sleep_count"]=0;\
}{\
  do{\
    arr["total_count"]++;\
    do{\
      gsub(/[\t ]*/,"",$1);\
      gsub(/[\t ]*/,"",$2);\
      if(match($1, "app-id") && match($2, "BackgroundJob"))arr["total_bgjobs_count"]++;\
      if(match($1, "hibernate") && match($2, "yes"))arr["total_sleep_count"]++;\
      if(match($2, /^[0-9.]+$/)){\
        key = $1;
        gsub("-","_",key);\
        arr["sum_"key]=arr["sum_"key] + $2;\
        arr["avg_"key]=arr["sum_"key]/arr["total_count"];\
        if($2 > arr["max_"key]) arr["max_"key] = $2;\
        if($2 < arr["min_"key] || arr["min_"key] == "") arr["min_"key] = $2;\
      }\
      getline;\
    }while($0 != "");\
    getline;\
  }while($0);\
}
END{\
if(mykey == ""){
  printf "{\"data\":[", "%s"; \
  printf "{", "%s"; \
  for(a in arr){\
    print a":"arr[a]",";\
  }\
  printf "total_count:"arr["total_count"];
  printf "}", "%s"; \
  printf "]}", "%s"; \
}else{\
  for(a in arr){\
    if(match(a, mykey)){printf arr[a], "%s";}\
  }\
}\
}'

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

Передача в Zabbix

Для того, чтобы получать данные в Zabbix, необходимо сперва настроить агента, а затем создать шаблон для мониторинга. Агент должен вызывать скрипты, возвращающие данные. Для этого в его конфигурационный файл /etc/zabbix/zabbix_agentd.conf необходимо добавить строки:

UserParameter=get_clusters, /usr/share/zabbix-agent/get-1c-stat-zabbix.sh "cluster list"
UserParameter=get_process_stats[*], /usr/share/zabbix-agent/get-1c-stat-zabbix.sh "process list" $1 $2

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

zabbix_get -s server1c -k get_clusters 

Настройка в заббикс

Далее необходимо добавить шаблон в Zabbix и настроить получение необходимых данных. Прежде всего необходимо настроить Discovery rule с ключом get_clusters, который вернет данные для идентификации кластера.

Создание правила автообнаружения

После необходимо настроить прототипы данных и графиков:

Создание прототипов данных для вызовов 1С
Создание прототипов графиков для вызовов 1С

Результат

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

Сильное замедление вызовов 1С

Из графика можно заметить, что большая часть общего времени вызовов (call time) приходится на серверный вызов 1С (server call time), а вызовы СУБД (db call time) и ожидания на блокировках (lock call time) замедляются скорее всего просто на общем фоне растущей нагрузки на систему. Следовательно, проблему следует поискать, прежде всего, на стороне сервера 1С.

100% загрузка ЦПУ во время замедления вызовов

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

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

Снижение времени вызовов 1С почти в 3 раза после оптимизации

После того, как механизм отлажен, можно с его помощью обрабатывать и вытаскивать в систему мониторинга практически любые данные, присутствующие в Консоли управления кластерами 1С — статистику о рабочих процессах, сеансах, памяти, лицензиях и всем остальном. Под различные нужды можно переписать сам скрипт, так как не во всех случаях требуется агрегирование, примененное для анализа вызовов. Например, можно точно также получать информацию о сеансах, добавив в скрипт анализа вывода ras сервера строчку:

UserParameter=get_sessions_stats[*], /usr/share/zabbix-agent/get-1c-stat-zabbix.sh "session list" $1 $2

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

Мониторинг количества сессий 1С в Zabbix

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

Скрипт и настроенный шаблон для заббикса можно взять в репозитории 1oss

roox
No Comments

Post a Comment

Comment
Name
Email
Website