質問編集履歴
3
asciiについて
title
CHANGED
File without changes
|
body
CHANGED
@@ -47,6 +47,23 @@
|
|
47
47
|
#備考
|
48
48
|
この処理コードは[AWS公式](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#LambdaFunctionExample)に載っているコードコピーしてきました。
|
49
49
|
|
50
|
+
下記は実際に載っているコードです。
|
51
|
+
```ここに言語を入力
|
52
|
+
var zlib = require('zlib');
|
53
|
+
exports.handler = function(input, context) {
|
54
|
+
var payload = Buffer.from(input.awslogs.data, 'base64');
|
55
|
+
zlib.gunzip(payload, function(e, result) {
|
56
|
+
if (e) {
|
57
|
+
context.fail(e);
|
58
|
+
} else {
|
59
|
+
result = JSON.parse(result.toString('ascii'));
|
60
|
+
console.log("Event Data:", JSON.stringify(result, null, 2));
|
61
|
+
context.succeed();
|
62
|
+
}
|
63
|
+
});
|
64
|
+
};
|
65
|
+
```
|
66
|
+
|
50
67
|
#質問
|
51
68
|
元となるLambda関数で日本語でログが出力されようにしています。
|
52
69
|
```ここに言語を入力
|
2
更に詳しく
title
CHANGED
File without changes
|
body
CHANGED
@@ -18,7 +18,7 @@
|
|
18
18
|
throw new Error(e.message)
|
19
19
|
} else {
|
20
20
|
const parsed = result.toString('ascii')
|
21
|
-
const obj = JSON.parse(parsed)
|
21
|
+
const obj = JSON.parse(parsed) // 失敗します。
|
22
22
|
const message = obj.logEvents.map(({extractedFields}:any) => extractedFields.event).join('\n')
|
23
23
|
console.log(`メッセージ:${message}`)
|
24
24
|
// await postSlack(message)
|
@@ -37,9 +37,12 @@
|
|
37
37
|
}
|
38
38
|
```
|
39
39
|
|
40
|
-
##
|
41
|
-
|
42
|
-
|
40
|
+
## 出力結果
|
41
|
+
```
|
42
|
+
"{\"messageType\":\"DATA_MESSAGE\",\"owner\":\"139621529134\",\"logGroup\":\"/aws/lambda/sam-ForErrorWatch-PziXzVEhSKEK\",\"logStream\":\"2021/05/21/[$LATEST]c43bb2a34f0e44f297edbd248baa3eed\",\"subscriptionFilters\":[\"info\"],\"logEvents\":[{\"id\":\"36162190206752166468943639975055725144450081642121789441\",\"timestamp\":1621568691307,\"message\":\"2021-05-21T03:44:51.306Z\t66435481-2a08-4981-84fc-788179544c11\tINFO\th57e\u000b\u0015c\u0001\u0017c\u0001>c\u0001\u0017c\u0001\u001fc\u0000\u0002\n\"}]}"
|
43
|
+
```
|
44
|
+
上記のmessageの部分を整形して解読したいのですが出来ません。
|
45
|
+
またこの出力結果はJSON.parseで失敗します、
|
43
46
|
|
44
47
|
#備考
|
45
48
|
この処理コードは[AWS公式](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#LambdaFunctionExample)に載っているコードコピーしてきました。
|
1
詳細に書きました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,10 +1,53 @@
|
|
1
|
-
#概要
|
2
|
-
|
1
|
+
#概要(追記)
|
2
|
+
AWSのCloudWatch Logsにエラーが出力された際、通知がされるようしたいと考えております。
|
3
|
+
通知の際に出力された文字が解読出来ず困っています。
|
4
|
+
|
5
|
+
|
6
|
+
#実際のコード
|
7
|
+
|
8
|
+
## 処理コード
|
9
|
+
```TypeScript
|
10
|
+
import {CloudWatchLogsEvent} from 'aws-lambda';
|
11
|
+
import zlib from 'zlib'
|
12
|
+
|
13
|
+
export const handler=async(event:CloudWatchLogsEvent, context:any)=>{
|
14
|
+
const payload = Buffer.from(event.awslogs.data, 'base64')
|
15
|
+
zlib.gunzip(payload, function(e, result) {
|
16
|
+
if (e) {
|
17
|
+
context.fail(e);
|
18
|
+
throw new Error(e.message)
|
19
|
+
} else {
|
20
|
+
const parsed = result.toString('ascii')
|
21
|
+
const obj = JSON.parse(parsed)
|
22
|
+
const message = obj.logEvents.map(({extractedFields}:any) => extractedFields.event).join('\n')
|
23
|
+
console.log(`メッセージ:${message}`)
|
24
|
+
// await postSlack(message)
|
25
|
+
context.succeed();
|
26
|
+
}
|
27
|
+
});
|
28
|
+
}
|
29
|
+
```
|
30
|
+
|
31
|
+
## インプット
|
32
|
+
```JSON
|
33
|
+
{
|
34
|
+
"awslogs": {
|
35
|
+
"data": "H4sIAAAAAAAAADVQy0rEMBT9l+DS2tzkJk1mN2BHxCe0qOgMkrYZLUzbIY2KiuC4dS0u/Qpx588Mgp9hfG0ul3O459xzbklj+96c2fx6bsmArA/z4elOmmXDjZSsku6qtS7AwLVkIJgGjgGedWcbrruYByY2V308M01Rmbg3TTTqXOpc5w6NL8+j/Zv66OYgPc+20q3fu8w7a5pwyCiDmIo4zJOV7WGeZvmkRF4UzHCcUos4ZTqxVVExVIUx3NoqSPQXRV+6eu7rrh3VM29dTwYnpG6nHZn8OKSXtvXf4C2pq2DEJYTfNWVUJoKBlCiVRi651omgQiRMACIKShVIZMAgCTxCMPN1aMebJgT91hBSydAATVb/W/vLEVERMcgpHyAOBKxxKo/HPjhxgQoiZqiKUIdN4bSMEqUg0QKxBBj7zd3R3th/vr59PD4tF8/LxfvPfFneP4xbcje5+wJbHB2fowEAAA=="
|
36
|
+
}
|
37
|
+
}
|
38
|
+
```
|
39
|
+
|
40
|
+
## 想定している出力結果
|
41
|
+
今の所、正しく出力出来ていないので正確な出力結果はわかりませんが、下記のようなデータが出力されると思います。
|
42
|
+
INFO 起動しました
|
43
|
+
|
44
|
+
#備考
|
45
|
+
この処理コードは[AWS公式](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#LambdaFunctionExample)に載っているコードコピーしてきました。
|
46
|
+
|
47
|
+
#質問
|
48
|
+
元となるLambda関数で日本語でログが出力されようにしています。
|
3
49
|
```ここに言語を入力
|
4
|
-
|
50
|
+
console.log('起動しました')
|
5
51
|
```
|
6
52
|
|
7
|
-
|
53
|
+
今回はテストなので、このコードが出力されると検知し、通知されるようにしているのですが、日本語でログを出すのが駄目なんでしょうか?
|
8
|
-
#質問
|
9
|
-
この文字コードはわかりますか?
|
10
|
-
javascript上で、どのようにすれば上手く変換出来ますか?
|