# 1 Пользовательские макросы

#### Обзор

Для большей гибкости, Zabbix поддерживает пользовательские макросы,
которые можно определить на глобальном уровне, на уровне шаблонов и на
уровне узлов сети. Эти макросы имеют специальный синтаксис:
**{$МАКРОС}**.

Макросы можно использовать в:

-   именах элементов данных
-   в параметрах ключей элементов данных
-   именах и описаниях триггеров
-   в параметрах и константах выражений триггеров (смотрите примеры)
-   в некоторых [других
    местах](/ru/manual/appendix/macros/supported_by_location#дополнительная_поддержка_пользовательских_макросов)

В именах макросов допускаются следующие символы: **A-Z** , **0-9** ,
**\_** , **.**

Zabbix раскрывает макросы в соответствии со следующей очередностью:

1.  макрос, назначенный узлу сети (проверяется в первую очередь)
2.  макрос, назначенный на первый уровень шаблонов у узла сети (т.е.
    шаблоны присоединенные напрямую к узлу сети), которые отсортированы
    по ID шаблона
3.  макрос, назначенный на второй уровень шаблонов у узла сети, которые
    отсортированы по ID шаблона
4.  макрос назначенный на третий уровень шаблонов у узла сети, которые
    отсортированы по ID шаблона
5.  ...
6.  глобальные макросы (проверяются в последнюю очередь)

Иными словами, если макрос не существует непосредственно у узла сети,
тогда Zabbix попытается найти его в шаблонах, присоединенных к этому
узлу сети, с учетом увеличивающейся глубины шаблонов. Если макрос все
еще не найден, то будет использован макрос глобального уровня, если он
существует конечно.

В случае, если Zabbix не удалось найти макрос, макрос не будет заменен
на значение.

Для добавления пользовательских макросов, перейдите в соответствующие
разделы в веб-интерфейсе:

-   для глобальных макросов, посетите *Администрирование → Общие →
    Макросы*
-   для макросов на уровне узлов сети и шаблонов, откройте свойства узла
    сети или шаблона и найдите вкладку *Макросы*

::: notetip
Если пользовательский макрос используется в элементах
данных или триггерах шаблона, то предлагается добавить этот макрос к
шаблону, даже если он задан на глобальном уровне. Таким образом при
экспорте шаблона в XML и импорте его в другую систему элементы данных и
триггеры продолжат работать, как это и ожидалось.
:::

**Наиболее общие случаи использования глобальных макросов и макросов
уровня узлов сети:**

1.  используются шаблоны со специфичными для узла сети атрибутами:
    пароли, номера портов, имена файлов, регулярные выражения, и т.д.
2.  глобальные макросы для глобального быстрого изменения конфигурации
    через "одно нажатие" и более тонкой настройки

#### Примеры

##### Пример 1

Использование макроса в ключе элемента данных "Состояние демона SSH":

**net.tcp.service\[ssh,{$SSH\_PORT}\]**

Этот элемент данных можно присоединить к нескольким узлам сети, при
условии, что значение **{$SSH\_PORT}** указано на этих узлах сети.

##### Пример 2

Использование макроса уровня узла сети в триггере "Загрузка CPU слишком
высокая":

**{ca\_001:system.cpu.load\[,avg1\].last(0)}>{$MAX\_CPULOAD}**

Такой триггер можно создать у шаблона, он не будет изменен у отдельных
узлов сети.

::: notetip
Если вы хотите использовать количество значений в
качестве параметра функции (например, **max(\#3)**), добавьте символ
решетки \# непосредственно в значение макроса, например вот так:
SOME\_PERIOD ⇒ \#3
:::

##### Пример 3

Использование двух макросов в триггере "Загрузка CPU слишком высокая":

**{ca\_001:system.cpu.load\[,avg1\].min({$CPULOAD\_PERIOD})}>{$MAX\_CPULOAD}**

Заметьте, что макрос можно использовать в качестве параметра в функциях
триггеров, в этом примере в функции **min()**.

::: noteimportant
Пользовательские макросы будут раскрыты в
триггерах, если макросы используются в параметрах или как константы. Они
НЕ будут раскрыты, если используются в качестве ссылка на функции, имена
узлов сети, ключи элементов данных или операторы.
:::
