Slide 1

Slide 1 text

Datadog Japan G.K. Kento Kimura(𝕏: @AoToLog_) July 2023, CNDF 2023 pre-event in Tokyo サーバレス関数って 何を監視すればいいの? GENERAL USE

Slide 2

Slide 2 text

自己紹介 ● 所属: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

Slide 3

Slide 3 text

話すこと・話さないこと 話すこと • 一般的なサーバレス関数の概要 • 一般的なサーバレス関数の構成要素 • 一般的なサーバレス関数の仕組み • 一般的なサーバレス関数の監視 • 一般的なサーバレス関数のオブザーバビリティ 話さないこと • サーバレスコンテナ(CaaS)のサービス • 各 CSP の具体的なサービスの使い方 • それぞれの設定方法の詳細 • コールドスタートの解消方法 • 製品デモ

Slide 4

Slide 4 text

サーバレス関数って何?

Slide 5

Slide 5 text

サーバレス関数とは a.k.a FaaS(Function as a Service)・サーバレス・ファンクション • イベント駆動型コンピューティング イベントや HTTP リクエストによってトリガーされる関数による、コードの実行 CSP(Cloud Service Provider)がサーバーリソースをプロビジョニング・管理し、 開発者が小規模なコードによるビジネスロジックを実装する ※近年は、サーバレスコンテナやローコードロジックがあるので、    今回は「サーバレス」かつ「関数」という呼称を採用

Slide 6

Slide 6 text

サーバレス関数の歴史 各フレームワーク毎に、独自のイベント処理とデータ処理のランタイムとサービスのセットがある →開発者が意識するのは実装するコードと、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

Slide 7

Slide 7 text

サーバレス関数の比較 Azure Functions 記述するコードと管理するインフラストラ クチャを減らし、コストを節約できるサー バーレス ソリューション 監視サービス • Azure Monitor Cloud Functions クラウド サービスの構築と接続に使用す るサーバーレスのランタイム環境 監視サービス • Google Cloud Operation Suit AWS Lambda サーバーをプロビジョニングまたは管理 せずにコードを実行できるようにするコン ピューティングサービス 監視サービス • AWS CloudWatch • AWS X-ray CSP によって差異はあるが、各 CSP の監視サービスで基本的な監視情報が提供されている →どのような観点で監視を行うか(情報をどう活かすか)が重要

Slide 8

Slide 8 text

• 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

Slide 9

Slide 9 text

サーバレス関数の構成要素 サーバレス関数の構成要素を考えてみると… API エンドポイント • 関数をトリガーするために暗黙的に用意される(HTTP) OS、(関数の)ランタイム • 実装する関数に合わせた実行環境(OS・言語の組み合わせ) 割り当てメモリ・CPU • 関数で利用可能なリソースの定義(CPU・メモリの組み合わせ) 拡張機能・レイヤー • プロバイダーから提供される、関数とは分離されたレイヤー →それぞれの構成要素を監視し状況を把握し、コスト・パフォーマンス最適化ができる

Slide 10

Slide 10 text

サーバレス関数のライフサイクル INIT Runtime, Function INVOKE Function SHUTDOWN Runtime INVOKE Function • Cold Start では、ランタイム環境の準備とメイン関数以外のコードの読み込みが発生する • Warm Start では、メイン関数のみが実行される 監視したいことは… • Cold Start が起こる頻度 • Warm Start 時のメイン関数のパフォーマンス Cold Start Warm Start

Slide 11

Slide 11 text

サーバレス関数を監視しよう

Slide 12

Slide 12 text

サーバレス関数を監視する理由 サーバレス関数の場合でも以下の観点で監視が必要 • リソースの監視:サービスクォータの把握やコスト・パフォーマンス最適化 • 課金の監視:課金状況やコスト最適化 • アプリケーションの監視:バグやエラーの監視やパフォーマンスの最適化 ボトルネックとなる箇所を管理範囲に基づいて監視情報を収集 • CSP→消費リソース量、実行時間・回数、エラーログ • 開発者→エラー率、アプリケーションパフォーマンス

Slide 13

Slide 13 text

サーバレス関数のメトリクス メトリクスを監視することで、サーバレス関数がどう動いているかを把握できる 一般的に提供されるメトリクス • 実行時間(avg, p95, p99) • 同時実行数(Concurrent) • メモリ使用量 • 呼び出し回数(Invokatinos) • エラー率

Slide 14

Slide 14 text

サーバレス関数のログ ログを監視することで、サーバレス関数が何をしたかが把握できる アプリケーションログ(ランタイム関数ログ) • 実行ログ • エラーログ クラウド監査ログ • 監査アクティビティ • データアクセス・読み取り

Slide 15

Slide 15 text

サーバレス関数の一般的な問題 サーバレス関数で考えられる一般的な問題から、何を監視する必要があるかを考える • コールドスタート → メトリクス(実行時間) • 呼び出し → メトリクス(呼び出し回数) • エラー → メトリクス(エラー率)、ログ(エラーログ) • 割り当てリソース → メトリクス(メモリ使用量) • 同時実行(Concurrency) → メトリクス(同時実行数) • クォータ(Quota) → ログ(エラーログ) • ネットワーク → ログ(エラーログ) →CSP から提供されている監視情報で、一般的な問題に対処できる

Slide 16

Slide 16 text

サーバレス関数のオブザーバビリティ

Slide 17

Slide 17 text

サーバレス関数のオブザーバビリティ そもそもオブザーバビリティとは ※Cloud Native Glossary の Observability より抜粋 システムの状態を理解し、修正アクションを実行できるようになるための情報が揃っている状態 サーバレス関数で改善したい・できるのはコードの部分 →開発者の管理範囲である、アプリケーションコードへの実装が必要 追加のメトリクスデータ • エラー率やランタイムに関するメトリクス eg) Lambda Enhanced Metrics トレースデータ • サーバレス関数のパフォーマンスを処理レベルで解析 プロファイルデータ • CPU、メモリなどの消費量をコードレベルで解析

Slide 18

Slide 18 text

サーバレス関数のトレース ※サーバレス関数のトレースはアプリケーションの言語に依存します アプリケーショントレースを収集することで、 アプリケーションレベルでのパフォーマンスやコールドスタートの影響を可視化することができる トレースデータ • アプリケーション処理のパフォーマンス • アプリケーションエラー • アプリケーションのレイテンシー • アプリケーションのリクエスト

Slide 19

Slide 19 text

サーバレス関数のプロファイリング ※サーバレス関数のプロファイリングは言語に加えてクラウドプロバイダーに依存します アプリケーションプロファイリングを行うことで、 アプリケーションのリソースへの影響を可視化してコスト・パフォーマンス最適化を実現できる プロファイルデータ • コードレベルのパフォーマンス • コードの CPU 使用時間 • アプリケーションに割り当てられるメモリ量 • ロック待機時間

Slide 20

Slide 20 text

サーバレス関数のオブザーバビリティ 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 でツールリストを参照可能

Slide 21

Slide 21 text

サーバレス関数のベストプラクティス ベストプラクティスから逆算して、どのような情報が欲しいかを考える • メモリサイズの最適化 → メトリクス(リソース使用量) • 正しいストレージの設定 → メトリクス(ストレージへの書込み時間) • 長い実行時間を避ける → メトリクス(実行時間) • 同時実効性 → メトリクス(リソース使用量) • 冪等性 → アプリケーショントレース情報 • 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

Slide 22

Slide 22 text

Thank you!