1 Foreach функције

Преглед

Foreach функције се користе у агрегатним прорачунима за враћање једне збирне вредности за сваку ставку коју је изабрао коришћени филтер ставке. Враћа се низ вредности.

На пример, функција * avg_foreach* ће вратити низ вредности, где је свака вредност просечна вредност историје изабране ставке, током временског интервала који је наведен.

филтер ставке је део синтаксе коју користе foreach функције. Коришћење џокер знакова је подржано у филтеру ставки, тако да се тражене ставке могу бирати прилично флексибилно.

Подржане функције

Function Description
avg_foreach Враћа просечну вредност за сваку ставку.
bucket_rate_foreach Враћа парове (горња граница сегмента, вредност стопе) погодне за употребу у функцији histogram_quantile(), где је "горња граница сегмента" вредност параметра кључа ставке дефинисаног у <број параметра> параметру.
count_foreach Враћа број вредности за сваку ставку.
exists_foreach Враћа '1' за сваку омогућену ставку.
last_foreach Враћа последњу вредност за сваку ставку.
max_foreach Враћа максималну вредност за сваку ставку.
min_foreach Враћа минималну вредност за сваку ставку.
sum_foreach Враћа збир вредности за сваку ставку.

Синтакса функције

Foreach функције подржавају два уобичајена параметра: item filter (погледајте детаље у наставку) и time period:

foreach_function(item filter,time period)

на пример:

avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m)

ће вратити петоминутни просек сваке 'mysql.qps' ставке у групи MySQL сервера.

Имајте на уму да неке функције подржавају додатне параметре.

Синтакса филтера ставки

Филтер ставке:

/host/key[parameters]?[conditions]

састоји се од четири дела, где је:

  • host - име домаћина
  • key - кључ ставке (без параметара)
  • parameters - кључни параметри ставке
  • conditions - услови засновани на групи домаћина и/или ознакама ставке (као израз)

Размаци су дозвољени само унутар израза услова.

Коришћење џокера

  • Џокер може да се користи за замену имена домаћина, кључа ставке или параметра кључа појединачне ставке.
  • Или домаћин или кључ ставке морају бити наведени без џокера. Дакле, /host/* и //keyсу важећи филтери, али//*` је неважећи.
  • Џокерски знак се не може користити за део имена домаћина, кључа ставке, параметра кључа ставке.
  • Џокерском знаку не одговара више од једног кључног параметра ставке. Дакле, џокер мора да се наведе за сваки параметар у раздвајању (тј. key[abc,*,*]).

Израз услова

Израз услова подржава:

  • операнде:
    • group - група домаћина
    • tag - ознака ставке
    • "<text>" - константа стринга, са \ escape карактером за изоловање " и \
  • Оператори за поређење стрингова који разликују велика и мала слова: =, <>
  • логички оператори: and, or, not
  • груписање са заградама: ( )

Навођење стринг константи је обавезно. Подржано је само поређење пуног стринга са разликовањем великих и малих слова.

Када наведете ознаке у филтеру (тј. tag="tagname:value"), двотачка ":" се користи као граничник. Све после се сматра вредношћу ознаке. Стога тренутно није подржано да се наведе име ознаке које садржи ":".

Примери

Може се користити сложени филтер који упућује на кључ ставке, групу домаћина и ознаке, као што је илустровано примерима:

Syntax example Description
/host/key[abc,*] Одговара сличним ставкама на овом домаћину.
/*/key Одговара истој ставци било ког домаћина.
/*/key?[group="ABC" and tag="tagname:value"] Подудара се са истом ставком било ког домаћина из ABC групе која има ознаке 'tagname:value'.
/*/key[a,*,c]?[(group="ABC" and tag="Tag1") or (group="DEF" and (tag="Tag2" or tag="Tag3:value"))] Упарује сличне ставке било ког домаћина из ABC или DEF групе са одговарајућим ознакама.

Све наведене ставке морају постојати и прикупљати податке. Само омогућене ставке на омогућеним домаћинима су укључене у прорачуне. Ставке у неподржаном стању нису укључене.

Ако се промени кључ ставке референтне ставке, филтер се мора ажурирати ручно.

Навођење надређене групе домаћина укључује родитељску групу и све угњеждене групе домаћина са њиховим ставкама.

Временски период

Параметар други омогућава да одредите временски период за агрегацију. Временски период се може изразити само као време, количина вредности (са префиксом #) није подржана.

Подржани симболи јединица се могу користити у овом параметру ради практичности, на пример, '5m' (пет минута) уместо '300s' (300 секунди) или '1d' (један дан) уместо '86400' (86400 секунди).

За функцију last_foreach временски период је опциони параметар (подржан од Zabbix-а 7.0), који се може изоставити:

last_foreach(/*/key?[group="host group"])

Временски период није подржан са функцијом exists_foreach.

Додатни параметри

bucket_rate_foreach

Трећи опциони параметар је подржан функцијом bucket_rate_foreach:

bucket_rate_foreach(item filter,time period,<parameter number>)

где је <parameter number> позиција вредности "bucket" у кључу ставке. На пример, ако је вредност "bucket" у myItem[aaa,0.2] '0.2', тада је њена позиција 2.

Подразумевана вредност <parameter number> је '1'.

count_foreach

Трећи и четврти опциони параметри су подржани функцијом count_foreach:

count_foreach(item filter,time period,<operator>,<pattern>)

Где је:

  • оператор условни оператор за вредности ставки (мора бити у двоструким наводницима). Подржани operators:
    * eq* - једнако
    * ne* - није једнако
    * gt* - веће од
    ge - веће или једнако
    * lt* - мање од
    * le* - мање или једнако
    * like* - подудара се ако садржи образац (разликује велика и мала слова)
    * bitand* - битовски оператор AND
    * regexp* - подударање регуларног израза датог у pattern где се разликују мала и велика слова
    * iregexp* - подударање регуларног израза датог у pattern где се не разликују мала и велика слова
  • шаблон је тражени образац (аргументи стрингова морају бити у двоструким наводницима); подржано ако је оператор наведен у трећем параметру.

Коментари:

  • Опциони параметри оператор или образац не могу бити остављени празни после зареза, само се потпуно изостављају.
  • Са * bitand* као трећим параметром, четврти параметар pattern се може навести као два броја, раздвојена са '/': number_to_compare_with/mask. count() израчунава "битовски AND" из вредности и маске и упоређује резултат са number_to_compare_with. Ако је резултат "битовски AND" једнак number_to_compare_with, вредност се рачуна.
    Ако су number_to_compare_with и mask једнаки, потребно је само навести mask (без '/').
  • Са * regexp* или * iregexp* као трећим параметром, четврти параметар pattern може бити обичан или глобални (који почиње са '@') регуларни израз. У случају глобалних регуларних израза, осетљивост на велика и мала слова се наслеђује из подешавања глобалних регуларних израза. За потребе подударања регуларног израза, вредности са бројем у покретном зарезу увек ће бити представљене са 4 цифре после '.'. Такође имајте на уму да за велике бројеве разлика у децималној (чуваној у бази података) и бинарној (коју користи Zabbix сервер) може утицати на 4. децималу.

Погледајте агрегатне калкулације за више детаља и примере коришћења foreach функција.

Понашање у зависности од доступности

Следећа табела илуструје како се свака функција понаша у случајевима ограничене доступности домаћина/ставки и подацима историје.

Function Disabled host Unavailable host with data Unavailable host without data Disabled item Unsupported item Data retrieval error (SQL)
avg_foreach ignore return avg ignore ignore ignore ignore
bucket_rate_foreach ignore return bucket rate ignore ignore ignore ignore
count_foreach ignore return count 0 ignore ignore ignore
exists_foreach ignore 1 1 ignore 1 n/a
last_foreach ignore return last ignore ignore ignore ignore
max_foreach ignore return max ignore ignore ignore ignore
min_foreach ignore return min ignore ignore ignore ignore
sum_foreach ignore return sum ignore ignore ignore ignore

Ако је ставка игнорисана, ништа се не додаје у агрегацију.