通过观测云 DataKit Extension 接入 AWS Lambda 最佳实践

news2024/11/24 20:56:54

前言

AWS Lambda 是一项计算服务,使用时无需预配置或管理服务器即可运行代码。AWS Lambda 只在需要时执行代码并自动缩放。借助 AWS Lambda,几乎可以为任何类型的应用程序或后端服务运行代码,而且无需执行任何管理。

Lambda Layer 是一个包含补充代码或数据的 .zip 文件存档,通常包含库依赖项、自定义运行时系统或配置文件。Lambda 扩展则是可以增强 Lambda 函数的功能,例如集成监控、安全性和监管工具等。

在本文中,我们将引导您了解如何将观测云服务集成到 AWS Lambda,通过配置 Lambda 层、设置环境变量,实现 Lambda 函数的指标、日志和链路采集。

前提条件

  • 确保您拥有 AWS 账户,并且具备管理 Lambda 函数的权限。
  • 已注册观测云账号

第1步:创建Lambda层

1、打开 AWS Lambda 控制台并导航至「Layers」页面。

2、点击「Create layer」,创建一个新的层。

3、在「Layer configuration」中,填写层的名称。

4、选择「Upload a .zip file」并上传以下链接对应的文件:

  • AMD架构:https://static.guance.com/datakit/datakit_aws_extension-linux-amd64.zip
  • ARM架构:https://static.guance.com/datakit/datakit_aws_extension-linux-arm64.zip

第2步:复制 ARN 并添加层到 Lambda 函数

  • 创建成功后,复制层的 ARN 值。

  • 在 Lambda 函数配置中添加此 ARN 到 Layers 部分。

第3步:配置环境变量

设置以下环境变量以确保数据正确传输到观测云:

Datakit 监听的地址名

  • DD_AGENT_HOST0.0.0.0

Datakit 监听的端口号

  • DD_TRACE_AGENT_PORT9529

DataWay 真实地址

  • ENV_DATAWAYhttps://xxxx.guance.com?token=<your-token>

第4步:日志、链路和指标采集

日志采集

  • 支持采集控制台日志。

  • Node.js 18.x 和 Go 日志采集示例。

链路采集

  • 使用 OpenTelemetry 或 DDTrace 进行链路采集
  • 对于 Go 语言,需要在业务代码中添加相应的追踪代码。Go 代码示例较为复杂,需要修改业务代码,示例如下:
package main

import (
        "context"
        "fmt"
        "github.com/aws/aws-lambda-go/lambda"
        "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/ext"
        "gopkg.in/DataDog/dd-trace-go.v1/ddtrace/tracer"
        "os"
        "time"
)

type MyEvent struct {
        Name string `json:"name"`
}

func HandleRequest(ctx context.Context, event *MyEvent) (*string, error) {
        return run(ctx, event)
}

func run(ctx context.Context, event *MyEvent) (*string, error) {
        tracer.Start(
                tracer.WithEnv("prod"),
                tracer.WithService("test-file-read"),
                tracer.WithServiceVersion("1.2.3"),
                tracer.WithGlobalTag("project", "add-ddtrace-in-golang-project"),
                tracer.WithLambdaMode(false),
        )

        // end of app exit, make sure tracer stopped
        defer tracer.Stop()

        tick := time.NewTicker(time.Second)
        defer tick.Stop()
        ctx, cancel := context.WithTimeout(ctx, time.Minute*2)
        defer cancel()
        // your-app-main-entry...
        for {
                runApp()
                runAppWithError()

                select {
                case <-tick.C:
                case <-ctx.Done():
                        message := fmt.Sprintf("Hello %s!", event)
                        return &message, nil
                }
        }
}

func main() {
        //run(context.Background(), &MyEvent{Name: "Hello World!"})
        lambda.Start(HandleRequest)
}

func runApp() {
        var err error
        // Start a root span.
        span := tracer.StartSpan("get.data")
        defer span.Finish(tracer.WithError(err))

        // Create a child of it, computing the time needed to read a file.
        child := tracer.StartSpan("read.file", tracer.ChildOf(span.Context()))
        child.SetTag(ext.ResourceName, os.Args[0])

        // Perform an operation.
        var bts []byte
        bts, err = os.ReadFile(os.Args[0])
        span.SetTag("file_len", len(bts))
        child.Finish(tracer.WithError(err))
}

func runAppWithError() {
        var err error
        // Start a root span.
        span := tracer.StartSpan("get.data")

        // Create a child of it, computing the time needed to read a file.
        child := tracer.StartSpan("read.file", tracer.ChildOf(span.Context()))
        child.SetTag(ext.ResourceName, "somefile-not-found.go")

        defer func() {
                child.Finish(tracer.WithError(err))
                span.Finish(tracer.WithError(err))
        }()

        // Perform an error operation.
        if _, err = os.ReadFile("somefile-not-found.go"); err != nil {
                // error handle
        }
}
  • 链路效果展示

指标采集

以下是 AWS Lambda 指标的详细列表

awslambda-metric

标签描述
aws_account_idAWS 账户ID。
aws_lambda_function_memory_sizeConfigured memory size for the Lambda function.
aws_lambda_function_nameLambda function name.
aws_lambda_function_versionLambda function version.
aws_lambda_initialization_typeInitialization type of the Lambda function.
aws_regionAWS region where the function is executed.
指标描述类型单位
billed_duration_msBilled duration in milliseconds.intms
duration_msTotal duration in milliseconds.intms
errorsErrors count.intcount
init_duration_msInitialization duration in milliseconds.intms
invocationsInvocation count.intcount
max_memory_used_mbMaximum memory used in MB.intMb
memory_size_mbMemory size configured for the Lambda function in MB.intMb
out_of_memoryOut of memory errors count.intcount
post_runtime_durationDuration of the post-runtime phase in milliseconds.intms
produced_bytesBytes produced.intB
response_duration_msResponse duration in milliseconds.intms
response_latencyResponse latency in milliseconds.intms
runtime_duration_msDuration of the runtime in milliseconds.intms
timeoutsTimeouts count.intcount

安全和隐私说明

  • 确保在配置 ENV_DATAWAY 时使用安全的连接(例如 HTTPS)。
  • 不要在日志或错误消息中暴露敏感信息。

注意事项

  • 在部署之前,确保测试所有配置。
  • 监控Lambda函数的性能,确保指标收集符合预期。
  • 定期检查Lambda层和相关配置是否有更新。

参考资料

  • AWSLambda:AWS Lambda 扩展 - 观测云文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2212386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5 个免费高清无水印视频素材库

短视频创作&#xff0c;素材是关键。以下为你推荐 5 个超棒的免费且无版权的高清无水印短视频素材网站&#xff0c;助你获取创作资源。 蛙学网 国内顶级素材站&#xff0c;有海量高质量素材&#xff0c;领域涉及自然风光、情感生活、游戏动漫以及社会人文等。其素材均为 4K 高…

集合框架07:LinkedList使用

1.视频链接&#xff1a;13.14 LinkedList使用_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1zD4y1Q7Fw?spm_id_from333.788.videopod.episodes&vd_sourceb5775c3a4ea16a5306db9c7c1c1486b5&p142.LinkedList集合的增删改查操作 package com.yundait.Demo01;im…

Vmware开箱即用win7系统

下载文件 下载VMWare与win7成品虚拟机资料&#xff08;PS&#xff1a;里面有Win10 和Win11&#xff0c;使用方法都是一样的&#xff09; ⏬下载链接⏬ 下载链接 使用虚拟机打开成品虚拟机

python怎么引用文件

新建python文件 &#xff1a;在同目录lib下创建mylib.py和loadlib.py两个文件。 在mylib.py文件中创建一个Hello的类&#xff0c;并且给这个类添加一个sayHello的方法&#xff0c;让它输出hello python 在loadlib.py 文件中引入mylib import mylib 在loadlib中调用引用过来的py…

QT开发--串口通信

第十六章 串口通信 16.1 串口通信基础 串口通信主要通过DB9接口&#xff0c;适用于短距离&#xff08;<10米&#xff09;。关键参数包括&#xff1a; 波特率&#xff1a;每秒传输bit数&#xff0c;如9600。数据位&#xff1a;信息包中的有效数据位数。停止位&#xff1a;…

Excel:vba实现禁止新增工作表

实现效果&#xff1a;禁止新增工作表 步骤如下&#xff1a; 1.点击开发工具里面的Visual Basic 2.不要自己创建&#xff0c;点击ThisWorkbook&#xff0c;点击选择Workbook&#xff0c;点击选择NewSheet 这里的NewSheet就是工作簿事件 代码如下&#xff1a; 这是事件处理程序…

day∞-过滤器-拦截器

一、过滤器 二、拦截器

【Java面试——基础知识——Day5】

1. 异常 1.1 Exception 和 Error 有什么区别&#xff1f; 在 Java 中&#xff0c;所有的异常都有一个共同的祖先 java.lang 包中的 Throwable 类。Throwable 类有两个重要的子类: Exception :程序本身可以处理的异常&#xff0c;可以通过 catch 来进行捕获。Exception 又可以…

二叉树LeetCode刷题

二叉树LeetCode刷题 1. 检查两颗树是否相同2. 另一颗树的子树3. 翻转二叉树4. 判断一颗二叉树是否是平衡二叉树5. 二叉搜索树与双向链表6. 对称二叉树7. 二叉树的构建及遍历8. 二叉树的分层遍历9. 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先10. 根据一棵树的前序遍…

算法竞赛(Python)-AI的思维模式(搜索)

文章目录 一 、深度优先搜索1 零钱搭配2“油漆桶”与连通性 二 、记忆化三、在游戏中制胜的AI1 永远的平局——井字棋2 一起来解谜——数独3 数字华容道 一 、深度优先搜索 深度优先搜索是最基本的搜索方法&#xff0c;在深度优先搜索的过程中&#xff0c;如果把所有的可行解看…

如果你的YOLO环境已经配置好了,如何打开项目文件

1.首先将【目标检测系统源码】下载完成之后&#xff0c;解压到某个路径下&#xff08;可以解压在D盘或者F盘都可&#xff09;。然后使用Pycharm打开这个项目文件。 2.使用 pip 命令安装所需的依赖&#xff0c;可以通过requirements.txt文件进行安装。请务必按照 requirements.t…

springboot第76集:线程,ThreadGroup

导出数据&#xff1a; 查询结果可以使用脚本或工具&#xff08;如 Python 的 Pandas 库&#xff09;将数据导出为 Excel 格式。例如&#xff0c;使用 Python&#xff1a; 当查询数组中有大量数据&#xff08;如一千多条&#xff09;时&#xff0c;可以使用 _mget&#xff08;多…

系统分析师17:系统安全分析与设计

1 内容概述 2 对称加密与非对称加密技术 在信息安全领域&#xff0c;对称加密和非对称加密是两种最常见的加密技术。它们各自有不同的特点和应用场景&#xff0c;下面将详细介绍这两种加密技术。 2.1 对称加密 2.1.1 概念 对称加密是指使用相同的密钥&#xff08;也称为密钥…

opencv学习:风格迁移对图像风格进行更改

介绍&#xff1a; 风格迁移是一种计算机视觉技术&#xff0c;它能够让一张图片看起来像是用另一种风格画出来的。想象一下&#xff0c;你有一张普通的照片&#xff0c;但你希望它看起来像是梵高的印象派画作&#xff0c;或者像是某个著名艺术家的作品&#xff0c;风格迁移就可以…

C语言 ——— oj题:搜索插入位置

目录 题目要求 代码实现 题目要求 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置 请必须使用时间复杂度为 O(long n) 的算法 示例 1: 输入: nums [1,3,5,6], t…

golang包管理

package 在工程化的Go语言开发项目中&#xff0c;Go语言的源码复用是建立在包&#xff08;package&#xff09;基础之上的。本文介绍了Go语言中如何定义包、如何导出包的内容及如何导入其他包。 包与依赖管理 本章学习目标 掌握包的定义和使用掌握init初始化函数的使用掌握…

一、el-table的滚动条加粗并解决遮挡内容问题

近期接到产品提的需求&#xff0c;反馈用户说table里面的滚动条过小&#xff0c;不方便拖动&#xff0c;希望加粗&#xff0c;然后我就研究了下如何加粗&#xff0c;发现加粗后会导致遮挡内容的问题&#xff0c;并予以解决。以下是实现和解决的方法和步骤。 先看看官网的滚动条…

[翻译]MOSIP 101

目录 Architecture Principles of MOSIP &#xff08;MOSIP架构原则&#xff09; MOSIP Functional Architecture&#xff08;MOSIP功能架构&#xff09; MOSIP Features&#xff08;MOSIP特点&#xff09; MOSIP Modules&#xff08;MOSIP模块&#xff09; MOSIP Logical…

manjaro kde 24 应该如何设置才能上网(2024-10-13亲测)

要在 Manjaro KDE 24 上设置网络连接&#xff0c;可以按照以下步骤进行设置&#xff0c;确保你能够连接到互联网&#xff1a; 是的&#xff0c;你可以尝试使用一个简单的自动修复脚本来解决 Manjaro KDE 中的网络连接问题。这个脚本将检查网络服务、重新启动 NetworkManager、…

R语言统计分析——相关图

参考资料&#xff1a;R语言实战【第2版】 相关系数矩阵是多元统计分析的一个基本方面。哪些被考察的变量与其他变量相关性很强&#xff0c;而哪些并不强&#xff1f;随着变量数的增加&#xff0c;这类问题将变得很难回答。相关图作为一种相对现代的方法&#xff0c;可以通过相关…