Alarm Context Tool (ACT) ปรับปรุง AWS CloudWatch Alarms โดยการจัดเตรียมบริบทเพิ่มเติมเพื่อช่วยในการแก้ไขปัญหาและการวิเคราะห์ ด้วยการใช้ประโยชน์จากบริการของ AWS เช่น Lambda, CloudWatch, X-Ray และ Amazon Bedrock โซลูชันนี้จะรวบรวมและวิเคราะห์ตัววัด บันทึก และการติดตามเพื่อสร้างข้อมูลเชิงลึกที่มีความหมาย การใช้ความสามารถด้าน AI เชิงสร้างสรรค์จาก Amazon Bedrock จะสรุปผลการวิจัย ระบุสาเหตุที่แท้จริงที่เป็นไปได้ และเสนอลิงก์เอกสารที่เกี่ยวข้องเพื่อช่วยให้ผู้ปฏิบัติงานแก้ไขปัญหาได้อย่างมีประสิทธิภาพมากขึ้น การใช้งานนี้ได้รับการออกแบบเพื่อให้ใช้งานได้ง่ายและบูรณาการเข้ากับไปป์ไลน์การสังเกตที่มีอยู่ ซึ่งช่วยลดเวลาตอบสนองได้อย่างมาก และปรับปรุงการวิเคราะห์สาเหตุที่แท้จริง
โคลนที่เก็บ:
git clone https://github.com/aws-samples/alarm-context-tool
cd alarm-context-tool
ติดตั้งการขึ้นต่อกันหากคุณวางแผนที่จะใช้ IDE ของคุณเพื่อตรวจจับปัญหาในโค้ด:
pip install -r ./dependencies_layer/requirements.txt
pip install aws_lambda_powertools
สำหรับบางภูมิภาค คุณอาจต้องเปลี่ยนเวอร์ชันเลเยอร์สำหรับ Lambda Insights หลังเครื่องหมายทวิภาคใน template.yaml ดู https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Lambda-Insights-extension-versionsx86-64.html
- !Sub arn:aws:lambda:${AWS::Region}:580247275435:layer:LambdaInsightsExtension:49
แก้ไขไฟล์ template.yaml ด้วยที่อยู่อีเมลผู้รับและที่อยู่ผู้ส่ง
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Environment :
Variables :
RECIPIENT : [email protected]
SENDER : Name <[email protected]>
อัปเดตตัวแปรสภาพแวดล้อมเพิ่มเติมหากจำเป็น
อัปเดตหัวข้อ SNS ของคุณที่ได้รับการแจ้งเตือนจากสัญญาณเตือน CloudWatch:
ใช้การปรับใช้ที่แนะนำเพื่อเริ่มต้นด้วย:
sam build
sam deploy --guided
จากนั้น คุณสามารถสร้าง ปรับใช้ และทดสอบโดยใช้คำสั่งต่อไปนี้: จะต้องแชร์เหตุการณ์ทดสอบ ดูการทดสอบ
sam build ; sam deploy --no-confirm-changeset ; sam remote invoke --stack-name alarm-context-tool --region < aws-region > --test-event-name < test-event >
เมื่อปรับใช้แล้ว ฟังก์ชัน Lambda จะถูกทริกเกอร์โดยหัวข้อ SNS ที่สมัครรับ CloudWatch Alarms ฟังก์ชันจะปรับปรุงข้อความแจ้งเตือนด้วยบริบทเพิ่มเติม เช่น เมตริก บันทึก และการติดตามที่เกี่ยวข้อง ใช้ Amazon Bedrock เพื่อวิเคราะห์ข้อมูลที่รวบรวมและสร้างข้อมูลเชิงลึกที่ดำเนินการได้
หากต้องการสร้างตัวจัดการใหม่สำหรับบริการ AWS อื่น ให้ทำตามขั้นตอนเหล่านี้:
สร้างไฟล์ตัวจัดการใหม่ : สร้างไฟล์ Python ใหม่ในไดเรกทอรี handlers
ตัวอย่างเช่น new_service_handler.py
กำหนดฟังก์ชันตัวจัดการ : ใช้ฟังก์ชันตัวจัดการที่คล้ายกับตัวจัดการที่มีอยู่ นี่คือเทมเพลต:
import boto3
import botocore
from aws_lambda_powertools import Logger , Tracer
logger = Logger ()
tracer = Tracer ()
@ tracer . capture_method
def process_new_service ( dimensions , region , account_id , namespace , change_time , annotation_time , start_time , end_time , start , end ):
# Your implementation here
pass
เพิ่มตัวจัดการให้กับฟังก์ชัน Lambda : อัปเดต lambda_function.py
เพื่อนำเข้าและเรียกใช้ตัวจัดการใหม่ของคุณตามทริกเกอร์
อัปเดตเทมเพลต : แก้ไข template.yaml
เพื่อรวมตัวจัดการใหม่และอัปเดตสิทธิ์ที่จำเป็น
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Policies :
- Statement :
- Effect : Allow
Action :
- new-service:Describe*
Resource : " * "
เพิ่มสิทธิ์ที่จำเป็น : ตรวจสอบให้แน่ใจว่าตัวจัดการใหม่ของคุณมีสิทธิ์ที่จำเป็นโดยอัปเดตไฟล์ template.yaml
ดังที่แสดงด้านบน
ทริกเกอร์การเตือน : ทริกเกอร์การเตือนด้วยตนเองโดยใช้คำสั่งต่อไปนี้ โดยแทนที่ <alarm_name> ด้วยชื่อการเตือนของคุณ:
aws cloudwatch set-alarm-state --state-value ALARM --state-reason " Testing " --alarm-name " <alarm_name> "
ใช้กรณีทดสอบที่สร้างขึ้นในบันทึก : ฟังก์ชัน Lambda หลักจะสร้างกรณีทดสอบที่สามารถใช้ในคอนโซล Lambda ดูการทดสอบฟังก์ชัน Lambda ในคอนโซลหรือโดยใช้ sam remote invoke
เปิดคอนโซล CloudWatch
ในบานหน้าต่างนำทาง เลือก บันทึก จากนั้นเลือก Logs Insights
ในเมนูแบบเลื่อนลง เลือกกลุ่มบันทึก ให้เลือก /aws/lambda/alarm-context-tool-AlarmContextFunction-xxxxxxxxxxxx
ป้อนคำถามต่อไปนี้ โดยแทนที่ <alarm_name> ด้วยชื่อการปลุกของคุณ:
fields @timestamp, @message, @logStream, @log
| filter message = "test_case" AND Records.0.Sns.Message like /<alarm_name>/
เลือก เรียกใช้แบบสอบถาม
ขยายรายการบันทึกและคัดลอกช่อง @message ทั้งหมด
จากนั้นคุณสามารถใช้สิ่งนี้เพื่อทดสอบฟังก์ชัน Lambda ของคุณได้ตามต้องการ
คุณสามารถกำหนดค่าตัวแปรสภาพแวดล้อมต่อไปนี้สำหรับฟังก์ชัน Lambda ได้:
AWS_LAMBDA_LOG_LEVEL
: ตั้งค่าระดับการบันทึกสำหรับบันทึก AWS Lambda (เช่น INFO, DEBUG) ค่าเริ่มต้นคือ INFO
ANTHROPIC_VERSION
: ระบุเวอร์ชันของโมเดล Anthropic ที่จะใช้ ค่าเริ่มต้นคือ bedrock-2023-05-31
BEDROCK_MODEL_ID
: ID ของโมเดล Amazon Bedrock ที่จะใช้ ค่าเริ่มต้นคือ anthropic.claude-3-sonnet-20240229-v1:0
BEDROCK_REGION
: ภูมิภาค AWS ที่มีการปรับใช้โมเดล Bedrock ค่าเริ่มต้นคือ us-east-1
BEDROCK_MAX_TOKENS
: จำนวนโทเค็นสูงสุดที่จะใช้โดยโมเดล Bedrock ค่าเริ่มต้นคือ 4000
METRIC_ROUNDING_PRECISION_FOR_BEDROCK
: ความแม่นยำในการปัดเศษเมตริกก่อนส่งไปยัง Bedrock ค่าเริ่มต้นคือ 3
POWERTOOLS_LOG_LEVEL
: ตั้งค่าระดับการบันทึกสำหรับบันทึก AWS Lambda Powertools (เช่น INFO, DEBUG) ค่าเริ่มต้นคือ INFO
POWERTOOLS_LOGGER_LOG_EVENT
: เปิดใช้งานการบันทึกเหตุการณ์ทั้งหมดในบันทึกของ Lambda Powertools ค่าเริ่มต้นคือ True
POWERTOOLS_SERVICE_NAME
: ชื่อของบริการที่จะใช้ใน Lambda Powertools ค่าเริ่มต้นคือ Alarm
POWERTOOLS_TRACER_CAPTURE_RESPONSE
: ควบคุมว่าจะบันทึกการตอบสนองในการติดตามหรือไม่ ค่าเริ่มต้นเป็น False
RECIPIENT
: ที่อยู่อีเมลเพื่อรับการแจ้งเตือนSENDER
: ที่อยู่อีเมลของผู้ส่งสำหรับการแจ้งเตือนUSE_BEDROCK
: เปิดหรือปิดใช้งานการใช้ Amazon Bedrock สำหรับ AI ทั่วไป ค่าเริ่มต้นคือ True
หากต้องการกำหนดค่าตัวแปรเหล่านี้ ให้อัปเดตไฟล์ template.yaml
:
Resources :
AlarmContextFunction :
Type : AWS::Serverless::Function
Handler : lambda_function.alarm_handler
Runtime : python3.12
Environment :
Variables :
AWS_LAMBDA_LOG_LEVEL : INFO
ANTHROPIC_VERSION : bedrock-2023-05-31
BEDROCK_MODEL_ID : anthropic.claude-3-sonnet-20240229-v1:0
BEDROCK_REGION : us-east-1
BEDROCK_MAX_TOKENS : 4000
METRIC_ROUNDING_PRECISION_FOR_BEDROCK : 3
POWERTOOLS_LOG_LEVEL : INFO
POWERTOOLS_LOGGER_LOG_EVENT : " True "
POWERTOOLS_SERVICE_NAME : Alarm
POWERTOOLS_TRACER_CAPTURE_RESPONSE : " False "
RECIPIENT : [email protected]
SENDER : Name <[email protected]>
USE_BEDROCK : " True "
functions_logs
)log_group_name
(str): ชื่อของกลุ่มบันทึกstart_time
(str): เวลาเริ่มต้นสำหรับการสืบค้นend_time
(str): เวลาสิ้นสุดสำหรับการสืบค้นquery
(str): แบบสอบถาม Logs Insightsfunctions_metrics
)dashboard_metrics
(รายการ): รายการเมตริกสำหรับแดชบอร์ดannotation_time
(str): เวลาคำอธิบายประกอบสำหรับแดชบอร์ดstart
(str): เวลาเริ่มต้นสำหรับแดชบอร์ดend
(str): เวลาสิ้นสุดสำหรับแดชบอร์ดregion
(str): ภูมิภาค AWSfunctions_xray
)trace_ids
(รายการ): รายการ ID ติดตามที่จะประมวลผลstart_time
(str): เวลาเริ่มต้นสำหรับการประมวลผลการติดตามend_time
(str): เวลาสิ้นสุดสำหรับการประมวลผลการติดตามregion
(str): ภูมิภาค AWS ดูการมีส่วนร่วมสำหรับข้อมูลเพิ่มเติม
ห้องสมุดนี้ได้รับอนุญาตภายใต้ใบอนุญาต MIT-0 ดูไฟล์ใบอนุญาต