質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

0回答

1358閲覧

Windows イベントログ で発生したエラーを CloudWatch Logs へ蓄積し、Lambda と SNS で通知したい

sakai_yuji

総合スコア12

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2020/08/06 14:51

前提・実現したいこと

表題の通り、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 タグで値を取得したいと考えております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問