SRE 에이전트 코드 인터프리터를 사용하면 격리된 안전한 샌드박스 환경에서 Python 코드 및 셸 명령을 실행할 수 있습니다. 코드 인터프리터를 사용하여 SRE 에이전트 대화를 종료하지 않고 데이터를 분석하고, 시각화를 만들고, PDF 보고서를 생성하고, 파일 작업을 자동화합니다.
이 문서에서는 다음 방법을 알아봅니다.
- Python 코드를 실행하여 데이터 분석 및 시각화 만들기
- 파일 작업에 대한 셸 명령 실행
- PDF 보고서 생성 및 다운로드
- 샌드박스 환경에서 파일 작업
필수 조건
에이전트를 만들려면 에이전트에 올바른 권한을 부여하고, 올바른 설정을 구성하고, 올바른 리소스에 대한 액세스 권한을 부여해야 합니다.
Azure 계정: 활성 구독이 있는 Azure 계정이 필요합니다. 계정이 아직 없는 경우 계정을 무료로 만들 수 있습니다.
보안 컨텍스트: 사용자 계정에
Microsoft.Authorization/roleAssignments/write역할 기반 액세스 제어 관리자 또는 사용자 액세스 관리자 권한으로 사용 권한이 있는지 확인합니다.방화벽 설정: 방화벽 설정의 허용 목록에 추가
*.azuresre.ai합니다. 일부 네트워킹 프로필은 기본적으로*.azuresre.ai도메인에 대한 액세스를 차단할 수 있습니다.
코드 인터프리터 작동 방식
SRE 에이전트 코드 인터프리터는 다음과 같은 특성을 가진 격리된 Azure Container Apps 세션에서 실행됩니다.
- 네트워크 액세스 권한 없음: 샌드박스는 아웃바운드 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)
코드가 성공적으로 실행되면 에이전트는 대화에서 이미지를 인라인으로 반환합니다.
시나리오
인시던트 데이터 분석
코드 인터프리터를 사용하여 원시 인시던트 데이터를 실행 가능한 인사이트 및 시각화로 변환합니다.
다음 프롬프트를 사용하여 지난 달 내에 발생한 모든 인시던트의 CSV 파일을 만들도록 SRE 에이전트에 요청합니다.
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`.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 |
문자열 | Yes | 실행할 Python 코드(최대 20,000자) |
timeoutSeconds |
integer | 아니오 | 실행 시간 제한(초) (기본값: 120, 최대: 900) |
출력: 이미지는 "markdown" 형식으로 인라인으로 표시됩니다. 데이터 파일은 다운로드 링크로 반환됩니다.
PDF보고서생성
Python 코드에서 PDF 문서를 만듭니다.
| 매개 변수 | 유형 | 필수 | Description |
|---|---|---|---|
pythonCode |
문자열 | Yes | PDF 파일을 만드는 Python 코드 |
expectedOutputFilename |
문자열 | Yes | PDF가 저장되는 경로(예: report.pdf)입니다. |
saveAsFilename |
문자열 | Yes | 파일 이름 다운로드(예: daily_summary.pdf) |
timeoutSeconds |
integer | 아니오 | 실행 시간 제한(초) (기본값: 180, 최대: 900) |
RunShellCommand
샌드박스에서 셸 명령을 실행합니다.
| 매개 변수 | 유형 | 필수 | Description |
|---|---|---|---|
command |
문자열 | Yes | 실행할 셸 명령 |
explanation |
문자열 | 아니오 | 명령을 사용하여 기록할 설명 |
isBackground |
boolean | 아니오 | 반드시 사용해야 false 합니다(백그라운드 작업은 지원되지 않음). |
timeoutSeconds |
integer | 아니오 | 실행 시간 제한(기본값: 120, 최대: 240) |
비고
명령이 /mnt/data/에서 실행됩니다.
&& 대신에 ;를 사용하여 상대 경로 및 체인 명령을 사용하세요.
파일 작업
| Tool | Description |
|---|---|
ReadSessionFile |
에서 /mnt/data/파일의 내용을 읽습니다. |
SearchSessionFiles |
grep 스타일 패턴을 사용하여 파일 내에서 텍스트를 검색합니다. |
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 Notebook, 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초). - 코드를 최적화하여 실행 시간을 줄입니다.
- 큰 작업을 더 작은 청크로 분할합니다.