slothfk / 1c_zabbix_template_ce

Шаблон Zabbix для мониторинга кластера серверов 1С Предприятия 8.3
MIT License
151 stars 53 forks source link

Не срабатывает триггер "Нет запущенных процессов" #136

Closed pnosov closed 2 weeks ago

pnosov commented 2 weeks ago

Здравствуйте!

Сервер 1С Предприятие 8.3.23.1997 под управлением Ubuntu 22.04, пользуемся Zabbix Server 5.4.

Время от времени слетает рабочий процесс 1С rphost, надеялся поставить на эту ситуацию оповещение, столкнулся вот с такой проблемой.

image

Когда слетает рабочий процесс, в item количество процессов не определено (на графике видно пустое место, в понедельник в 9 утра обнаружили и перезапустили сервис).

При этом в логах сервера Zabbix сыпит такими сообщениями:

 52840:20240630:014114.536 error reason for "srv1c:1c.ws.rphost.memory" changed: Preprocessing failed for: rmngr: 1 250204160 .ragent: 1 16023552 1
1. Failed: cannot perform regular expression "rphost: \d+ (\d+) \d" match for value of type "string": pattern does not match

Если при работоспособном 1С запускаю скрипт 1c_work_server.sh, получаю такое:

zabbix@srv1c:/var/lib/zabbix/scripts$ bash -x 1c_work_server.sh memory
++ sed -r 's/\\/\//g; s/^(.{1}):/\/\1/'
++ dirname 1c_work_server.sh
+ WORK_DIR=.
+ shopt -q extglob
+ shopt -s extglob
+ source ./1c_common_module.sh
+ export DUMP_CODE_0=0
+ DUMP_CODE_0=0
+ export DUMP_CODE_1=1
+ DUMP_CODE_1=1
+ export DUMP_CODE_2=2
+ DUMP_CODE_2=2
+ export DUMP_CODE_3=3
+ DUMP_CODE_3=3
+ case ${1} in
+ get_memory_counts
+ RPHOST_PID_HASH=/tmp/1c_rphost_pid_hash
+ [[ -z '' ]]
+ sed -re 's/^([^ ]+) +([0-9]+) +([0-9]+) +/\1,\2,\3,/'
++ cat /tmp/1c_rphost_pid_hash
++ pgrep -d, 'ragent|rphost|rmngr'
+ awk -F, -v mem_in_kb=1024 -v pid_hash=bf5e5da7f56ee6ce53743c06c2c3d3e7 '/.*,[0-9]+,[0-9]+/ {
            proc_name[$1]=gensub(/[.].+/,"","g",$1)
            proc_pids[$1][$2]
            proc[$1,"memory"]+=$3
            } END {
                for ( pn in proc_name ) {
                    proc_flag=""; pid_list=""
                    switch (pn) {
                        case /ragent.*/:
                            if ($4 ~ /(\/|-)debug(\s|$)/ ) proc_flag=1; else proc_flag=0
                            break
                        case /rphost.*/:
                            for (i in proc_pids[pn]) pid_list=pid_list?pid_list","i:i
                            hash_command="echo "pid_list" | md5sum | sed \"s/ .*//\""
                            (hash_command | getline new_hash) > 0
                            close(hash_command)
                            if ( pid_hash == new_hash ) { proc_flag=0 } else { proc_flag=1 }
                            print new_hash > "/tmp/1c_rphost_pid_hash"
                            break
                    }
                    print proc_name[pn]":",length(proc_pids[pn]),proc[pn,"memory"]*mem_in_kb,proc_flag
                }
            }'
+ ps -hwwp 135567,4155283,4155299 -o comm,pid,rss,cmd -k pid
rphost: 1 6894641152 0
rmngr: 1 338317312
ragent: 1 47267840 1

То есть, насколько я понимаю, при отвалившемся rphost скрипт будет показывать две строчки, про rmngr и ragent.

rmngr: 1 246779904 .ragent: 1 16023552 1

И preprocessing в item [1С/Рабочий процесс] Число процессов не может вычислить значение.

image

Это как-то лечится? Заранее благодарю.

slothfk commented 2 weeks ago

Выглядит как ошибка, проверю

slothfk commented 2 weeks ago

Таки да, это ошибка, и я понял когда она появилась, постараюсь поправить в ближайшее время