前提・実現したいこと
表題の通り、EC2 で発生した 発生したエラーを CloudWatch Logs へ蓄積。CloudWatch Logs Subscriptions をトリガーとして、Lambda と SNS を使用してエラーの通知を行いたいと考えています。
現在、CloudWatch Logs への蓄積と Lambda + SNS を使用した通知までは作成が完了しており、
XML 形式で取得した Windows イベントログを Lambda で解析し、EventID や Level などのを内容を SNS の Boby に含めたいと考えております。
しかし、XML 形式で取得した Windwos イベントログの タグ(EventID 、Levelなど)が取得できずに困っております。
お詳しい方がいらっしゃいましたご教示の程お願い致します。
該当のソースコード
from __future__ import print_function import xml.etree.ElementTree as ET import base64 import json import zlib import datetime import boto3 sns = boto3.client('sns') print('Loading function') def lambda_handler(event, context): data = zlib.decompress(base64.b64decode(event['awslogs']['data']), 16+zlib.MAX_WBITS) data_json = json.loads(data) log_json = json.loads(json.dumps(data_json["logEvents"][0], ensure_ascii=False)) if data_json["logGroup"]: date = datetime.datetime.fromtimestamp(int(str(log_json["timestamp"])[:10])) + datetime.timedelta(hours=9) root = ET.fromstring(data_json["message"]) sns_body = {} sns_body["default"] = "" sns_body["default"] += "日時: " + root["Date"] + "\n" sns_body["default"] += "イベントID: " + root ["EventID"] + "\n" sns_body["default"] += "レベル: " + root["Level"] + "\n" sns_body["default"] += "メッセージ: " + root["Message"] + "\n" topic = 'arn:aws:sns:ap-northeast-1:111111111111:***********' subject = '【AWS監視】スクリプトの実行でエラーが発生しました' region = 'ap-northeast-1' response = sns.publish( TopicArn=topic, Message=json.dumps(sns_body, ensure_ascii=False), Subject=subject, MessageStructure='json' ) return 'Successfully processed {} records.'.format(len(event['awslogs']))
試したこと
下記のような記述方法で、値が取得できることは確認できました。
print(root[0][1].text)
しかし、今後の拡張性などを考慮した時、XML タグで値を取得したいと考えております。
あなたの回答
tips
プレビュー