我用于设置基于 SQL 查询的 CloudWatch 警报的堆栈似乎很荒谬。我需要:
SELECT TOP (1) is_server_screwed FROM my_table;
)。$Metric = boilerplate_here; Write-CWMetricData -Namespace SQL -MetricData $Metric
)。有什么办法可以去掉第2步和第3步吗?令我惊讶的是 CloudWatch 本身无法查询服务器。
我可以创建一个管道来从 CloudWatch 获取与我的服务器性能相关的警报吗?当然可以。
为了扩展Jorge Campos的评论,解决方案是创建一个管道——一个有效弥合这一差距(CloudWatch和SQL Server之间)的过程。
您可以使用 AWS 服务(特别是 AWS Lambda 和 Amazon EventBridge)定期运行脚本来查询 SQL Server 并将结果推送到 CloudWatch Metrics。
例如,在 Python 伪代码中:
import pyodbc
import boto3
def lambda_handler(event, context):
# Connect to SQL Server
conn = pyodbc.connect('DRIVER={ODBC Driver};SERVER=your_server;DATABASE=your_db;UID=user;PWD=password')
cursor = conn.cursor()
# Execute SQL Query
cursor.execute("SELECT TOP (1) is_server_screwed FROM my_table;")
row = cursor.fetchone()
# Push to CloudWatch
cloudwatch = boto3.client('cloudwatch')
cloudwatch.put_metric_data(
Namespace='SQL',
MetricData=[
{
'MetricName': 'ServerStatus',
'Value': row[0],
'Unit': 'Count'
},
]
)
Amazon EventBridge (CloudWatch Events) 定期计划并触发 Lambda 函数,确保您的监控管道自动运行,无需手动干预。
CloudWatch 警报利用 Lambda 函数生成的自定义指标来配置警报。当性能指标超出预定义阈值时,这些警报可以通知您,从而能够主动响应潜在问题。