As funções foreach são usadas em cálculos agregados para retornar um valor agregado para cada item que é selecionado pelo filtro de item utilizado. Um array de valores é retornado.
Por exemplo, a função avg_foreach retornará um array de valores, onde cada valor é o valor médio do histórico do item selecionado, durante o intervalo de tempo especificado.
O filtro de item faz parte da sintaxe usada pelas funções foreach. O uso de curingas é suportado no filtro de item, permitindo que os itens necessários sejam selecionados de forma bastante flexível.
| Função | Descrição |
|---|---|
| avg_foreach | Retorna o valor médio para cada item. |
| bucket_rate_foreach | Retorna pares (limite superior do bucket, valor da taxa) adequados para uso na função histogram_quantile(), onde "limite superior do bucket" é o valor do parâmetro da chave do item definido pelo <número do parâmetro> parâmetro. |
| count_foreach | Retorna o número de valores para cada item. |
| exists_foreach | Retorna '1' para cada item habilitado. |
| last_foreach | Retorna o último valor para cada item. |
| max_foreach | Retorna o valor máximo para cada item. |
| min_foreach | Retorna o valor mínimo para cada item. |
| sum_foreach | Retorna a soma dos valores para cada item. |
As funções foreach suportam dois parâmetros comuns: filtro de item (veja detalhes abaixo) e período de tempo:
Por exemplo:
avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m)
retornará a média de cinco minutos de cada item 'mysql.qps' no grupo de servidores MySQL.
Observe que algumas funções suportam parâmetros adicionais.
O filtro de item:
consiste em quatro partes, onde:
Espaços são permitidos apenas dentro da expressão de condições.
Uso de curingas
/host/* e /*/key são filtros válidos, mas /*/* é inválido.key[abc,*,*]).Expressão de condições
A expressão de condições suporta:
"<text>" - constante de string, com o caractere de escape \ para escapar " e \=, <>and, or, not( )A citação de constantes de string é obrigatória. Apenas a comparação de string completa sensível a maiúsculas e minúsculas é suportada.
Ao especificar tags no filtro (ou seja, tag="tagname:value"), o dois-pontos ":" é usado como delimitador. Tudo após ele é considerado o valor da tag. Portanto, atualmente não é suportado especificar um nome de tag contendo ":" nele.
Exemplos
Um filtro complexo pode ser usado, referenciando a chave do item, grupo de host e tags, conforme ilustrado pelos exemplos:
| Exemplo de sintaxe | Descrição |
|---|---|
/host/key[abc,*] |
Corresponde a itens semelhantes neste host. |
/*/key |
Corresponde ao mesmo item de qualquer host. |
/*/key?[group="ABC" and tag="tagname:value"] |
Corresponde ao mesmo item de qualquer host do grupo ABC que tenha tags 'tagname:value'. |
/*/key[a,*,c]?[(group="ABC" and tag="Tag1") or (group="DEF" and (tag="Tag2" or tag="Tag3:value"))] |
Corresponde a itens semelhantes de qualquer host do grupo ABC ou DEF com as respectivas tags. |
Todos os itens referenciados devem existir e coletar dados. Apenas itens habilitados em hosts habilitados são incluídos nos cálculos. Itens em estado não suportado não são incluídos.
Se a chave do item de um item referenciado for alterada, o filtro deverá ser atualizado manualmente.
Especificar um grupo de host pai inclui o grupo pai e todos os grupos de host aninhados com seus itens.
O segundo parâmetro permite especificar o período de tempo para agregação. O período de tempo só pode ser expresso como tempo, a quantidade de valores (prefixada com #) não é suportada.
Unidades de tempo suportadas podem ser usadas neste parâmetro para conveniência, por exemplo, '5m' (cinco minutos) ao invés de '300s' (300 segundos) ou '1d' (um dia) ao invés de '86400' (86400 segundos).
Para a função last_foreach, o período de tempo é um parâmetro opcional (suportado desde o Zabbix 7.0), que pode ser omitido:
O período de tempo não é suportado com a função exists_foreach.
bucket_rate_foreach
Um terceiro parâmetro opcional é suportado pela função bucket_rate_foreach:
onde <parameter number> é a posição do valor "bucket" na chave do item. Por exemplo, se o valor "bucket" em myItem[aaa,0.2] for '0.2', então sua posição é 2.
O valor padrão de <parameter number> é '1'.
count_foreach
Terceiro e quarto parâmetros opcionais são suportados pela função count_foreach:
Onde:
operators suportados:patternpatternComentários:
pattern pode ser especificado como dois números, separados por '/': number_to_compare_with/mask. count_foreach() calcula o "AND bit a bit" do valor e da mask e compara o resultado com number_to_compare_with. Se o resultado do "AND bit a bit" for igual a number_to_compare_with, o valor é contado.pattern pode ser uma expressão regular comum ou global (começando com '@'). No caso de expressões regulares globais, a diferenciação entre maiúsculas e minúsculas é herdada das configurações da expressão regular global. Para fins de correspondência regexp, valores float sempre serão representados com 4 dígitos decimais após o '.'. Observe também que, para números grandes, a diferença na representação decimal (armazenada no banco de dados) e binária (usada pelo Zabbix server) pode afetar o 4º dígito decimal.Veja cálculos agregados para mais detalhes e exemplos sobre o uso das funções foreach.
A tabela a seguir ilustra como cada função se comporta em casos de disponibilidade limitada de host/item e dados de histórico.
| Função | Host desabilitado | Host indisponível com dados | Host indisponível sem dados | Item desabilitado | Item não suportado | Erro de recuperação de dados (SQL) |
|---|---|---|---|---|---|---|
| avg_foreach | ignorar | retornar média | ignorar | ignorar | ignorar | ignorar |
| bucket_rate_foreach | ignorar | retornar bucket rate | ignorar | ignorar | ignorar | ignorar |
| count_foreach | ignorar | retornar contagem | 0 | ignorar | ignorar | ignorar |
| exists_foreach | ignorar | 1 | 1 | ignorar | 1 | n/a |
| last_foreach | ignorar | retornar último | ignorar | ignorar | ignorar | ignorar |
| max_foreach | ignorar | retornar máximo | ignorar | ignorar | ignorar | ignorar |
| min_foreach | ignorar | retornar mínimo | ignorar | ignorar | ignorar | ignorar |
| sum_foreach | ignorar | retornar soma | ignorar | ignorar | ignorar | ignorar |
Se o item for ignorado, nada é adicionado à agregação.