Données externes¶
Définition¶
Les règles de filtrage d'événements permettent d'enrichir les alarmes ainsi que les entités sur lesquelles portent les alarmes depuis une source de données externes.
La fonctionnalité "Données externes" permet de gérer ces données depuis l'interface graphique.
Gérer les sources de données¶
Ajouter une source de données externes depuis l'interface graphique¶
Les données externes peuvent être stockées dans MongoDB (collection) ou dans PostgreSQL (table).
Lorsque vous ajoutez une source, vous pouvez saisir les éléments suivants :
| Paramètre | Description |
|---|---|
| Base de données | Type de base de données à utiliser : MongoDB ou PostgreSQL |
| Nom | Nom de la source de données externes |
| Description | Description de la source de données externes |
Information
Les tables PostgreSQL sont ajoutées dans le schéma externaldata.
Les commandes suivantes permettent de lister les schémas et vous positionner dans le schéma adéquat :
canopsis=> \dn
List of schemas
Name | Owner
--------------------------+-------------------
_timescaledb_cache | postgres
_timescaledb_catalog | postgres
_timescaledb_config | postgres
_timescaledb_debug | postgres
_timescaledb_functions | postgres
_timescaledb_internal | postgres
externaldata | cpspostgres
public | pg_database_owner
timescaledb_experimental | postgres
timescaledb_information | postgres
(10 rows)
canopsis=> set schema 'externaldata';
Ajouter une source de données externes depuis le fichier de configuration toml¶
Si vous avez déjà mis en oeuvre des collections de données et que vous souhaitez les manipuler dans l'interface de Canopsis, vous devez les renseigner dans le fichier de configuration canopsis.toml
Par exemple, si vous souhaitez gérer les collections HNO et Consignes, veuillez renseigner la section Canopsis.external_data comme ceci :
[Canopsis.external_data]
Collections = ["HNO", "Consignes"]
Information
Un lancement de la commande "canopsis-reconfigure" est nécessaire pour la prise en compte de tout changement.
Exécuter canopsis-reconfigure
Importer des données¶
Une fois la source de données externes créée, vous pouvez importer des données depuis un fichier CSV.
Lorsque le fichier CSV a été sélectionné, vous aurez accès à une pré visualisation des données sous forme de colonnes.
Au moment de l'import, l'interface vous propose de "typer" les colonnes du fichier csv.
Les types pris en charge sont les suivants :
| Type | Description |
|---|---|
| Chaîne de caractères | Valeur texte libre stockée telle quelle. A utiliser pour des champs "simples" (ex. component, team). Si vous avez besoin de motifs, utilisez plutôt Expression régulière |
| Booléen | Valeur logique true / false (insensible à la casse), prend aussi en charge : yes/no, y/n, oui/non, 1/0. Souvent utilisée pour hno, escalade |
| Nombre | Valeur numérique (entier ou décimal). Le séparateur de milliers peut être configuré (ex. 1500, 1 500, 12.34) |
| Tableau | Permet de stocker plusieurs valeurs dans un même champ. Deux modes sont disponibles lors de l'import : 1. JSON ([v1, v2, v3]): la liste est parsée telle quelle 2. Analyse par séparateur : les valeurs sont extraites d'une chaîne délimitée (v1,v2,v3, v1;v2;v3, etc.) selon le séparateur choisi. Exemple : "Dev,Ops,QA" devient ["Dev", "Ops", "QA"]" |
| Date/heure | Représente une date et une heure normalisées. Les valeurs doivent respecter l'un des formats suivants :
|
| Horodatage | Timestamp (généralement epoch en secondes) |
| Expression régulière | Expression régulière normalisée. Une colonne calculée "priority" est ajoutée automatiquement si au moins une colonne est de type "Expression régulière" |
Expressions régulières et calcul automatique de la priorité¶
Principe général
Lorsqu'une ou plusieurs colonnes sont typées Expression régulière (regexp), Canopsis :
1. Interprète chaque valeur comme une expression régulière, qu'elle contienne ou non des symboles spéciaux.
2. Normalise automatiquement les motifs (^ ajouté au début, $ à la fin, sauf pour .).
3. Évalue leur "spécificité" pour calculer une priorité automatique (priority) par ligne.
4. Cette priorité peut ensuite être utilisée dans les règles d'enrichissement (sort_by: priority, sort: desc) pour faire ressortir l'enregistrement le plus précis*.
Règle de calcul de la priorité¶
Chaque valeur de colonne regexp reçoit un score selon son niveau de précision :
| Type de motif | Exemple | Score |
|---|---|---|
| Vide, .* ou .+ | .* | 0 |
| Motif "général" (contient * au milieu) | .SUBSTR. | 1 |
| Un seul ancrage (^ ou $) | ^SUBSTR ou SUBSTR$ | 2 |
| Motif exact (commence par ^ et finit par $) | ^SUBSTR$ | 3 |
Conclusion
La priorité d’une ligne correspond à la somme des scores de toutes les colonnes regexp.
Normalisation automatique des motifs¶
Canopsis applique une normalisation avant l'évaluation :
| Entrée originale | Normalisation appliquée | Interprétation |
|---|---|---|
| SUBSTR | ^SUBSTR$ | correspondance exacte |
| SUBSTR$ | SUBSTR$ | ancré en fin |
| ^SUBSTR | ^SUBSTR | ancré en début |
| .*SUBSTR | ^.*SUBSTR$ | motif général |
| .SUBSTR. | ^.SUBSTR.$ | motif général (le plus large) |
| .* | .* | motif passe-partout (score 0) |
Ainsi, tout texte est traité comme une expression régulière, même s’il n’en contient pas.
Gestion des caractères spéciaux
Certains caractères ont un sens particulier en regex : [ ] ( ) { } . * + ? ^ $ \ |
-
Si vous souhaitez les utiliser littéralement, échappez-les avec un antislash.
Exemple :- Valeur littérale souhaitée :
[ABC] - A saisir dans le CSV :
\[ABC\]
- Valeur littérale souhaitée :
-
Si la valeur contient une erreur de syntaxe (regex invalide, parenthèse non fermée, \ manquant...), elle est traitée comme texte exact, sans avertissement dans les logs.
Responsabilité du traitement¶
| Étape | Responsable | Détails |
|---|---|---|
| Ajout automatique de ^ et $ | Canopsis API | Fait automatiquement côté serveur. |
| Calcul du score de priorité | Canopsis API | Automatique lors de la prévisualisation |
| Échappement des caractères spéciaux ([ABC]) | Utilisateur | Le fichier CSV doit déjà contenir les antislashs nécessaires. |
Exemple concret¶
A partir de ce fichier CSV :
component,resource,message,localisation,hno,escalade,severity,team
database,DB-Connections,Too many connections to the database,Sarahhaven,False,True,critical,(Dev|Ops)
webserver,CPU,Failed to connect to database user_db,New Williamburgh,True,False,critical,DevOps
cache,Disk,Service is unreachable,South Nicole,False,True,high,Support
loadbalancer,Net.*,Connection timed out for host api.internal,Lake Cody,True,False,critical,Network
Le traitement effectué par Canopsis (valeurs regexp normalisées et priorités calculées) est le suivant :
| component | resource (normalisé) | message (normalisé) | priority | severity | team |
|---|---|---|---|---|---|
| database | ^DB-Connections$ | ^Too many connections to the database$ | 6 | critical | (Dev |
| webserver | ^CPU$ | ^Failed to connect to database user_db$ | 6 | critical | DevOps |
| cache | ^Disk$ | ^Service is unreachable$ | 6 | high | Support |
| loadbalancer | ^Net.*$ | ^Connection timed out for host api.internal$ | 4 | critical | Network |
Gérer les enregistrements¶
Dès lors qu'un import de données a été réalisé, vous pouvez effectuer les opérations suivantes sur chaque enregistrement :
- Editer
- Supprimer
- Dupliquer
Vous pouvez également importer de nouveaux enregistrements et/ou insérer un enregistrement "manuellement" depuis l'interface graphique.
Pour rappel, ces tables ont vocation a être utilisées dans des règles d'enrichissement à 2 niveaux :
Pour faciliter la visualisation ainsi que la destination des données, l'interface propose de définir les colonnes comme étant destinées au Filtre ou Contexte selon la situation.
Widget "Données externes"¶
L'interface de Canopsis met à disposition un Widget Données externes qui permet aux utilisateurs de consulter et de manipuler les données qui servent aux enrichissements externes.




