Шаблон/Template DB MySQL Mysbix

MySql, Microsoft SQL, MSSQL
Аватара пользователя
Артём Мамзиков
Admin
Сообщения: 804
Стаж: 5 лет 1 месяц
Откуда: Вологодская область
Поблагодарили: 33 раза
Контактная информация:

Шаблон/Template DB MySQL Mysbix

Сообщение Артём Мамзиков »

Источник share.zabbix mysbix или github mysbix

СКАЧАТЬ
Mysbix.zip
Mysbix.zip
(34.43 КБ) 20 скачиваний
Низкоуровневое обнаружения (LLD)
Zabbix агент
монитор базы данных
Пользовательский скрипт

# mysbix
Zabbix Agent - MySQL
* Репликация: Мастер и Ведомый

# Зависимости
## Пакеты
* ksh
* jq

### Debian/Ubuntu
apt install ksh jq

## MySQL Конфигурация
cat /etc/zabbix/scripts/agent/mysbix/.my.cnf
[client]
user = "monitor"
password = "xxxxx"

# Разработчик
## Zabbix
#~ git clone https://github.com/sergiotocalini/mysbix.git
#~ ./mysbix/deploy_zabbix.sh 'monitor' 'xxxxxx' 'localhost'


zabbix_agentd.conf > UserParameter
UserParameter=mysbix[*],/etc/zabbix/scripts/agentd/mysbix/mysbix.sh -s $1 -a p=$2 -a p=$3 -a p=$4 -a p=$5
UserParameter=mysbix.discovery[*],/etc/zabbix/scripts/agentd/mysbix/mysbix.sh -s $1 -j $2 -a p=$3
UserParameter=mysbix.version,/etc/zabbix/scripts/agentd/mysbix/mysbix.sh -v short

my.conf
[client]
user = monitor
password = xxxxxxx
host = localhost

Скрипт mysbix.sh

Код: Выделить всё

#!/usr/bin/env ksh
PATH=/usr/local/bin:${PATH}
IFS_DEFAULT="${IFS}"
#################################################################################

#################################################################################
#
#  Variable Definition
# ---------------------
#
APP_NAME=$(basename $0)
APP_DIR=$(dirname $0)
APP_VER="1.0.0"
APP_WEB="http://www.sergiotocalini.com.ar/"
#
#################################################################################

#################################################################################
#
#  Load Oracle Environment
# -------------------------
#
[ -f ${APP_DIR}/${APP_NAME%.*}.conf ] && . ${APP_DIR}/${APP_NAME%.*}.conf

#
#################################################################################

#################################################################################
#
#  Function Definition
# ---------------------
#
usage() {
    echo "Usage: ${APP_NAME%.*} [Options]"
    echo ""
    echo "Options:"
    echo "  -a            Query arguments."
    echo "  -h            Displays this help message."
    echo "  -j            Jsonify output."
    echo "  -s ARG(str)   Query to MySQL."
    echo "  -v            Show the script version."
    echo ""
    echo "Please send any bug reports to sergiotocalini@gmail.com"
    exit 1
}

version() {
    echo "${APP_NAME%.*} ${APP_VER}"
    exit 1
}

zabbix_not_support() {
    echo "ZBX_NOTSUPPORTED"
    exit 1
}

vert2json() {
    sql="${1}"
    attrs="${2:-.[]}"

    json_raw=""
    idx="${#rows[@]}"
    while read line; do
	if [[ "${line}" =~ ^\* ]]; then
	    pos=${idx}
	    let "idx=idx+1"
	else
	    key=`echo ${line}|awk -F: '{print $1}'|awk '{$1=$1};1'`
	    val=`echo ${line}|awk -F: '{print $2}'|awk '{$1=$1};1'`

	    rows[${pos}]+="\"${key}\":\"${val}\","
	fi
    done <<< "${sql}"

    json_raw="[ "
    for idx in ${!rows[@]}; do
	json_raw+="{${rows[${idx}]%?}},"
    done
    echo "${json_raw%?} ]" | jq -r "${attrs}" 2>/dev/null
}

sql_exec() {
    sql=${1}
    sql_args=( ${2} )
    sql_opts=${3}
    
    if [[ -f "${sql%.sql}.sql" ]]; then
	count=1
	for arg in ${sql_args[@]}; do
	    params+="SET @p${count}=\"${arg}\";"
	    let "count=count+1"
	done

	rval=`mysql --defaults-file=${APP_DIR}/.my.conf \
                    -s${sql_opts:-N}e "${params}source ${SQL%.sql}.sql;" 2>/dev/null`
	echo "${rval}"
	return 0
    fi

    return 1
}

join() {
    delimiter=${1}
    shift
    array=( ${@} )

    length=$(( ${#array[@]} - 1 ))
    for idx in ${!array[@]}; do
	if [[ ${array[${idx}]} != '' && ${array[${idx}]} != ${delimiter} ]]; then
	    str+="${array[${idx}]}"
	    if [[ ${idx} < ${length} ]]; then
		str+="${delimiter}"
	    fi
	fi
    done
    echo "${str}"
}
#
#################################################################################

#################################################################################
while getopts "s::a:q:s:uphvj:" OPTION; do
    case ${OPTION} in
	h)
	    usage
	    ;;
	s)
	    SQL="${APP_DIR}/sql/${OPTARG}"
	    ;;	    
	o)
	    OUTPUT="${OPTARG}"
	    ;;
        j)
	    JSON=1
            IFS=":" JSON_ATTR=( ${OPTARG-:0} )
	    IFS="${IFS_DEFAULT}"
            ;;
	a)
	    param=${OPTARG//p=}
	    [[ -n ${param} ]] && ARGS[${#ARGS[*]}]=${param}
	    ;;
	v)
	    version
	    ;;
        \?)
            exit 1
            ;;
    esac
done

if [[ `basename ${SQL%.sql}` =~ replication_(masters|slaves) ]]; then
    rval=$( sql_exec "${SQL}" "" "E" )
    [ ${?} != 0 ] && zabbix_not_support

    if [[ -n ${rval} ]]; then
	if [[ ${#ARGS[*]} > 0 ]]; then
	    for arg in ${ARGS[@]}; do
		key=`echo ${arg}|awk -F: '{print $1}'|awk '{$1=$1};1'`
		val=`echo ${arg}|awk -F: '{print $2}'|awk '{$1=$1};1'`
		if [[ -n ${key} && -n ${val} ]]; then
		    selec[${#selec[@]}]=".${key}==\"${val}\""
		else
		    attrs[${#attrs[@]}]="\(.${arg})"
		fi
	    done
	    filters[${#filters[@]}]=".[]"
	    [[ ${#selec[*]} > 0 ]] && filters[${#filters[@]}]="select($( join " and" ${selec[@]} ))"
	    [[ ${#attrs[*]} > 0 ]] && filters[${#filters[@]}]="\"$( join " | " ${attrs[@]:-'\(.)'} )\""
	    filters=$( join "|" ${filters[@]} )
	elif [[ `basename ${SQL%.sql}` == 'replication_masters' ]]; then
	    if [[ ${JSON} -eq 1 ]]; then
		filters=".[] | \"\(.Master_Host)|\(.Master_Port)|\(.Master_Server_Id)|\(.Master_UUID)\""
	    else
		filters=".[] | {Master_Host, Master_Port, Master_Server_Id, Master_UUID}"
	    fi
	elif [[ `basename ${SQL%.sql}` == 'replication_slaves' ]]; then
	    if [[ ${JSON} -eq 1 ]]; then
		filters=".[] | \"\(.Host)|\(.Port)|\(.Server_id)|\(.Slave_UUID)|\(.Master_id)\""
	    else
		filters=".[] | {Host, Port, Server_id, Slave_UUID, Master_id}"
	    fi
	fi
	rval=$( vert2json "${rval}" "${filters}" )
    fi
else
    rval=$( sql_exec "${SQL}" "${ARGS[*]}" )
    [ ${?} != 0 ] && zabbix_not_support
    if [[ `basename ${SQL%.sql}.sql` =~ (global_status|global_variables) ]]; then
	rval=`echo ${rval} | sed -s "s:^${ARGS[0]} ::"`
    fi
fi


if [[ ${JSON} -eq 1 ]]; then
    echo '{'
    echo '   "data":['
    count=1
    while read line; do
	if [[ ${line} != '' ]]; then
            IFS="|" values=(${line})
            output='{ '
            for val_index in ${!values[*]}; do
		output+='"'{#${JSON_ATTR[${val_index}]:-${val_index}}}'":"'${values[${val_index}]}'"'
		if (( ${val_index}+1 < ${#values[*]} )); then
                    output="${output}, "
		fi
            done 
            output+=' }'
            if (( ${count} < `echo ${rval}|wc -l` )); then
		output="${output},"
            fi
            echo "      ${output}"
	fi
        let "count=count+1"
    done <<< ${rval}
    echo '   ]'
    echo '}'
else
    echo "${rval:-0}"
fi

exit ${rcode}

Скрипт deploy_zabbix.sh

Код: Выделить всё

#!/usr/bin/env ksh
SOURCE_DIR=$(dirname $0)
ZABBIX_DIR=/etc/zabbix

MYSQL_USER=${1:-monitor}
MYSQL_PASS=${2}
MYSQL_HOST=${3:-localhost}

mkdir -p ${ZABBIX_DIR}/scripts/agentd/mysbix

SCRIPT_AUTH="${ZABBIX_DIR}/scripts/agentd/mysbix/.my.conf"
[[ -f ${SCRIPT_AUTH} ]] && SCRIPT_AUTH="${SCRIPT_AUTH}.new"
SCRIPT_CONFIG="${ZABBIX_DIR}/scripts/agentd/mysbix/mysbix.conf"
[[ -f ${SCRIPT_CONFIG} ]] && SCRIPT_CONFIG="${SCRIPT_CONFIG}.new"

cp -rv ${SOURCE_DIR}/mysbix/mysbix.sh            ${ZABBIX_DIR}/scripts/agentd/mysbix/
cp -rv ${SOURCE_DIR}/mysbix/sql                  ${ZABBIX_DIR}/scripts/agentd/mysbix/
cp -rv ${SOURCE_DIR}/mysbix/zabbix_agentd.conf   ${ZABBIX_DIR}/zabbix_agentd.d/mysbix.conf
cp -rv ${SOURCE_DIR}/mysbix/.my.conf             ${SCRIPT_AUTH}
cp -rv ${SOURCE_DIR}/mysbix/mysbix.conf.example  ${SCRIPT_CONFIG}

regex_array[0]="s|host = .*|host = \"${MYSQL_HOST}\"|g"
regex_array[1]="s|user = .*|user = \"${MYSQL_USER}\"|g"
regex_array[2]="s|password = .*|password = \"${MYSQL_PASS}\"|g"
for index in ${!regex_array[*]}; do
    sed -i "${regex_array[${index}]}" ${SCRIPT_AUTH}
done

mysql -sNe "CREATE USER IF NOT EXISTS '${MYSQL_USER}'@'${MYSQL_HOST}' IDENTIFIED BY '${MYSQL_PASS}';"
mysql -sNe "GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '${MYSQL_USER}'@'${MYSQL_HOST}';"

db_count.sql

Код: Выделить всё

SELECT		COUNT(*)
FROM		information_schema.SCHEMATA
WHERE		SCHEMA_NAME
NOT IN		('mysql', 'performance_schema', 'information_schema', 'sys');
db_list.sql

Код: Выделить всё

SHOW DATABASES;
db_size.sql

Код: Выделить всё

SELECT	   Sum(data_length + index_length)
FROM	   information_schema.tables
WHERE	   table_schema=@p1
GROUP BY   table_schema;
global_status.sql

Код: Выделить всё

SHOW GLOBAL STATUS WHERE variable_name=@p1;
global_variables.sql

Код: Выделить всё

SHOW GLOBAL VARIABLES WHERE variable_name=@p1;
ping.sql

Код: Выделить всё

SELECT	1;
replication_masters.sql

Код: Выделить всё

SHOW SLAVE STATUS\G;
replication_slaves.sql

Код: Выделить всё

SHOW SLAVE HOSTS\G;
version.sql

Код: Выделить всё

SELECT	VERSION();
Шаблон DB MySQL Mysbix RUS
Шаблон DB MySQL Mysbix RUS
Шаблон DB MySQL Mysbix RUS Группы
Шаблон DB MySQL Mysbix RUS Группы
Шаблон DB MySQL Mysbix RUS Элементы данных
Шаблон DB MySQL Mysbix RUS Элементы данных
Шаблон DB MySQL Mysbix RUS Триггеры
Шаблон DB MySQL Mysbix RUS Триггеры
Шаблон DB MySQL Mysbix RUS Графики
Шаблон DB MySQL Mysbix RUS Графики
Шаблон DB MySQL Mysbix RUS Правила обнаружения
Шаблон DB MySQL Mysbix RUS Правила обнаружения
Шаблон DB MySQL Mysbix RUS Прототипы элементов данных 1
Шаблон DB MySQL Mysbix RUS Прототипы элементов данных 1
Шаблон DB MySQL Mysbix RUS Прототипы триггеров 1
Шаблон DB MySQL Mysbix RUS Прототипы триггеров 1
Шаблон DB MySQL Mysbix RUS Прототипы элементов данных 2
Шаблон DB MySQL Mysbix RUS Прототипы элементов данных 2
Шаблон DB MySQL Mysbix RUS Прототипы триггеров 2
Шаблон DB MySQL Mysbix RUS Прототипы триггеров 2
Шаблон DB MySQL Mysbix RUS Прототипы элементов данных 3
Шаблон DB MySQL Mysbix RUS Прототипы элементов данных 3

Template DB MySQL Mysbix RUS


Группы элементов данных 1
MySQL


Элементы данных 34

[MySQL] Глобальный статус: Прерванные клиенты mysbix[global_status, Aborted_clients] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Прерванные соединения mysbix[global_status, Aborted_connects] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Получено байт (в секунду) mysbix[global_status, Bytes_received] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Отправленные байты (в секунду) mysbix[global_status, Bytes_sent] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Операции - Начаты mysbix[global_status, Com_begin] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Операции - Фиксация mysbix[global_status, Com_commit] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Операции - Удалить mysbix[global_status, Com_delete] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Операции - Вставить mysbix[global_status, Com_insert] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Операции - Отброс mysbix[global_status, Com_rollback] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Операции - Выберите mysbix[global_status, Com_select] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Операции - Обновление mysbix[global_status, Com_update] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный Статус: Созданы Таблицы Временные - Диска mysbix[global_status, Created_tmp_disk_tables] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Созданы Временные файлы mysbix[global_status, Created_tmp_files] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный Статус: Созданы Временные - Таблицы mysbix[global_status, Created_tmp_tables] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный Статус: Ключевые Блоки - Не Сброшены mysbix[global_status, Key_blocks_not_flushed] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Ключевые блоки - Неиспользуемые mysbix[global_status, Key_blocks_unused] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Ключевые блоки - Используются mysbix[global_status, Key_blocks_used] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Ключевые блоки - Warm mysbix[global_status, Key_blocks_warm] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Считывание ключей mysbix[global_status, Key_reads] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Запросы на чтение ключей mysbix[global_status, Key_read_requests] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Запись ключей mysbix[global_status, Key_writes] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Запросы на запись ключей mysbix[global_status, Key_write_requests] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Запросы в секунду mysbix[global_status, Questions] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Медленные запросы mysbix[global_status, Slow_queries] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Блокировка таблиц - Сразу mysbix[global_status, Table_locks_immediate] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Блокировки таблиц - Ожидание mysbix[global_status, Table_locks_waited] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Потоки - Кэшированы mysbix[global_status, Threads_cached] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Потоки подключены mysbix[global_status, Threads_connected] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Потоки созданы mysbix[global_status, Threads_created] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Потоки запущены mysbix[global_status, Threads_running] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальный статус: Время безотказной работы mysbix[global_status, Uptime] 10m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Глобальные переменные: UUID сервера mysbix[global_variables, server_uuid] 12h 30d Zabbix агент MySQL Активировано

[MySQL] Общий: Статус Триггеры 1 mysbix[ping] 1m 30d 90d Zabbix агент MySQL Активировано

[MySQL] Общие: Версия mysbix[version] 12h 30d Zabbix агент MySQL Активировано


Триггеры 1
Средняя MySQL: Экземпляр не работает {Template DB MySQL Mysbix RUS:mysbix[ping].last(#3)}=0 Активировано


Графики 8
[MySQL] Глобальный статус: Созданы Временные файлы/Таблицы 900 200 Нормальный
[MySQL] Глобальный статус: Пропускная способность 900 200 Нормальный
[MySQL] Глобальный статус: Прерванные клиенты/Подключения 900 200 Нормальный
[MySQL] Глобальный статус: Потоки 900 200 Нормальный
[MySQL] Глобальный статус: Операции 900 200 Нормальный
[MySQL] Глобальный статус: Ключи - Чтение/Запись 900 200 Нормальный
[MySQL] Глобальный статус: Ключевые блоки 900 200 Нормальный
[MySQL] Глобальный статус: Блокировки таблиц 900 200 Нормальный


Правила обнаружения 3
[MySQL] Обнаружение: Базы данных Прототипы элементов данных 1 Прототипы триггеров Прототипы графиков 1 Прототипы узлов сети mysbix.discovery[db_list, DBNAME] 12h Zabbix агент Активировано

[MySQL] Обнаружение: Мастера репликации Прототипы элементов данных 7 Прототипы триггеров 2 Прототипы графиков Прототипы узлов сети mysbix.discovery[replication_masters, MASTER_HOST:MASTER_PORT:MASTER_ID:MASTER_UUID] 1m Zabbix агент Активировано

[MySQL] Обнаружение: Подчиненные устройства репликации Прототипы элементов данных 3 Прототипы триггеров Прототипы графиков Прототипы узлов сети mysbix.discovery[replication_slaves, SLAVE_HOST:SLAVE_PORT:SLAVE_ID:SLAVE_UUID:MASTER_ID] 1m Zabbix агент Активировано


Прототипы элементов данных 1
[MySQL] База данных {#DBNAME}: Размер mysbix[db_size, {#DBNAME}] 15m 30d 90d Zabbix агент MySQL Да

Прототипы графиков 1
[MySQL] База данных {#DBNAME}: Размер 900 200 Нормальный


Прототипы элементов данных 7
[MySQL] Мастер репликации "{#MASTER_HOST}": Потеря пакетов (%) icmppingloss[{#MASTER_HOST},10,100,,] 10m 1w 90d Простая проверка MySQL Да

[MySQL] Мастер репликации "{#MASTER_HOST}": Главный файл журнала mysbix[replication_masters, Master_Server_Id:{#MASTER_ID}, Master_Log_File] 10m 30d Zabbix агент MySQL Да

[MySQL] Мастер репликации "{#MASTER_HOST}": Идентификатор мастера mysbix[replication_masters, Master_Server_Id:{#MASTER_ID}, Master_Server_Id] 12h 30d Zabbix агент MySQL Да

[MySQL] Мастер репликации "{#MASTER_HOST}": Главный UUID mysbix[replication_masters, Master_Server_Id:{#MASTER_ID}, Master_UUID] 12h 30d Zabbix агент MySQL Да

[MySQL] Мастер Репликации "{#MASTER_HOST}": Отставание от Мастера на Несколько Секунд mysbix[replication_masters, Master_Server_Id:{#MASTER_ID}, Seconds_Behind_Master] 5m 30d 90d Zabbix агент MySQL Да

[MySQL] Мастер репликации "{#MASTER_HOST}": Запущен подчиненный ввод-вывод mysbix[replication_masters, Master_Server_Id:{#MASTER_ID}, Slave_IO_Running] 5m 30d 90d Zabbix агент MySQL Да

[MySQL] Мастер репликации "{#MASTER_HOST}": Запущенный подчиненный SQL mysbix[replication_masters, Master_Server_Id:{#MASTER_ID}, Slave_SQL_Running] 5m 30d 90d Zabbix агент MySQL Да


Прототипы триггеров 2
Высокая MySQL:Мастер репликации "{#MASTER_HOST}" не запущен {Template DB MySQL Mysbix RUS:mysbix[replication_masters, Master_Server_Id:{#MASTER_ID}, Slave_IO_Running].last(#3)}=0 or {Template DB MySQL Mysbix RUS:mysbix[replication_masters, Master_Server_Id:{#MASTER_ID}, Slave_SQL_Running].last(#3)}=0 Да

Средняя MySQL:Мастер репликации "{#MASTER_HOST}" не синхронизируется {Template DB MySQL Mysbix RUS:mysbix[replication_masters, Master_Server_Id:{#MASTER_ID}, Seconds_Behind_Master].min(#3)} > {Template DB MySQL Mysbix RUS:mysbix[replication_masters, Master_Server_Id:{#MASTER_ID}, Seconds_Behind_Master].max(1h)} Да


Прототипы элементов данных 3
[MySQL] Подчиненное устройство репликации "{#SLAVE_HOST}": Идентификатор ведущего устройства mysbix[replication_slaves, Server_id:{#SLAVE_ID}, Master_id] 12h 30d Zabbix агент MySQL Да

[MySQL] Подчиненное устройство репликации "{#SLAVE_HOST}": ИДЕНТИФИКАТОР mysbix[replication_slaves, Server_id:{#SLAVE_ID}, Server_id] 12h 30d Zabbix агент MySQL Да

[MySQL] Подчиненное устройство репликации "{#SLAVE_HOST}": UUID mysbix[replication_slaves, Server_id:{#SLAVE_ID}, Slave_UUID] 12h 30d Zabbix агент MySQL Да
количество слов: 1797

Вернуться в «Базы Данных/Databases»