CloudWatch 可以查询 SQL Server 吗?

问题描述 投票:0回答:1

我用于设置基于 SQL 查询的 CloudWatch 警报的堆栈似乎很荒谬。我需要:

  1. SQL 查询返回我希望监控的内容(例如
    SELECT TOP (1) is_server_screwed FROM my_table;
    )。
  2. 将查询结果发送到 CloudWatch 的 PowerShell 脚本(例如
    $Metric = boilerplate_here; Write-CWMetricData -Namespace SQL -MetricData $Metric
    )。
  3. 用于按计划触发脚本的 SQL Server 代理作业(或等效的任务计划程序任务)。
  4. CloudWatch 警报会在查询结果超过阈值时提醒我。

有什么办法可以去掉第2步和第3步吗?令我惊讶的是 CloudWatch 本身无法查询服务器。

sql-server monitoring amazon-cloudwatch sql-agent-job cloudwatch-alarms
1个回答
0
投票

我可以创建一个管道来从 CloudWatch 获取与我的服务器性能相关的警报吗?当然可以。

为了扩展Jorge Campos评论,解决方案是创建一个管道——一个有效弥合这一差距(CloudWatch和SQL Server之间)的过程。

您可以使用 AWS 服务(特别是 AWS LambdaAmazon 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 函数生成的自定义指标来配置警报。当性能指标超出预定义阈值时,这些警报可以通知您,从而能够主动响应潜在问题。

© www.soinside.com 2019 - 2024. All rights reserved.