正在从azure web应用程序提供日志存储.怎样

本文关键字:日志 存储 怎样 应用程序 azure web | 更新日期: 2023-09-27 18:22:08

我有一个在azure平台上托管的web应用程序和一个在同样在azure中的虚拟机上托管的ELK堆栈(相同的订阅),我正在努力寻找将日志从应用程序发送到logstash的方法。

网络应用程序将其所有文件存储在只能通过FTP访问的存储设备上,而logstash没有输入插件。

人们用什么从网络应用程序向ELK发送日志?如果它是作为虚拟机运行的,我会使用NXlog,但这对于Web应用程序来说是不可能的。

我也使用Log4Net,并尝试了一个UDP转发器,它在我的本地ELK堆栈上工作,但在azure托管的堆栈上不工作,尽管我添加了公共UDP端点。

正在从azure web应用程序提供日志存储.怎样

目前我正在使用Serilog将我的应用程序日志消息(批量)推送到Redis队列,然后由Logstash读取以丰富它们并将它们推送到Elasticsearch中。这导致了可靠的分布式设置,除非超过redis最大队列长度,否则不会丢失任何应用程序日志。增加奖金;Serilog发出json,因此您的logstash配置可以保持非常简单。示例代码可在此处找到:https://gist.github.com/crunchie84/bcd6f7a8168b345a53ff

Azure现在在GitHub上有一个名为Azure诊断工具的项目,该项目包含用于从blob和表存储读取的LogStash插件等。

据推测,您只需为WebApp启用诊断日志记录到blob/表存储,并使用LogStash插件将其输入ElasticSearch。

关于如何将log4net文件获取到blob存储中,您可以使用log4net.Appender.TraceAppender写入跟踪系统,这将导致在WebApp中启用该选项时将其收集到blob/Table存储中。

对于本地文件,还有一种替代FTP的方法-您可以使用Kudu REST VFS API通过HTTP访问(和修改)文件。我发现这比FTP更快、更可靠。