Рекомендации по работе с данными в скриптах
Обзор возможностей
Данная статья содержит несколько примеров того, каким образом можно выполнить сбор некоторых данных с помощью скриптов в сенсоре.
Как найти и выполнить действие с несколькими значениями
Например:
- Собрать несколько значений в одной строку.
- Посчитать сумму значений
Для этого нужно найти поля по регулярному выражению и определить, что делать со значениями найденных полей.
Предположим, при работе сенсора были собраны данные конфигурации сетевых адаптеров (nics). У каждого адаптера (3 шт.) есть MAC-адрес.
Необходимо показать все три адреса в одной строке через запятую.
...
"nics": {
"4000": {
"start_connected": true,
"pci_slot_number": 160,
"backing": {
"connection_cookie": 2088443794,
"distributed_port": "72",
"distributed_switch_uuid": "50 31 a5 14 03 d6 fd f1-ca 2b a6 85 dd d3 4f fa",
"type": "DISTRIBUTED_PORTGROUP",
"network": "dvportgroup-70385"
},
"mac_address": "00:50:56:b1:00:01",
"mac_type": "ASSIGNED",
"allow_guest_control": true,
"wake_on_lan_enabled": true,
"label": "Network adapter 1",
"state": "CONNECTED",
"type": "VMXNET3",
"upt_compatibility_enabled": true
},
"4001": {
"start_connected": true,
"pci_slot_number": 192,
"backing": {
"connection_cookie": 2088449340,
"distributed_port": "73",
"distributed_switch_uuid": "50 31 a5 14 03 d6 fd f1-ca 2b a6 85 dd d3 4f fa",
"type": "DISTRIBUTED_PORTGROUP",
"network": "dvportgroup-70385"
},
"mac_address": "00:50:56:b1:8a:1f",
"mac_type": "ASSIGNED",
"allow_guest_control": true,
"wake_on_lan_enabled": true,
"label": "Network adapter 2",
"state": "CONNECTED",
"type": "VMXNET3",
"upt_compatibility_enabled": true
},
"4002": {
"start_connected": true,
"pci_slot_number": 224,
"backing": {
"connection_cookie": 2088453292,
"distributed_port": "310",
"distributed_switch_uuid": "50 31 a5 14 03 d6 fd f1-ca 2b a6 85 dd d3 4f fa",
"type": "DISTRIBUTED_PORTGROUP",
"network": "dvportgroup-76457"
},
"mac_address": "00:50:56:b1:ce:5e",
"mac_type": "ASSIGNED",
"allow_guest_control": true,
"wake_on_lan_enabled": true,
"label": "Network adapter 3",
"state": "CONNECTED",
"type": "VMXNET3",
"upt_compatibility_enabled": true
}
},
....
Шаг 1. Найти и объединить поля
Необходимо указать, из каких полей собирать данные.
То есть вместо указания одного поля:
“field” : [“OSVersion=guest_OS”, “CsDNSHostName=name”, “identity”,“MacAddress=nics/400/mac_address”]
использовать маску, чтобы взять все значения. Например:
“field” : [“OSVersion=guest_OS”, “CsDNSHostName=name”, “identity”,“MacAddress=nics/**400*/**mac_address”]
“field” : [“OSVersion=guest_OS”, “CsDNSHostName=name”, “identity”,“MacAddress=nics/400_/mac_address”]
“field” : [“OSVersion=guest_OS”, “CsDNSHostName=name”, “identity”,“MacAddress=nics/400[a-z]_[0-9][0-9]*/mac_address”]
Важно: “field” с регулярным выражением требует ЯВНОГО указания имени.
Шаг 2. Указать, что делать со всеми найденными значениями
Если найдено несколько полей по регулярным выражениям, то данные с этих полей сохраняются под указанным именем поля (в примере - MacAddress) через запятую, или по заданному fieldAggregationType.
Допустимые fieldAggregationType:
- "sum"
- "max"
- "min"
- "first"
- "last"
- "StringTrim"
То есть, так как по умолчангию значения перечисляются через запятую, то для примера выше ничего больше указывать не нужно.
Другой пример:
“field” : [“OSVersion=guest_OS”, “CsDNSHostName=name”, “identity”,“DisksCapacity=disks/[a-z]_[0-9][0-9]*/capacity”]“fieldAggregationType”: {“DisksCapacity”:“sum”, “CsDNSHostName”:“StringTrim”}
Как объединить данные разных скриптов
Вы можете объединить данные, собранные в одном сенсоре разными скриптами.
Например, в одном сенсоре есть цепочка из двух скриптов. После выполнения они получили данные:
- Скрипт 1: имя, версия, производитель.
- Скрипт 2: имя, MAC-адрес, IP-адрес.
Если имя одинаковое, то эти значения можно объединить.
Для этого укажите в identityFields последнего скрипта (в нашем случае втором), по какому полю/полям будем идентифицировать и объединять:
“field” : [“OSVersion=guest_OS”, “CsDNSHostName=name”, “identity”,“DisksCapacity=disks/[a-z]_[0-9][0-9]*/capacity”]
“fieldAggregationType”: {“DisksCapacity”:“sum”, “CsDNSHostName”:“StringTrim”}
“identityFields”: [“CsDNSHostName”, “identity”]
В это случае последний скрипт будет искать в результатах предыдущих объекты с данным именем и объединять данные.