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

サーバレス関数って何を監視すればいいの?

 サーバレス関数って何を監視すればいいの?

Kento Kimura

July 18, 2023
Tweet

More Decks by Kento Kimura

Other Decks in Technology

Transcript

  1. Datadog Japan G.K. Kento Kimura(𝕏: @AoToLog_) July 2023, CNDF 2023

    pre-event in Tokyo サーバレス関数って 何を監視すればいいの? GENERAL USE
  2. 自己紹介 • 所属:Technical Solutions / Sales Engineer • 役割:パブリッククラウドのアーキテクト知識を活かした  オブザーバビリティ導入の技術支援

    • 資格:Google Cloud 全 11 資格、AWS 全 12 資格、Azure 13 資格 • 表彰:Google Cloud Partner Top Engineer 2023 2022-23 APN All AWS Certifications Engineer 2023 Japan AWS Jr.Champion 木村 健人 Kento Kimura Datadog Japan G.K. @AoToLog_ History データセンター運用保守 → パブリッククラウド技術支援 → プリセールス技術支援 Community Jagu’e’r デジクラ人材育成 / o11y-SRE 分科会 運営メンバー Partner Top Engineer 2023
  3. 話すこと・話さないこと 話すこと • 一般的なサーバレス関数の概要 • 一般的なサーバレス関数の構成要素 • 一般的なサーバレス関数の仕組み • 一般的なサーバレス関数の監視

    • 一般的なサーバレス関数のオブザーバビリティ 話さないこと • サーバレスコンテナ(CaaS)のサービス • 各 CSP の具体的なサービスの使い方 • それぞれの設定方法の詳細 • コールドスタートの解消方法 • 製品デモ
  4. サーバレス関数とは a.k.a FaaS(Function as a Service)・サーバレス・ファンクション • イベント駆動型コンピューティング イベントや HTTP

    リクエストによってトリガーされる関数による、コードの実行 CSP(Cloud Service Provider)がサーバーリソースをプロビジョニング・管理し、 開発者が小規模なコードによるビジネスロジックを実装する ※近年は、サーバレスコンテナやローコードロジックがあるので、    今回は「サーバレス」かつ「関数」という呼称を採用
  5. サーバレス関数の歴史 各フレームワーク毎に、独自のイベント処理とデータ処理のランタイムとサービスのセットがある →開発者が意識するのは実装するコードと、CSP から提供される監視情報 ※提供される監視情報は CSP 毎に異なるため、どこまで監視するかも変わる 2006 Zimki Pay

    as you go(従量課金制) のアイディアの始まり 2011 Parse サーバレスという用語の登場 2012 Firebase, IronWorker   Backend as a Service(BaaS) の登場 2014 AWS Lambda   クラウドでサーバレス関数の登場 2016 IBM OpeenWhisk on Bluemix(現IBM Cloud Functions), Google Cloud Functions, Azure Functions 2017 Huawei Function Stage 引用:CNCF Serverless WhitePaper v1.0
  6. サーバレス関数の比較 Azure Functions 記述するコードと管理するインフラストラ クチャを減らし、コストを節約できるサー バーレス ソリューション 監視サービス • Azure

    Monitor Cloud Functions クラウド サービスの構築と接続に使用す るサーバーレスのランタイム環境 監視サービス • Google Cloud Operation Suit AWS Lambda サーバーをプロビジョニングまたは管理 せずにコードを実行できるようにするコン ピューティングサービス 監視サービス • AWS CloudWatch • AWS X-ray CSP によって差異はあるが、各 CSP の監視サービスで基本的な監視情報が提供されている →どのような観点で監視を行うか(情報をどう活かすか)が重要
  7. • CSP の管理範囲 :基盤となるサーバ・VM・OS・ランタイム →提供されるメトリクス・ログでの監視 • 開発者の管理範囲 :関数のコード・拡張機能 →拡張機能やコードへの組込みで追加情報の収集 →管理範囲毎に監視情報の取得方法が変わるため、ま

    ずは CSP から提供される基本的な監視情報を活用 Bare Metal Server サーバレス関数の管理範囲 Virtual Machine Virtual Machine VM Kernel Execution Environment Function Code Layer Code Runtime Language /tmp VM Kernel Execution Environment Function Code Layer Code Runtime Language /tmp
  8. サーバレス関数の構成要素 サーバレス関数の構成要素を考えてみると… API エンドポイント • 関数をトリガーするために暗黙的に用意される(HTTP) OS、(関数の)ランタイム • 実装する関数に合わせた実行環境(OS・言語の組み合わせ) 割り当てメモリ・CPU

    • 関数で利用可能なリソースの定義(CPU・メモリの組み合わせ) 拡張機能・レイヤー • プロバイダーから提供される、関数とは分離されたレイヤー →それぞれの構成要素を監視し状況を把握し、コスト・パフォーマンス最適化ができる
  9. サーバレス関数のライフサイクル INIT Runtime, Function INVOKE Function SHUTDOWN Runtime INVOKE Function

    • Cold Start では、ランタイム環境の準備とメイン関数以外のコードの読み込みが発生する • Warm Start では、メイン関数のみが実行される 監視したいことは… • Cold Start が起こる頻度 • Warm Start 時のメイン関数のパフォーマンス Cold Start Warm Start
  10. サーバレス関数の一般的な問題 サーバレス関数で考えられる一般的な問題から、何を監視する必要があるかを考える • コールドスタート → メトリクス(実行時間) • 呼び出し → メトリクス(呼び出し回数) •

    エラー → メトリクス(エラー率)、ログ(エラーログ) • 割り当てリソース → メトリクス(メモリ使用量) • 同時実行(Concurrency) → メトリクス(同時実行数) • クォータ(Quota) → ログ(エラーログ) • ネットワーク → ログ(エラーログ) →CSP から提供されている監視情報で、一般的な問題に対処できる
  11. サーバレス関数のオブザーバビリティ そもそもオブザーバビリティとは ※Cloud Native Glossary の Observability より抜粋 システムの状態を理解し、修正アクションを実行できるようになるための情報が揃っている状態 サーバレス関数で改善したい・できるのはコードの部分 →開発者の管理範囲である、アプリケーションコードへの実装が必要

    追加のメトリクスデータ • エラー率やランタイムに関するメトリクス eg) Lambda Enhanced Metrics トレースデータ • サーバレス関数のパフォーマンスを処理レベルで解析 プロファイルデータ • CPU、メモリなどの消費量をコードレベルで解析
  12. サーバレス関数のオブザーバビリティ Azure Functions Azure Monitor Application Insight Cloud Functions Google

    Cloud Trace Google Cloud Profiler AWS Lambda AWS CloudWatch Lambda Insight AWS X-Ray CodeGuru Profiler 3rd Party(OSS) Tools • Datadog • Dynatrace • New Relic • OpenTelemetry etc…                         ※CNCF Cloud Native Interactive Landscape でツールリストを参照可能
  13. サーバレス関数のベストプラクティス ベストプラクティスから逆算して、どのような情報が欲しいかを考える • メモリサイズの最適化 → メトリクス(リソース使用量) • 正しいストレージの設定 → メトリクス(ストレージへの書込み時間)

    • 長い実行時間を避ける → メトリクス(実行時間) • 同時実効性 → メトリクス(リソース使用量) • 冪等性 → アプリケーショントレース情報 • HTTP レスポンスの実装 → アプリケーショントレース情報 • 適切な依存関係 → アプリケーショントレース情報 →ベストプラクティスを実現するためには、現状を正しく把握する情報が必要 AWS:https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/best-practices.html Azure:https://learn.microsoft.com/ja-jp/azure/azure-functions/functions-best-practices Google Cloud:https://cloud.google.com/functions/docs/bestpractices/tips?hl=ja