| 31 | | Третьим элементом ключа является ключевое слово, определяющее функцию ключа. Поддерживаемые агентом функции ключей и их описание приводятся в таблице ниже. Формат оставшейся части ключа определяется его функцией. |
| | 27 | `MCv2.<функция>[<параметры>]` |
| | 28 | |
| | 29 | `MC04.<тип объекта>.<функция>.<дополнительные элементы>[<параметры>]` |
| | 30 | |
| | 31 | В настоящее время рекомендуется использовать формат, начинающийся с `MCv2`. Формат, начинающийся с `MC04`, использовался в более ранних версиях агента (и с ранними версиями Zabbix, в которых отсутствовала развитая пред-обработка значений и вложенное низкоуровневое обнаружение) и продолжает поддерживаться для совместимости с уже эксплуатируемыми системами мониторинга. Далее следует описание ключей формата `MCv2`, ключи формата `MC04` описаны в конце раздела. |
| | 32 | |
| | 33 | Ключи формата `MCv2` после префикса `MCv2.`, служащего для идентификации формата ключа, содержат ключевое слово, обозначающее выполняемую функцию, за которым следуют заключенные в квадратные скобки параметры. Параметры разделяются запятыми и могут быть позиционными или именными. Именной параметр отличается от позиционного тем, что имеет формат `<имя параметра>=<значение>` и опознается агентом по наличию символа `=`. Позиционный параметр не содержит символа `=`, а его семантика определяется позицией параметра в списке. Обратите внимание, что именные параметры не учитываются при анализе позиционных параметров и могут находиться в любом месте. Например следующие ключи эквивалентны: |
| | 34 | |
| | 35 | - `MCv2.function[первый, второй, третий, foo=bar, moo=var]`; |
| | 36 | - `MCv2.function[foo=bar, moo=var, первый, второй, третий]`; |
| | 37 | - `MCv2.function[первый, foo=bar, второй, moo=var, третий]`. |
| | 38 | |
| | 39 | Также обратите внимание, что параметры между собой могут разделяться любым количеством пробелов, однако в именных параметрах пробелы перед и после символа `=` недопустимы. |
| | 40 | |
| | 41 | Кличи формата `MCv2` могут иметь следующие функции: |
| | 42 | |
| | 43 | - getvar; |
| | 44 | - substr; |
| | 45 | - boardlist. |
| | 46 | |
| | 47 | ==== Функция `getvar` ==== |
| | 48 | |
| | 49 | Функция `getvar` возвращает переменную платы блока MC04-DSL-3U. |
| | 50 | |
| | 51 | //__Позиционные параметры__:// |
| | 52 | |
| | 53 | Функция требует наличия в ключе следующих позиционных параметров: `[<slot>, <oid>]`, где `<slot>` - номер слота блока, в котором установлена плата, `<oid>` - OID переменной платы. Например ключ `MCv2.getvar[3, .2.0]` вернет значение переменной `.2.0` платы в слоте 3 (текстовое наименование платы). |
| | 54 | |
| | 55 | //__Именные параметры__// |
| | 56 | |
| | 57 | `name=<наименование платы>`:: Значение переменной возвращается только при условии совпадения имени платы с указанным значением параметра. В процессе эксплуатации аппаратуры состав и расположение установленных в блоке плат может меняться. Возможна ситуация, когда в слот, где ранее была установлена и мониторилась плата одного типа, будет установлена плата другого типа, при этом новая плата может иметь переменную с тем же OID, что и ранее установленная, но значение этой переменной может иметь совершенно иную семантику. Такая ситуация приведет к тому, что система мониторинга будет получать и неверно интерпретировать значение переменных новой платы. Параметр `name` решает эту проблему: в случае, если наименование платы не совпадает с указанным в параметре `name` ключа, агент Zabbix вернет ошибку "not found". |
| | 58 | |
| | 59 | `format=<string|hex|array>`:: Параметр позволяет устранить неоднозначность формата возвращаемого значения. Так как у плат блока MC04-DSL-3U отсутствует специальный тип для двоичных данных, для этих целей используется тип "строка". Как результат, при получении значения типа строка возникает неоднозначность - интерпретировать ли значение как текстовую строку или как двоичные данные (массив байт). По умолчанию (без указания параметра `format`) агент Zabbix принимает решение, анализируя полученное значение (подобно тому как это происходит в распространенных агентах SNMP): если в полученном значении присутствуют "непечатные" символы (байты с кодами меньше 32), то значение передается серверу Zabbix в формате HEX: как последовательность пар шестнадцатеричных цифр разделенных пробелами (например `23 fc 2b 02 00 e3 56`). В противном случае (если "непечатные" символы не обнаружены) значение передается серверу как текстовая строка (string). Указание параметра `format` позволяет однозначно задать формат, в котором агент будет передавать серверу значение переменной. Дополнительно у описанным выше форматам можно указать формат `array` - в этом случае значение переменной будет передано как JSON массив десятичных значений байтов (например `[35, 215, 41, 2, 0, 198, 4]`). Формат "array" удобен для пред-обработки значения сервером Zabbix с помощью JSONPath или !JavaScript. Обратите внимание, что при использовании параметра `format=string` текстовая строка может оказаться невалидной (например если в значении содержатся нулевые байты), в результате чего невалидным может оказаться JSON объект, передаваемый агентом серверу, что приведет к потере значения не только данного элемента, но и других, передаваемых агентом в том же сообщении. |
| | 60 | |
| | 61 | ==== Функция `substr` ==== |
| | 62 | |
| | 63 | //__Позиционные параметры__:// |
| | 64 | |
| | 65 | Функция требует наличия в ключе следующих позиционных параметров: `[<slot>, <oid>, <start>, <count>]`. Функция `substr` полностью аналогична функции `getvar`, только в случае если запрошенная переменная имеет тип "строка", агент возвращает подстроку, начинающуюся с позиции `<start>` и содержащую `<count>` байт. Например ключ `MCv2.substr[3, .7.6.5.0, 9, 5, format=array]` вернет значения 5 байт начиная с позиции 9 значения переменной .7.6.5.0 платы в слоте 3 в формате JSON массива (предполагается что переменная имеет тип "строка"). Эта функция полезна в случаях, когда состояние множества элементов платы (например портов или каналов) содержится в одной переменной, возвращающей один большой массив байт. |
| | 66 | |
| | 67 | //__Именные параметры__// |
| | 68 | |
| | 69 | Все именные параметры аналогичны функции `getvar`. |
| | 70 | |
| | 71 | ==== Функция `boardlist` ==== |
| | 72 | |
| | 73 | Функция служит для низкоуровневого обнаружения (LLD) плат в блоке и возвращает список плат блока в формате JSON объекта. Функция не имеет параметров. |
| | 74 | |
| | 75 | |
| | 76 | ==== Описание ключей формата `MC04`==== |