Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Changer de service à l’aide de la liste déroulante Version . En savoir plus sur la navigation.
S’applique à : ✅ Microsoft Fabric ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel
La sémantique de graphe dans Kusto vous permet de modéliser et d’interroger des données en tant que réseaux interconnectés, ce qui vous permet d’analyser des relations complexes telles que des hiérarchies organisationnelles, des réseaux sociaux et des chemins d’attaque. Contrairement aux requêtes relationnelles traditionnelles qui s’appuient sur des jointures, les graphiques utilisent des relations directes entre les entités pour parcourir les connexions efficacement.
Dans ce tutoriel, vous allez apprendre à :
- Créer un graphique temporaire à l’aide de l’opérateur make-graph
- Interroger des graphes pour rechercher des relations à l’aide de la correspondance de graphes
- Créer des modèles graphiques persistants pour une analyse réutilisable
- Comparer les approches de graphique temporaires et persistantes
- Créer un graphique temporaire à l’aide de l’opérateur make-graph
- Interroger des graphes pour rechercher des relations à l’aide de la correspondance de graphes
- Comparer les approches de graphique temporaires et persistantes
Si vous n’avez pas de cluster Azure Data Explorer, créez un cluster gratuit avant de commencer le didacticiel.
Conditions préalables
- Un compte Microsoft ou une identité d’utilisateur Microsoft Entra pour vous connecter au cluster d’aide
- Un espace de travail Fabric avec une capacité avec Microsoft Fabric
Accéder à votre environnement de requête
Ouvrez l’interface utilisateur web Azure Data Explorer pour accéder au cluster d’aide pour ce didacticiel.
Accédez à votre espace de travail Microsoft Fabric et ouvrez une base de données KQL pour exécuter les requêtes.
Accédez à la page de repérage avancée pour commencer à interroger les données Microsoft Sentinel.
Accédez aux journaux ou à un espace de travail Logs Analytics dans le portail Azure pour commencer à interroger les données Azure Monitor.
Créer un graphique temporaire avec des données organisationnelles
Dans cette section, vous allez créer votre premier graphique à l’aide d’exemples de données organisationnelles. Les graphiques temporaires sont créés dynamiquement pendant l’exécution de la requête à l’aide de l’opérateur make-graph , ce qui les rend parfaits pour l’analyse et l’exploration ad hoc.
Vous allez travailler avec une structure d’entreprise simple où les employés communiquent aux responsables. Cette hiérarchie organisationnelle fournit un exemple intuitif pour comprendre les relations de graphique :
Créez la structure de l'organigramme à l’aide des données des employés et des relations hiérarchiques.
// Create sample employee data
let employees = datatable(name:string, role:string, age:long)
[
"Alice", "CEO", 45,
"Bob", "Engineering Manager", 35,
"Carol", "Marketing Manager", 38,
"Dave", "Developer", 28,
"Eve", "Developer", 26,
"Frank", "Marketing Specialist", 30
];
// Create reporting relationships
let reports = datatable(employee:string, manager:string)
[
"Bob", "Alice",
"Carol", "Alice",
"Dave", "Bob",
"Eve", "Bob",
"Frank", "Carol"
];
// Build the graph and explore it
reports
| make-graph employee --> manager with employees on name
| graph-to-table nodes
Sortie
| nom | rôle | âge |
|---|---|---|
| Alice | PDG | 45 |
| Pendiller | Responsable de l’ingénierie | 35 |
| Carole | Directeur du marketing | 38 |
| Dave | Développeur | 28 |
| Veille | Développeur | 26 |
| Franc | Spécialiste du marketing | 30 |
Interroger des relations avec des modèles de correspondance de graphe
Vous allez maintenant apprendre à utiliser l’opérateur graph-match pour rechercher des modèles spécifiques dans votre graphe organisationnel. L’opérateur graph-match recherche des relations et des connexions dans la structure de graphe.
Tout d’abord, recherchez tous les employés qui rapportent directement à Alice en correspondant au schéma de relation de subordination immédiate :
let employees = datatable(name:string, role:string, age:long)
[
"Alice", "CEO", 45,
"Bob", "Engineering Manager", 35,
"Carol", "Marketing Manager", 38,
"Dave", "Developer", 28,
"Eve", "Developer", 26,
"Frank", "Marketing Specialist", 30
];
let reports = datatable(employee:string, manager:string)
[
"Bob", "Alice",
"Carol", "Alice",
"Dave", "Bob",
"Eve", "Bob",
"Frank", "Carol"
];
reports
| make-graph employee --> manager with employees on name
| graph-match (alice)<-[reports]-(employee)
where alice.name == "Alice"
project employee = employee.name, role = employee.role, age = employee.age
Résultats des rapports directs
| employé | rôle | âge |
|---|---|---|
| Pendiller | Responsable de l’ingénierie | 35 |
| Carole | Directeur du marketing | 38 |
Ensuite, recherchez tous les employés dans l’ensemble de l’organisation d’Alice, y compris les rapports indirects, en utilisant des arêtes de longueur variable avec *1..3 pour parcourir plusieurs niveaux de la hiérarchie :
let employees = datatable(name:string, role:string, age:long)
[
"Alice", "CEO", 45,
"Bob", "Engineering Manager", 35,
"Carol", "Marketing Manager", 38,
"Dave", "Developer", 28,
"Eve", "Developer", 26,
"Frank", "Marketing Specialist", 30
];
let reports = datatable(employee:string, manager:string)
[
"Bob", "Alice",
"Carol", "Alice",
"Dave", "Bob",
"Eve", "Bob",
"Frank", "Carol"
];
reports
| make-graph employee --> manager with employees on name
| graph-match (alice)<-[reports*1..3]-(employee)
where alice.name == "Alice"
project employee = employee.name, role = employee.role, reportingLevels = array_length(reports)
Sortie de tous les membres de l'organisation
| employé | rôle | niveaux de rapport |
|---|---|---|
| Pendiller | Responsable de l’ingénierie | 1 |
| Carole | Directeur du marketing | 1 |
| Dave | Développeur | 2 |
| Veille | Développeur | 2 |
| Franc | Spécialiste du marketing | 2 |
Créer un modèle de graphe persistant
Remarque
Cette fonctionnalité est actuellement disponible en préversion publique. Les fonctionnalités et la syntaxe sont susceptibles de changer avant la disponibilité générale.
Les graphiques persistants sont stockés dans la base de données et peuvent être interrogés à plusieurs reprises sans regénérer la structure du graphique. Vous allez maintenant créer la même structure organisationnelle qu’un graphique persistant pour améliorer les performances et la réutilisation.
Créez des fonctions qui retournent vos exemples de données, puis définissez une structure de modèle de graphe :
// Create a function that returns employee data
.create function Employees() {
datatable(name: string, role: string, age: long)
[
"Alice", "CEO", 45,
"Bob", "Engineering Manager", 35,
"Carol", "Marketing Manager", 38,
"Dave", "Developer", 28,
"Eve", "Developer", 26,
"Frank", "Marketing Specialist", 30
]
}
// Create a function that returns reporting relationships
.create function Reports() {
datatable(employee: string, manager: string)
[
"Bob", "Alice",
"Carol", "Alice",
"Dave", "Bob",
"Eve", "Bob",
"Frank", "Carol"
]
}
Définissez le modèle de graphique avec des schémas de nœud et de périphérie :
.create-or-alter graph_model OrganizationGraph ```
{
"Schema": {
"Nodes": {
"Employee": {
"name": "string",
"role": "string",
"age": "long"
}
},
"Edges": {
"ReportsTo": {
}
}
},
"Definition": {
"Steps": [
{
"Kind": "AddNodes",
"Query": "Employees()",
"NodeIdColumn": "name",
"Labels": ["Employee"]
},
{
"Kind": "AddEdges",
"Query": "Reports()",
"SourceColumn": "employee",
"TargetColumn": "manager",
"Labels": ["ReportsTo"]
}
]
}
}
```
Créez un instantané de graphe pour matérialiser le modèle dans une structure interrogeable :
.make graph_snapshot OrganizationGraph_v1 from OrganizationGraph
Interroger votre graphe persistant
Interrogez le graphique persistant à l’aide des mêmes modèles que les graphiques temporaires. Recherchez tous les employés qui signalent à Alice :
graph("OrganizationGraph")
| graph-match (alice)<-[reports]-(employee)
where alice.name == "Alice"
project employee = employee.name, role = employee.role, age = employee.age
Recherchez tous les employés dans l’organisation d’Alice, y compris les rapports indirects :
graph("OrganizationGraph")
| graph-match (alice)<-[reports*1..3]-(employee)
where alice.name == "Alice"
project employee = employee.name, role = employee.role, reportingLevels = array_length(reports)
Interrogez une version spécifique de snapshot si besoin.
graph("OrganizationGraph", "OrganizationGraph_v1")
| graph-match (alice)<-[reports*1..3]-(employee)
where alice.name == "Alice"
project employee = employee.name, role = employee.role
Comparer les graphiques temporaires et persistants
Comprendre quand utiliser chaque approche vous aide à choisir la méthode appropriée pour vos besoins d’analyse :
| Aspect | Graphiques temporaires | Graphiques persistants |
|---|---|---|
| Création |
make-graph opérateur lors de l'exécution de la requête |
.create-or-alter graph_model + .make graph_snapshot |
| Stockage | En mémoire pendant l’exécution de la requête | Stocké dans la base de données |
| Réutilisabilité | Doit reconstruire pour chaque requête | Interroger à plusieurs reprises sans reconstruire |
| Niveau de performance | Bon pour les jeux de données plus petits | Optimisé pour les graphiques volumineux et complexes |
| Cas d’utilisation | Analyse ad hoc, exploration | Analyse de production, requêtes répétées |
| Limites de mémoire | Limité par mémoire de nœud | Peut gérer des jeux de données plus volumineux |
Nettoyer les ressources
Si vous ne souhaitez pas continuer à utiliser les modèles de graphe persistants, supprimez-les avec les commandes suivantes :
Supprimez le modèle de graphique :
.drop graph_model OrganizationGraphSupprimez les fonctions d’assistance :
.drop function Employees .drop function Reports
Les graphiques temporaires sont automatiquement nettoyés une fois la requête terminée. Par conséquent, aucun nettoyage supplémentaire n’est nécessaire pour ces exemples.
Étapes suivantes
Maintenant que vous comprenez les bases de la sémantique de graphe dans Kusto, passez aux scénarios et optimisations plus complexes :
Vous pouvez également explorer ces articles connexes :
- Référence des opérateurs de graphes - Guide complet sur tous les opérateurs de graphes disponibles
- Gestion des modèles de graphe - Présentation approfondie des modèles de graphe persistants
- Chemins les plus courts du graphique - Rechercher des chemins optimaux entre les entités
- Requêtes graphiques avancées - Modèles d’analyse complexes et cas d’usage
- Référence des opérateurs de graphes - Guide complet sur tous les opérateurs de graphes disponibles
- Chemins les plus courts du graphique - Rechercher des chemins optimaux entre les entités
- Requêtes graphiques avancées - Modèles d’analyse complexes et cas d’usage