teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

asciiについて

2021/05/21 04:41

投稿

yuki_90453
yuki_90453

スコア326

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

更に詳しく

2021/05/21 04:41

投稿

yuki_90453
yuki_90453

スコア326

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
- INFO 起動しました
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

詳細に書きました。

2021/05/21 04:13

投稿

yuki_90453
yuki_90453

スコア326

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