Aller au contenu

Format de syntaxe des valuepath

Les règles de corrélation des alarmes comprennent des chemins d'accès aux valeurs (valuepath) sur lesquels se baser pour effectuer le regroupement d'alarmes.

Canopsis est conçu pour exprimer facilement ces valuepath sous la forme d'une série de composants séparés par le caractère .. Mais pas seulement, d'autres caractères ont une signification particulière, notamment |, #, @, \ et ?.

Voici un exemple d'évènement fictif.

{
  "connector": "zabbix01",
  "connector_name": "zabbix01",
  "source_type" : "resource",
  "event_type" : "check",
  "component" : "st-par-edge1",
  "resource" : "cpu_4",
  "state" : 3,
  "server": {"customer": "Stark-Telecom", "hostname": "st-par-edge1"},
  "location": "Equinix PA3"
  "loc.dc": "Paris"
  "links": ["Tata","Cogent","FranceIX"],
  "peers": [
    {"name": "Amazon", "asn": "16509", "ip": ["37.49.236.118", "2001:7f8:54::118 "], "link": "200G"},
    {"name": "Microsoft", "asn": "8075", "ip": ["37.49.236.5", "2001:7f8:54::5"], "link": "100G"},
    {"name": "Netflix", "asn": "2906", "ip": ["37.49.237.50", "2001:7f8:54::1:50 "], "link": "100G"}
  ]
}

Cet exemple fictif est volontairement complexe afin de mieux illustrer les différentes expressions possibles.

Expressions basiques

Dans la plupart des cas, vous voudrez simplement récupérer des valeurs par nom d'objet ou index de tableau.

Chemin Résultat
server.hostname "st-par-edge1"
location "Equinix PA3"
links ["Tata","Cogent","FranceIX"]
links.# 3
links.1 "Cogent"
lin*.2 "FranceIX"
l?ks.0 "Tata"
loc\.dc "Paris"
peers.#.name ["Amazon","Microsoft","Netflix"]
peers.1.asn 8075

Expressions Avancées

Vous pouvez également interroger un tableau pour trouver la première correspondance en utilisant #(...), ou trouver toutes les correspondances avec #(...)#. Les requêtes prennent en charge les opérateurs de comparaison ==, !=, <, <=, >, >= et les opérateurs de correspondance simple % (similaire) et !% (non similaire).

Chemin Résultat
peers.#(link=="100G").name "Microsoft"
peers.#(link=="100G")#.name ["Microsoft","Netflix"]
peers.#(ASN>3000)#.name ["Amazon","Microsoft"]
peers.#(name%"A*").asn 16509
peers.#(name!%"A*").asn 8075
peers.#(ip.#(%"37.49.237.*"))#.name ["Amazon","Microsoft","Netflix"]

Exemple évènement réaliste

Voici un exemple d'évènement plus représentatif d'un cas réel.

{
    "connector": "connector_test_meta_alarmes",
    "connector_name": "test_meta",
    "source_type" : "resource",
    "event_type" : "check",
    "component" : "SRV-META",
    "resource" : "cpu_1",
    "state" : 2,
    "customer": "customer_1",
    "location": "location_1"
}

Pour regrouper les événements par customer et location, il suffira de définir les value_paths suivantes:

{
    "name": "Test groupement par chemins de valeur",
    "type": "valuegroup",
    "config": {
        "time_interval": 120,
        "threshold_count": 2,
        "value_paths": [ 
            "entity.infos.customer.value", 
            "entity.infos.location.value" 
        ]
    }
}

Cette syntaxe est aussi valable dans l'interface web de Canopsis pour l'ajout de colonnes dans les méta-alarmes du widget bac à alarmes.

Aller plus loin

Pour voir toutes les possibilités supportées par Canopsis, consulter la documentation du projet GJSON.