Restore repo

This commit is contained in:
svk
2024-11-06 10:16:00 +03:00
commit 4189fcad46
87 changed files with 14088 additions and 0 deletions

1
check_dns_records/.gitignore vendored Executable file
View File

@@ -0,0 +1 @@
.env

22
check_dns_records/Dockerfile Executable file
View File

@@ -0,0 +1,22 @@
FROM debian:buster-slim
RUN apt update -y \
&& apt install -y zabbix-agent dnsutils curl jq && \
rm -rf /var/lib/apt/lists/*
COPY zabbix_dns_records_check.sh /usr/local/bin/zabbix_dns_records_check.sh
COPY zabbix_create_host.sh /usr/local/bin/zabbix_create_host.sh
COPY run.sh /usr/local/bin/run.sh
ADD zabbix_jrpc_files/* /usr/local/lib/
COPY zabbix_templates/* /usr/local/lib/
RUN chmod 755 /usr/local/bin/*
RUN sed -i -e 's/^Server=127.0.0.1$/Server=${ZABBIX_SERVER}/' /etc/zabbix/zabbix_agentd.conf; \
sed -i -e 's/^ServerActive=127.0.0.1$/ServerActive=${ZABBIX_SERVER}/' /etc/zabbix/zabbix_agentd.conf
CMD /usr/local/bin/run.sh

100
check_dns_records/README.md Executable file
View File

@@ -0,0 +1,100 @@
# Отслеживание изменений всех типов DNS-записей для домена
## Описание
Набор скриптов для мониторинга изменений в DNS для любого количества доменов.
Отслеживаются все записи представленные в БД DNS. Проверку можно осуществлять как просто в консоли, запуская скрипты, так и в интеграции с zabbix. Запуск сервиса может производиться как локально в системе (при помощи cron) так и ввиде docker-контейнера.
В состав сервиса входит:
- zabbix_create_host.sh - позволяет создать в zabbix группу узлов, шаблон, узел. В случае если объект уже есть, то будет получен его идентификатор. Используется Zabbix JSON RPC.
- zabbix_dns_records_check.sh - опрос DNS и получение всех типов записей с добавлением их в zabbix.
- run.sh - для запуска полного цикла проверки
- zabbix_jrpc_files - каталог содержит JSON-файлы с описанием процедур по взаимодействия с zabbix
- zabbix_templates - шаблоны zabbix
## Использование
Получения всех типов записей и создание элементов (items) в zabbix:
```zabbix_dns_records_check.sh read-json-discover```
Для получения данных по конкретному домену:
```zabbix_dns_records_check.sh domain.name.ru```
Для получения данных по конкретному домену и конкретному типу записи (A, MX, NS и т.д.):
```zabbix_dns_records_check.sh domain.name.ru MX```
Так как сервис заточен под работу с zabbix, то вышеозначенная операция сработает только в случае выставления переменной ```ZABBIX_AGENT="TRUE"```. Если значение данной переменной "FALSE", проверка будет производится сразу по всем записям и результат не будет выведен в консоль а будет отправлен в zabbix (при помощи zabbix-sender). Это правило верно и для режима "read-json-discover".
Получение всех записей для домена:
```zabbix_zimbra_domain_status.sh get-domain-records domain.name.ru```
Получение списка всех типов записей для домена:
```zabbix_zimbra_domain_status.sh get-domain-records-type domain.name.ru```
### Настройка переменных окружения для zabbix_zimbra_domain_status.sh
Список переменных с значениями по умолчанию:
```
BIN_DIR=/usr/local/bin
ETC_DIR=/usr/local/etc
# Адрес ДНС сервера
EXT_DNS=8.8.8.8
# Список доменов
DOMAIN_LIST="domain.1 domain.2 domain.n"
# Временные файлы
FILE_ZIMBRA_DOMAIN_STATUS='/tmp/domain_status'
FILE_ZIMBRA_DOMAIN_LIST='/tmp/domain_list'
# конфигурация заббикс-агента
ZABBIX_AGENT=FALSE
ZABBIX_SENDER=/usr/bin/zabbix_sender
ZABBIX_AGENT_CONFIG=/etc/zabbix/zabbix_agentd.conf
# имя узла в zabbix
ZABBIX_HOST="DNS records check"
```
### Настройка переменных окружения для zabbix_create_host.sh и значения по умолчанию
```
BIN_DIR=/usr/local/bin
ETC_DIR=/usr/local/etc
LIB_DIR=/usr/local/lib
# адрес zabbix сервера
ZABBIX_SERVER='http://zabbix.example.com'
# пользователь и пароль для доступа к zabbix-API
# по умолчанию не определены
ZABBIX_USER=
ZABBIX_PASSWORD=
# Название группы узлов в заббикс
ZABBIX_HOST_GROUP='Virtual Hosts'
# название узла в заббикс
ZABBIX_HOST="DNS records check"
# имя шаблона для прикрепления к узлу
ZABBIX_TEMPLATE_NAME="Template_DNS_Check"
```
### Запуск в Docker-контейнере
Предварительно требуется создать файл .env куда прописать имя и пароль пользователя для zabbix:
```
ZABBIX_USER=user
ZABBIX_PASSWORD=password
```
Если требуется переопеределить значения переменных то их можно либо прописать в этом-же файле либо в docker-compose.yml
Сборка контейнера в локальном репозитории:
```docker build --rm -t dns_records_check .```
Запуск осуществляется при помощи docker-compose:
```docker-compose up```
При первых запусках (2-3, связано с таймаутами в zabbix при создании новых элементов) в случае отсутствия в zabbix будут созданы: группа узлов, шаблон, узел, прикреплен к узлу шаблон.
При каждом запуске будет производится автоопределение типов DNS-записей и создание требуемых ключей (items) в заббикс (автообнаружение) для каждого домена.
Контейнер будет перезапускаться каждые 10 минут (настройка в файле run.sh).

View File

@@ -0,0 +1,14 @@
version: '3'
services:
dns_check:
image: ${CONTAINER_TEST_IMAGE:-dns_records_check:debug}
env_file: .env
environment:
- ZABBIX_HOST=DNS records check
- DOMAIN_LIST=example1.com example1.org example3.ru
#- ZABBX_USER="$ZABBIX_USER"
#- ZABBIX_PASSWORD="$ZABBIX_PASSWORD"
restart: always
build:
context: .

View File

@@ -0,0 +1,56 @@
stages:
- build
- release
- deploy
variables:
# CONTAINER_TEST_IMAGE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG
# CONTAINER_RELEASE_IMAGE: $CI_REGISTRY_IMAGE:latest
DOCKER_DRIVER: overlay2
IMAGE_PATH: $CI_REGISTRY/$CI_PROJECT_PATH
before_script:
- docker login -u $CI_REGISTRY_USER -p $CI_REGISTRY_PASSWORD $CI_REGISTRY
- mkdir -p .ci_status
.dedicated-runner: &dedicated-runner
tags:
- build1-shell
dns_check_build:
<<: *dedicated-runner
stage: build
script:
- DOCKER_BUILDKIT=1 COMPOSE_DOCKER_CLI_BUILD=1 docker-compose build dns_check
- docker push $IMAGE_PATH/dns_records_check:dev
- touch .ci_status/dns_check_build
only:
refs:
- master
changes:
- ./*/*.json
- ./*/*.xml
- Dockerfile
- *.sh
- docker-compose.yml
artifacts:
paths:
- .ci_status/
dns_check_release:
<<: *dedicated-runner
stage: release
script:
- if [ -e .ci_status/dns_check_build ]; then docker pull $IMAGE_PATH/dns_records_check:dev; docker tag $IMAGE_PATH/dns_records_check:dev $IMAGE_PATH/dns_records_check:latest; docker push $IMAGE_PATH/dns_records_check:latest; touch .ci_status/dns_check_release; fi
artifacts:
paths:
- .ci_status/
dns_check_deploy:
<<: *dedicated-runner
stage: deploy
script:
- if [ -e .ci_status/dns_check_release ]; then docker-compose up -d --no-deps --build dns_check; fi

26
check_dns_records/run.sh Executable file
View File

@@ -0,0 +1,26 @@
#!/bin/bash
BIN_DIR=${BIN_DIR:-/usr/local/bin}
ETC_DIR=${ETC_DIR:-/usr/local/etc}
LIB_DIR=${LIB_DIR:-/usr/local/lib}
# Check host presents into zabbix
#/usr/local/bin/zabbix_create_host.sh
echo "Creating host into zabbix"
${BIN_DIR}/zabbix_create_host.sh
echo "Creating zabbix items for host"
# Get DNS records for all domain and send them into zabbix
#/usr/local/bin/zabbix_dns_records_check.sh read-json-discover
${BIN_DIR}/zabbix_dns_records_check.sh read-json-discover
echo "Getting DNS data"
DOMAIN_LIST=${DOMAIN_LIST:-"example1.com example1.org example3.ru"}
for LINE in ${DOMAIN_LIST}; do
#/usr/local/bin/zabbix_dns_records_check.sh $LINE
${BIN_DIR}/zabbix_dns_records_check.sh $LINE
done
sleep 600

View 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

View File

@@ -0,0 +1,134 @@
#!/bin/bash
##############################################################################
#
# Определение корректности записей в DNS
# для доменов для Zabbix
# Может работать как с zabbix-agent так и zabbix-sender
#
# Автор: Сергей Калинин
# https://nuk-svk.ru
# svk@nuk-svk.ru
##############################################################################
#
# Использование:
#
# Получение DNS записей доменов и создание JSON-файла для Zabbix:
# zabbix_zimbra_domain_status.sh discover
#
# Чтение JSON-файла и вывод на экран (в zabbix)
# zabbix_zimbra_domain_status.sh read-json-discover
#
# Получение всех записей для домена из DNS
# zabbix_zimbra_domain_status.sh get-domain-records _DOMAIN_NAME_
#
# Получение всех типов записей для домена из DNS
# zabbix_zimbra_domain_status.sh get-domain-records-type _DOMAIN_NAME_
#
# Получение ДНС записи определенного типа для домена
# zabbix_zimbra_domain_status.sh _ZIMBRA_DOMAIN_NAME_ _DNS_RECORD_TYPE_
#
# Где
# _DOMAIN_NAME_ - имя домена в DNS
# _DNS_RECORD_TYPE_ - тип DNS-записи (A, CNAME, TXT, MX, и т.д.)
#############################################################################
BIN_DIR=${BIN_DIR:-/usr/local/bin}
ETC_DIR=${ETC_DIR:-/usr/local/etc}
EXT_DNS=${EXT_DNS:-8.8.8.8}
DOMAIN_LIST=${DOMAIN_LIST:-"example1.com example1.org example3.ru"}
FILE_ZIMBRA_DOMAIN_STATUS='/tmp/domain_status'
FILE_ZIMBRA_DOMAIN_LIST='/tmp/domain_list'
ZABBIX_AGENT=${ZABBIX_AGENT:-FALSE}
ZABBIX_SENDER=${ZABBIX_SENDER:-/usr/bin/zabbix_sender}
ZABBIX_AGENT_CONFIG=${ZABBIX_AGNT_CONFIG:-/etc/zabbix/zabbix_agentd.conf}
ZABBIX_HOST="${ZABBIX_HOST:-DNS records check}"
case "$1" in
discover)
# Return a list of running services in JSON
# And create JSON-file
DOMAIN_JSON="{\"data\":["
for LINE in ${DOMAIN_LIST}; do
RECORDS_TYPE=$($0 get-domain-records-type ${LINE})
DOMAIN_JSON="${DOMAIN_JSON}"
for TYPE in ${RECORDS_TYPE}; do
DOMAIN_JSON="${DOMAIN_JSON} {\"{#DOMAIN}\":\"$LINE\", \"{#DOMAINDNSRECORD}\":\"$TYPE\"},"
done
DOMAIN_JSON="${DOMAIN_JSON}"
done
JSON_STRING="$(echo $DOMAIN_JSON | sed 's/,\+$//') ]}"
echo "${JSON_STRING}" > ${FILE_ZIMBRA_DOMAIN_LIST}.json
if [ "$ZABBIX_AGENT" = "FALSE" ]; then
$ZABBIX_SENDER -vv -c $ZABBIX_AGENT_CONFIG -s "$ZABBIX_HOST" -k domain -o "${JSON_STRING}"
fi
exit 0;
;;
read-json-discover)
# create a JSON-file for zabbix
$0 discover
# Read a JSON and return
if [ ! -f ${FILE_ZIMBRA_DOMAIN_LIST}.json ]; then
echo "File ${FILE_ZIMBRA_DOMAIN_LIST}.json not found"
exit 1
fi
while read LINE; do
echo ${LINE}
done < "${FILE_ZIMBRA_DOMAIN_LIST}.json"
;;
get-domain-records)
if [ "$2" = "" ]; then
echo "No Zimbra DOMAIN specified..."
exit 1
fi
dig @${EXT_DNS} +nocmd $2 any +noall +answer > ${FILE_ZIMBRA_DOMAIN_STATUS}
;;
get-domain-records-type)
if [ "$2" = "" ]; then
echo "No DOMAIN specified..."
exit 1
fi
$0 get-domain-records $2
cat ${FILE_ZIMBRA_DOMAIN_STATUS} | awk '{print $4}' | sort -u
;;
*)
CHECK_DOMAIN=$1
if [ "$CHECK_DOMAIN" = "" ]; then
echo "No DOMAIN specified..."
exit 1
fi
# Формируем список всех DNS-записей для домена
#dig @${EXT_DNS} +nocmd ${CHECK_DOMAIN} any +noall +answer > ${FILE_ZIMBRA_DOMAIN_STATUS}
$0 get-domain-records "${CHECK_DOMAIN}"
if [ "$ZABBIX_AGENT" = "TRUE" ]; then
# получаем данные по конкретному типу записи
# использвется при работе через zabbix-agent
RECORD_TYPE=$2
if [ "$RECORD_TYPE" = "" ]; then
echo "No DNS record type specified..."
exit 1
fi
grep -E "\s${RECORD_TYPE}\s" ${FILE_ZIMBRA_DOMAIN_STATUS} | awk '{ for(i=5; i<=NF; ++i) printf $i""FS; print "" }' | sort
else
# Формируем список типов записей для домена
#RECORD_TYPES_LIST=$(cat ${FILE_ZIMBRA_DOMAIN_STATUS} | awk '{print $4}' | sort -u)
RECORD_TYPES_LIST=$($0 get-domain-records-type "${CHECK_DOMAIN}")
for RECORD_TYPE in ${RECORD_TYPES_LIST}; do
# Запрос в DNS
#dig @${EXT_DNS} +nocmd ${RECORD_TYPE} ${CHECK_DOMAIN} +noall +answer | awk '{ for(i=5; i<=NF; ++i) printf $i""FS; print "" }' | sort
# Читаем из файла с ранее полученными данными и шлем в заббикс
#grep ${RECORD_TYPE} ${FILE_ZIMBRA_DOMAIN_STATUS} | awk '{ for(i=5; i<=NF; ++i) printf $i""FS; print "" }' | sort
$ZABBIX_SENDER -c $ZABBIX_AGENT_CONFIG -s "$ZABBIX_HOST" -k "domain.status[${CHECK_DOMAIN}, ${RECORD_TYPE}]" \
-o "$(grep -E "\s${RECORD_TYPE}\s" ${FILE_ZIMBRA_DOMAIN_STATUS} | awk '{ for(i=5; i<=NF; ++i) printf $i""FS; print "" }' | sort)"
done
fi
;;
esac
exit 0;

View 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
}

View File

@@ -0,0 +1,9 @@
{
"jsonrpc": "2.0",
"method": "host.exists",
"params": {
"host": "HOSTNAME"
},
"auth": AUTHID,
"id": 1
}

View File

@@ -0,0 +1,13 @@
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"filter": {
"host": [
"HOSTNAME"
]
}
},
"auth": AUTHID,
"id": 1
}

View File

@@ -0,0 +1,9 @@
{
"jsonrpc": "2.0",
"method": "hostgroup.create",
"params": {
"name": "HOSTGROUP"
},
"auth": AUTHID,
"id": 1
}

View File

@@ -0,0 +1,15 @@
{
"jsonrpc": "2.0",
"method": "hostgroup.get",
"params": {
"output": "groupid",
"filter": {
"name": [
"HOSTGROUP"
]
}
},
"auth": AUTHID,
"id": 1
}

View 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
}

View File

@@ -0,0 +1,14 @@
{
"jsonrpc": "2.0",
"method": "template.get",
"params": {
"output": "extend",
"filter": {
"host": [
"TEMPLATE_NAME"
]
}
},
"auth": AUTHID,
"id": 1
}

View File

@@ -0,0 +1,9 @@
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "USER",
"password": "PASSWORD"
},
"id": 1
}

View File

@@ -0,0 +1,182 @@
<?xml version="1.0" encoding="UTF-8"?>
<zabbix_export>
<version>4.0</version>
<date>2020-10-09T07:22:33Z</date>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<templates>
<template>
<template>Template_DNS_Check</template>
<name>Template_DNS_Check</name>
<description/>
<groups>
<group>
<name>Templates</name>
</group>
</groups>
<applications>
<application>
<name>Domain DNS Records</name>
</application>
</applications>
<items/>
<discovery_rules>
<discovery_rule>
<name>Domain Discovery</name>
<type>2</type>
<snmp_community/>
<snmp_oid/>
<key>domain</key>
<delay>0</delay>
<status>0</status>
<allowed_hosts/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<filter>
<evaltype>0</evaltype>
<formula/>
<conditions/>
</filter>
<lifetime>30d</lifetime>
<description/>
<item_prototypes>
<item_prototype>
<name>&quot;{#DOMAINDNSRECORD}&quot; record for &quot;{#DOMAIN}&quot;</name>
<type>2</type>
<snmp_community/>
<snmp_oid/>
<key>domain.status[{#DOMAIN}, {#DOMAINDNSRECORD}]</key>
<delay>0</delay>
<history>90d</history>
<trends>0</trends>
<status>0</status>
<value_type>4</value_type>
<allowed_hosts/>
<units/>
<snmpv3_contextname/>
<snmpv3_securityname/>
<snmpv3_securitylevel>0</snmpv3_securitylevel>
<snmpv3_authprotocol>0</snmpv3_authprotocol>
<snmpv3_authpassphrase/>
<snmpv3_privprotocol>0</snmpv3_privprotocol>
<snmpv3_privpassphrase/>
<params/>
<ipmi_sensor/>
<authtype>0</authtype>
<username/>
<password/>
<publickey/>
<privatekey/>
<port/>
<description/>
<inventory_link>0</inventory_link>
<applications>
<application>
<name>Domain DNS Records</name>
</application>
</applications>
<valuemap/>
<logtimefmt/>
<preprocessing/>
<jmx_endpoint/>
<timeout>3s</timeout>
<url/>
<query_fields/>
<posts/>
<status_codes>200</status_codes>
<follow_redirects>1</follow_redirects>
<post_type>0</post_type>
<http_proxy/>
<headers/>
<retrieve_mode>0</retrieve_mode>
<request_method>0</request_method>
<output_format>0</output_format>
<allow_traps>0</allow_traps>
<ssl_cert_file/>
<ssl_key_file/>
<ssl_key_password/>
<verify_peer>0</verify_peer>
<verify_host>0</verify_host>
<application_prototypes/>
<master_item/>
</item_prototype>
</item_prototypes>
<trigger_prototypes>
<trigger_prototype>
<expression>{Template_DNS_Check:domain.status[{#DOMAIN}, {#DOMAINDNSRECORD}].nodata(20m)}=1</expression>
<recovery_mode>0</recovery_mode>
<recovery_expression/>
<name>{HOSTNAME}. Нет данных о проверке DNS зон</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>3</priority>
<description/>
<type>0</type>
<manual_close>0</manual_close>
<dependencies/>
<tags/>
</trigger_prototype>
<trigger_prototype>
<expression>{Template_DNS_Check:domain.status[{#DOMAIN}, {#DOMAINDNSRECORD}].diff()}=1</expression>
<recovery_mode>2</recovery_mode>
<recovery_expression/>
<name>Изменение {#DOMAINDNSRECORD}-записи для &quot;{#DOMAIN}</name>
<correlation_mode>0</correlation_mode>
<correlation_tag/>
<url/>
<status>0</status>
<priority>2</priority>
<description/>
<type>0</type>
<manual_close>1</manual_close>
<dependencies/>
<tags/>
</trigger_prototype>
</trigger_prototypes>
<graph_prototypes/>
<host_prototypes/>
<jmx_endpoint/>
<timeout>3s</timeout>
<url/>
<query_fields/>
<posts/>
<status_codes>200</status_codes>
<follow_redirects>1</follow_redirects>
<post_type>0</post_type>
<http_proxy/>
<headers/>
<retrieve_mode>0</retrieve_mode>
<request_method>0</request_method>
<allow_traps>0</allow_traps>
<ssl_cert_file/>
<ssl_key_file/>
<ssl_key_password/>
<verify_peer>0</verify_peer>
<verify_host>0</verify_host>
</discovery_rule>
</discovery_rules>
<httptests/>
<macros/>
<templates/>
<screens/>
</template>
</templates>
</zabbix_export>