| Scroll Ignore | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||
|
Concept
Ces règles permettent, lors de l'import, de mettre en relation un champ de l'API VMWare VMware avec une propriété ou une donnée de Shinken en fonction du type de l'élément ( hôte, modèle d'hôte, etc ... ).
- Elle Elles s'applique appliquent pour tous les types d’éléments présents dans l'interface de Shinken.
Elles peuvent être visualisées depuis l'onglet "Mapping vers les propriétés et les données de Shinken" de l'interface de la source.
| Panel |
|---|
Définition des règles de mapping
Pour ajouter une règle utilisateur d'application des modèles, il faut éditer le chemin suivant :
| Code Block | ||||
|---|---|---|---|---|
| ||||
/etc/shinken-user/source-data/source-data-[nom de la source]/configuration/mapping/user_mapping_rules_vm.json /etc/shinken-user/source-data/source-data-[nom de la source]/configuration/mapping/user_mapping_rules_esx.json |
| Info | ||||
|---|---|---|---|---|
| ||||
/etc/shinken-user/source-data/source-data-synchronizer-collector-vmware/configuration/mapping/user_mapping_rules_vm.json |
Comme pour les règles d'application des modèles, les règles de mapping sont écrites au format JSON.
La source VMWare VMware ne concerne que les hôtes, donc les fichiers sources commenceront toujours par "hosts".
Elle doit Elles doivent respecter le format suivant :
- Nom du champ de l'API VMWare VMware : nom de la propriété ou de la donnée Shinken
| Info | |||||
|---|---|---|---|---|---|
| |||||
Une propriété est une information nécessaire au moteur Shinken.
|
| Info | ||
|---|---|---|
| ||
Une donnée est une valeur qui va être ajoutée en complément des propriétés.
|
Forcer la valeur des propriétés
Il est possible d’ajouter le suffixe [FORCE] ( sans espace ) à la clé d’import d'un élément Shinken afin de forcer la valeur associée ( voir la page Forcer la valeur des noms des éléments et des propriétés de type liste (comme la propriété des modèles hérités) ).
Exemple :
| Code Block | ||||
|---|---|---|---|---|
| ||||
{
"hosts": {
"name": "host_name[FORCE]",
"shinken.ipAddress" : "address"
}
} |
Lorsqu’une propriété est marquée avec [FORCE], elle est traitée de la manière suivante par le mélange des sources :
- La valeur est considérée comme prioritaire par rapport aux autres sources.
- Si une autre source importe le même objet avec une valeur différente, cette dernière est ignorée.
- En cas de conflit entre plusieurs valeurs forcées, la priorité de la source détermine la valeur conservée.
Ajouter [FORCE] à une clé d'import contenant une liste ( comme la propriété "members" servant à définir les membres d'un groupe d'utilisateurs ) aura pour effet de remplacer complètement la liste des autres sources par celle fournie avec l'option [FORCE].
Liste des clés d'import pouvant être forcées
| Excerpt Include | ||||||
|---|---|---|---|---|---|---|
|
Exemple de mapping dans le fichier "user_mapping_rules_vm.json"
| Code Block | ||||
|---|---|---|---|---|
| ||||
{
"hosts": {
"name": "host_name",
"shinken.ipAddress" : "address",
"shinken.machine_type": "DATA(MACHINE_TYPE)",
"config.product.osType": "DATA(OS_TYPE)",
"shinken.tags": "DATA(TAGS)",
}
} |
Il existe 4 5 règles de mapping définies :
| Clé | ||
|---|---|---|
| VMware | Clé Shinken | Description du mapping |
| name | host_name | La valeur |
| VMware "name" deviendra le nom de l'hôte ( propriété host_name ). | ||
| shinken.ipAddress | address | La valeur |
| VMware "shinken.ipAddress" sera prise en compte comme adresse pour l'hôte ( propriété address ). | ||
| shinken.machine_type | DATA(MACHINE_TYPE) | |
| La valeur VMware "shinken.machine_type" deviendra une donnée nommée MACHINE_TYPE sur l'hôte. | ||
| config.product.osType | DATA(OS_TYPE) | |
| La valeur VMware "config.product.osType" deviendra une donnée | ||
| nommée OS_TYPE sur l'hôte. | ||
| shinken.tags | DATA(TAGS) | La valeur |
VMware "shinken.tags" deviendra une donnée | ||
nommée TAGS sur l'hôte. | ||
Vu que la valeur de shinken.tags est une liste dans l'API de | ||
VMware, la valeur de la donnée TAGS vaudra la liste des tags | ||
séparés par des | ||
virgules. Exemple : La valeur de shinken.tags ['Linux','Bordeaux','France'] deviendra la valeur Linux,Bordeaux,France dans | ||
TAGS. |
| Info | ||
|---|---|---|
|
Opérateurs pour les
réglesrègles de mapping
Les opérateurs des règles de mapping permettent de transformer les données collectées afin de les adapter au format de Shinken et aux besoins de la supervision.
Opérateur VALUES pour les listes
La source VMWare VMware peut fournir des champs dont les valeurs sont des listes ( par exemple le champ "shinken.tags" ).
Pour faire correspondre une valeur de liste dans un champ de Shinken, il est possible d'utiliser l'opérateur : "VALUES".
| Info | ||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||
Une VM possède la liste de tags suivants : LINUX, FR, DATACENTER_42 Le mapping suivant :
va permettre de créer un hôte avec comme données :
|
Définition de l'utilisation de VALUES
La syntaxe de la condition dans "VALUES(condition)" est la suivante :
| Signification | Syntaxe | Description | Exemple |
|---|---|---|---|
| Index | nombre | Récupère l'élément à l'index indiqué. L’index doit être un nombre appartenant à l’ensemble des entiers naturels, incluant 0. Cette règle admet une seule exception afin de rendre possible | |
le choix du dernier élément d’une liste, en utilisant l’index -1. L’index 0 récupérera le premier élément de la liste, 1 le deuxième, 2 le troisième, etc | |||
. |
| ||
| Contient | = texte | La condition signifie que l'élément choisi doit CONTENIR | |
| le texte. |
| ||
| Commence par | =^ texte | Si l'expression commence par le caractère "^", la condition signifie que l'élément choisi | |
| doit COMMENCER par le texte. |
| ||
| Termine par | = texte $ | Si l'expression se termine par le caractère "$", la condition signifie que l'élément choisi | |
| doit TERMINER par le texte. |
| ||
| Est strictement | |||
| égal | = ^ texte $ | Si l'expression commence par "^" ET se termine par "$", la condition signifie que l'élément choisi | |
| doit être l'expression EXACTE. |
| ||
| |||
| Inversion | = !^ texte $ | Ajouter un " ! " avant une autre expression provoque l'effet inverse de celle-ci : • = ! texte --> L'élément | |
choisi ne contient pas "texte" • = ! ^ texte --> L'élément | |||
choisi ne commence pas par "texte" • = ! texte $ --> L'élément | |||
choisi ne se termine pas par "texte" • = !^ texte $ --> L'élément | |||
choisi n'est pas strictement égal à "texte" |
|
Les conditions sur le texte ne font pas la distinction entre les majuscules et les minuscules.
Exemple : la règle suivante pourra récupérer la valeur "Bordeaux.
shinken.tags>VALUES(=BoRdeaUx)
| Panel |
|---|
- VALUES(X) avec X ayant une valeur supérieure au nombre d'éléments présents dans la liste ne retourne rien ( Exemple : essayer de récupérer le 5ème élément sur une liste de 3 éléments ).
Opérateur TRANSFORM pour les transformations
Grâce à l'opérateur TRANSFORM il est possible de transformer du texte.
- Exemple : L'API VMWare fournie la valeur "Préproduction" et l'on veut transformer cette valeur en "PREPROD" à la place.
La syntaxe de TRANSFORM est la suivante :
| Code Block | ||||
|---|---|---|---|---|
| ||||
TRANSFORM(transformation1,transformation2,transformation3) |
- TRANSFORM permet d'indiquer plusieurs transformations, ces dernières sont séparées par des virgules.
- Attention à ne pas mettre d'espace avant ou après une virgule, autrement, il sera pris en compte dans la transformation.
- Il n'y a actuellement pas de limite sur le nombre de transformations autorisées.
Pour écrire une transformation, il faut séparer le texte à transformer par "=>" du texte désiré ( désigné ci-après par le mot "séparateur" ) : TEXTE1=>TEXTE2
Voici un exemple de syntaxe avec 2 transformations :
| Code Block | ||||
|---|---|---|---|---|
| ||||
TRANSFORM(BORDEAUX=>BDX,PARIS=>PAR) |
TRANSFORM permet également de supprimer du texte en laissant vide la partie à droite du séparateur ( => ) censée contenir la modification à apporter au texte.
| Code Block | ||||
|---|---|---|---|---|
| ||||
TRANSFORM(DEAUX=>,IS=>) |
Exemple avec une machine possédant les tags suivants :
- Production_Bordeaux
- Production_Paris
Et le mapping suivant :
| Code Block | ||||
|---|---|---|---|---|
| ||||
{
"hosts": {
"shinken.tags_by_category.ENV>VALUES(=Bordeaux)>TRANSFORM(Production=>Prod,Bordeaux=>bdx)": "DATA(TRANSFORM_OPERATION)",
}
} |
La donnée TRANSFORM_OPERATION contiendra donc la valeur suivante :
Prod_bdx
Lorsque l'opérateur TRANSFORM est appelé sur une liste de valeurs ( Exemple : shinken.tags ), il va appliquer la ou les transformations demandées sur chaque élément de la liste individuellement.
Exemple avec une machine possédant les balises ( tags ) suivantes :
- CentOS
- Alma
- macOS
- Production_Bordeaux
- Preproduction_Bordeaux
Et le mapping suivant :
| Code Block | ||||
|---|---|---|---|---|
| ||||
{
"hosts": {
"shinken.tags_by_category.ENV>VALUES(=production)>TRANSFORM(Production=>Prod,Preproduction=>Preprod,Bordeaux=>bdx)": "DATA(TRANSFORM_OPERATION)",
}
} |
La donnée TRANSFORM_OPERATION contiendra donc les valeurs suivantes :
Prod_bdx,Preprod_bdx
Maintenant, si l'on veut modifier chacun des tags de la catégorie "OS" pour le faire précéder de "OS_" :
CentOSdeviendraitOS_CentOS.AlmadeviendraitOS_Alma.macOSdeviendraitOS_macOS.
Dans ce cas, il faut employer $CURRENT$, ce mot-clé prendra la valeur de la balise en train d'être modifiée.
La règle de mapping pour effectuer cette opération est la suivante :
| Code Block | ||||
|---|---|---|---|---|
| ||||
"shinken.tags_by_category.OS>TRANSFORM($CURRENT$=>OS_$CURRENT$)": "DATA(TRANSFORMED_OS)" |
| Warning |
|---|
Le caractère $ est utilisé ici pour indiquer à TRANSFORM d'aller chercher les valeurs à faire apparaître, il n'est donc pas possible de l'utiliser dans un autre but que celui-ci. |
Opérateur CONCAT pour les concaténations
Il est possible de concaténer plusieurs valeurs de l'API VMWare pour former la valeur d'une propriété d'un élément de Shinken. Cela est possible grâce à l'opérateur : CONCAT.
Exemple : Une VM possédant les listes de tags suivantes :
Et les informations doivent être affichées de la manière suivante dans la donnée nommée _MACHINE_INFOS : "Production - Linux - Bordeaux"
La syntaxe se fera de la manière suivante dans le fichier de Mapping.
| Code Block | ||||||
|---|---|---|---|---|---|---|
| ||||||
{
"hosts": {
"CONCAT($shinken.tags.OS>VALUES(0)$ - $shinken.tags.ENV>VALUES(0)$ - $shinken.tags.LOCATION>VALUES(0)$)": "DATA(MACHINE_INFOS)",
}
} |
| Warning |
|---|
Le caractère $ est utilisé ici pour indiquer à CONCAT d'aller chercher les valeurs à faire apparaître, il n'est donc pas possible de l'utiliser dans un autre but que celui-ci. |
L'opérateur CONCAT peut aussi récupérer les valeurs de n'importe quel nom de champ.
Exemple : Avec le fichier de configuration de la source VMWare suivant :
| Code Block | ||||
|---|---|---|---|---|
| ||||
{
"hosts": {
"name": "host_name",
"shinken.ipAddress" : "address"
"shinken.machine_type": "DATA(MACHINE_TYPE)",
"CONCAT($name$ - $shinken.ipAddress$)": "DATA(MACHINE_INFOS)",
}
} |
et les valeurs :
- "name" valant : "Ubuntu-Preprod"
- "shinken.ipAddress" valant : "192.168.1.42"
La donnée MACHINE_INFOS vaudra : "Ubuntu-Preprod - 192.168.1.42"
Si un champ est vide, alors CONCAT ne fournira pas de valeur pour ce champ.
Exemple, avec les mêmes données que l'exemple précédent, sauf que "name" n'a aucune valeur, la donnée MACHINE_INFOS vaudra : " - 192.168.1.42"
Opérateur CONCAT_ON_ALL pour les concaténations sur les listes
Comme pour l'opérateur TRANSFORM évoqué plus haut, il est également possible d'appliquer une opération de concaténation sur une liste, à l'aide de l'opérateur CONCAT_ON_ALL.
De la même manière que lorsque l'opération TRANSFORM est appliquée sur une liste, il est possible d'utiliser $VALUE$ avec CONCAT_ON_ALL pour récupérer la valeur de l'élément sur lequel l'opération est en train d'être effectuée.
Exemple :
Une VM possédant les listes de tags suivantes :
- Alma
- CentOS
Et le fichier de mapping suivant :
| Code Block | ||||
|---|---|---|---|---|
| ||||
{
"hosts": {
"name": "host_name",
"shinken.ipAddress" : "address"
"shinken.machine_type": "DATA(MACHINE_TYPE)",
}
} |
Si on l'on souhaite associer le nom de la machine à chaque OS et le mettre dans une donnée spécifique ( ex MACHINE_OS ), on peut ajouter la règle suivante au fichier de mapping :
| Code Block | ||||
|---|---|---|---|---|
| ||||
"shinken.tags_by_category.OS>CONCAT_ON_ALL($name$ has OS: $CURRENT$)": "DATA(MACHINE_OS)" |
Cela génèrera une liste d'éléments qui sera présente dans la data "_MACHINE_OS" :
| Code Block | ||||
|---|---|---|---|---|
| ||||
MyHost has OS Alma,MyHost has OS CentOS |
| title | Limitation |
|---|
Il n'est actuellement pas possible d'utiliser le CONCAT_ON_ALL dans les autres opérateurs, mais cela sera possible dans une prochaine version.
Par exemple la règle suivante :| Code Block | ||||
|---|---|---|---|---|
| ||||
"CONCAT($shinken.tags_by_category.ENV>CONCAT_ON_ALL($name$ has tag $CURRENT$)$)": "DATA(CONCAT_ON_ALL_IN_ANOTHER_RULE)" |
Ne fonctionne pas
| Warning |
|---|
Le caractère $ est utilisé ici pour indiquer à CONCAT_ON_ALL d'aller chercher les valeurs à faire apparaître, il n'est donc pas possible de l'utiliser dans un autre but que celui-ci. |
| Info | ||
|---|---|---|
| ||
|
Opérateur TRANSFORM pour les modifications de valeurs
L'opérateur TRANSFORM permet de modifier la valeur d'un champ VMware lors du mapping.
Son utilisation se fait avec la syntaxe suivante : champ_vmware>TRANSFORM(valeur_initiale=>nouvelle_valeur)
| Info | |||||||
|---|---|---|---|---|---|---|---|
| |||||||
Une VM possède la donnée "config.product.osType" avec la valeur "linuxGuest". On souhaite que dans Shinken, cette donnée vaille "Linux". Le mapping suivant :
va permettre de créer un hôte avec comme donnée : |
| Info |
|---|
|
Opérateur CONCAT pour concaténer des champs
L'opérateur CONCAT permet de fusionner plusieurs champs VMware ou du texte fixe dans une seule propriété ou donnée Shinken.
Syntaxe : CONCAT(champ1, " texte ", champ2)
Surcharger une règle de mapping par défaut
Il est possible de surcharger les règles de mapping définies par défaut par l'application ( ex : le nom de l'hôte, son adresse IP, etc. ).
Pour cela
Opérateur MANY_FIELDS_BY_REGEX pour règles de mapping dynamiques ( expressions régulières )
L'opérateur MANY_FIELDS_BY_REGEX permet de mapper plusieurs champs récoltés par la source à importer dans Shinken à l'aide d'une expression régulière en une seule règle.
Couramment, le mapping entre les champs récoltés par la source et les propriétés de Shinken est exhaustif. Cependant, lors de la récupération des données, il est possible d'avoir un grand nombre de champs différents à importer dans Shinken.
Dans ce cas, le fonctionnement habituel ne suffit plus, c'est pour cela que les règles de mapping peuvent désormais faire appel à des expressions régulières.
Une expression régulière est une formule qui sert à rechercher ou reconnaître des motifs dans du texte.
Par exemple :
- Trouver toutes les clés qui commencent par "EXTRAINFO-" et qui sont en deux parties séparées par un tiret ( - ).
- ( Pour une aide à propos des expressions régulières, voir la page : Guide des expressions régulières )
Pour les utiliser dans le mapping, il faut les écrire sous le format suivant dans la colonne "Propriétés dans Excel" :
| Code Block | ||||
|---|---|---|---|---|
| ||||
MANY_FIELDS_BY_REGEX(EXPRESSION) |
où "EXPRESSION" est l'expression régulière.
Il est possible de récupérer les groupes matchés dans l'expression régulière ( voir la page suivante pour une aide sur les groupes dans les expressions régulières : Guide des expressions régulières - groupe ) pour construire le nom de la donnée dans Shinken. Pour ce faire, il faut utiliser "$" suivi du numéro du regroupement ( $1, $2, $3, etc. )
| Warning |
|---|
Il n'est pas possible d'avoir plus de regroupements dans le nom de la donnée qu'indiqués dans l'expression régulière. On ne peut donc pas faire correspondre la règle "MANY_FIELDS_BY_REGEX(EXTRAINFO-(.*)-(.*))" aux données "DATA($1_$2_$3)" car l'expression ne recherche que deux regroupements. |
Exemple d'expression régulière
| Code Block | ||||
|---|---|---|---|---|
| ||||
{
"hosts": {
"MANY_FIELDS_BY_REGEX(runtime\\.([0-9A-Za-z_]+))": "DATA(RUNTIME_$1)",
}
} |
Avec cette expression régulière, la valeur de toutes les colonnes dont le nom :
- $1 correspond à la partie capturée par les premières parenthèses.
| Info | ||
|---|---|---|
| ||
Les valeurs dans la colonne "runtime. bootTime " seront stockées dans des données qui s'appelleront "RUNTIME_ BOOTTIME ". |
Désactivation d'un mapping
Les mappings peuvent être surchargés en créant un mapping avec le nom de la clé que l'on veut désactiver.
- Pour le champ en question, au lieu de choisir une propriété Shinken ( ou donnée ), il faut utiliser le mot-clé "disable "
| Info | |||||||
|---|---|---|---|---|---|---|---|
| |||||||
Désactivation du champ shinken.machine_type
|
| Panel |
|---|
Visualiser la liste des mappings
Pour visualiser la liste des mapping définie pour cette source, il faut se rendre dans l'onglet "Mapping vers les propriétés de Shinken".
Dans cet onglet, se trouve le chemin des fichiers de définition des règles mapping des utilisateurs pour l'ESXi et les Machines virtuelles du serveur ESXi ( 1 ).
Dans l'entête de la liste, se trouve également le bouton de rafraîchissement de la liste des mappings ( 2 ).
- Ce bouton permet de rafraîchir la liste des mappings sans devoir redémarrer le Synchronizer.
- Il faudra relancer un import pour réappliquer les nouveaux mapping sur les éléments importés.
La liste des mappings ( 3 ) comporte à la fois les mappings définis par l'utilisateur ( ligne bleue ) et les mappings par défaut ( ligne grise ).
La liste affiche pour chaque mapping une série de colonnes :
Certaines des règles de mapping définies par "Défaut" ont une valeur définie dans les champs "Clé de la source" et la "Description", mais aucune valeur dans les champs " Clé Shinken" et " Nom de propriété dans l'interface ".
- Cela signifie que ces mappings ne seront liés à aucune propriété Shinken.
- Elles sont volontairement listées ici pour être vus, et faciliter la création de son propre mapping ( afin de ne pas partir d'une feuille blanche ).
Ces mappings peuvent être surchargés dans l'un des fichiers de mapping utilisateur ( 1 ).
En bas à droite ( 4 ) se trouve le bouton pour afficher l'aide de la page ( Raccourci sur la touche F1 ).Exemple
Les exemples suivants surchargent les règles de mapping de " config.guestFullName" et " config.guestId " qui ne sont pas liées à une propriété Shinken.
Pour ce faire, il suffit de créer, dans l'un des fichiers de mapping utilisateur ( 1 ), une règle possédant la même clé que celle à surcharger ( 5 ).
Avant :
| Panel |
|---|
Après :
| Panel |
|---|






