AWS.Lambda.Powertools.Metrics
1.7.1
Prefix Reserved
See the version list below for details.
dotnet add package AWS.Lambda.Powertools.Metrics --version 1.7.1
NuGet\Install-Package AWS.Lambda.Powertools.Metrics -Version 1.7.1
<PackageReference Include="AWS.Lambda.Powertools.Metrics" Version="1.7.1" />
paket add AWS.Lambda.Powertools.Metrics --version 1.7.1
#r "nuget: AWS.Lambda.Powertools.Metrics, 1.7.1"
// Install AWS.Lambda.Powertools.Metrics as a Cake Addin #addin nuget:?package=AWS.Lambda.Powertools.Metrics&version=1.7.1 // Install AWS.Lambda.Powertools.Metrics as a Cake Tool #tool nuget:?package=AWS.Lambda.Powertools.Metrics&version=1.7.1
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 | 95 | 10/21/2024 |
1.8.1-alpha | 107 | 10/9/2024 |
1.7.1 | 20,004 | 7/12/2024 |
1.7.0-alpha3 | 89 | 7/14/2024 |
1.7.0-alpha2 | 86 | 7/12/2024 |
1.7.0-alpha | 2,147 | 2/21/2024 |
1.6.2 | 5,766 | 5/23/2024 |
1.6.1 | 27,011 | 3/10/2024 |
1.6.0 | 15,395 | 2/16/2024 |
1.5.3 | 32,395 | 11/16/2023 |
1.4.3 | 1,497 | 10/30/2023 |
1.4.2 | 7,427 | 9/19/2023 |
1.3.3 | 3,684 | 8/22/2023 |
1.3.2 | 4,551 | 6/29/2023 |
1.3.1 | 28,301 | 6/21/2023 |
1.2.0 | 11,427 | 5/5/2023 |
1.1.0 | 154 | 5/5/2023 |
1.0.1 | 14,772 | 4/6/2023 |
1.0.0 | 3,319 | 2/24/2023 |
0.0.3-preview | 118 | 9/18/2023 |
0.0.2-preview | 206 | 1/18/2023 |
0.0.1-preview.1 | 4,556 | 8/1/2022 |