Fonctions foreach
Vue d’ensemble
Les fonctions foreach sont utilisées dans les calculs agrégés pour renvoyer une valeur agrégée pour chaque élément sélectionné par le filtre d’élément utilisé. Un tableau de valeurs est renvoyé.
Les fonctions foreach sont prises en charge uniquement dans les éléments calculés, dans le cadre des formules de calcul agrégé. Elles ne peuvent pas être appelées dans des clés d’élément simples ni dans des expressions de déclencheur en dehors de ce contexte.
Par exemple, la fonction avg_foreach renverra un tableau de valeurs, où chaque valeur correspond à la valeur d’historique moyenne de l’élément sélectionné, pendant l’intervalle de temps spécifié.
Le filtre d’élément fait partie de la syntaxe utilisée par les fonctions foreach. L’utilisation de caractères génériques est prise en charge dans le filtre d’élément, ce qui permet de sélectionner les éléments requis de manière très flexible.
Fonctions prises en charge
| Fonction | Description |
|---|---|
| avg_foreach | Renvoie la valeur moyenne pour chaque élément. |
| bucket_rate_foreach | Renvoie des paires (limite supérieure du bucket, valeur du taux) pouvant être utilisées dans la fonction histogram_quantile(), où la « limite supérieure du bucket » est la valeur du paramètre de clé d’élément définie par le paramètre <parameter number>. |
| count_foreach | Renvoie le nombre de valeurs pour chaque élément. |
| exists_foreach | Renvoie « 1 » pour chaque élément activé. |
| last_foreach | Renvoie la dernière valeur pour chaque élément. |
| max_foreach | Renvoie la valeur maximale pour chaque élément. |
| min_foreach | Renvoie la valeur minimale pour chaque élément. |
| sum_foreach | Renvoie la somme des valeurs pour chaque élément. |
Syntaxe de fonction
Les fonctions foreach prennent en charge deux paramètres communs : item filter (voir les détails ci-dessous) et time period :
foreach_function(item filter,time period)
Par exemple :
avg_foreach(/*/mysql.qps?[group="MySQL Servers"],5m)
renverra la moyenne sur cinq minutes de chaque élément « mysql.qps » dans le groupe de serveurs MySQL.
Notez que certaines fonctions prennent en charge des parameters supplémentaires.
Syntaxe du filtre d’élément
Le filtre d’élément :
/host/key[parameters]?[conditions]
se compose de quatre parties, où :
- host - nom d’hôte
- key - clé d’élément (sans paramètres)
- parameters - paramètres de la clé d’élément
- conditions - conditions basées sur le groupe d’hôtes et/ou les tags d’élément (sous forme d’expression)
Les espaces sont autorisés uniquement à l’intérieur de l’expression de conditions.
Utilisation des caractères génériques
- Un caractère générique peut être utilisé pour remplacer le nom d’hôte, la clé d’élément ou un paramètre individuel de la clé d’élément.
- Soit l’hôte, soit la clé d’élément doit être spécifié sans caractère générique. Ainsi,
/host/*et/*/keysont des filtres valides, mais/*/*est invalide. - Un caractère générique ne peut pas être utilisé pour une partie du nom d’hôte, de la clé d’élément ou d’un paramètre de clé d’élément.
- Un caractère générique ne correspond pas à plus d’un seul paramètre de clé d’élément. Ainsi, un caractère générique doit être spécifié séparément pour chaque paramètre (c’est-à-dire
key[abc,*,*]).
Expression de conditions
L’expression de conditions prend en charge :
- opérandes :
- group - groupe d’hôtes
- tag - tag d’élément
"<text>"- constante de chaîne, avec le caractère d’échappement\pour échapper"et\
- opérateurs de comparaison de chaînes sensibles à la casse :
=,<> - opérateurs logiques :
and,or,not - regroupement avec parenthèses :
()
La mise entre guillemets des constantes de chaîne est obligatoire. Seule la comparaison complète de chaînes sensible à la casse est prise en charge.
Lors de la spécification des tags dans le filtre (c’est-à-dire tag="tagname:value"), le deux-points ":" est utilisé comme délimiteur.
Tout ce qui suit est considéré comme la valeur du tag. Ainsi, il n’est actuellement pas possible de spécifier un nom de tag contenant ":".
Exemples
Un filtre complexe peut être utilisé, en faisant référence à la clé d’élément, au groupe d’hôtes et aux tags, comme l’illustrent les exemples :
| Exemple de syntaxe | Description |
|---|---|
/host/key[abc,*] |
Correspond à des éléments similaires sur cet hôte. |
/*/key |
Correspond au même élément de n’importe quel hôte. |
/*/key?[group="ABC" and tag="tagname:value"] |
Correspond au même élément de n’importe quel hôte du groupe ABC ayant les tags 'tagname:value'. |
/*/key[a,*,c]?[(group="ABC" and tag="Tag1") or (group="DEF" and (tag="Tag2" or tag="Tag3:value"))] |
Correspond à des éléments similaires de n’importe quel hôte du groupe ABC ou DEF avec les tags respectifs. |
Tous les éléments référencés doivent exister et collecter des données. Seuls les éléments activés sur des hôtes activés sont inclus dans les calculs. Les éléments dans l’état non pris en charge ne sont pas inclus.
Si la clé d’élément d’un élément référencé est modifiée, le filtre doit être mis à jour manuellement.
La spécification d’un groupe d’hôtes parent inclut le groupe parent et tous les groupes d’hôtes imbriqués avec leurs éléments.
Période de temps
Le deuxième paramètre permet de spécifier la période de temps pour l’agrégation. La période de temps ne peut être exprimée qu’en durée ; le nombre de valeurs (préfixé par #) n’est pas pris en charge.
Les symboles d’unité pris en charge peuvent être utilisés dans ce paramètre pour plus de commodité, par exemple, « 5m » (cinq minutes) au lieu de « 300s » (300 secondes) ou « 1d » (un jour) au lieu de « 86400 » (86400 secondes).
Pour la fonction last_foreach, la période de temps est un paramètre facultatif (pris en charge depuis Zabbix 7.0), qui peut être omis :
last_foreach(/*/key?[group="host group"])
La période de temps n’est pas prise en charge avec la fonction exists_foreach.
Paramètres supplémentaires
bucket_rate_foreach
Un troisième paramètre facultatif est pris en charge par la fonction bucket_rate_foreach :
bucket_rate_foreach(item filter,time period,<parameter number>)
où <parameter number> correspond à la position de la valeur « bucket » dans la clé d’élément. Par exemple, si la valeur « bucket » dans myItem[aaa,0.2] est « 0.2 », alors sa position est 2.
La valeur par défaut de <parameter number> est « 1 ».
count_foreach
Les troisième et quatrième paramètres facultatifs sont pris en charge par la fonction count_foreach :
count_foreach(item filter,time period,<operator>,<pattern>)
Où :
- operator est l’opérateur conditionnel pour les valeurs d’élément (doit être placé entre guillemets doubles).
operatorspris en charge :
eq - égal
ne - différent
gt - supérieur
ge - supérieur ou égal
lt - inférieur
le - inférieur ou égal
like - correspond si contient le motif (sensible à la casse)
bitand - ET binaire
regexp - correspondance sensible à la casse de l’expression régulière donnée danspattern
iregexp - correspondance insensible à la casse de l’expression régulière donnée danspattern - pattern est le motif requis (les arguments de type chaîne doivent être placés entre guillemets doubles) ; pris en charge si operator est spécifié dans le troisième paramètre.
Remarques :
- Les paramètres facultatifs operator ou pattern ne peuvent pas être laissés vides après une virgule ; ils doivent être soit entièrement omis.
- Avec bitand comme troisième paramètre, le quatrième paramètre
patternpeut être spécifié sous forme de deux nombres séparés par « / » : number_to_compare_with/mask. count_foreach() calcule le « ET binaire » entre la valeur et le mask et compare le résultat à number_to_compare_with. Si le résultat du « ET binaire » est égal à number_to_compare_with, la valeur est comptée.
Si number_to_compare_with et mask sont égaux, seul le mask doit être spécifié (sans « / »). - Avec regexp ou iregexp comme troisième paramètre, le quatrième paramètre
patternpeut être une expression régulière ordinaire ou globale (commençant par « @ »). Dans le cas des expressions régulières globales, la sensibilité à la casse est héritée des paramètres des expressions régulières globales. Aux fins de la correspondance regexp, les valeurs flottantes seront toujours représentées avec 4 chiffres décimaux après le « . ». Notez également que, pour les grands nombres, la différence entre la représentation décimale (stockée dans la base de données) et binaire (utilisée par le serveur Zabbix) peut affecter le 4e chiffre décimal.
Voir calculs agrégés pour plus de détails et d’exemples sur l’utilisation des fonctions foreach.
Comportement en fonction de la disponibilité
Le tableau suivant illustre le comportement de chaque fonction en cas de disponibilité limitée de l'hôte/de l'élément et des données d'historique.
| Function | Disabled host | Unavailable host with data | Unavailable host without data | Disabled item | Unsupported item | Data retrieval error (SQL) |
|---|---|---|---|---|---|---|
| avg_foreach | ignorer | retourner la moyenne | ignorer | ignorer | ignorer | ignorer |
| bucket_rate_foreach | ignorer | retourner le taux du compartiment | ignorer | ignorer | ignorer | ignorer |
| count_foreach | ignorer | retourner le nombre | 0 | ignorer | ignorer | ignorer |
| exists_foreach | ignorer | 1 | 1 | ignorer | 1 | n/a |
| last_foreach | ignorer | retourner la dernière valeur | ignorer | ignorer | ignorer | ignorer |
| max_foreach | ignorer | retourner le maximum | ignorer | ignorer | ignorer | ignorer |
| min_foreach | ignorer | retourner le minimum | ignorer | ignorer | ignorer | ignorer |
| sum_foreach | ignorer | retourner la somme | ignorer | ignorer | ignorer | ignorer |
Si l'élément est ignoré, rien n'est ajouté à l'agrégation.