接收任何特定窗口服务进入停止状态的警报



如果任何特定的 EC2 Windows 服务进入停止状态,我希望收到电子邮件通知。

我配置了CloudWatch,能够接收所有Windows服务的日志。 创建了一个 lambda 函数,以便在任何服务进入停止状态时获取通知,但问题是我仅在单击测试函数时才收到警报。

我收到如下的云观察日志:

03:43:02 [System] [INFORMATION] [7036] [Service Control Manager] [mydomain.com] [The Background Intelligent Transfer Service service entered the running state.]
03:43:02 [System] [INFORMATION] [7040] [Service Control Manager] [mydomain.com] [The start type of the Background Intelligent Transfer Service service was changed from demand start to auto start.]
03:43:02 [System] [INFORMATION] [7036] [Service Control Manager] [mydomain.com] [The WinHTTP Web Proxy Auto-Discovery Service service entered the running state.]
03:45:02 [System] [INFORMATION] [7040] [Service Control Manager] [mydomain.com] [The start type of the Background Intelligent Transfer Service service was changed from auto start to demand start.]

这是我的 lambda 函数:

import boto3
import time
client = boto3.client('logs')
sns = boto3.client('sns')
instance_name = "Development"
a1 = int(round(time.time() * 1000))
def lambda_handler(event, context):
response = client.get_log_events(
logGroupName = 'Eadev',
logStreamName = 'i-01fe1z56y790cq',
startTime = a1,
startFromHead = False
)
event01 = '[System] [INFORMATION] [7036] [Service Control Manager] [mydomain.com] [The DebtManager-Host service entered the stopped state.]'
event02 = '[System] [INFORMATION] [7036] [Service Control Manager] [mydomain.com] [The DebtManager-Controller service entered the stopped state.]'
for i in response['events']:
if event01 == i['message']:
print(event01)
sns.publish( TargetArn = "arn:aws:sns:us-east-1:3913948:testsns",Message = instance_name +"  "+ event01)
if event02 == i['message']:
print(event02)
sns.publish( TargetArn = "arn:aws:sns:us-east-1:3913948:testsns",Message = instance_name +" "+ event02)

我预计来自任何服务的电子邮件通知都已停止,但仅当我单击 Lambda 函数中的测试时,我才收到警报。

看来您想要的情况是:

  • Windows 实例上的 Amazon CloudWatch 代理将日志数据发送到Amazon CloudWatchLogs
  • 在日志文件中检测到特定条目时发送通知

您可以使用CloudWatch 日志筛选指标来触发 CloudWatch 警报,而不是为每个日志消息触发 Lambda 函数:

  • 使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器收集指标和日志
  • 搜索和筛选日志数据,通过创建指标筛选器来检测所需的消息
  • 这会将指标推送到Amazon CloudWatch 指标
  • 然后,您可以针对指标创建传统的Amazon CloudWatch警报,并在收到一定数量的此类消息时触发该警报
  • CloudWatch 警报可以向Amazon SNS 主题发送通知

有关端到端示例,请参阅: 使用 Amazon CloudWatch 日志指标筛选条件发送警报 - IT 空洞

或者,您可以使用AWS Lambda 函数

  • 使用 CloudWatch 代理从 Amazon EC2 实例和本地服务器收集指标和日志
  • 通过订阅对日志数据进行实时处理
  • 它可以接受订阅筛选器来识别感兴趣的记录
  • 然后,它可以触发 AWS Lambda 函数,您可以对其进行编程以执行任何您想要的操作(例如,向 Amazon SNS 主题发送消息)

相关内容

最新更新