Azure Functions

编辑

.NET APM 代理可以追踪在 Azure Functions 应用程序中 HTTP 触发的函数调用。

先决条件

编辑

您需要一个 APM 服务器来发送 APM 数据。如果您尚未设置,请按照 APM 快速入门 进行操作。您将需要您的APM 服务器 URL 和 APM 服务器密钥令牌(或API 密钥)来配置下面的 APM 代理。

您还需要一个要监控的 Azure Function 应用。如果您没有现有的应用,可以按照此 Azure 指南创建一个。

您还可以查看并使用这个已集成 Elastic APM 的 Azure Functions 示例应用

Azure Functions 隔离工作进程模型

编辑
步骤 1:添加 NuGet 包
编辑

Elastic.Apm.Azure.Functions NuGet 包添加到您的 Azure Functions 项目

dotnet add package Elastic.Apm.Azure.Functions
步骤 2:添加追踪中间件
编辑

为了让 APM 代理追踪 Azure Functions 调用,必须在您的 Azure Functions 应用程序中使用 Elastic.Apm.Azure.Functions.ApmMiddleware

using Elastic.Apm.Azure.Functions;
using Microsoft.Extensions.Hosting;

var host = new HostBuilder()
  .ConfigureFunctionsWebApplication(builder =>
  {
    builder.UseMiddleware<ApmMiddleware>();
  })
  .Build();

host.Run();
步骤 3:配置 APM 代理
编辑

APM 代理可以使用环境变量进行配置。

ELASTIC_APM_SERVER_URL: <your APM server URL from the prerequisites step>
ELASTIC_APM_SECRET_TOKEN: <your APM secret token from the prerequisites step>
ELASTIC_APM_ENVIRONMENT: <your environment>
ELASTIC_APM_SERVICE_NAME: <your service name> (optional)

如果未配置 ELASTIC_APM_SERVICE_NAME,代理将使用回退值。

  • 本地开发 - 将使用发现的服务名称(入口程序集名称)。
  • Azure - 将使用 Function App 名称(从 WEBSITE_SITE_NAME 环境变量中检索)。

在本地开发中配置

在本地开发 Function 时,您可以通过 local.settings.json 文件提供环境变量来配置代理。

例如

{
  "IsEncrypted": false,
  "Values": {
    "AzureWebJobsStorage": "UseDevelopmentStorage=true",
    "FUNCTIONS_WORKER_RUNTIME": "dotnet-isolated",
    "ELASTIC_APM_ENVIRONMENT": "Development",
    "ELASTIC_APM_SERVICE_NAME": "MyServiceName",
    "ELASTIC_APM_SERVER_URL": "https://my-serverless-project.apm.eu-west-1.aws.elastic.cloud:443",
    "ELASTIC_APM_API_KEY": "MySecureApiKeyFromApmServer=="
  }
}

在 Azure 中配置

使用环境变量允许您使用 Azure 门户中的应用程序设置,使您能够在不需要重新部署代码的情况下更新设置。

在 Azure 门户中,打开您的 Function App 的设置 > 环境变量,并根据需要配置 ELASTIC_APM_* 变量。

例如

Configuring the APM Agent in the Azure Portal

限制

编辑

由于担心意外增加 Azure Functions 的成本(对于消耗计划),Azure Functions 仪表目前在后台收集系统指标。