Amazon Web Services 한국 블로그

Amazon CloudWatch Logs – 자연어 기반 지표 쿼리 기능(미리 보기)

오늘 Amazon CloudWatch는 운영 데이터와의 쉬운 상호 작용을 위해, Logs and Metrics Insights용 자연어 쿼리 생성을 도입했습니다. 생성형 인공 지능(AI)을 바탕으로 하는 이 기능을 사용하면 원하는 인사이트를 영어로 설명할 수 있으며, Logs 또는 Metrics Insights 쿼리가 자동으로 생성됩니다.

이 기능은 CloudWatch Logs and Metrics Insights를 위한 다음과 같은 세 가지 주요 기능을 제공합니다.

  • 쉽게 시작할 수 있도록 설명이나 질문에서 새 쿼리를 생성합니다.
  • 쿼리 설명을 통해 고급 기능을 포함한 언어를 쉽게 배울 수 있게 합니다.
  • 반복 안내를 이용해 기존 쿼리를 개선합니다.

몇 가지 예를 통해 이러한 기능이 실제로 어떻게 작동하는지 살펴보겠습니다. 로그를 먼저 살펴본 다음 지표를 살펴보겠습니다.

자연어를 사용하여 CloudWatch Logs Insights 쿼리 생성
CloudWatch 콘솔Logs 섹션에서 Log Insights를 선택합니다. 그런 다음 조사할 AWS Lambda 함수의 로그 그룹을 선택합니다.

Query generator 버튼을 선택하여 새 Prompt 필드를 엽니다. 여기에 자연어를 사용하여 필요한 내용을 입력할 수 있습니다.

Tell me the duration of the 10 slowest invocations

그런 다음 Generate new query를 선택합니다. 다음과 같은 Log Insights 쿼리가 자동으로 생성됩니다.

fields @timestamp, @requestId, @message, @logStream, @duration 
| filter @type = "REPORT" and @duration > 1000
| sort @duration desc
| limit 10

콘솔 스크린샷.

Run query를 선택하여 결과를 확인합니다.

콘솔 스크린샷.

출력에 정보가 너무 많다는 것을 알게 되었습니다. 저는 필요한 데이터만 보는 쪽을 선호하니, Prompt에 다음 문장을 입력하고 Update query를 선택합니다.

Show only timestamps and latency

입력한 내용에 맞게 쿼리가 업데이트되고 타임스탬프와 기간만 반환됩니다.

fields @timestamp, @duration 
| filter @type = "REPORT" and @duration > 1000
| sort @duration desc
| limit 10

업데이트된 쿼리를 실행하여 읽기 쉬운 결과를 얻었습니다.

콘솔 스크린샷.

이제 로그에 오류가 있는지 확인하겠습니다. Prompt에 다음 문장을 입력하고 새 쿼리를 생성합니다.

Count the number of ERROR messages

요청이 적용되어, 생성된 쿼리가 ERROR 문자열이 포함된 메시지 수를 셉니다.

fields @message
| filter @message like /ERROR/
| stats count()

쿼리를 실행한 결과 예상보다 오류가 많다는 사실을 알게 되었습니다. 추가 정보가 필요합니다.

콘솔 스크린샷.

이 프롬프트를 사용하여 쿼리를 업데이트하고 오류를 분산을 개선하겠습니다.

Show the errors per hour

업데이트된 쿼리는 bin() 함수를 사용하여 한 시간 간격으로 결과를 그룹화합니다.

fields @timestamp, @message
| filter @message like /ERROR/
| stats count(*) by bin(1h)

메모리 사용량에 대한 고급 쿼리를 실행해 보겠습니다. 몇 가지 Lambda 함수의 로그 그룹을 선택하고 다음을 입력합니다.

Show invocations with the most over-provisioned memory grouped by log stream

쿼리를 생성하기 전에, 톱니바퀴 아이콘을 선택하여 프롬프트와 설명을 포함하도록 옵션을 변경합니다. 결과는 다음과 같습니다(쉽게 이해할 수 있도록 설명을 여러 줄로 분할했습니다).

# Show invocations with the most over-provisioned memory grouped by log stream

fields @logStream, @memorySize/1000/1000 as memoryMB, @maxMemoryUsed/1000/1000 as maxMemoryUsedMB, (@memorySize/1000/1000 - @maxMemoryUsed/1000/1000) as overProvisionedMB 
| stats max(overProvisionedMB) as maxOverProvisionedMB by @logStream 
| sort maxOverProvisionedMB desc

# This query finds the amount of over-provisioned memory for each log stream by
# calculating the difference between the provisioned and maximum memory used.
# It then groups the results by log stream and calculates the maximum
# over-provisioned memory for each log stream. 마지막으로, 결과를 정렬합니다.
# in descending order by the maximum over-provisioned memory to show
# the log streams with the most over-provisioned memory.

이제 오류를 이해하는 데 필요한 정보를 얻었습니다. 제게는 EC2 워크로드도 있습니다. 이러한 인스턴스는 어떻게 실행되고 있을까요? 몇 가지 지표를 살펴보겠습니다.

자연어를 사용하여 CloudWatch Metrics Insights 쿼리 생성
CloudWatch 콘솔Metrics 섹션에서 All metrics를 선택합니다. 그런 다음 Query 탭에서 Editor를 사용합니다. 원한다면 Builder에서 Query generator를 사용해도 됩니다.

앞에서 한 것처럼 Query generator를 선택합니다. 그런 다음 쉬운 영어를 사용하여 필요한 내용을 입력합니다.

Which 10 EC2 instances have the highest CPU utilization?

Generate new query를 선택하고 Metrics Insights 구문을 사용하여 결과를 얻습니다.

SELECT AVG("CPUUtilization")
FROM SCHEMA("AWS/EC2", InstanceId)
GROUP BY InstanceId
ORDER BY AVG() DESC
LIMIT 10

그래프를 보려면 Run을 선택합니다.

콘솔 스크린샷.

제 EC2 인스턴스가 효율적으로 작동하지는 않는 것 같습니다. 이 결과는 인스턴스의 CPU 사용 현황을 보여줍니다. 하지만 스토리지는 어떨까요? 프롬프트에 다음을 입력하고 Update query를 선택합니다.

How about the most EBS writes?

업데이트된 쿼리는 평균 CPU 사용률을 인스턴스에 연결된 모든 EBS 볼륨에 기록된 바이트의 합계로 바꿉니다. 상위 10개 결과만 표시하는 제한을 유지합니다.

SELECT SUM("EBSWriteBytes")
FROM SCHEMA("AWS/EC2", InstanceId)
GROUP BY InstanceId
ORDER BY SUM() DESC
LIMIT 10

쿼리를 실행하고 결과를 확인하면, EC2 인스턴스에서 사용 중인 스토리지를 현황을 더 잘 이해할 수 있습니다.

요청을 입력하고 로그와 지표에 대해 생성된 쿼리를 실행하여, 여러분의 데이터에서는 어떤 결과가 나오는지 확인해 보세요.

알아야 할 사항
로그 및 지표용 Amazon CloudWatch 자연어 쿼리 생성은 미국 동부(버지니아 북부) 및 미국 서부(오레곤) AWS 리전에서 미리 보기로 제공됩니다.

미리 보기 중에는 자연어 쿼리 생성을 사용해도 추가 비용이 들지 않습니다. CloudWatch 요금에 따라 쿼리 실행 비용만 지불하면 됩니다.

생성된 쿼리는 생성형 AI에서 생성하며, 계정에서 선택되거나 사용 가능한 데이터를 비롯한 다양한 요소에 따라 달라집니다. 이러한 이유 때문에 결과가 달라질 수 있습니다.

쿼리를 생성할 때는 원래 요청과 쿼리 설명을 주석으로 포함할 수 있습니다. 이렇게 하려면 쿼리 편집 창의 오른쪽 아래에 있는 톱니바퀴 아이콘을 선택하고 관련 옵션을 변경해야 합니다.

이 새로운 기능을 사용하면 로그와 지표에 대한 쿼리를 쉽게 생성하고 업데이트하여 시간과 노력을 절약할 수 있습니다. 이러한 접근 방식을 사용하면 엔지니어링 팀은 특정한 데이터 지식이나 쿼리 전문 지식 없이도 운영을 확장할 수 있습니다.

자연어를 사용하여 Amazon CloudWatch에서 로그와 지표를 분석하십시오.

Danilo