Slide 1

Slide 1 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. T O R A N O A N A L a b 2024 Deno Deploy のログを NewRelic に送り込もう 2024/7/31 toranoana.deno #17 虎の穴ラボ株式会社 奥谷 一陽

Slide 2

Slide 2 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 自己紹介 奥谷 一陽 所属:虎の穴ラボ株式会社 興味:Deno、TypeScript 最近買ったもの:高圧洗浄機 X:@okutann88 github:Octo8080X

Slide 3

Slide 3 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 アジェンダ - Deno Deploy のログ保管状況 - NewRelic へログを送り込む - console.xxx の上書き - 改めてDeno Deployでも動かす

Slide 4

Slide 4 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 Deno Deployのログ保存期間 
 無料 : 1日 
 有料 : 1週間 


Slide 5

Slide 5 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 Deno Deployのログ保存期間 いささか心許ない保管期間なので、回避策を考えたい

Slide 6

Slide 6 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 💡外部にログを送り込もう


Slide 7

Slide 7 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 ログ保管できるサービス - DataDog - 無料トライアルはあっても、無料プランが無い - NewRelic - 無料プランあり、30日の保存期間  今回は、NewRelicを選定  (今回の実装は、DataDog向けにも近いことができます。)

Slide 8

Slide 8 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 New Relic にログを送るには? 


Slide 9

Slide 9 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 New Relic にログを送るには? - Logs APIを使う - エージェントは使えないのか? - ざっと試した限り難しそうだった。 - Node 向けのNewRelicパッケージにDeno サポートのissueがある - 動きはなさそう。(https://github.com/newrelic/node-newrelic/issues/1727)

Slide 10

Slide 10 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 New Relic Logs API を使う fetch('https://log-api.newrelic.com/log/v1',{ method: 'POST', headers: { 'Content-Type': 'application/json', 'Api-Key': '[作成したキー ]' }, body: JSON.stringify({ message: "Hello from Deno" }) ) - New Relic 管理画面でキーを発行 - fetchで送るだけ - 受け取り時刻のタイムスタンプがつ いてログとして取り扱いされる。     (送り側でタイムスタンプをつけることも可能) New Relic画面

Slide 11

Slide 11 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 console.xxx を上書き 


Slide 12

Slide 12 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 console.xxx を上書き - オリジナルの console.log を退避 - console.log を上書き - 末尾でオリジナルのconsole.logを呼ぶ => console.log がコンソール出力と NewRelicへの送信を行うようになる。 (この例では、console.log 全ての引数パターンは網羅していない) const logger = { orgLog: console.log, } console.log = (message: string) => { fetch('https://log-api.newrelic.com/log/v1',{ method: 'POST', headers: { 'Content-Type': 'application/json', 'Api-Key': '[作成したキー ]' }, body: JSON.stringify({ timestamp: Date.now(), logtype: 'info', message: Deno.inspect(message) }) }) logger.orgLog(message) } Deno.serve((req: Request) => { console.log(req) return new Response("Hello World") });

Slide 13

Slide 13 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 console.xxx を上書き const logger = { orgLog: console.log, } console.log = (message: string) => { fetch('https://log-api.newrelic.com/log/v1',{ method: 'POST', headers: { 'Content-Type': 'application/json', 'Api-Key': '[作成したキー ]' }, body: JSON.stringify({ timestamp: Date.now(), logtype: 'info', message: Deno.inspect(message) }) }) logger.orgLog(message) } Deno.serve((req: Request) => { console.log(req) return new Response("Hello World") }); ポイント - Deno.inspect でメッセージをラップ   Response のような複雑なオブジェクトは、   直接JSON.stringify すると、{} になる => Deno.inspect で文字列化する

Slide 14

Slide 14 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 改めて Deno Deploy で動かす 


Slide 15

Slide 15 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 先ほどのソースを PlayGround に貼付 改めて Deno Deploy で動かす

Slide 16

Slide 16 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 改めて Deno Deploy で動かす リクエスト内容から deno deployで動いて いることがわかる

Slide 17

Slide 17 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 まとめ


Slide 18

Slide 18 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 まとめ - Deno Deployのログ保存期間は決して長くはない(1日, 1週間) - New Relicがログの送り先として良さそう。(無料でも30日) - 要件次第では別のサービスでも構わない。 - console.xxx を上書きすると(比較的)既存の実装のまま、ログを送出できる。 - 懸念:リクエストあたり処理時間制限で必ずしも送られない可能性? - もしもっといい対応方法をご存知でしたら、ぜひコメントください。

Slide 19

Slide 19 text

Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024 ありがとうございました