質問編集履歴
3
asciiについて
test
CHANGED
File without changes
|
test
CHANGED
@@ -96,6 +96,40 @@
|
|
96
96
|
|
97
97
|
|
98
98
|
|
99
|
+
下記は実際に載っているコードです。
|
100
|
+
|
101
|
+
```ここに言語を入力
|
102
|
+
|
103
|
+
var zlib = require('zlib');
|
104
|
+
|
105
|
+
exports.handler = function(input, context) {
|
106
|
+
|
107
|
+
var payload = Buffer.from(input.awslogs.data, 'base64');
|
108
|
+
|
109
|
+
zlib.gunzip(payload, function(e, result) {
|
110
|
+
|
111
|
+
if (e) {
|
112
|
+
|
113
|
+
context.fail(e);
|
114
|
+
|
115
|
+
} else {
|
116
|
+
|
117
|
+
result = JSON.parse(result.toString('ascii'));
|
118
|
+
|
119
|
+
console.log("Event Data:", JSON.stringify(result, null, 2));
|
120
|
+
|
121
|
+
context.succeed();
|
122
|
+
|
123
|
+
}
|
124
|
+
|
125
|
+
});
|
126
|
+
|
127
|
+
};
|
128
|
+
|
129
|
+
```
|
130
|
+
|
131
|
+
|
132
|
+
|
99
133
|
#質問
|
100
134
|
|
101
135
|
元となるLambda関数で日本語でログが出力されようにしています。
|
2
更に詳しく
test
CHANGED
File without changes
|
test
CHANGED
@@ -38,7 +38,7 @@
|
|
38
38
|
|
39
39
|
const parsed = result.toString('ascii')
|
40
40
|
|
41
|
-
const obj = JSON.parse(parsed)
|
41
|
+
const obj = JSON.parse(parsed) // 失敗します。
|
42
42
|
|
43
43
|
const message = obj.logEvents.map(({extractedFields}:any) => extractedFields.event).join('\n')
|
44
44
|
|
@@ -76,11 +76,17 @@
|
|
76
76
|
|
77
77
|
|
78
78
|
|
79
|
-
##
|
79
|
+
## 出力結果
|
80
80
|
|
81
|
-
|
81
|
+
```
|
82
82
|
|
83
|
-
INFO
|
83
|
+
"{\"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\"}]}"
|
84
|
+
|
85
|
+
```
|
86
|
+
|
87
|
+
上記のmessageの部分を整形して解読したいのですが出来ません。
|
88
|
+
|
89
|
+
またこの出力結果はJSON.parseで失敗します、
|
84
90
|
|
85
91
|
|
86
92
|
|
1
詳細に書きました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,19 +1,105 @@
|
|
1
|
-
#概要
|
1
|
+
#概要(追記)
|
2
2
|
|
3
|
-
|
3
|
+
AWSのCloudWatch Logsにエラーが出力された際、通知がされるようしたいと考えております。
|
4
4
|
|
5
|
-
|
5
|
+
通知の際に出力された文字が解読出来ず困っています。
|
6
6
|
|
7
|
+
|
8
|
+
|
9
|
+
|
10
|
+
|
11
|
+
#実際のコード
|
12
|
+
|
13
|
+
|
14
|
+
|
15
|
+
## 処理コード
|
16
|
+
|
17
|
+
```TypeScript
|
18
|
+
|
19
|
+
import {CloudWatchLogsEvent} from 'aws-lambda';
|
20
|
+
|
21
|
+
import zlib from 'zlib'
|
22
|
+
|
23
|
+
|
24
|
+
|
25
|
+
export const handler=async(event:CloudWatchLogsEvent, context:any)=>{
|
26
|
+
|
27
|
+
const payload = Buffer.from(event.awslogs.data, 'base64')
|
28
|
+
|
29
|
+
zlib.gunzip(payload, function(e, result) {
|
30
|
+
|
31
|
+
if (e) {
|
32
|
+
|
33
|
+
context.fail(e);
|
34
|
+
|
35
|
+
throw new Error(e.message)
|
36
|
+
|
37
|
+
} else {
|
38
|
+
|
39
|
+
const parsed = result.toString('ascii')
|
40
|
+
|
41
|
+
const obj = JSON.parse(parsed)
|
42
|
+
|
7
|
-
|
43
|
+
const message = obj.logEvents.map(({extractedFields}:any) => extractedFields.event).join('\n')
|
44
|
+
|
45
|
+
console.log(`メッセージ:${message}`)
|
46
|
+
|
47
|
+
// await postSlack(message)
|
48
|
+
|
49
|
+
context.succeed();
|
50
|
+
|
51
|
+
}
|
52
|
+
|
53
|
+
});
|
54
|
+
|
55
|
+
}
|
8
56
|
|
9
57
|
```
|
10
58
|
|
11
59
|
|
12
60
|
|
13
|
-
|
61
|
+
## インプット
|
62
|
+
|
63
|
+
```JSON
|
64
|
+
|
65
|
+
{
|
66
|
+
|
67
|
+
"awslogs": {
|
68
|
+
|
69
|
+
"data": "H4sIAAAAAAAAADVQy0rEMBT9l+DS2tzkJk1mN2BHxCe0qOgMkrYZLUzbIY2KiuC4dS0u/Qpx588Mgp9hfG0ul3O459xzbklj+96c2fx6bsmArA/z4elOmmXDjZSsku6qtS7AwLVkIJgGjgGedWcbrruYByY2V308M01Rmbg3TTTqXOpc5w6NL8+j/Zv66OYgPc+20q3fu8w7a5pwyCiDmIo4zJOV7WGeZvmkRF4UzHCcUos4ZTqxVVExVIUx3NoqSPQXRV+6eu7rrh3VM29dTwYnpG6nHZn8OKSXtvXf4C2pq2DEJYTfNWVUJoKBlCiVRi651omgQiRMACIKShVIZMAgCTxCMPN1aMebJgT91hBSydAATVb/W/vLEVERMcgpHyAOBKxxKo/HPjhxgQoiZqiKUIdN4bSMEqUg0QKxBBj7zd3R3th/vr59PD4tF8/LxfvPfFneP4xbcje5+wJbHB2fowEAAA=="
|
70
|
+
|
71
|
+
}
|
72
|
+
|
73
|
+
}
|
74
|
+
|
75
|
+
```
|
76
|
+
|
77
|
+
|
78
|
+
|
79
|
+
## 想定している出力結果
|
80
|
+
|
81
|
+
今の所、正しく出力出来ていないので正確な出力結果はわかりませんが、下記のようなデータが出力されると思います。
|
82
|
+
|
83
|
+
INFO 起動しました
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
#備考
|
88
|
+
|
89
|
+
この処理コードは[AWS公式](https://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/logs/SubscriptionFilters.html#LambdaFunctionExample)に載っているコードコピーしてきました。
|
90
|
+
|
91
|
+
|
14
92
|
|
15
93
|
#質問
|
16
94
|
|
17
|
-
|
95
|
+
元となるLambda関数で日本語でログが出力されようにしています。
|
18
96
|
|
97
|
+
```ここに言語を入力
|
98
|
+
|
19
|
-
|
99
|
+
console.log('起動しました')
|
100
|
+
|
101
|
+
```
|
102
|
+
|
103
|
+
|
104
|
+
|
105
|
+
今回はテストなので、このコードが出力されると検知し、通知されるようにしているのですが、日本語でログを出すのが駄目なんでしょうか?
|