Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Deno Deploy のログを NewRelic に送り込もう

Deno Deploy のログを NewRelic に送り込もう

Deno Deployのログを、比較的無料でも保存期間が長いNewRelicに転送を試みた。
- Deno Deploy のログ保存期間
- Deno 環境で NewRelicにログを送る方法
- concole.xxx の上書き
- Deno Deploy からNewRelicにログを送る。

More Decks by 虎の穴ラボ株式会社

Other Decks in Technology

Transcript

  1. 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 虎の穴ラボ株式会社 奥谷 一陽
  2. Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024

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

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

    Deno Deployのログ保存期間 
 無料 : 1日 
 有料 : 1週間 

  5. Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024

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

    💡外部にログを送り込もう

  7. Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024

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

    New Relic にログを送るには? 

  9. 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)
  10. 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画面
  11. 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") });
  12. 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 で文字列化する
  13. Copyright (C) 2023 Toranoana Lab Inc. All Rights Reserved. 2024

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

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

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