Restore repo
This commit is contained in:
35
zabbix_api_use/README.md
Executable file
35
zabbix_api_use/README.md
Executable file
@@ -0,0 +1,35 @@
|
||||
## Работа с zabbix REST API
|
||||
|
||||
## Описание
|
||||
|
||||
Набор скриптов для создания узла в заббикс через REST API. Создан по мотивам https://www.reddit.com/r/zabbix/comments/bhdhgq/zabbix_api_example_using_just_bash_curl_and_jq/
|
||||
|
||||
- добавляет узел
|
||||
- добавляет шаблон
|
||||
- добавляет группу узлов
|
||||
- приписывает шаблон и группу к узлу
|
||||
|
||||
В состав сервиса входит:
|
||||
|
||||
- zabbix_create_host.sh - позволяет создать в zabbix группу узлов, шаблон, узел. В случае если объект уже есть, то будет получен его идентификатор. Используется Zabbix JSON RPC.
|
||||
- zabbix_jrpc_files - каталог содержит JSON-файлы с описанием процедур по взаимодействия с zabbix
|
||||
- zabbix_templates - шаблоны zabbix
|
||||
|
||||
## Использование
|
||||
|
||||
Предварительно требуется изменить значения переменных окружения (если необходимо). Список переменных со значениями по умолчанию:
|
||||
|
||||
- BIN_DIR=/usr/local/bin
|
||||
- ETC_DIR=/usr/local/etc
|
||||
- LIB_DIR=/usr/local/lib
|
||||
- ZABBIX_SERVER='http://zabbix.example.com'
|
||||
- ZABBIX_USER=
|
||||
- ZABBIX_PASSWORD=
|
||||
- ZABBIX_HOST_GROUP:-'Virtual Hosts'
|
||||
- ZABBIX_HOST "Some my host"
|
||||
- ZABBIX_TEMPLATE_NAME="Template_DNS_Check"
|
||||
|
||||
Запуск команды:
|
||||
|
||||
```./zabbix_create_host.sh```
|
||||
|
213
zabbix_api_use/zabbix_create_host.sh
Executable file
213
zabbix_api_use/zabbix_create_host.sh
Executable file
@@ -0,0 +1,213 @@
|
||||
#!/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
|
29
zabbix_api_use/zabbix_jrpc_files/host.create.json
Executable file
29
zabbix_api_use/zabbix_jrpc_files/host.create.json
Executable file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "host.create",
|
||||
"params": {
|
||||
"host": "HOSTNAME",
|
||||
"interfaces": [
|
||||
{
|
||||
"type": 1,
|
||||
"main": 1,
|
||||
"useip": 1,
|
||||
"ip": "127.0.0.1",
|
||||
"dns": "",
|
||||
"port": "10050"
|
||||
}
|
||||
],
|
||||
"groups": [
|
||||
{
|
||||
"groupid": "HOSTGROUPID"
|
||||
}
|
||||
],
|
||||
"templates": [
|
||||
{
|
||||
"templateid": "TEMPLATE_ID"
|
||||
}
|
||||
]
|
||||
},
|
||||
"auth": AUTHID,
|
||||
"id": 1
|
||||
}
|
9
zabbix_api_use/zabbix_jrpc_files/host.exists.json
Executable file
9
zabbix_api_use/zabbix_jrpc_files/host.exists.json
Executable file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "host.exists",
|
||||
"params": {
|
||||
"host": "HOSTNAME"
|
||||
},
|
||||
"auth": AUTHID,
|
||||
"id": 1
|
||||
}
|
13
zabbix_api_use/zabbix_jrpc_files/host.get.json
Executable file
13
zabbix_api_use/zabbix_jrpc_files/host.get.json
Executable file
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "host.get",
|
||||
"params": {
|
||||
"filter": {
|
||||
"host": [
|
||||
"HOSTNAME"
|
||||
]
|
||||
}
|
||||
},
|
||||
"auth": AUTHID,
|
||||
"id": 1
|
||||
}
|
9
zabbix_api_use/zabbix_jrpc_files/hostgroup.create.json
Executable file
9
zabbix_api_use/zabbix_jrpc_files/hostgroup.create.json
Executable file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "hostgroup.create",
|
||||
"params": {
|
||||
"name": "HOSTGROUP"
|
||||
},
|
||||
"auth": AUTHID,
|
||||
"id": 1
|
||||
}
|
15
zabbix_api_use/zabbix_jrpc_files/hostgroup.get.json
Executable file
15
zabbix_api_use/zabbix_jrpc_files/hostgroup.get.json
Executable file
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "hostgroup.get",
|
||||
"params": {
|
||||
"output": "groupid",
|
||||
"filter": {
|
||||
"name": [
|
||||
"HOSTGROUP"
|
||||
]
|
||||
}
|
||||
},
|
||||
"auth": AUTHID,
|
||||
"id": 1
|
||||
}
|
||||
|
30
zabbix_api_use/zabbix_jrpc_files/template.create.json
Executable file
30
zabbix_api_use/zabbix_jrpc_files/template.create.json
Executable file
@@ -0,0 +1,30 @@
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "configuration.import",
|
||||
"params": {
|
||||
"format": "xml",
|
||||
"rules": {
|
||||
"templates": {
|
||||
"createMissing": true
|
||||
},
|
||||
"items": {
|
||||
"createMissing": true
|
||||
},
|
||||
"discoveryRules": {
|
||||
"createMissing": true
|
||||
},
|
||||
"triggers": {
|
||||
"createMissing": true
|
||||
},
|
||||
"graphs": {
|
||||
"createMissing": true
|
||||
},
|
||||
"applications": {
|
||||
"createMissing": true
|
||||
}
|
||||
},
|
||||
"source": "XMLSTRING"
|
||||
},
|
||||
"auth": AUTHID,
|
||||
"id": 1
|
||||
}
|
14
zabbix_api_use/zabbix_jrpc_files/template.get.json
Executable file
14
zabbix_api_use/zabbix_jrpc_files/template.get.json
Executable file
@@ -0,0 +1,14 @@
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "template.get",
|
||||
"params": {
|
||||
"output": "extend",
|
||||
"filter": {
|
||||
"host": [
|
||||
"TEMPLATE_NAME"
|
||||
]
|
||||
}
|
||||
},
|
||||
"auth": AUTHID,
|
||||
"id": 1
|
||||
}
|
9
zabbix_api_use/zabbix_jrpc_files/user.login.json
Executable file
9
zabbix_api_use/zabbix_jrpc_files/user.login.json
Executable file
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"jsonrpc": "2.0",
|
||||
"method": "user.login",
|
||||
"params": {
|
||||
"user": "USER",
|
||||
"password": "PASSWORD"
|
||||
},
|
||||
"id": 1
|
||||
}
|
0
zabbix_api_use/zabbix_templates/Some-Template.xml
Normal file
0
zabbix_api_use/zabbix_templates/Some-Template.xml
Normal file
Reference in New Issue
Block a user