Closed Kirill closed 3 years ago
ID кластера некорректно определяется
Это можно понять по содержимому файла /tmp/1c_clusters_cache
Администратор кластера есть?
Файл есть, но пустой. Администратора для кластера не создавали. Поэтому при вызове передается только порт
Поэтому при вызове передается только порт
Отличается от стандартного 1545?
Отличается от стандартного 1545?
Нет. Всё по-умолчанию.
После данных строк в файле 1c_common_module.sh
RMNGR_LIST=( $( if [ -z ${IS_WINDOWS} ]; then pgrep -ax rphost; else wmic path win32_process where "caption like 'rphost%'" get CommandLine | grep rphost; fi | sed -r 's/.*-regport ([^ ]+).*/\0|\1/; s/.*-reghost ([^ ]+).*\|/\1:/' | sort -u | awk -F: '{ if ( clstr_list[$1]== "" ) { clstr_list[$1]=$2 } \ else { clstr_list[$1]=clstr_list[$1]"|"$2 } } \ END { for ( i in clstr_list ) { print i":"clstr_list[i]} }' ) )
вставьте строку
echo ${RMNGR_LIST[*]}
и пришлите вывод
$ /etc/zabbix/scripts/1c_central_server.sh sessions
Проблема наблюдается на 8.3.18 и в текущей версии скриптов (8360c731b41b)?
10.10.10.201:1541 summary:0:0:0:0:0:0:0:0:0:0
Адрес агента сервера приложения (заббикс агент локально)
10.10.10.201:1541
Ответ, вероятно, кроется здесь, т.к. скрипты расчитаны на работу с именами хостов, а не ip-адресами. Пришлите вывод
$ /opt/1cv8/x86_64/8.3.18.1208/rac cluster list 10.10.10.201
cluster : 7cecb77c-1491-11e8-ee8e-43aabdf27048
host : 10.10.10.201
port : 1541
name : "Local cluster"
expiration-timeout : 0
lifetime-limit : 0
max-memory-size : 0
max-memory-time-limit : 0
security-level : 0
session-fault-tolerance-level : 0
load-balancing-mode : performance
errors-count-threshold : 0
kill-problem-processes : 0
kill-by-memory-with-dump : 0
Что выдает команда?
$ /opt/1cv8/x86_64/8.3.18.1208/rac cluster list 10.10.10.201 2>/dev/null | \ awk '/^($|cluster|name|port)/' | perl -pe "s/.*: /,/; s/(.+)\n/\1/;" | sed 's/^,//' | \ awk "/1541/" | perl -pe 's/\n/;/'
7cecb77c-1491-11e8-ee8e-43aabdf27048,1541,"Local cluster";
7cecb77c-1491-11e8-ee8e-43aabdf27048,1541,"Local cluster";
в таком случае в файл 1c_common_module.sh после строк
# Сохранить список UUID кластеров во временный файл
function push_clusters_uuid {
вставить строку
echo "${1%%:*} - ${1##*:}"
и выполнить
$ /etc/zabbix/scripts/1c_central_server.sh sessions
вместе с тем, нет ли ошибок в audit.log по записи в файл /tmp/1c_clusters_cache?
Строку добавил, но в выводе нет информации:
# Сохранить список кластеров во временный файл
function push_clusters_list {
# Сохранить список UUID кластеров во временный файл
function push_clusters_uuid {
echo "${1%%:*} - ${1##*:}"
CURR_CLSTR=$( timeout -s HUP ${RAS_PARAMS[timeout]} rac cluster list \
${1%%:*}:${RAS_PARAMS[port]} 2>/dev/null | awk '/^($|cluster|name|port)/' | \
perl -pe "s/.*: /,/; s/(.+)\n/\1/;" | sed 's/^,//' | \
awk "/${1##*:}/" | perl -pe 's/\n/;/' )
[[ -n ${CURR_CLSTR} ]] && echo "${1%%:*}:${CURR_CLSTR}" >> ${CLSTR_CACHE}
}
cat /dev/null > ${CLSTR_CACHE}
execute_tasks push_clusters_uuid ${@}
}
вывод команды summary:0:0:0:0:0:0:0:0:0:0
на сервере где тестирую отключен SELinux. Хочу пока разобраться с одной проблемой.
ок тогда там echo убрать, а перед
execute_tasks push_clusters_uuid ${@}
вставить
echo ${@}
Аналогично. Выводиться только summary.
а если заменить
echo ${@}
на
echo "IN: ${@}"
Ощущение что туда не заходит. Только summary.
тогда давайте вывод
$ bash -x /etc/zabbix/1c_central_server.sh sessions
bash -x /etc/zabbix/scripts/1c_central_server.sh sessions
+ alias 'rm=rm -i'
+ alias 'cp=cp -i'
+ alias 'mv=mv -i'
+ '[' -f /etc/bashrc ']'
+ . /etc/bashrc
++ '[' 0 -gt 99 ']'
++ umask 022
++ '[' '' ']'
++ shopt -q login_shell
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/1ce.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/1ce.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/256term.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/256term.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/bash_completion.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/bash_completion.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/colorgrep.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/colorgrep.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/colorls.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/colorls.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/lang.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/lang.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/less.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/less.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/mc.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/mc.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/southbridge.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/southbridge.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/vim.sh ']'
++ '[' '\[\][\[\]\u\[\]@\H \[\]\w]# \[\]' ']'
++ . /etc/profile.d/vim.sh
+++ '[' -n '4.2.46(1)-release' -o -n '' -o -n '' ']'
+++ '[' -x /usr/bin/id ']'
++++ /usr/bin/id -u
+++ ID=0
+++ '[' -n 0 -a 0 -le 200 ']'
+++ return
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/which2.sh ']'
++ '[' '\[\][\[\]\u\[\]@\H \[\]\w]# \[\]' ']'
++ . /etc/profile.d/which2.sh
+++ alias 'which=alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
++ unset i
++ unset pathmunge
++ dirname /etc/zabbix/scripts/1c_central_server.sh
++ sed -r 's/\\/\//g; s/^(.{1}):/\/\1/'
+ WORK_DIR=/etc/zabbix/scripts
+ source /etc/zabbix/scripts/1c_common_module.sh
+ IB_CACHE=/tmp/1c_infobase_cache
+ case ${1} in
+ shift
+ make_ras_params
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ get_session_amounts
+ check_clusters_cache
+ RMNGR_LIST=($( if [ -z ${IS_WINDOWS} ]; then pgrep -ax rphost; else
wmic path win32_process where "caption like 'rphost%'" get CommandLine | grep rphost; fi |
sed -r 's/.*-regport ([^ ]+).*/\0|\1/; s/.*-reghost ([^ ]+).*\|/\1:/' | sort -u |
awk -F: '{ if ( clstr_list[$1]== "" ) { clstr_list[$1]=$2 } \
else { clstr_list[$1]=clstr_list[$1]"|"$2 } } \
END { for ( i in clstr_list ) { print i":"clstr_list[i]} }' ))
++ '[' -z ']'
++ pgrep -ax rphost
++ sed -r 's/.*-regport ([^ ]+).*/\0|\1/; s/.*-reghost ([^ ]+).*\|/\1:/'
++ sort -u
++ awk -F: '{ if ( clstr_list[$1]== "" ) { clstr_list[$1]=$2 } \
else { clstr_list[$1]=clstr_list[$1]"|"$2 } } \
END { for ( i in clstr_list ) { print i":"clstr_list[i]} }'
+ [[ -e /tmp/1c_clusters_cache ]]
+ [[ '' == \l\o\s\t ]]
++ grep -vc '^$' /tmp/1c_clusters_cache
+ [[ 1 -ne 1 ]]
++ date -r /tmp/1c_clusters_cache +%s
++ date -d 'last hour' +%s
+ [[ 1619085882 -lt 1619082695 ]]
+ awk -F: '{ print $0;
if ($1 !~ /^IB/) { sc["all"]+=$2; sc["bg"]+=$3; sc["hb"]+=$4; sc["ws"]+=$5; sc["hs"]+=$6; sc["as"]+=$7;
if ( asd["cl"] < $8 ) { asd["cl"]=$8; }
if ( asd["bg"] < $9 ) { asd["bg"]=$9; }
if ( asd["ws"] < $10 ) { asd["ws"]=$10; }
if ( asd["hs"] < $11 ) { asd["hs"]=$11; }
} }
END { print "summary:"(sc["all"]?sc["all"]:0)":"(sc["bg"]?sc["bg"]:0)":"(sc["hb"]?sc["hb"]:0)":"\
(sc["ws"]?sc["ws"]:0)":"(sc["hs"]?sc["hs"]:0)":"(sc["as"]?sc["as"]:0)":"(asd["cl"]?asd["cl"]:0)":"\
(asd["bg"]?asd["bg"]:0)":"(asd["ws"]?asd["ws"]:0)":"(asd["hs"]?asd["hs"]:0) }'
++ pop_clusters_list self
++ [[ ! -f /tmp/1c_clusters_cache ]]
++ [[ -n self ]]
++ [[ self == \s\e\l\f ]]
++ grep -i '^vs01' /tmp/1c_clusters_cache
++ cut -f2 -d:
++ sed 's/ /<sp>/g; s/"//g'
+ sed 's/<sp>/ /g'
+ execute_tasks get_clusters_sessions
+ TASK_CMD=get_clusters_sessions
+ shift
+ [[ -z '' ]]
summary:0:0:0:0:0:0:0:0:0:0
Что выдает команда?
$ /opt/1cv8/x86_64/8.3.18.1208/rac cluster list 10.10.10.201 2>/dev/null | \ awk '/^($|cluster|name|port)/' | perl -pe "s/.*: /,/; s/(.+)\n/\1/;" | sed 's/^,//' | \ awk "/1541/" | perl -pe 's/\n/;/'
Может это надо было куда-то внести/поправить?
В 1c_common_module.sh в строке
[[ -z ${IS_WINDOWS} ]] && HOSTNAME=$(hostname -s) || HOSTNAME=$(hostname)
запишите
[[ -z ${IS_WINDOWS} ]] && HOSTNAME="10.10.10.221" || HOSTNAME=$(hostname)
проблема в том, что вы в кластере сервер добавили по ip-адресу, а скрипты работают с именами ...
bash -x /etc/zabbix/scripts/1c_central_server.sh sessions
+ alias 'rm=rm -i'
+ alias 'cp=cp -i'
+ alias 'mv=mv -i'
+ '[' -f /etc/bashrc ']'
+ . /etc/bashrc
++ '[' 0 -gt 99 ']'
++ umask 022
++ '[' '' ']'
++ shopt -q login_shell
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/1ce.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/1ce.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/256term.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/256term.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/bash_completion.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/bash_completion.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/colorgrep.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/colorgrep.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/colorls.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/colorls.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/lang.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/lang.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/less.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/less.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/mc.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/mc.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/southbridge.sh ']'
++ '[' '' ']'
++ . /etc/profile.d/southbridge.sh
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/vim.sh ']'
++ '[' '\[\][\[\]\u\[\]@\H \[\]\w]# \[\]' ']'
++ . /etc/profile.d/vim.sh
+++ '[' -n '4.2.46(1)-release' -o -n '' -o -n '' ']'
+++ '[' -x /usr/bin/id ']'
++++ /usr/bin/id -u
+++ ID=0
+++ '[' -n 0 -a 0 -le 200 ']'
+++ return
++ for i in '/etc/profile.d/*.sh'
++ '[' -r /etc/profile.d/which2.sh ']'
++ '[' '\[\][\[\]\u\[\]@\H \[\]\w]# \[\]' ']'
++ . /etc/profile.d/which2.sh
+++ alias 'which=alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
++ unset i
++ unset pathmunge
++ dirname /etc/zabbix/scripts/1c_central_server.sh
++ sed -r 's/\\/\//g; s/^(.{1}):/\/\1/'
+ WORK_DIR=/etc/zabbix/scripts
+ source /etc/zabbix/scripts/1c_common_module.sh
+ IB_CACHE=/tmp/1c_infobase_cache
+ case ${1} in
+ shift
+ make_ras_params
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ [[ -n '' ]]
+ get_session_amounts
+ check_clusters_cache
+ RMNGR_LIST=($( if [ -z ${IS_WINDOWS} ]; then pgrep -ax rphost; else
wmic path win32_process where "caption like 'rphost%'" get CommandLine | grep rphost; fi |
sed -r 's/.*-regport ([^ ]+).*/\0|\1/; s/.*-reghost ([^ ]+).*\|/\1:/' | sort -u |
awk -F: '{ if ( clstr_list[$1]== "" ) { clstr_list[$1]=$2 } \
else { clstr_list[$1]=clstr_list[$1]"|"$2 } } \
END { for ( i in clstr_list ) { print i":"clstr_list[i]} }' ))
++ '[' -z ']'
++ pgrep -ax rphost
++ sed -r 's/.*-regport ([^ ]+).*/\0|\1/; s/.*-reghost ([^ ]+).*\|/\1:/'
++ sort -u
++ awk -F: '{ if ( clstr_list[$1]== "" ) { clstr_list[$1]=$2 } \
else { clstr_list[$1]=clstr_list[$1]"|"$2 } } \
END { for ( i in clstr_list ) { print i":"clstr_list[i]} }'
+ [[ -e /tmp/1c_clusters_cache ]]
+ [[ '' == \l\o\s\t ]]
++ grep -vc '^$' /tmp/1c_clusters_cache
+ [[ 1 -ne 1 ]]
++ date -r /tmp/1c_clusters_cache +%s
++ date -d 'last hour' +%s
+ [[ 1619085882 -lt 1619083306 ]]
+ awk -F: '{ print $0;
if ($1 !~ /^IB/) { sc["all"]+=$2; sc["bg"]+=$3; sc["hb"]+=$4; sc["ws"]+=$5; sc["hs"]+=$6; sc["as"]+=$7;
if ( asd["cl"] < $8 ) { asd["cl"]=$8; }
if ( asd["bg"] < $9 ) { asd["bg"]=$9; }
if ( asd["ws"] < $10 ) { asd["ws"]=$10; }
if ( asd["hs"] < $11 ) { asd["hs"]=$11; }
} }
END { print "summary:"(sc["all"]?sc["all"]:0)":"(sc["bg"]?sc["bg"]:0)":"(sc["hb"]?sc["hb"]:0)":"\
(sc["ws"]?sc["ws"]:0)":"(sc["hs"]?sc["hs"]:0)":"(sc["as"]?sc["as"]:0)":"(asd["cl"]?asd["cl"]:0)":"\
(asd["bg"]?asd["bg"]:0)":"(asd["ws"]?asd["ws"]:0)":"(asd["hs"]?asd["hs"]:0) }'
++ pop_clusters_list self
++ [[ ! -f /tmp/1c_clusters_cache ]]
+ sed 's/<sp>/ /g'
++ [[ -n self ]]
++ [[ self == \s\e\l\f ]]
++ grep -i '^10.10.10.201' /tmp/1c_clusters_cache
++ cut -f2 -d:
++ sed 's/ /<sp>/g; s/"//g'
+ execute_tasks get_clusters_sessions '7cecb77c-1491-11e8-ee8e-43aabdf27048,1541,Local<sp>cluster;'
+ TASK_CMD=get_clusters_sessions
+ shift
+ [[ -z '' ]]
+ for CURR_TASK in '${@}'
+ get_clusters_sessions '7cecb77c-1491-11e8-ee8e-43aabdf27048,1541,Local<sp>cluster;'
+ for CURR_CLSTR in '${1//;/ }'
+ awk '/^(infobase|app-id|hibernate|duration-current)\s/'
+ timeout -s HUP 1.5 rac session list --cluster=7cecb77c-1491-11e8-ee8e-43aabdf27048 10.10.10.201:1545
+ grep -v '^$'
+ perl -pe 's/ //g; s/\n/ /; s/infobase:/\n/; s/.*://; s/(1CV8[^ ]*|WebClient)/cl/;
s/BackgroundJob/bg/; s/WSConnection/ws/; s/HTTPServiceConnection/hs/'
+ awk -v cluster=CL#7cecb77c-1491-11e8-ee8e-43aabdf27048 -v ib_cache=/tmp/1c_infobase_cache 'BEGIN {
ss[cluster]=0;
while ( getline ib_str < ib_cache > 0) {
if (ib_str ~ "^"substr(cluster,4)) {
split(ib_str, ib_uuid); ss["IB#"ib_uuid[2]]=0; }
} }
{ ib_mark="IB#"$1;
ss[cluster]+=1; ss[ib_mark]+=1;
if ( $2 != "cl" ) { sc[$2,cluster]+=1; sc[$2,ib_mark]+=1; }
if ( $3 == "yes" ) { sc["hb",cluster]+=1; sc["hb",ib_mark]+=1 }
if ( $4 != 0) {
as[cluster]+=1; as[ib_mark]+=1;
if ( asd[$2,cluster] < $4 ) {
asd[$2,cluster]=$4; asd[$2,ib_mark]=$4;
} else if ( asd[$2,ib_mark] < $4 ) { asd[$2,ib_mark]=$4; }
} }
END { for (i in ss) {
print i":"(ss[i]?ss[i]:0)":"(sc["bg",i]?sc["bg",i]:0)":"(sc["hb",i]?sc["hb",i]:0)":"\
(sc["ws",i]?sc["ws",i]:0)":"(sc["hs",i]?sc["hs",i]:0)":"(as[i]?as[i]:0)":"\
(asd["cl",i]?asd["cl",i]:0)":"(asd["bg",i]?asd["bg",i]:0)":"\
(asd["ws",i]?asd["ws",i]:0)":"(asd["hs",i]?asd["hs",i]:0) } }'
IB#b5b0aa6a-149f-11e8-4683-51b1c7a09cf9:2:0:1:0:0:0:0:0:0:0
IB#99275772-149f-11e8-4683-51b1c7a09cf9:5:0:0:0:0:0:0:0:0:0
IB#30e7b412-7706-11e8-3a84-c531fb907f23:4:0:1:0:0:1:252:0:0:0
CL#7cecb77c-1491-11e8-ee8e-43aabdf27048:11:0:2:0:0:1:252:0:0:0
summary:11:0:2:0:0:1:252:0:0:0
С именами сложнее работать когда нет нормального сервера имен. С IP проще - пользователь спокойно подключиться, даже не зная, что есть компьютер с таким именем.
Можно получить больше информации почему выводятся те или иные данные? Например скрипт /etc/zabbix/scripts/1c_central_server.sh sessions выдает
summary:0:0:0:0:0:0:0:0:0:0
При этом /opt/1cv8/x86_64/8.3.18.1208/rac session --cluster=7cecb77c-1491-11e8-ee8e-43aabdf27048 list выдает большую портянку. Хочу понять, что неправильно работает, ID кластера некорректно определяется или парсинг не работает.