AWS.Lambda.Powertools.Metrics
2.0.0-alpha1
Prefix Reserved
dotnet add package AWS.Lambda.Powertools.Metrics --version 2.0.0-alpha1
NuGet\Install-Package AWS.Lambda.Powertools.Metrics -Version 2.0.0-alpha1
<PackageReference Include="AWS.Lambda.Powertools.Metrics" Version="2.0.0-alpha1" />
paket add AWS.Lambda.Powertools.Metrics --version 2.0.0-alpha1
#r "nuget: AWS.Lambda.Powertools.Metrics, 2.0.0-alpha1"
// Install AWS.Lambda.Powertools.Metrics as a Cake Addin #addin nuget:?package=AWS.Lambda.Powertools.Metrics&version=2.0.0-alpha1&prerelease // Install AWS.Lambda.Powertools.Metrics as a Cake Tool #tool nuget:?package=AWS.Lambda.Powertools.Metrics&version=2.0.0-alpha1&prerelease
AWS.Lambda.Powertools.Metrics
Metrics creates custom metrics asynchronously by logging metrics to standard output following Amazon CloudWatch Embedded Metric Format (EMF).
These metrics can be visualized through Amazon CloudWatch Console.
Key features
- Aggregate up to 100 metrics using a single CloudWatch EMF object (large JSON blob)
- Validate against common metric definitions mistakes (metric unit, values, max dimensions, max metrics, etc)
- Metrics are created asynchronously by CloudWatch service, no custom stacks needed
- Context manager to create a one off metric with a different dimension
Read the docs
For a full list of features go to docs.powertools.aws.dev/lambda/dotnet/core/metrics/
GitHub: https://github.com/aws-powertools/powertools-lambda-dotnet/
Sample Function
View the full example here: https://github.com/aws-powertools/powertools-lambda-dotnet/tree/develop/examples/Metrics
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)]
[Metrics(CaptureColdStart = true)]
public async Task<APIGatewayProxyResponse> FunctionHandler(APIGatewayProxyRequest apigwProxyEvent,
ILambdaContext context)
{
var requestContextRequestId = apigwProxyEvent.RequestContext.RequestId;
Logger.LogInformation("Getting ip address from external service");
// Add Metric to capture the amount of time
Metrics.PushSingleMetric(
metricName: "CallingIP",
value: 1,
unit: MetricUnit.Count,
service: "lambda-powertools-metrics-example",
defaultDimensions: new Dictionary<string, string>
{
{ "Metric Type", "Single" }
});
var watch = Stopwatch.StartNew();
var location = await GetCallingIp();
watch.Stop();
Metrics.AddMetric("ElapsedExecutionTime", watch.ElapsedMilliseconds, MetricUnit.Milliseconds);
Metrics.AddMetric("SuccessfulLocations", 1, MetricUnit.Count);
var lookupRecord = new LookupRecord(lookupId: requestContextRequestId,
greeting: "Hello Powertools for AWS Lambda (.NET)", ipAddress: location);
try
{
Metrics.PushSingleMetric(
metricName: "RecordsSaved",
value: 1,
unit: MetricUnit.Count,
service: "lambda-powertools-metrics-example",
defaultDimensions: new Dictionary<string, string>
{
{ "Metric Type", "Single" }
});
await SaveRecordInDynamo(lookupRecord);
Metrics.AddMetric("SuccessfulWrites", 1, MetricUnit.Count);
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" } }
};
}
}
}
Sample output
{
"_aws": {
"Timestamp": 1648181318790,
"CloudWatchMetrics": [
{
"Namespace": "AWSLambdaPowertools",
"Metrics": [
{
"Name": "CallingIP",
"Unit": "Count"
}
],
"Dimensions": [
[
"Metric Type"
],
[
"Service"
]
]
}
]
},
"Metric Type": "Single",
"Service": "lambda-powertools-metrics-example",
"CallingIP": 1
}
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net6.0 is compatible. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net6.0
- Amazon.Lambda.Core (>= 2.2.0)
- AspectInjector (>= 2.8.1)
-
net8.0
- Amazon.Lambda.Core (>= 2.2.0)
- AspectInjector (>= 2.8.1)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories (4)
Showing the top 4 popular GitHub repositories that depend on AWS.Lambda.Powertools.Metrics:
Repository | Stars |
---|---|
aws/aws-lambda-dotnet
Libraries, samples and tools to help .NET Core developers develop AWS Lambda functions.
|
|
aws-samples/serverless-test-samples
This repository is designed to provide guidance for implementing comprehensive test suites for serverless applications.
|
|
aws-powertools/powertools-lambda-dotnet
Powertools is a developer toolkit to implement Serverless best practices and increase developer velocity.
|
|
aws-samples/serverless-dotnet-demo
|
Version | Downloads | Last updated |
---|---|---|
2.0.0-alpha1 | 242 | 10/21/2024 |
1.8.1-alpha | 114 | 10/9/2024 |
1.7.1 | 31,079 | 7/12/2024 |
1.7.0-alpha3 | 95 | 7/14/2024 |
1.7.0-alpha2 | 88 | 7/12/2024 |
1.7.0-alpha | 2,218 | 2/21/2024 |
1.6.2 | 6,291 | 5/23/2024 |
1.6.1 | 28,752 | 3/10/2024 |
1.6.0 | 16,740 | 2/16/2024 |
1.5.3 | 33,069 | 11/16/2023 |
1.4.3 | 1,521 | 10/30/2023 |
1.4.2 | 7,641 | 9/19/2023 |
1.3.3 | 3,689 | 8/22/2023 |
1.3.2 | 4,562 | 6/29/2023 |
1.3.1 | 31,365 | 6/21/2023 |
1.2.0 | 11,608 | 5/5/2023 |
1.1.0 | 158 | 5/5/2023 |
1.0.1 | 14,875 | 4/6/2023 |
1.0.0 | 3,373 | 2/24/2023 |
0.0.3-preview | 120 | 9/18/2023 |
0.0.2-preview | 208 | 1/18/2023 |
0.0.1-preview.1 | 4,645 | 8/1/2022 |