Выполнение кода с помощью интерпретатора кода в агенте Azure SRE

Интерпретатор кода агента SRE позволяет выполнять команды кода Python и оболочки в безопасной изолированной среде песочницы. Используйте интерпретатор кода для анализа данных, создания визуализаций, создания отчетов PDF и автоматизации операций с файлами, не покидая беседу агента SRE.

В этой статье вы узнаете, как:

  • Выполнение кода Python для анализа данных и создания визуализаций
  • Выполнение команд оболочки для операций с файлами
  • Создание и скачивание отчетов PDF
  • Работа с файлами в среде песочницы

Предпосылки

Чтобы создать агент, необходимо предоставить агенту правильные разрешения, настроить правильные параметры и предоставить доступ к нужным ресурсам:

Как работает интерпретатор кода

Интерпретатор кода агента SRE выполняется в изолированном сеансе приложений контейнеров Azure со следующими характеристиками:

  • Нет сетевого доступа: песочница не может выполнять исходящие HTTP-запросы или HTTPS.
  • Процесс не вызывается: команды, как subprocess и os.system блокируются.
  • Установка пакета отсутствует: pip install и conda install не доступна.
  • Изолированная файловая система: все файлы должны сохраняться в /mnt/data/.

Эти ограничения обеспечивают безопасную и предсказуемую выполнение кода. Общие библиотеки для обработки и анализа данных, такие как pandas, matplotlib и seaborn, предварительно установлены.

Начало работы с интерпретатором кода

Средства интерпретатора кода автоматически доступны в беседах агента SRE. Попросите агента выполнять задачи с помощью естественного языка.

Примеры подсказок

Попробуйте начать работу с этими запросами:

  • "Анализ данных CSV и создание диаграммы с инцидентами по категориям".
  • "Создайте сводку PDF о сегодняшних инцидентах".
  • "Анализ этого JSON-файла и извлечение шаблонов ошибок".
  • "Вывод списка всех файлов в сеансе и отображение их размеров".

Ваш первый скрипт Python

В следующем примере показано, как создать визуализацию:

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)

При успешном выполнении кода агент возвращает встроенный образ в беседе.

Сценарии

Анализ данных инцидентов

Используйте интерпретатор кода для преобразования необработанных данных инцидентов в полезные аналитические сведения и визуализации.

  1. Попросите агента SRE создать CSV-файл всех инцидентов, произошедших в течение последнего месяца, с помощью следующего запроса:

    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. Используйте Python для анализа шаблонов инцидентов и выявления тенденций:

    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)
    

Создание визуализаций

Создайте диаграммы для обмена данными.

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)

Создание отчетов PDF

Создайте форматированные PDF-документы для заинтересованных лиц.

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()

Агент возвращает ссылку на скачивание для созданного PDF-файла.

Обработка файлов журнала

Поиск и анализ файлов журналов с помощью команд оболочки.

# 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

Справочник инструментов

Интерпретатор кода предоставляет следующие средства:

ExecutePythonCode

Выполняет код Python в изолированной песочнице.

Параметр Тип Обязательно Description
pythonCode струна Да Код Python для запуска (до 20 000 символов)
timeoutSeconds целое число нет Время ожидания выполнения в секундах (по умолчанию: 120, максимум: 900)

Выходные данные: изображения показываются встроенными как markdown. Файлы данных возвращаются в виде ссылок на скачивание.

СоздатьPdfОтчет

Создает PDF-документы из кода Python.

Параметр Тип Обязательно Description
pythonCode струна Да Код Python, создающий PDF-файл
expectedOutputFilename струна Да Путь, в котором сохраняется PDF-файл (например, report.pdf)
saveAsFilename струна Да Скачивание имени файла (например, daily_summary.pdf)
timeoutSeconds целое число нет Время ожидания выполнения в секундах (по умолчанию: 180, максимум: 900)

RunShellCommand

Выполняет команды командной оболочки в песочнице.

Параметр Тип Обязательно Description
command струна Да Команда оболочки для запуска
explanation струна нет Описание для входа с помощью команды
isBackground булевый нет Это должно быть false (фоновые задачи не поддерживаются)
timeoutSeconds целое число нет Время ожидания выполнения (по умолчанию: 120, максимум: 240)

Замечание

Команды выполняются из /mnt/data/. Используйте относительные пути и цепочные команды, используя ; вместо &&.

Операции с файлами

Tool Description
ReadSessionFile Считывает содержимое файла из /mnt/data/.
SearchSessionFiles Выполняет поиск текста в файлах с помощью шаблонов grep-style.
ListSessionFiles Выводит список всех файлов в сеансе с метаданными.
GetSessionFile Загружает файл из сеанса.
UploadFileToSession Отправляет файл для дальнейшей обработки.

Поддерживаемые типы файлов

  • Изображения: PNG, JPG, GIF, SVG, WebP, BMP, TIFF, EPS
  • Данные: CSV, TSV, Excel, JSON, XML, YAML, HDF5, NetCDF, pickle
  • Документы: PDF, HTML, Markdown, форматы Office
  • Код: Python, записные книжки Jupyter, R, SQL
  • Архивы: ZIP, TAR, GZ

Ограничения

По соображениям безопасности система блокирует следующие операции:

Категория Заблокированные операции
Порождение процессов subprocess os.system os.popen os.spawn*
Доступ к сети Исходящие HTTP/HTTPS-запросы
Установка пакета pip install, conda install
Файловая система Доступ за пределами /mnt/data/

Устранение неполадок интерпретатора кода

Выполнение кода завершается ошибкой

  • Убедитесь, что код не использует заблокированные операции, такие как subprocess или сетевые вызовы.
  • Убедитесь, что все пути к файлам указывают на /mnt/data/.
  • Убедитесь, что ваш код не превышает 20 000 символов.

Файлы не отображаются в выходных данных

  • Подтвердите, что вы сохраняете файлы в /mnt/data/.
  • Используйте ListSessionFiles для проверки создания файла.
  • Убедитесь, что расширение файла поддерживается.

Ошибки, связанные с истечением времени ожидания

  • timeoutSeconds Увеличьте параметр (максимум 900 секунд).
  • Оптимизируйте код, чтобы сократить время выполнения.
  • Разделение больших операций на небольшие блоки.