This commit is contained in:
2024-06-12 10:13:20 +03:00
parent aca53793b5
commit 64d8357d48

View File

@@ -1,6 +1,6 @@
--- ---
title: "Группоые политики GPO для Zabbix Agent используя магию API" title: "Групповые политики GPO для Zabbix Agent с использованием магии API"
summary: "Небольшой гайд по созданию готового скрипта для автоматизации добавление новых устройств в доменной сети" summary: "Краткое руководство по созданию скрипта для автоматизации добавления новых устройств в доменной сети"
date: "June 12 2024" date: "June 12 2024"
draft: false draft: false
tags: tags:
@@ -12,15 +12,14 @@ tags:
# Пролог # Пролог
Круто когда у тебя собираються метрики со всех устройст в сети, но не круто если у тебя уже есть зоопарк более 10х устройств и ты только решил что тебе нужен мониториг, а если есть 100х устройств... Мда придеться поклацать мышкой это уж точно! Собирать метрики со всех устройств в сети — это здорово, но не так уж приятно, если у вас уже есть более 10 устройств и вы только решили, что вам нужен мониторинг. А если устройств 100 и больше? Придется много клацать мышкой! Но что мы за админы, если не умеем правильно лениться? Давайте создадим небольшой скрипт, добавим его в GPO, и пусть часть работы за нас выполняет машина.
Но что мы за админы если не умеем правильно лениться, давайте соберем небольшой скрипт и добавим его в GPO и пусть часть работы за нас делает машина.
## Подготовка ## Подготовка
1. На сервере zabbix создаем новую группу куда будут новые хосту валиться, например `NewHosts`, запишите id группу пригоидиться дальше,url строке посдение цыфры и будут id). 1. На сервере Zabbix создаем новую группу, куда будут попадать новые хосты, например `NewHosts`. Запишите ID группы — он пригодится позжеURL строке последние цифры и будут ID).
2. Генерим токен, для подключения к заббикс api. Для этого перейдем в настройки пользователя, пункт API Tokens. 2. Генерируем токен для подключения к Zabbix API. Для этого перейдите в настройки пользователя, пункт API Tokens.
3. Определяет переменные сервера для скрипта: 3. Определяем переменные сервера для скрипта:
``` ps1 ``` ps1
# Zabbix server: # Zabbix server:
@@ -32,14 +31,14 @@ $ZBX_TEMPLATE = "Windows by Zabbix agent"
$ZBX_HOSTGRP = "NewHosts" $ZBX_HOSTGRP = "NewHosts"
``` ```
- $ZBX_SERVER - адрес zabbix-сервера для URL - `$ZBX_SERVER` — адрес Zabbix-сервера для URL.
- $ZBX_SERVER_INSTALL - адрес zabbix-сервера для msi пакета - `$ZBX_SERVER_INSTALL` — адрес Zabbix-сервера для MSI пакета.
- $ZBX_API - адрес API zabbix-сервера. - `$ZBX_API` — адрес API Zabbix-сервера.
- $ZBX_TOKEN - Токен API zabbix, который мы сгенерили на этапе подготовки. - `$ZBX_TOKEN` — токен API Zabbix, который мы сгенерировали на этапе подготовки.
- $ZBX_TEMPLATE - в значении этой переменной указывается шаблон мониторинга из zabbix. - `$ZBX_TEMPLATE` — шаблон мониторинга из Zabbix.
- $ZBX_HOSTGRP - группа (NewHosts), которую создали на этапе подготовки. - `$ZBX_HOSTGRP` — группа (NewHosts), которую создали на этапе подготовки.
4. Определяет переменные хоста для скрипта: 4. Определяем переменные хоста для скрипта:
``` ps1 ``` ps1
# Host vars: # Host vars:
@@ -49,14 +48,14 @@ $HOSTNAME = $env:computerName.ToUpper()
$AGENT_PORT = "10050" $AGENT_PORT = "10050"
``` ```
- $HOSTIP - IP адрес устройства. - `$HOSTIP` — IP адрес устройства.
- $HOSTDNS - DNS имя устройства. - `$HOSTDNS` — DNS имя устройства.
- $HOSTNAME - Имя добавляемого устройства. - `$HOSTNAME` — имя добавляемого устройства.
- $AGENT_PORT - порт, на котором слушает zabbix agent. - `$AGENT_PORT` — порт, на котором слушает Zabbix агент.
Я уже прописал скрипт для автоматического заполнения, но вы всегда можете взять отдельные куски кода и запихаь их в терминал. Я уже прописал скрипт для автоматического заполнения, но вы всегда можете взять отдельные куски кода и запустить их в терминале.
5. Определяет функцию для скрипта: 5. Определяем функцию для регистрации нового хоста:
``` ps1 ``` ps1
function RegisterNewHost() { function RegisterNewHost() {
@@ -99,23 +98,23 @@ function RegisterNewHost() {
} }
``` ```
- groupid - укажите обязательно id группы вашего созданной в начале - `groupid` — укажите ID группы, созданной в начале.
- templateid - Укажите шаблон для добавление 10081 по умолчанию "Windows by Zabbix agent" - `templateid` — укажите шаблон для добавления (по умолчанию 10081 "Windows by Zabbix agent").
- useip - Значение определяет что будет индефкатором для хоста =0 будет DNS, =1 будет IP адрес - `useip` — значение, определяющее, что будет идентификатором для хоста: =0 DNS, =1 IP адрес.
6. Функция установки msi пакета 6. Функция установки MSI пакета:
``` ps1 ``` ps1
function InstallZbxAgent() { function InstallZbxAgent() {
msiexec /i \\fs1\soft\Monitoring\zabbix_agent2-openssl.msi /qn SERVER=$ZBX_SERVER_INSTALL LISTENPORT=$AGENT_PORT HOSTNAME=$HOSTNAME msiexec /i \\fs1\soft\zabbix_agent2-openssl.msi /qn SERVER=$ZBX_SERVER_INSTALL LISTENPORT=$AGENT_PORT HOSTNAME=$HOSTNAME
} }
``` ```
- \\fs1\soft\Monitoring\ - указываем путь до установочного файла. - `\\fs1\soft\` — указываем путь до установочного файла.
Из основного все, остается только добавить в скрипт проверку, на тот случай если заббикс агент уже установлен. И указать так называемый - entry point для скрипта. Основные шаги выполнены. Осталось добавить в скрипт проверку на случай, если Zabbix агент уже установлен, и указать так называемый entry point для скрипта:
``` ``` ps1
if (!(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent") -and !(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent 2")) { if (!(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent") -and !(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent 2")) {
InstallZbxAgent InstallZbxAgent
RegisterNewHost RegisterNewHost
@@ -124,16 +123,14 @@ if (!(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent") -a
### Готовый скрипт ### Готовый скрипт
Примерно будет выглядеть так
``` ps1 ``` ps1
# Zabbix server vars: # Zabbix server:
$ZBX_SERVER = "172.16.0.22:8080" $ZBX_SERVER = "192.168.0.2:8080"
$ZBX_SERVER_INSTALL = "172.16.0.22" $ZBX_SERVER_INSTALL = "192.168.0.2"
$ZBX_API = "http://$ZBX_SERVER/api_jsonrpc.php" $ZBX_API = "http://$ZBX_SERVER/api_jsonrpc.php"
$ZBX_TOKEN = "b1c4f904b2b56a342912dd0c44c890cd35dcac1f69e72cb23c765d8feaf85f0a" $ZBX_TOKEN = "b1c4f904b2b56a342912dd0c44c890cd35dcac1f69e72cb23c765d8feaf85f0a"
$ZBX_TEMPLATE = "Windows by Zabbix agent" $ZBX_TEMPLATE = "Windows by Zabbix agent"
$ZBX_HOSTGRP = "Unassigned" $ZBX_HOSTGRP = "NewHosts"
# Host vars: # Host vars:
$HOSTIP = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -imatch "Ethernet"}).IPAddress.toString() $HOSTIP = (Get-NetIPAddress -AddressFamily IPv4 | Where-Object {$_.InterfaceAlias -imatch "Ethernet"}).IPAddress.toString()
$HOSTDNS = ([System.Net.Dns]::GetHostByName($env:computerName).HostName).tolower() $HOSTDNS = ([System.Net.Dns]::GetHostByName($env:computerName).HostName).tolower()
@@ -180,15 +177,14 @@ function RegisterNewHost() {
Invoke-WebRequest -Uri $uri -Headers $headers -Method $method -Body $REQ_PARAMS Invoke-WebRequest -Uri $uri -Headers $headers -Method $method -Body $REQ_PARAMS
# Для отладки, можно удалить следующую строку. # Для отладки, можно удалить следующую строку.
echo "good" $REQ_PARAMS echo "debug" $REQ_PARAMS
} }
RegisterNewHost RegisterNewHost
function InstallZbxAgent() { function InstallZbxAgent() {
echo "start install" echo "start install msi"
msiexec /i \\fs1.mczdorovie.lan\soft\Monitoring\zabbix_agent2-openssl.msi /qn SERVER=$ZBX_SERVER_INSTALL LISTENPORT=$AGENT_PORT HOSTNAME=$HOSTNAME msiexec /i \\fs1\soft\zabbix_agent2-openssl.msi /qn SERVER=$ZBX_SERVER_INSTALL LISTENPORT=$AGENT_PORT HOSTNAME=$HOSTNAME
} }
InstallZbxAgent InstallZbxAgent
@@ -202,16 +198,14 @@ if (!(Test-Path -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Zabbix Agent") -a
### Добавляем скрипт в политику ### Добавляем скрипт в политику
``` bash ``` bash
## Script name: ## Script name:
%windir%\System32\WindowsPowerShell\v1.0\powershell.exe %windir%\System32\WindowsPowerShell\v1.0\powershell.exe
## Script parameters: ## Script parameters:
-Noninteractive -ExecutionPolicy Bypass -Noprofile -file "\\DC01\NETLOGON\zbx_agent_install.ps1" -Noninteractive -ExecutionPolicy Bypass -Noprofile -file "\\DC1\NETLOGON\zbx_agent_install.ps1"
``` ```
С настройкой все закончили. Подключаемся на любой хост, и обновляем политики. Команда - gpupdate /force. Настройка завершена. Подключаемся к любому хосту и обновляем политики с помощью команды `gpupdate /force`.
Выводим список всех политик. Команда - gpresult /R /scope:computer Выводим список всех политик с помощью команды `gpresult /R /scope:computer`.
Проверяем установку в windows и добавленное устройство на сервере. Проверяем установку на Windows и добавление устройства на сервере.