Получать оповещения о любой конкретной службе Windows, перешедшей в состояние останова - PullRequest
1 голос
/ 04 июня 2019

Я хочу получать уведомления по электронной почте, если какая-либо конкретная служба Windows EC2 перешла в состояние остановки.

Я настроил CloudWatch, способный получать журналы всех служб Windows.Создана лямбда-функция для получения уведомлений, когда какой-либо сервис перешел в остановленное состояние, но проблема в том, что я получаю оповещение только тогда, когда нажимаю на тестовую функцию.

Я получаю журналы CloudWatch, например:

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.]

Это моя лямбда-функция:

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)

Я ожидал, что оповещение по электронной почте от любой службы остановлено, но я получаю оповещение, только когда нажимаю на тест в функции лямбда.

1 Ответ

1 голос
/ 06 июня 2019

Похоже, что ваша желаемая ситуация:

  • Агент Amazon CloudWatch в экземпляре Windows отправляет данные журнала в журналы Amazon CloudWatch
  • Отправка уведомления при обнаружении определенной записи в файле журнала

Вместо того, чтобы запускать лямбда-функцию для каждого сообщения журнала , вы можете использовать метрики фильтра журналов CloudWatch для запуска тревоги CloudWatch :

Сквозной пример см .: Использование метрических фильтров журналов Amazon CloudWatch для отправки оповещений - пустота в ИТ

В качестве альтернативы, вы можете использовать функцию AWS Lambda :

...