Git Product home page Git Product logo

arms-zabbix-sync's Introduction

Arms: Zabbix sync

Синхронизация Zabbix с узлами Inventory

Требования

  • Zabbix 6.0 - 6.4
  • Inventory желательно последней версии
  • php не ниже 7.4

Настройка

Подключение к информационным системам

Заполняем файл config.priv.php: вписываем URL и учетные данные от инвентори и заббикса см. файл config.sample.php

Использование

Сухой прогон с выводом запланированных изменений для внесения в Zabbix

php ./sync.php

Боевой прогон

php ./sync.php real

Настройка правил синхронизации

находится в файле rules.priv.php (есть пример rules.sample.php) сам файл должен содержать команду return и возвращать вложенный массив данных следующей структуры:

  • Наборы правил
    • Правила, содержащие
      • условия
        • тип условия => параметры
      • действия
        • тип действия => параметры

Алгоритм работы конвейера обходящего этот массив следующий:

  • Обходятся все узлы Inventory, кадому узлу инвентори находится соответствующий узел в Zabbix
    (Работа ведется только с узлами типа Оборудование и Операционные системы.) Для любого узла в инвентори соответствующий узел в Zabbix ищется сначала по макросам (INVENTORY_IRL, INVENTORY_CLASS, INVENTORY_ID),
    если таким образом узел не находится, то для ОС ищется соответствие по FQDN, для оборудования по IP
    • затем каждый узел Inventory обходит все наборы правил
      • в каждом наборе правил выполняется первое, для которого выполняются все условия (условия проверяются только для узла Inventory)
        • для всех таких правил будут просуммированы все действия, которые нужно сделать над соответствующим узлом Zabbix, после чего конвейер перейдет к следующему набору правил (действия выполняются только над узлом Zabbix)
      • после обхода всех наборов правил над узлом Zabbix будут выполнены все накопленные действия из выполненных правил

Условия

В каждом правиле первым пунктом идет набор условий, для срабатывания правила должны выполняться все из них (AND)

  • Правила задаются массивом вида ключ=>значение;
  • Любое значение может быть единичным или множественным (единичное все равно конвертируется во множественное с одним вариантом)
  • Для множественных значений проверяется совпадение хотя бы одного (OR)
['type1'=>['value1','value2'],'type2'=>'value2'];

Пустой набор условий считается выполняющимся всегда (можно ставить в конце набора правил как действие по умолчанию)

Типы условий
  • type - узел должен соответствовать нужному типу: возможны варианты
    • techs - Оборудование
    • comps - Операционные системы
['type'=>['techs'],...]; // только для узлов типа "Оборудование"
  • fqdn - FQDN узла совпадает с указанными (применимо только для операционных систем)
['fqdn'=>['exclusion1.domain.local','exclusion2.test.lab'],...]; // только для узлов с конкретным FQDN
  • domainName - Короткое имя домена совпадает с указанными (применимо только для операционных систем)
['domainName'=>['WORKGROUP'],...]; // только для узлов из WORKGROUP (не в домене)
  • OS - Операционная система попадает под регулярное выражение (то написание, как она сама себя идентифицирует), очевидно применимо только для операционных систем
['OS'=>['VMware Photon'],...]; // только для узлов с такой операционкой (VMware vCenter)
  • service - Узел обеспечивает работу конкретного (или любого сервиса). Точное написание
['service'=>['Kaspersky Security Center'],...]; // только для узлов на которых крутится KES
['service'=>['*']]; // только для узлов на которых крутится какой либо сервис
  • ip - проверка соответствия IP или его наличия
['ip'=>['192.168.0.1','10.0.0.1'],...]; // только для узлов с заданными IP
['ip'=>['*']]; // только для узлов у которых в инвентори есть IP
  • techType - Оборудование конкретной категории (только для оборудования). Проверяется точное написание, не regexp
  • vendor - Оборудование имеет конкретного производителя (только для оборудования). Проверяется точное написание, не regexp
  • model - Модель оборудования попадает под regexp выражение (только для оборудования)
//все коммутаторы D-Link DES или DGS у которых в инветори проставлен IP
['type'=>'techs',	'techType'=>['Коммутатор'], 'vendor'=>['D-Link'], 'model'=>['/^(DES|DGS)/'], 'ip'=>'*'];
  • site - площадка на которой расположен узел (верхний узел в дереве помещений). Проверяется точное полное написание помещения
['site'=>['Московский филиал','Санкт-Петербургский филиал']]; //только узлы на указанных площадках
  • ageOver - превышение количества секунд с последнего обновления узла (удобно для автоматически обновляемых узлов)
['type'=>'comps','ageOver'=>15*24*3600]; //компьютеры которые не обновлялись более 15 суток
  • state - Состояние оборудования (точное написание)
['state'=>['Ремонт','Списано'],...]; //для оборудования в ремонте или списанного   
  • archived - узел перенесен в архив
['type'=>'comps','archived'=>false]; //компьютеры не перенесенные в архив 
Типы действий

При выполнении всех условий правила, над соответствующим узлом в Zabbix будут произведены все действия из этого правила Действия описываются аналогично условиям как действие=>[параметры]

  • actions - разрешить действия над узлом. возможные действия:
    • update - если соответствующий узел Zabbix будет найден, то его можно обновлять (разрешение создавать не дает)
    • create - если соответствующий узел Zabbix не будет найден, то его можно создать (разрешение обновлять не дает)
  • remove-actions - запретить действия (имеет приоритет над разрешением выше)

Все остальные правила выполняются только для узлов для которых есть как минимум одно из действий выше

  • templates - Назначить узлу шаблоны
  • ofTemplates - Из набора шаблонов: при комбинации с предыдущим задает полный набор шаблонов который может быть у узла. После обхода всех правил убирает у узла те шаблоны, которые входят в набор, но не задаются явно через templates; Как templates так и ofTemplates сначала суммируются по всем правилам, а потом уже делается вычитание массивов ofTemplates - templates
[//VCenter servers
    ['type' => 'comps', 'OS' => ['VMware Photon'],],    //для ОС типа VMware Photon 
    [
        'actions'=>['update','create'],                 //добавить в Zabbix и обновлять
        'templates'=>['VMware'],                        //Установить шаблоны VMware
        //убрать шаблоны других операционок (если ранее уже была добавлена как Linux напр.)
        'ofTemplates'=>['Linux by Zabbix agent','Windows by Zabbix agent','VMware'], 
    ]
];
[//Старые ОС
    [//запрещаем создание в заббиксе узлов, которые не обновлялись в инвентори больше 15 дней
        ['type'=>'comps','ageOver'=>15*24*3600],    //Для компьютеров с датой обновления дальше 15 суток
        ['remove-actions'=>['create']],             //запретить создание нового узла в заббикс
    ],
];
  • groups - назаначить узлу группы
  • ofGroups - из набора групп (аналогично шаблонам, для автоматического выкидывания из других групп при перемещении)
[
    ['site'=>'Калужский филиал'],                           //узлы калужской площадки 
    [
        'groups'=>'Калуга',                                 //помещать в группу Калуга                         
        'ofGroups'=>['Калуга','Москва','Питер','Красноярск']//и выкидывать из групп остальных площадок (если переехали)
    ]
];
  • tags - установить теги узла, если у тега есть значение !unset - он будет удален, можно задавать множественные значения. При указании тега, все текущие значения узла заменяются новыми (нельзя просто добавить тэг)
[
    ['type'=>'techs',	'techType'=>['Коммутатор','Маршрутизатор']],
    [
        'tags'=>[
            'сервис'=>'Сеть',               //установить тег сервис со значением Сеть
            'Коммутаторы' =>'!unset',       //убрать старые теги
            'Маршрутизаторы' =>'!unset',    //
        ]
    ],
];
  • macros - задать значения макросов узла
[
    [],     //для всех узлов 
    ['macros'=>['inventory_url'=>'https://inventory.domain.local/web']] //привязываем узел к инвентаризации    
];
  • name - задать имя узла
  • host - задать адрес узла
[//сервер Zabbix
    ['type'=>'comps','fqdn'=>'zabbix.domain.local'],    //для самого себя
    ['name'=>'Сервер Zabbix','host'=>'127.0.0.1']       //Особенное имя и локальный адрес
];
  • interfaces - добавить интерфейсы (интерфейс типа zabbix agent создается автоматически, но может и не использоваться если нет шаблонов с метриками использующими такой тип)
[//ставим Маршрутизаторы Cisco ASA добавляем интерфейс SNMP v2 (нужен для шаблона)
    ['type'=>'techs',	'techType'=>['Маршрутизатор'], 'model'=>['ASA 5515-K9']],
    ['interfaces'=>[['type'=>'SNMP','details'=>['version'=>2,'bulk'=>1,'community'=>'{$SNMP_COMMUNITY}']]],],
];
  • PSK - задать PSK шифрование для узла, для интерфейса типа zabbix-agent (работает только при операции создания, отследить изменение значений нельзя, т.к. это write-only параметры. Интерфейс zabbix-agent создается для всех узлов по умолчанию)
    Задается как Identity=>Ключ. Если указать несколько - будет использована только первая пара
[//Windows Server cypher
    ['type' => 'comps',	'OS' => ['Windows server']],    //для серверных Windows
    ['PSK'=>['server'=>'WINDOWSSERVERSEKRETKEY']]       //свое шифрование
];
  • proxy - узел мониторится через конкретный Zabbix Proxy (Указывается Host ID узла Zabbix Proxy)
[
    ['site'=>'Калужский филиал'],   //узлы из Калуги
    ['proxy'=>91511]                //Мониторим через Калужский прокси
];
  • status - признак активности в zabbix: 0 - узел активен 1 - узел снят с мониторинга
[//выключаем архивированные ОС
    ['type'=>'comps','archived'=>true],
    ['status'=>1],
];
  • error - Пометить узел как ошибочный, никаких действий над ним делаться не будет
[//пропускаем ОС которые нормально не настроены в DNS!
    ['type' => 'comps',		'domainName' => ['WORKGROUP'],],    //все компьютеры из "рабочей группы" 
    ['errors'=>['domain not set!']]                             //пропускаем, т.к. у них нет FQDN
];
Макросы Inventory

При задании параметров узла Zabbix через действия в правилах можно использовать макросы, которые будут развернуты в соответствующие значения параметров узла Inventory

  • ${inventory:serviceman} - Фамилия ответственного за узел
  • ${inventory:supportTeam} - Фамилии группы тех.поддержки узла через запятую
[//ставим ответственных/поддержку за узел
    ['type'=>['comps','techs']],        //на все ОС и Оборудование 
	['tags'=>[                          //выставляем теги ответственного и поддержки узла
	    'node-service'=>'${inventory:serviceman}',
        'node-support'=>'${inventory:supportTeam}',
    ]],
];
  • ${inventory:fqdn} - FQDN узла
  • ${inventory:ip} - IP адрес узла
  • ${inventory:num} - ИНВ номер узла (маркировка ИТ отдела)
[// именование и адресация узлов
    [//компьютеры именуем по FQDN и обращаемся также
        ['type'=>'comps'],['name'=>'${inventory:fqdn}', 'host'=>'${inventory:fqdn}',],
    ],
    [//оборудование по инвентарному номеру, а обращаемся по IP
        ['type'=>'techs'],['name'=>'${inventory:num}', 'host'=>'${inventory:ip}',],
    ],
];
  • ${inventory:class} - Класс объекта в Inventory
  • ${inventory:id} - ID объекта в Inventory (уникальный в пределах класса)
[
    [],             //всем узлам 
    ['macros'=>[    //прописываем с чем в Inventory они синхронизированы
        'inventory_class'=>'${inventory:class}',
        'inventory_id'=>'${inventory:id}'
    ]]
];

arms-zabbix-sync's People

Contributors

spo0okie avatar

Watchers

 avatar

arms-zabbix-sync's Issues

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.