如何优化 Azure Functions 的 Application Insight 成本?

How to optimize Application Insight costs for Azure Functions?

我有 Azure Function(Python) 和 Azure Application Insight。 Application Insight 成本巨大,因为它每月获取 200GB 数据。 我正在尝试跟踪问题出在哪里。

我想知道 Azure Function 会记录所有内容并且是否可以优化。 我们不需要“信息”。

如何在 Application Insight for Azure Functions 中优化成本?

应用洞察:

logger = logging.getLogger(__name__)
    logger.info('Python HTTP trigger function received a request.')

    try:
        instrumentationKey = os.environ['APPINSIGHTS_INSTRUMENTATIONKEY']
        logger.addHandler(AzureLogHandler(
            connection_string=f'InstrumentationKey={instrumentationKey}')
        )
    except Exception as e:
        exception_text = f"{e}"
        logging.error(f"Could not add Application Insights logging: {exception_text}")

日志记录用法:

 logging.error(f"EXCEPTION: {exception_text}")
 logging.info(f" Calling Activity Function")

I wonder Azure Function logs everything and is it possible to optimize. We would not need "info".

1.禁用不需要的模块: 编辑 ApplicationInsights.config 以关闭不需要的收集模块。

  • Application Insights .NET SDK 包含许多 NuGet 包,其中包含用于发送遥测的 API,它还包含遥测模块和初始化器,用于自动跟踪您的应用程序及其语境。 您可以启用或禁用遥测模块和初始化程序,并为其中一些设置参数。

  • 每个模块的配置文件中都有一个节点。要禁用模块,请删除该节点或将其注释掉。

2。动态禁用遥测: 要在代码中的任何位置有条件地和动态地禁用遥测,请使用 TelemetryConfiguration 实例在其上设置 DisableTelemetry 标志。

public void ConfigureServices(IServiceCollection services)
    {
        services.AddApplicationInsightsTelemetry();
    }

public void Configure(IApplicationBuilder app, IHostingEnvironment env, TelemetryConfiguration configuration)
{
    configuration.DisableTelemetry = true;
    ...
}

此代码示例可防止将遥测数据发送到 Application Insights,但不会防止自动收集模块收集遥测数据,同时为了删除自动收集模块,请参阅此 Microsoft Documentation

3。自定义日志收集:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    },
    "ApplicationInsights": {
      "LogLevel": {
        "Default": "Information"
      }
    }
  }
}

以上配置允许 Application Insights 捕获所有 Information 日志和严重的 warning 日志。 要更改此行为,请显式覆盖提供程序 ApplicationInsights 的日志记录配置,如下所示:

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  }
}

还有一些技术可以管理用于遥测数据优化的数据量,例如:

  • 采样:采样是用于调整您发送的数据量的主要工具。 Sampling in Application Insights
  • 每日上限: Application Insights 中的最大上限为 1000 GB/day,除非您为高流量应用程序请求更高的上限。
  • 如果您有基于工作区的 Application Insights 资源,我们建议使用 workspace's daily cap 来限制摄取和成本,而不是 Application Insights 中的上限。
  • 预聚合指标:如果您在您的应用中调用 TrackMetric,您可以通过使用接受您的平均值和标准偏差计算的过载来减少流量批测量。或者,您可以使用 pre-aggregating package.

请查看这些参考以获取更多信息:

  1. Resolve if logs shows twice in Application Insights
  2. Optimizing logging costs of Azure Functions
  3. Configuring or removing the necessary Telemetry Initializers