Sil*_*ohn 6 azure azure-application-insights azure-functions
我正在使用 v2.x 创建一个新的 Function 应用程序,并且正在集成 Application Insights 以进行请求日志记录,随着 Azure Function 现在与 App Insights 集成(如文档链接中所述),该请求日志记录会自动完成。我需要做的是在 Application Insights 请求遥测中的自定义维度中记录一些自定义字段。是否可以不使用自定义请求日志记录(使用TrackRequest方法)
关于添加自定义属性,可以参考这个教程:添加属性: ITelemetryInitializer。下面是我测试的一个HTTP触发功能。
public static class Function1
{
private static string key = "Your InstrumentationKey";
private static TelemetryClient telemetry = new TelemetryClient() { InstrumentationKey = key };
[FunctionName("Function1")]
public static async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
log.LogInformation("C# HTTP trigger function processed a request.");
if (!telemetry.Context.Properties.ContainsKey("Function_appName"))
{
telemetry.Context.Properties.Add("Function_appName", "testfunc");
}
else
{
telemetry.Context.Properties["Function_appName"] = "testfunc";
}
telemetry.TrackEvent("eventtest");
telemetry.TrackTrace("tracetest");
string name = req.Query["name"];
string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
dynamic data = JsonConvert.DeserializeObject(requestBody);
name = name ?? data?.name;
return name != null
? (ActionResult)new OkObjectResult($"Hello, {name}")
: new BadRequestObjectResult("Please pass a name on the query string or in the request body");
}
}
Run Code Online (Sandbox Code Playgroud)
运行此功能后,转到Application Insights Search可以检查数据或转到Logs(Analytics)。
更新:
您应该在函数应用程序中使用ITelemetry Initializer(它可以将自定义维度添加到指定的遥测数据,例如仅针对请求),请按照以下步骤操作:
1.在Visual studio中,创建一个函数应用程序(在我的测试中,我创建了一个blob触发函数),并安装以下nuget包:
Microsoft.ApplicationInsights, version 2.10.0
Microsoft.NET.Sdk.Functions, version 1.0.29
Run Code Online (Sandbox Code Playgroud)
2.然后在Function1.cs中编写如下代码:
using Microsoft.ApplicationInsights.Channel;
using Microsoft.ApplicationInsights.DataContracts;
using Microsoft.ApplicationInsights.Extensibility;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System.IO;
[assembly: WebJobsStartup(typeof(FunctionApp21.MyStartup))]
namespace FunctionApp21
{
public static class Function1
{
[FunctionName("Function1")]
public static void Run([BlobTrigger("samples-workitems/{name}", Connection = "AzureWebJobsStorage")]Stream myBlob, string name, ILogger log)
{
log.LogInformation($"C# Blob trigger function Processed blob\n Name:{name} \n Size: {myBlob.Length} Bytes");
}
}
internal class MyTelemetryInitializer : ITelemetryInitializer
{
public void Initialize(ITelemetry telemetry)
{
//use telemetry is RequestTelemetry to make sure only add to request
if (telemetry != null && telemetry is RequestTelemetry && !telemetry.Context.GlobalProperties.ContainsKey("my_custom_dimen22"))
{
telemetry.Context.GlobalProperties.Add("my_custom_dimen22", "Hello, this is custom dimension for request!!!");
}
}
}
public class MyStartup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder builder)
{
builder.Services.AddSingleton<ITelemetryInitializer, MyTelemetryInitializer>();
}
}
}
Run Code Online (Sandbox Code Playgroud)
3.将其发布到azure,然后导航到azure门户->发布的功能应用程序->监控->添加应用程序见解。
4.从azure运行该函数。等待几分钟 -> 导航到应用程序洞察门户,检查遥测数据,您可以看到自定义维度仅添加到请求遥测: