# - \#7 Itens calculados

#### - Visão geral

Com os itens calculados você pode gerar novas informações a partir de
dados coletados por outros itens.

Assim, itens calculados são uma forma de se criar fontes de dados
virtuais. Os dados são periodicamente calculados baseados em uma
expressão aritmética. Todos os cálculos são feitos pelo Zabbix Server -
nada será calculado pelos agentes ou proxies.

O dado resultante será armazenado no banco de dados do Zabbix como
qualquer outro item - isso quer dizer que tanto as tabelas de histórico
quanto as de médias serão alimentadas para a rápida geração de gráficos.
Itens calculados podem ser utilizados em expressões de triggers,
referenciados por macros ou outras entidades da mesma forma que qualquer
outro item.

Para usar os itens calculados, selecione o *Tipo* **Calculado**.

#### - Campos personalizados

A **chave** é o identificador único de item por host. Você pode definir
qualquer nome de chave, contando que use os caracteres suportados.

Deverá ser informada a regra de cálculo no campo *Formula*.
Virtualmente, não existe conexão entre uma fórmula e sua chave. Os
parâmetros da chave não serão utilizados na fórmula.

A sintaxe de uma simples fórmula pode ser definida como:

    func(<key>|<hostname:key>,<parameter1>,<parameter2>,...)

Onde:

|Argumento|Definição|
|---------|-----------|
|**func**|Uma das [funções](/pt/manual/appendix/triggers/functions) suportadas em uma expressão de trigger: last, min, max, avg, count, etc|
|**key**|A chave de um outro item cujo dado seja necessário na fórmula. Podendo ser referenciado como **key** (chave) ou **hostname:key**.<br>*Nota:* Colocar a **key** entre aspas duplas ("...") é recomendável para evitar erros de análise por conta de espaços ou separadores de valores que poderão existir na chave referenciada.<br>Se a chave a qual estejamos referenciado utilizar-se de aspas duplas, as mesmas deverão ser escapadas pelo caractere "\\". Veja o **Exemplo 5** a seguir.|
|**parameter(s)**|Qualquer parâmetro adicional que possa ser necessário.|

::: notetip
Todos os itens referenciados por uma fórmula de um item
calculado deverão existir e possuir algum dado coletado. Outro ponto
importante é que, ao contrário do que ocorre nas triggers, os itens
referenciados pela fórmula, se tiverem suas chaves alteradas, deverão
ter suas chamadas na fórmula manualmente alteradas.
:::

::: noteimportant
As [Macros de
usuário](/pt/manual/config/macros/usermacros) na fórmula serão
traduzidos se utilizados como referência para um parâmetro ou constante.
Por outro lado, elas não serão traduzidas se tentarem utiliza-las como
uma função, nome de host, chave ou operador.
:::

Fórmulas mais complexas poderão utilizar combinação de funções,
operadores e colchetes. Você pode utilizar todas as funções e
[operadores](/pt/manual/config/triggers/expression#operators) suportados
pelas expressões de triggers. Observe que a sintaxe é um pouco
diferente, mas a lógica e a precedência será exatamente a mesma.

De forma diferente das expressões de trigger, o Zabbix processa os itens
calculados de acordo com seu intervalo de atualização, não considerando
o recebimento de novos valores.

Um item calculado passará para o estado de 'não suportado' sob várias
circunstâncias:

1.  ausência de item(s) referenciado(s)
2.  sem dados suficientes para calcular uma função
3.  divisão por zero
4.  sintaxe inválida

::: noteclassic
O suporte aos itens calculados foi introduzido no Zabbix
1.8.1
:::

#### - Exemplos de uso

##### Exemplo 1

Calculando o percentual livre na partição '/'.

Use a função **last**:

    100*last("vfs.fs.size[/,free]")/last("vfs.fs.size[/,total]")

O Zabbix irá usar o último valor livre coletado para a partição e
calculará o percentual conforme a fórmula.

##### Exemplo 2

Calcular a média de 10 minutos de valores processados pelo Zabbix.

Utilize a função **avg**:

    avg("Zabbix Server:zabbix[wcache,values]",600)

Observe que o uso de itens calculados em longos períodos de análise de
dados poderá afetar a performance do Zabbix server.

##### Exemplo 3

Calculando o total de banda trafegada em **eth0**.

Sumarização de duas funções:

    last("net.if.in[eth0,bytes]")+last("net.if.out[eth0,bytes]")

##### Exemplo 4

Calculando o percentual do tráfego de entrada.

Uma fórmula um pouco mais complexa:

    100*last("net.if.in[eth0,bytes]")/(last("net.if.in[eth0,bytes]")+last("net.if.out[eth0,bytes]"))

##### Exemplo 5

Utilizando itens agregados para calcular.

Especial tenção sobre a forma que as aspas duplas das chaves são
escapadas na fórmula:

    last("grpsum[\"video\",\"net.if.out[eth0,bytes]\",\"last\"]") / last("grpsum[\"video\",\"nginx_stat.sh[active]\",\"last\"]") 
