8

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

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

人们使用什么将日志从 Web 应用程序发送到 ELK?如果它作为 VM 运行,我会使用 NXlog,但这对于 Web 应用程序是不可能的。

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

4

2 回答 2

7

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

于 2015-12-03T14:22:22.673 回答
3

Azure 现在在 GitHub 上有一个名为azure-diagnostics-tools的项目,其中包含用于读取 blob 和表存储等的 LogStash 插件。

大概,您可以为您的 WebApp 启用诊断日志记录到 blob/表存储,并使用 LogStash 插件将它们放入 ElasticSearch。

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

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

于 2016-05-10T18:12:25.237 回答