Всё что связанно с zabbix и мониторингом различных сервисов
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

213 lines
7.2 KiB

#!/bin/bash
###################################################################
#
# Скрипт для работы с Zabbix Rest API
# Позволяет создавать группу узлов, шаблон, узел.
# Создан по мотивам
# https://www.reddit.com/r/zabbix/comments/bhdhgq/zabbix_api_example_using_just_bash_curl_and_jq/
#
# Автор: Сергей Калинин
# https://nuk-svk.ru
# svk@nuk-svk.ru
#####################################################################
#
# Использование:
# ./zabbix_create_host.sh
#
# Запуск без параметров создаст группу узлов, шаблон и узел если они
# отсутствуют. Данные берутся из переменных окружения
#####################################################################
#####################################################################
# Custom variables
BIN_DIR=${BIN_DIR:-/usr/local/bin}
ETC_DIR=${ETC_DIR:-/usr/local/etc}
LIB_DIR=${LIB_DIR:-/usr/local/lib}
zabbixServer=${ZABBIX_SERVER:-'http://zabbix.example.com'}
zabbixUsername=${ZABBIX_USER}
zabbixPassword=${ZABBIX_PASSWORD}
zabbixHostGroup=${ZABBIX_HOST_GROUP:-'Virtual Hosts'}
ZABBIX_HOST_NAME=${ZABBIX_HOST:-"DNS records check"}
ZABBIX_TEMPLATE_NAME=${ZABBIX_TEMPLATE_NAME:-"Template_DNS_Check"}
#End of custom variables
#####################################################################
header='Content-Type:application/json'
zabbixApiUrl="$zabbixServer/api_jsonrpc.php"
function exit_with_error() {
echo '********************************'
echo "$errorMessage"
echo '--------------------------------'
echo 'INPUT'
echo '--------------------------------'
echo "$json"
echo '--------------------------------'
echo 'OUTPUT'
echo '--------------------------------'
echo "$result"
echo '********************************'
exit 1
}
#####################################################################
# Auth to zabbix
# https://www.zabbix.com/documentation/3.4/manual/api/reference/user/login
function auth() {
errorMessage='*ERROR* - Unable to get Zabbix authorization token'
json=$(cat ${LIB_DIR}/user.login.json)
json=${json/USER/$zabbixUsername}
json=${json/PASSWORD/$zabbixPassword}
#echo $json
result=$(curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl)
auth=$(echo $result | jq '.result')
echo "Auth: $auth"
if [ -z "$auth" ]; then
exit_with_error
fi
echo "Login successful - Auth ID: $auth"
}
#####################################################################
# Create hostgroup
function create_host_group() {
if [ -z "$auth" ]; then
auth
fi
errorMessage="*ERROR* - Unable to create hostgroup ID for host group named '$zabbixHostGroup'"
json=`cat ${LIB_DIR}/hostgroup.create.json`
json=${json/HOSTGROUP/$zabbixHostGroup}
json=${json/AUTHID/$auth}
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
HOSTGROUP_ID=`echo $result | jq -r '.result | .groupids | .[0]'`
if [ "$HOSTGROUP_ID" == "null" ]; then
exit_with_error
fi
echo "Hostgroup '$zabbixHostGroup' was created with ID: $HOSTGROUP_ID"
}
#####################################################################
# Get hostgroup
function get_host_group() {
if [ -z "$auth" ]; then
auth
fi
errorMessage="*ERROR* - Unable to get hostgroup ID for host group named '$zabbixHostGroup'"
json=`cat ${LIB_DIR}/hostgroup.get.json`
json=${json/HOSTGROUP/$zabbixHostGroup}
json=${json/AUTHID/$auth}
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
HOSTGROUP_ID=`echo $result | jq -r '.result | .[0] | .groupid'`
if [ "$HOSTGROUP_ID" == "null" ]; then
create_host_group
fi
echo "Hostgroup ID for '$zabbixHostGroup': $HOSTGROUP_ID"
}
#####################################################################
# Create template
function create_template(){
if [ -z "$auth" ]; then
auth
fi
echo "Creating zabbix template '$ZABBIX_TEMPLATE_NAME'"
errorMessage="*ERROR* - Unable to create Template ID for '$ZABBIX_TEMPLATE_NAME'"
json=`cat ${LIB_DIR}/template.create.json`
TEMPLATE_XML=$(cat ${LIB_DIR}/$ZABBIX_TEMPLATE_NAME.xml)
TEMPLATE_XML="$(echo $TEMPLATE_XML | sed 's/"/\\"/g')"
json=${json/XMLSTRING/$TEMPLATE_XML}
json=${json/AUTHID/$auth}
#echo $json
#echo "curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl"
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
#echo $result
#exit
#RESULT=`echo $result | jq -r '.result'`
if [ "$RESULT" == "null" ]; then
exit_with_error
else
get_template
#echo "Template '$ZABBIX_TEMPLATE_NAME' was created with ID: $TEMPLATE_ID"
fi
}
#####################################################################
# Get template
function get_template(){
if [ -z "$auth" ]; then
auth
fi
errorMessage="*ERROR* - Unable to get Template ID for '$ZABBIX_TEMPLATE_NAME'"
json=`cat ${LIB_DIR}/template.get.json`
json=${json/TEMPLATE_NAME/$ZABBIX_TEMPLATE_NAME}
json=${json/AUTHID/$auth}
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
TEMPLATE_ID=`echo $result | jq -r '.result | .[0] | .templateid'`
if [ "$TEMPLATE_ID" == "null" ]; then
create_template
fi
echo "Template ID for '$ZABBIX_TEMPLATE_NAME': $TEMPLATE_ID"
}
#####################################################################
# Get host
function get_host() {
if [ -z "$auth" ]; then
auth
fi
errorMessage="*ERROR* - Unable to get host ID for host '$zabbixHost'"
json=`cat ${LIB_DIR}/host.get.json`
json=${json/HOSTNAME/$ZABBIX_HOST_NAME}
json=${json/AUTHID/$auth}
#echo $json
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
#echo $result
hostId=`echo $result | jq -r '.result | .[0] | .hostid'`
# if [ "$hostId" == "null" ]; then exit_with_error; fi
# echo "Host ID for '$zabbixHost': $hostId"
if [ "$hostId" == "null" ]; then
create_host
#exit_with_error
else
echo "Host ID for '$zabbixHost': $hostId"
fi
}
#####################################################################
# Create host
function create_host() {
if [ -z "$auth" ]; then
auth
fi
if [ -z "$TEMPLATE_ID" ]; then
get_template
fi
if [ -z "$HOSTGROUP_ID" ]; then
get_host_group
fi
echo "Create host \"$ZABBIX_HOST_NAME\""
errorMessage="*ERROR* - Host '$zabbixHost' does not created"
json=$(cat ${LIB_DIR}/host.create.json)
json=${json/HOSTNAME/$ZABBIX_HOST_NAME}
json=${json/HOSTGROUPID/$HOSTGROUP_ID}
json=${json/TEMPLATE_ID/$TEMPLATE_ID}
json=${json/AUTHID/$auth}
#echo $json
result=`curl --silent --show-error --insecure --header $header --data "$json" $zabbixApiUrl`
#echo $result
HOST_ID=`echo $result | jq -r '.result | .hostids | .[0]'`
if [ -z "$HOST_ID" ]; then
exit_with_error
else
echo "Host \"${ZABBIX_HOST_NAME}\" was created with id $HOST_ID"
fi
}
get_host