Exécuter du code à l’aide de l’interpréteur de code dans Azure SRE Agent

L'agent SRE interprète de code vous permet d'exécuter du code Python et des commandes shell dans un environnement sandbox sécurisé et isolé. Utilisez l’interpréteur de code pour analyser les données, créer des visualisations, générer des rapports PDF et automatiser les opérations de fichier sans quitter la conversation de votre agent SRE.

Dans cet article, vous allez apprendre à :

  • Exécuter du code Python pour analyser des données et créer des visualisations
  • Exécuter des commandes shell pour les opérations de fichier
  • Générer et télécharger des rapports PDF
  • Travailler avec des fichiers dans l’environnement sandbox

Prerequisites

Pour créer un agent, vous devez accorder à votre agent les autorisations appropriées, configurer les paramètres appropriés et accorder l’accès aux ressources appropriées :

Fonctionnement de l’interpréteur de code

L’interpréteur de code SRE Agent s’exécute dans une session Azure Container Apps isolée avec les caractéristiques suivantes :

  • Aucun accès réseau : le bac à sable ne peut pas effectuer de requêtes HTTP ou HTTPS sortantes.
  • Pas de lancement de processus : les commandes comme subprocess et os.system sont bloquées.
  • Aucune installation de package : pip install et conda install ne sont pas disponibles.
  • Système de fichiers isolé : tous les fichiers doivent être enregistrés dans /mnt/data/.

Ces restrictions garantissent que l’exécution du code est sécurisée et prévisible. Les bibliothèques de science des données courantes telles que pandas, matplotlib et seaborn sont préinstallées.

Prise en main de l’interpréteur de code

Les outils d’interpréteur de code sont automatiquement disponibles dans vos conversations de l’agent SRE. Demandez à l’agent d’effectuer des tâches à l’aide du langage naturel.

Exemples d’invites

Essayez ces suggestions pour commencer :

  • « Analysez ces données CSV et créez un graphique montrant les incidents par catégorie. »
  • « Générer un résumé PDF des incidents d’aujourd’hui . »
  • « Analysez ce fichier JSON et extrayez les modèles d’erreur . »
  • « Répertorier tous les fichiers de la session et afficher leurs tailles . »

Votre premier script Python

L’exemple suivant montre comment créer une visualisation :

import matplotlib.pyplot as plt
import numpy as np

# Generate sample data
categories = ['Critical', 'High', 'Medium', 'Low']
counts = [5, 12, 28, 45]

# Create bar chart
plt.figure(figsize=(10, 6))
plt.bar(categories, counts, color=['red', 'orange', 'yellow', 'green'])
plt.title('Incidents by Severity')
plt.xlabel('Severity Level')
plt.ylabel('Count')
plt.savefig('/mnt/data/incidents_by_severity.png', dpi=150)

Lorsque le code s’exécute correctement, l’agent retourne l’image incluse dans la conversation.

Scénarios

Analyser les données d’incident

Utilisez l’interpréteur de code pour transformer les données d’incident brutes en insights et visualisations actionnables.

  1. Demandez à L’agent SRE de créer un fichier CSV de tous les incidents qui se sont produits au cours du dernier mois à l’aide de l’invite suivante :

    Create a CSV file of all the incidents that 
    occurred in the last month.
    
    Name the file `incidents.csv` and save it
    to `/mnt/data`.
    
  2. Utilisez Python pour analyser les modèles d’incident et identifier les tendances :

    import pandas as pd
    
    # Load incident data
    df = pd.read_csv('/mnt/data/incidents.csv')
    
    # Calculate summary statistics
    summary = df.groupby('category').agg({
        'id': 'count',
        'resolution_time': 'mean'
    }).rename(columns={'id': 'count', 'resolution_time': 'avg_resolution_hours'})
    
    # Export results
    summary.to_csv('/mnt/data/incident_summary.csv')
    print(summary)
    

Créer des visualisations

Générez des graphiques pour communiquer des insights.

import matplotlib.pyplot as plt
import seaborn as sns

# Load data
df = pd.read_csv('/mnt/data/incidents.csv')

# Create visualization
plt.figure(figsize=(12, 6))
sns.barplot(data=df, x='category', y='count', palette='viridis')
plt.title('Incidents by Category')
plt.xticks(rotation=45)
plt.tight_layout()
plt.savefig('/mnt/data/category_chart.png', dpi=150)

Générer des rapports PDF

Créez des documents PDF mis en forme pour les parties prenantes.

from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter

# Create PDF
c = canvas.Canvas('/mnt/data/weekly_report.pdf', pagesize=letter)

# Add content
c.setFont('Helvetica-Bold', 18)
c.drawString(72, 750, 'Weekly Incident Report')

c.setFont('Helvetica', 12)
c.drawString(72, 720, 'Period: January 10-17, 2026')
c.drawString(72, 700, 'Total incidents: 90')
c.drawString(72, 680, 'Critical incidents: 5')
c.drawString(72, 660, 'Average resolution time: 4.2 hours')

c.save()

L’agent retourne un lien de téléchargement pour le fichier PDF généré.

Traiter les fichiers logs

Recherchez et analysez les fichiers journaux à l’aide de commandes shell.

# Count error occurrences by type
grep -E "ERROR|WARN|FATAL" application.log | sort | uniq -c | sort -rn
# Find the most recent log entries
tail -100 application.log

Informations de référence sur l’outil

L’interpréteur de code fournit les outils suivants :

ExecutePythonCode

Exécute le code Python dans un bac à sable isolé.

Paramètre Type Obligatoire Descriptif
pythonCode ficelle Oui Code Python à exécuter (jusqu’à 20 000 caractères)
timeoutSeconds entier Non Délai d’expiration de l’exécution en secondes (valeur par défaut : 120, maximum : 900)

Sortie : les images s’affichent en ligne sous forme de markdown. Les fichiers de données retournent sous forme de liens de téléchargement.

GénérerRapportPdf

Crée des documents PDF à partir du code Python.

Paramètre Type Obligatoire Descriptif
pythonCode ficelle Oui Code Python qui crée un fichier PDF
expectedOutputFilename ficelle Oui Chemin d’accès où le fichier PDF est enregistré (par exemple, report.pdf)
saveAsFilename ficelle Oui Télécharger le nom de fichier (par exemple, daily_summary.pdf)
timeoutSeconds entier Non Délai d’expiration de l’exécution en secondes (valeur par défaut : 180, maximum : 900)

RunShellCommand (Exécuter une commande Shell)

Exécute des commandes shell dans la sandbox.

Paramètre Type Obligatoire Descriptif
command ficelle Oui Commande Shell à exécuter
explanation ficelle Non Description à consigner avec la commande
isBackground boolean Non Doit être false (les travaux en arrière-plan ne sont pas pris en charge)
timeoutSeconds entier Non Délai d’expiration de l’exécution (valeur par défaut : 120, max : 240)

Note

Les commandes s’exécutent à partir de /mnt/data/. Utilisez des chemins d’accès relatifs et des commandes de chaîne en utilisant ; au lieu de &&.

Opérations de fichier

Tool Descriptif
ReadSessionFile Lit le contenu d’un fichier à partir de /mnt/data/.
SearchSessionFiles Recherche du texte dans des fichiers à l’aide de modèles grep-style.
ListSessionFiles Répertorie tous les fichiers de la session avec des métadonnées.
GetSessionFile Télécharge un fichier à partir de la session.
UploadFileToSession Charge un fichier pour un traitement ultérieur.

Types de fichiers pris en charge

  • Images : PNG, JPG, GIF, SVG, WebP, BMP, TIFF, EPS
  • Données : CSV, TSV, Excel, JSON, XML, YAML, HDF5, NetCDF, pickle
  • Documents : PDF, HTML, Markdown, formats Office
  • Code : Python, carnets Jupyter, R, SQL
  • Archives : ZIP, TAR, GZ

Limites

Pour des raisons de sécurité, le système bloque les opérations suivantes :

Catégorie Opérations bloquées
Génération de processus subprocess os.system os.popen os.spawn*
Accès réseau Requêtes HTTP/HTTPS sortantes
Installation de package pip install, conda install
Système de fichiers Accès depuis l'extérieur /mnt/data/

Résoudre les problèmes liés à l’interpréteur de code

Échec de l’exécution du code

  • Vérifiez que votre code n’utilise pas d’opérations bloquées telles que subprocess, ou des appels réseau.
  • Vérifiez que tous les chemins d’accès aux fichiers pointent vers /mnt/data/.
  • Vérifiez que votre code est inférieur à 20 000 caractères.

Les fichiers n’apparaissent pas dans la sortie

  • Vérifiez que vous enregistrez des fichiers dans /mnt/data/.
  • Permet ListSessionFiles de vérifier la création de fichiers.
  • Vérifiez que l’extension de fichier est prise en charge.

Erreurs de délai d’expiration

  • Augmentez le timeoutSeconds paramètre (900 secondes maximum).
  • Optimisez votre code pour réduire le temps d’exécution.
  • Fractionnez les opérations volumineuses en blocs plus petits.