質問編集履歴

3

asciiについて

2021/05/21 04:41

投稿

yuki_90453
yuki_90453

スコア326

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

更に詳しく

2021/05/21 04:41

投稿

yuki_90453
yuki_90453

スコア326

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

詳細に書きました。

2021/05/21 04:13

投稿

yuki_90453
yuki_90453

スコア326

test CHANGED
File without changes
test CHANGED
@@ -1,19 +1,105 @@
1
- #概要
1
+ #概要(追記)
2
2
 
3
- 下記のような文字の文字コードデコード方法がわからず困っます。
3
+ AWSCloudWatch 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
- {"event": "INFO\th57e\u000b\u0015c\u0001\u0017c\u0001>c\u0001\u0017c\u0001\u001fc\u0000\u0002\n"}
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
- uから始まるのでunicodeかと思いますが、unicode16で変換しても変換出来ません。
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
- javascript上で、どのようにすれば上手く変換出来すか?
99
+ console.log('起動しした')
100
+
101
+ ```
102
+
103
+
104
+
105
+ 今回はテストなので、このコードが出力されると検知し、通知されるようにしているのですが、日本語でログを出すのが駄目なんでしょうか?