AWS.Lambda.Powertools.Tracing 1.5.0

前缀已保留
dotnet add package AWS.Lambda.Powertools.Tracing --version 1.5.0                
NuGet\Install-Package AWS.Lambda.Powertools.Tracing -Version 1.5.0                
该命令旨在在 Visual Studio 的包管理器控制台中使用,因为它使用了 NuGet 模块的 Install-Package 版本。
<PackageReference Include="AWS.Lambda.Powertools.Tracing" Version="1.5.0" />                
对于支持 PackageReference 的项目,将此 XML 节点复制到项目文件中以引用包。
paket add AWS.Lambda.Powertools.Tracing --version 1.5.0                
#r "nuget: AWS.Lambda.Powertools.Tracing, 1.5.0"                
#r 指令可用于 F# Interactive 和 Polyglot Notebooks。将此内容复制到交互式工具或脚本的源代码中以引用包。
// Install AWS.Lambda.Powertools.Tracing as a Cake Addin
#addin nuget:?package=AWS.Lambda.Powertools.Tracing&version=1.5.0

// Install AWS.Lambda.Powertools.Tracing as a Cake Tool
#tool nuget:?package=AWS.Lambda.Powertools.Tracing&version=1.5.0                

AWS.Lambda.Powertools.Tracing

AWS Lambda(.NET)Powertools 跟踪是一个针对 AWS X-Ray .NET SDK 的精简包装器,提供了一个减少执行常见跟踪任务开销的功能。

主要功能

  • 辅助方法以改善创建 自定义 AWS X-Ray 子段 的开发者体验。
  • 将冷启动作为注释捕获。
  • 捕获函数响应和完整异常作为元数据。
  • 在开发多线程时体验更好。
  • 自动修复 AWS X-Ray 支持的模块

阅读文档

要查看完整功能列表,请访问 docs.powertools.aws.dev/lambda/dotnet/core/tracing/

GitHub: https://github.com/aws-powertools/powertools-lambda-dotnet/

示例函数

在此处查看完整示例: https://github.com/aws-powertools/powertools-lambda-dotnet/tree/develop/examples/Tracing

public class Function
{
    /// <summary>
    /// Lambda Handler
    /// </summary>
    /// <param name="apigwProxyEvent">API Gateway Proxy event</param>
    /// <param name="context">AWS Lambda context</param>
    /// <returns>API Gateway Proxy response</returns>
    [Logging(LogEvent = true)]
    [Tracing(CaptureMode = TracingCaptureMode.ResponseAndError)]
    public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest apigwProxyEvent,
        ILambdaContext context)
    {
        var requestContextRequestId = apigwProxyEvent.RequestContext.RequestId;

        Logger.LogInformation("Getting ip address from external service");

        var location = await GetCallingIp().ConfigureAwait(false);

        var lookupRecord = new LookupRecord(lookupId: requestContextRequestId,
            greeting: "Hello Powertools for AWS Lambda (.NET)", ipAddress: location);

        // Trace Fluent API
        Tracing.WithSubsegment("LoggingResponse",
            subsegment =>
            {
                subsegment.AddAnnotation("AccountId", apigwProxyEvent.RequestContext.AccountId);
                subsegment.AddMetadata("LookupRecord", lookupRecord);
            });

        try
        {
            await SaveRecordInDynamo(lookupRecord);

            return new APIGatewayProxyResponse
            {
                Body = JsonSerializer.Serialize(lookupRecord),
                StatusCode = 200,
                Headers = new Dictionary<string, string> { { "Content-Type", "application/json" } }
            };
        }
        catch (Exception e)
        {
            Logger.LogError(e.Message);
            
            return new APIGatewayProxyResponse
            {
                Body = e.Message,
                StatusCode = 500,
                Headers = new Dictionary<string, string> { { "Content-Type", "application/json" } }
            };
        }
    }

    /// <summary>
    /// Calls location api to return IP address
    /// </summary>
    /// <returns>IP address string</returns>
    [Tracing(SegmentName = "Location service")]
    private static async Task<string?> GetCallingIp()
    {
        if (_httpClient == null) return "0.0.0.0";
        _httpClient.DefaultRequestHeaders.Accept.Clear();
        _httpClient.DefaultRequestHeaders.Add("User-Agent", "AWS Lambda .Net Client");

        try
        {
            Logger.LogInformation("Calling Check IP API");

            var response = await _httpClient.GetStringAsync("https://checkip.amazonaws.com/").ConfigureAwait(false);
            var ip = response.Replace("\n", "");

            Logger.LogInformation($"API response returned {ip}");

            return ip;
        }
        catch (Exception ex)
        {
            Logger.LogError(ex);
            throw;
        }
    }

    /// <summary>
    /// Saves the lookup record in DynamoDB
    /// </summary>
    /// <param name="lookupRecord">Instance of LookupRecord</param>
    /// <returns>A Task that can be used to poll or wait for results, or both.</returns>
    [Tracing(SegmentName = "DynamoDB")]
    private static async Task SaveRecordInDynamo(LookupRecord lookupRecord)
    {
        try
        {
            Logger.LogInformation($"Saving record with id {lookupRecord.LookupId}");
            await _dynamoDbContext?.SaveAsync(lookupRecord)!;
        }
        catch (AmazonDynamoDBException e)
        {
            Logger.LogCritical(e.Message);
            throw;
        }
    }
}

示例输出

Tracing showcase

产品 兼容的以及额外的计算目标框架版本。
.NET net6.0 兼容。 net6.0-android 已计算。 net6.0-ios 已计算。 net6.0-maccatalyst 已计算。 net6.0-macos 已计算。 net6.0-tvos 已计算。 net6.0-windows 已计算。 net7.0 已计算。 net7.0-android 已计算。 net7.0-ios 已计算。 net7.0-maccatalyst 已计算。 net7.0-macos 已计算。 net7.0-tvos 已计算。 net7.0-windows 已计算。 net8.0 兼容。 net8.0-android 已计算。 net8.0-browser 已计算。 net8.0-ios 已计算。 net8.0-maccatalyst 已计算。 net8.0-macos 已计算。 net8.0-tvos 已计算。 net8.0-windows 已计算。
兼容目标框架(s)
包含目标框架(s)(包含在包中)
有关更多信息,请参阅目标框架以及.NET Standard

NuGet包 (1)

显示依赖AWS.Lambda.Powertools.Tracing的顶部1个NuGet包

下载
Lambifast

包描述

GitHub仓库 (4)

显示依赖AWS.Lambda.Powertools.Tracing的前4个最受欢迎的GitHub仓库

仓库 星级
aws/aws-lambda-dotnet
库、示例和工具,帮助.NET Core开发者开发AWS Lambda函数。
aws-samples/serverless-test-samples
本存储库旨在为实施无服务器应用程序的综合测试套件提供指导。
aws-powertools/powertools-lambda-dotnet
Powertools 是一个用于实施无服务器最佳实践和加速开发者速度的开发者工具包。
aws-samples/serverless-dotnet-demo
版本 下载 最后更新
1.5.0 1,260 7/25/2024
1.4.2 49,989 3/21/2024
1.4.1 8,723 3/10/2024
1.4.0 15,342 2/16/2024
1.3.2 59,445 9/19/2023
1.2.0 10,503 9/7/2023
1.1.2 10,910 8/22/2023
1.1.1 21,841 6/21/2023
1.1.0 18,150 5/5/2023
1.0.1 15,306 4/6/2023
1.0.0 4,077 2/24/2023
0.0.2-preview 198 1/18/2023
0.0.1-preview.1 3,708 8/1/2022