我们有一堆azure函数记录执行上下文的度量...您似乎无法使用OOTBTracewriter
或ilogger
(至少在我所看到的情况下)来完成此操作,因为没有一个与我假设的名称为log.logevent()
的等价物。
所以..此url(https://docs.microsoft.com/en-us/Azure/azure-functions/functions-monitoring#custom-telemetry-in-c-functions)显示了利用Azure函数内部的TelemetryClient()
来执行相同操作的模式,示例包括滚动您自己的EventTelemetry()
等,但是,为了确保相关性正常工作,您必须为您记录的每个内容设置上下文:
var evt = new EventTelemetry("Function called");
evt.Context.Operation.Id = executionContext.InvocationId.ToString();
telemetryClient.TrackEvent(evt);
这一切看起来都很合乎逻辑,除了我有一个共享类(TelemetryManager
)可以帮助创建TelemetryClient()
-这样我们就不必在每个函数中重复代码,这些函数只是通过一系列附加设置来通知客户端。这还实现了一个日志记录接口itelemetry
,这样我们以后就有了一个单元测试的接口,并允许您做…(为了简单起见,此处使用跟踪):
static CustomTelemetryManager logger = new CustomTelemetryManager();
logger.Trace($"thing i want to trace: {x.value}");
Logger.Trace()
方法只是调用CustomTeleMetryManager()
类中的TeleMetryClient.TrackTrace()
方法-其他一些方法更为复杂。
无论如何,接口是存在的,这样当单元测试时,我们可以只做:
// gets all the app insights key, and sets various other properties.
static DebugLogger logger = new DebugLogger();
logger.Trace($"thing i want to trace: {x.value}");
并且它只会debug.writeLine()
而不是尝试调用AI
问题1:是否有“更好的”方法将应用程序洞察代码交换给单元测试,因为这是我们拥有itelemetry
接口的唯一原因...以便为单元测试提供虚拟记录器。
不过,我最终需要做的是为TelemetryClient.trackTrace()
提供正在执行的调用的上下文,我现在找到的唯一方法是类似于上面的跟踪事件代码。
var trace = new TraceTelemetry($"i am a trace.");
trace.Context.Operation.Id = context.InvocationId.ToString();
logger.Trace(trace);
因为TelemetryClient
在所有函数上共享,所以在将其发送到日志之前,我需要将上下文直接应用到度量。
问题2:这是我唯一能做到的方法…类似于:
public void TrackTrace(string msg, ExecutionContext ctx)
{
var trace = new TraceTelemetry(msg);
trace.Context.Operation.Id = ctx.InvocationId.ToString();
client.TrackTrace(trace);
}
因为这将意味着修改接口,然后也意味着对于单元测试,我还需要向调试记录器提供某种虚拟上下文,这感觉有点笨拙。
在这里的某个地方,我认为有一个简单的调整来简化这个不必要的混乱的问题…但我看不见森林了!
假设每次调用都创建了一个新的CustomTeleMetryManager
对象,则可以在CustomTeleMetryManager
构造函数中使用上下文。
在CustomTeleMetryManager
实现中,您始终可以使用相同的静态TeleMetryClient
,但由于您的CustomTeleMetryManager
已经具有上下文,因此它只是将上下文添加到您进行的TeleMetryClient.TrackEvent()
调用的每个调用中。
有什么想法会出什么问题吗?
你好,拉姆
在运行.NET Core3.1控制台应用程序时,我正在尝试获取应用程序的见解,以便在azure批处理作业/任务中工作。 https://docs.microsoft.com/en-us/Azure/Batch/Monitor-Application-Insights https://docs.microsoft.com/en-us/Azure/Azure-monitor/app/worker-se
有没有人有关于如何将Azure应用程序洞察集成到作为控制台应用程序构建的Azure WebJob的示例或文章的链接?
我有一个Azure函数连接到一个App Insights实例。函数app会发出日志消息,我可以在Azure portal的日志流中看到这些消息,并在app Insights跟踪时看到这些消息。 通过在中添加元素(https://github.com/Azure/azure-webjobs-sdk-script/wiki/host.json),我将控制台日志级别增加到了详细,因此详细级别的消息会出现
我们正在设计一个应用程序,它将托管在AKS(Azure kubernetes service)上。应用程序将由一组用asp.NET内核编写的服务组成,这些服务运行在docker容器中。我希望监视服务以及容器/节点,并在整个集群中具有可观察性。Azure monitor for containers似乎是监视容器、节点和整个集群的一个很好的解决方案,但我需要asp.NET核心服务的应用程序insig