Bug: POWERTOOLS_METRICS_DISABLED is ignored by single_metric, the cold start metric, add_metric auto-flush and Datadog's lambda_metric
维护者通常 1 天内回复
评估
这个 Issue 还没有评估数据。
描述
Expected Behaviour
With POWERTOOLS_METRICS_DISABLED=true (or POWERTOOLS_DEV=true without POWERTOOLS_METRICS_DISABLED), nothing is emitted, as documented ("Disables all metrics emitted by Powertools", for both the CloudWatch and Datadog providers, per #6046).
Current Behaviour
flush_metrics() checks is_metrics_disabled(), but three other emission paths don't:
single_metric(metrics/base.py) always prints in itsfinallyblock. This is also how the CloudWatch provider emits theColdStartmetric, so@metrics.log_metrics(capture_cold_start_metric=True)still prints aColdStartEMF line while the application metrics are correctly suppressed.- The CloudWatch
add_metricauto-flush: when the metric set reaches 100 metrics, or a metric reaches 100 values,AmazonCloudWatchEMFProvider.add_metricprints the EMF blob directly. - Datadog with the
datadog_lambdapackage installed:DatadogProvider.flush_metricscallslambda_metric(...)without checkingis_metrics_disabled(); only the flush-to-log branch checks it.
In Lambda the EMF lines in 1 and 2 are ingested as real CloudWatch metrics, so metrics are published even though they're disabled.
While there: if the body of a with single_metric(...) block raises, metric_set is still None in the finally block and a literal null line is printed to stdout.
Code snippet
import os
from types import SimpleNamespace
os.environ["POWERTOOLS_METRICS_DISABLED"] = "true"
from aws_lambda_powertools import Metrics
from aws_lambda_powertools.metrics import single_metric
metrics = Metrics(namespace="ns", service="svc")
@metrics.log_metrics(capture_cold_start_metric=True)
def handler(event, context):
metrics.add_metric(name="Booking", unit="Count", value=1) # correctly not emitted
context = SimpleNamespace(function_name="fn", memory_limit_in_mb=128, invoked_function_arn="arn", aws_request_id="id")
handler({}, context) # prints the ColdStart EMF line
with single_metric(name="Single", unit="Count", value=1, namespace="ns"):
pass # prints the EMF line
for i in range(100):
metrics.add_metric(name=f"metric_{i}", unit="Count", value=1) # auto-flush prints the EMF blob
Output (develop @ 5785377, Python 3.11):
{"_aws":{"Timestamp":...,"CloudWatchMetrics":[{"Namespace":"ns","Dimensions":[["function_name","service"]],"Metrics":[{"Name":"ColdStart","Unit":"Count"}]}]},"function_name":"fn","service":"svc","ColdStart":[1.0]}
{"_aws":{"Timestamp":...,"CloudWatchMetrics":[{"Namespace":"ns","Dimensions":[[]],"Metrics":[{"Name":"Single","Unit":"Count"}]}]},"Single":[1.0]}
{"_aws": {"Timestamp": ..., "CloudWatchMetrics": [{"Namespace": "ns", "Dimensions": [["service"]], "Metrics": [{"Name": "metric_0", "Unit": "Count"}, ...
Possible Solution
Check is_metrics_disabled() at each of those points, like flush_metrics() does:
single_metric: only print whenmetric_set is not None and not is_metrics_disabled()(which also stops thenullline).- CloudWatch
add_metric: skip the print on auto-flush when disabled, but still clearmetric_setas today. - Datadog: skip the
lambda_metricsubmission when disabled.
Happy to send a PR with tests for each path.
Steps to Reproduce
Run the snippet above.
Powertools for AWS Lambda (Python) version
latest (develop @ 5785377)
AWS Lambda function runtime
3.11
Packaging format used
PyPi
Debugging logs
No response
- 主要语言
- Python
- 星标
- 3.3k
- 派生
- 511
- 平均合并
- 3 天 4 小时
- 30 天内合并 PR
- 98
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
aws-powertools/powertools-lambda-python 的其他 Issue
-
Bug: POWERTOOLS_IDEMPOTENCY_DISABLED set to an empty or non-boolean value crashes every invocation可能已有人在做 @lechakrawarthy 于 3 天前认领。 未关闭bug good first issue help wanted idempotency
难度 2/5 1-3 小时 新手友好度 85/100
aws-powertools/powertools-lambda-python#8728 · 4 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
-
Bug: Redis layer fails the invocation instead of retrying when a record expires between SET NX and GET可能已有人在做 @coughlmao 于 3 天前认领。 未关闭bug good first issue help wanted idempotency
难度 2/5 1-3 小时 新手友好度 85/100
aws-powertools/powertools-lambda-python#8727 · 4 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
-
Bug: Redis orphan lock timeout ignores expires_after_seconds and is always 10 seconds可能已有人在做 @CJstate 于 3 天前认领。 未关闭bug good first issue help wanted idempotency
难度 2/5 1-3 小时 新手友好度 75/100
aws-powertools/powertools-lambda-python#8726 · 3 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
-
Bug: idempotency payloads with set, frozenset or bytes fields cannot be hashed可能已有人在做 @Neeraj111010 于 3 天前认领。 未关闭bug good first issue help wanted idempotency
难度 2/5 1-3 小时 新手友好度 80/100
aws-powertools/powertools-lambda-python#8725 · 6 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
-
Bug: with a DynamoDB composite key, DataRecord.idempotency_key is the static partition key value可能已有人在做 @sumedh-aerram 于 3 天前认领。 未关闭bug good first issue help wanted idempotency
难度 2/5 1-3 小时 新手友好度 90/100
aws-powertools/powertools-lambda-python#8724 · 3 条评论 · 已指派 1 人 ·
维护者通常 1 天内回复
查看 aws-powertools/powertools-lambda-python 的全部 Issue
相似的 Issue
-
DBFS append mode silently overwrites existing files可能已有人在做 @IlyaKhalafi 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 77/100
fsspec/filesystem_spec#2429 ·
维护者通常 1 天内回复
-
[Bug]: Retrieval rerank fallback statistics stay zero after provider failure可能已有人在做 关联的 PR 仍在进行中或已合并。 未关闭bug
难度 2/5 1-3 小时 新手友好度 78/100
volcengine/OpenViking#7014 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 68/100
fedora-copr/copr#4600 ·
维护者通常 2 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 72/100
ansys/pydpf-core#3620 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复