다음을 통해 공유


Azure SRE 에이전트에서 코드 인터프리터를 사용하여 코드 실행

SRE 에이전트 코드 인터프리터를 사용하면 격리된 안전한 샌드박스 환경에서 Python 코드 및 셸 명령을 실행할 수 있습니다. 코드 인터프리터를 사용하여 SRE 에이전트 대화를 종료하지 않고 데이터를 분석하고, 시각화를 만들고, PDF 보고서를 생성하고, 파일 작업을 자동화합니다.

이 문서에서는 다음 방법을 알아봅니다.

  • Python 코드를 실행하여 데이터 분석 및 시각화 만들기
  • 파일 작업에 대한 셸 명령 실행
  • PDF 보고서 생성 및 다운로드
  • 샌드박스 환경에서 파일 작업

필수 조건

에이전트를 만들려면 에이전트에 올바른 권한을 부여하고, 올바른 설정을 구성하고, 올바른 리소스에 대한 액세스 권한을 부여해야 합니다.

  • Azure 계정: 활성 구독이 있는 Azure 계정이 필요합니다. 계정이 아직 없는 경우 계정을 무료로 만들 수 있습니다.

  • 보안 컨텍스트: 사용자 계정에 Microsoft.Authorization/roleAssignments/write역할 기반 액세스 제어 관리자 또는 사용자 액세스 관리자 권한으로 사용 권한이 있는지 확인합니다.

  • 방화벽 설정: 방화벽 설정의 허용 목록에 추가 *.azuresre.ai 합니다. 일부 네트워킹 프로필은 기본적으로 *.azuresre.ai 도메인에 대한 액세스를 차단할 수 있습니다.

코드 인터프리터 작동 방식

SRE 에이전트 코드 인터프리터는 다음과 같은 특성을 가진 격리된 Azure Container Apps 세션에서 실행됩니다.

  • 네트워크 액세스 권한 없음: 샌드박스는 아웃바운드 HTTP 또는 HTTPS 요청을 수행할 수 없습니다.
  • 프로세스 생성 금지: subprocessos.system 명령이 차단됩니다.
  • 패키지 설치 없음: pip installconda 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. 다음 프롬프트를 사용하여 지난 달 내에 발생한 모든 인시던트의 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`.
    
  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 문자열 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초).
  • 코드를 최적화하여 실행 시간을 줄입니다.
  • 큰 작업을 더 작은 청크로 분할합니다.