【Azure Application Insights】在Azure Function中启用Application Insights后,如何配置不输出某些日志到AI 的Trace中
问题描述
基于.NET Core的Function App如果配置了Application Insights之后,每有一个函数被执行,则在Application Insights中的Logs中的trace里都可以查询到函数的执行启动,执行结束的信息。类似如下的日志,
| 函数执行开始 | Executing Function1(Reason=This function was programmatically called via the host APIs., Id=fa9er0b5c612447ert2051af5543etyb) |
| 函数执行结束 | Executed Function1(Succeeded, Id=fa9er0b5c612447ert2051af5543etyb, Duration=1ms) |
由于这类日志产生的条目过多且没有包含业务日志,所以在不影响其他业务或异常日志的情况下,是否可以不收集此类信息呢?
问题原因
Application Insights收集日志信息是根据在Azure Function中的host.json配置而决定的。如以下内容:
{
"logging": {
"fileLoggingMode": "always",
"logLevel": {
"default": "Information",
"Host.Results": "Error",
"Function": "Error",
"Host.Aggregator": "Trace"
}
}
}
- 对于
Host.Results或Function的日志,仅记录Error或更高级别的事件。 - 对于
Host.Aggregator的日志,记录所有生成的指标 (Trace)。 - 对于所有其他日志(包括用户日志),仅记录
Information级别及更高级别的事件。
而对于日志级别的分类,则可以参考下表:
为每个日志分配日志级别。 该值是表示相对重要性的整数:
| LogLevel | 代码 | 说明 |
|---|---|---|
| 跟踪(Trace) | 0 | 包含最详细消息的日志。 这些消息可能包含敏感应用程序数据。 这些消息默认情况下处于禁用状态,并且绝不应在生产环境中启用。 |
| 调试(Debug) | 1 | 在开发过程中用于交互式调查的日志。 这些日志应主要包含对调试有用的信息,并且没有长期价值。 |
| 信息(Information) | 2 | 跟踪应用程序的常规流的日志。 这些日志应具有长期价值。 |
| 警告(Warning) | 3 | 突出显示应用程序流中的异常或意外事件,但不会导致应用程序执行停止的日志。 |
| 错误(Error) | 4 | 当前执行流因失败而停止时突出显示的日志。 这些错误应指示当前活动中的故障,而不是应用程序范围内的故障。 |
| 严重(Critical) | 5 | 描述不可恢复的应用程序/系统崩溃或需要立即引起注意的灾难性故障的日志。 |
| 无(None) | 6 | 禁用指定类别的日志记录。 |
所以根据以上的基础信息,在Application Insights的Trace表中,我们查看到函数执行日志的Category和LogLevel,这样就可以针对性的设置收集日志的参数。

由此我们可以得出: Executing和Executed两个记录在function层面对应的category和log level分别是Function.Function1 与Information
解决方式
根据以上的分析,只要在host.json中限制Loglevel和Category就可以实现过滤不需要的日志。
- 通过修改Function.Funciton1为Warning的信息,则过滤掉了waring级别以下的日志(如本文开头提及的information)。
- 通过设置Function.Function1.User为Information信息,则可以保证通过代码记录的inforamtion级别及以上的日志可以发送到Application Insights。

查询Application Insights中生成的日志记录,可以看到是没有Function.Function1的information的日志的

附上在Application Insights的Traces表中查询到以上记录的语句
traces
| where timestamp > ago(30m)
| extend category = customDimensions.Category
| extend logLevel = customDimensions.LogLevel
| project timestamp, category, logLevel, message
| order by timestamp desc
参考资料
如何为 Azure Functions 配置监视: https://docs.azure.cn/zh-cn/azure-functions/configure-monitoring?tabs=v2
【Azure Application Insights】在Azure Function中启用Application Insights后,如何配置不输出某些日志到AI 的Trace中的更多相关文章
- Ubuntu中启用关闭Network-manager网络设置问题!
Ubuntu中启用关闭Network-manager网络设置问题! [Server版本] 在UbuntuServer版本中,因为只存有命令行模式,所以要想进行网络参数设置,只能通过修改/etc/net ...
- 【已解决】Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8
[问题] 折腾: [已解决]Android ADT中增大AVD内存后无法启动:emulator failed to allocate memory 8 过程中,增大对应AVD的内存为2G后,结果无法启 ...
- lintcode: 中序遍历和后序遍历树构造二叉树
题目 中序遍历和后序遍历树构造二叉树 根据中序遍历和后序遍历树构造二叉树 样例 给出树的中序遍历: [1,2,3] 和后序遍历: [1,3,2] 返回如下的树: 2 / \ 1 3 注意 你可 ...
- Tree Traversals Again(根据前序,中序,确定后序顺序)
题目的大意是:进行一系列的操作push,pop.来确定后序遍历的顺序 An inorder binary tree traversal can be implemented in a non-recu ...
- MySQL中truncate误操作后的数据恢复案例
MySQL中truncate误操作后的数据恢复案例 这篇文章主要介绍了MySQL中truncate误操作后的数据恢复案例,主要是要从日志中定位到truncate操作的地方然后备份之前丢失的数据,需要的 ...
- 使用Azure Functions 在web 应用中启用自动更新(一)分析基于轮询的 Web 应用的限制
1,引言 上一篇介绍了使用使用 Visual Studio 开发 "Azure Functions" 函数,此篇介绍 “Azure Functions” 的测试以及直接从 Vist ...
- 【Azure API 管理】APIM集成内网虚拟网络后,启用自定义路由管理外出流量经过防火墙(Firewall),遇见APIs加载不出来问题
问题描述 使用 Azure 虚拟网络,Azure APIM 可以管理无法通过 Internet 访问的 API,达到以保护企业内部的后端API的目的.在虚拟网络中,启用网络安全组(NSG:Networ ...
- 使用 Azure Active Directory 管理 Azure 中的 HPC Pack 群集
Microsoft HPC Pack 2016 支持在 Azure 中部署 HPC Pack 群集的管理员将其与 Azure Active Directory (Azure AD) 集成. 请按照本文 ...
- [Windows Azure] Adding Sign-On to Your Web Application Using Windows Azure AD
Adding Sign-On to Your Web Application Using Windows Azure AD 14 out of 19 rated this helpful - Rate ...
随机推荐
- 通过sql 语句将多行数据拼接到一行中
- keeplived高可用集群
什么是Keeplived? Keepalived是Linux下面实现VRRP备份路由的高可靠性运行件.基于Keepalived设计的服务模式能够真正做到主服务器和备份服务器故障时IP瞬间无缝交接.二者 ...
- 学习工具--Git
前言 主要内容来源于廖雪峰网站,内容通俗易懂,有些地方用了Gif来演示,实用性超强.至于git的强大,就不强调很多了,熟练掌握它最好的还是在实际工程中,先做一个简单的总结吧. git简介 Git是目前 ...
- 第10.3节 Python导入模块能否取消导入?
模块导入后,是否可以取消导入?实际上当模块导入后,是无法逆向还原到导入前的状态的,但是可以利用"del 模块名"进行导入模块的删除,此时的删除只是删除了导入模块对应的模块变量名,删 ...
- Java并发编程的艺术(七)——线程间的通信
为什么需要线程间通信 让线程之间合作,提高运行效率. volatile和synchronized关键字 实现原理 这两个方式都是采用共享内存的方式进行通信,通过同步机制保证数据可见性和排他性. 特点 ...
- uniapp-vuex实现tabbar提示点
底部入口栏的红点提示是app中常见的功能,或者说是必要功能,通常用来提醒用户去查看或操作某个模块内容. 看项目性质如果需要比较多并且灵活的提示,则需要用到长连接技术. 1.红点提示是根据接口返回的数据 ...
- idea 中使用Mybatis Generator逆向工程生成代码
通过MAVEN完成 Mybatis 逆向工程 1. POM文件中添加插件 在 pom 文件的build 标签中 添加 plugin 插件和 数据库连接 jdbc 的依赖. <build> ...
- Linux下双网卡绑定bond配置实例详解
本文源自:http://blog.itpub.net/31015730/viewspace-2150185/ 一.什么是bond? 网卡bond是通过多张网卡绑定为一个逻辑网卡,实现本地网卡冗余,带宽 ...
- Unity 操作快捷键
Q Hand(手形)工具 可以平移整个Scene视图 W Translate(移动)工具 移动所选择的游戏对象 E Rotate(旋转)工具 按任意角度旋转游戏 ...
- 使用caddy实现非标准端口https
近来使用Halo搭建博客,并顺便把WeHalo小程序也把玩了起来,但是发现几个非常棘手的问题: 根据访问日志发现有三方在刷取关键接口的请求,http请求在部分情况下会暴露出很显著的安全问题: 小程序强 ...