gab*_*mgp 5 azure azure-application-insights azure-functions
我正在使用接口ILogger来记录Azure函数中的事件.我可以在Azure中发布它并将其连接到Azure中的Application Insights.
我希望在开发过程中在Visual Studio中查看Application Insights中的日志.在这里,我可以看到这在ASP.NET核心Web应用程序中可以在Startup.cs中放入一些代码.使用VS 2017中的工具中的新项目模板,Azure功能可以实现类似的功能吗?
我正在使用VS 2017和Azure Function CLI 1.0.0-beta-100.
Raf*_*lin 15
因此,显然由于对库所做的更改,它会时不时地停止工作。所以这就是帮助我让它在 2019 年 4 月工作的原因。希望它会帮助其他人。
我没有添加任何日志或任何特定于我的函数应用程序的内容,现在对我来说,它几乎将所有控制台数据打印到我的应用程序洞察中的跟踪日志中(在本地,还不需要在 Azure 中配置任何内容)。此外,我的测试场景在 TargetFrameworknetstandard2.0和 AzureFunctionsVersion上运行2。
首先需要将此 NuGet 包添加到函数应用中:https : //www.nuget.org/packages/Microsoft.Azure.WebJobs.Logging.ApplicationInsights/
然后,您必须将一个空文件添加到您的项目根目录:ApplicationInsights.config您不需要在构建或其他任何内容时将其复制到输出,这只是必须存在的内容,否则 Application Insights 将无法在本地运行。
然后你需要为你的APPINSIGHTS_INSTRUMENTATIONKEYin添加一些值local.settings.json。这是它与常规控制台应用程序不同的地方,即使检测键为空,它也可以在本地工作。在功能应用程序中,显然你需要在那里添加一些价值。它可以是任何东西,我已经这样做了并且效果很好:
"APPINSIGHTS_INSTRUMENTATIONKEY": "you-need-to-have-anything-at-all-here-so-it-will-work-locally"
Run Code Online (Sandbox Code Playgroud)
将应用程序洞察(AI)遥测添加到Azure功能简单明了.
你只需要官方文档中的这两个步骤;
然而,显而易见的是如何在本地开发功能应用程序时捕获AI遥测数据,就在它让它进入云端之前.首先,您需要为Azure Functions 准备本地开发环境.那你几乎准备好了.您只需要在local.settings.json文件上重复上面的第二步.所以你的文件看起来应该是这样的;
{
"IsEncrypted": false,
"Values": {
"FUNCTIONS_EXTENSION_VERSION": "beta",
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"AzureWebJobsDashboard": "UseDevelopmentStorage=true",
"HOST_NAME": "localhost:7072",
"APPINSIGHTS_INSTRUMENTATIONKEY": "11111111-2222-3333-4444-555555555555"
},
"Host": {
"LocalHttpPort": 7072
}
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我有2个AI实例,APPINSIGHTS_INSTRUMENTATIONKEY我的Azure门户和我的本地dev env(local.settings.json)中的值是不同的,所以我不会混淆prod和dev遥测.
据我所知,目前我们无法将 Application Insights 直接包含在本地 azure 函数项目中。
这是一个解决方法:
需要你自己去实现。从 Nuget 包管理器安装 Microsoft.ApplicationInsights 后。
然后使用 TelemetryClient 将日志发送到 azure。
更多详细信息,您可以参考以下代码:
[FunctionName("HttpTriggerCSharp")]
public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter log)
{
var appInsights = GetTelemetryClient();
//track an event
appInsights.TrackEvent("I am starting now. I'm timer triggered");
// track a numeric value
appInsights.TrackMetric("Ticks based on current time", DateTime.Now.Ticks);
// track an exception
appInsights.TrackException(new Exception($"Random exception at {DateTime.Now}"));
// send data to azure
appInsights.Flush();
log.Info($"C# Timer trigger function executed at: {DateTime.Now}");
log.Info("C# HTTP trigger function processed a request.");
// parse query parameter
string name = req.GetQueryNameValuePairs()
.FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
.Value;
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
// Set name to query string or body data
name = name ?? data?.name;
return name == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello " + name);
}
private static TelemetryClient GetTelemetryClient()
{
var telemetryClient = new TelemetryClient();
telemetryClient.InstrumentationKey = "Your InstrumentationKey";
return telemetryClient;
}
Run Code Online (Sandbox Code Playgroud)
结果:
| 归档时间: |
|
| 查看次数: |
3844 次 |
| 最近记录: |