从 azure web 应用程序提供 logstash。如何?
Posted
技术标签:
【中文标题】从 azure web 应用程序提供 logstash。如何?【英文标题】:Feeding logstash from azure web app. How? 【发布时间】:2016-02-18 15:35:11 【问题描述】:我有一个托管在 azure 平台上的 Web 应用程序和一个托管在 azure 虚拟机上的 ELK 堆栈(相同的订阅),我正在努力寻找一种将日志从应用程序发送到 logstash 的方法。
Web 应用程序将其所有文件存储在只能通过 FTP 访问的存储中,而 logstash 没有输入插件。
人们使用什么将日志从网络应用程序发送到 ELK?如果它作为 VM 运行,我会使用 NXlog,但这对于 Web 应用程序是不可能的。
我还使用 Log4Net 并尝试了一个 UDP 转发器,该转发器在我的本地 ELK 堆栈上工作,但不是 azure 托管的,尽管我添加了公共 UDP 端点。
【问题讨论】:
“Web 应用程序将其所有文件存储在只能通过 FTP 访问的存储设备上” - 这不是真的。 Web 应用程序不限于使用其本地存储。它们完全能够使用 Azure 存储(例如 blob)、Azure 文件服务、数据库等。 @DavidMakogon - 这是真的。我确实将 blob 存储视为一种选择,但关于如何获取服务器日志和 log4net 文件以保存到它们并不明显。我想知道是否有人这样做并将logstash配置为使用blob存储作为输入源? 【参考方案1】: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 更快、更可靠。
【讨论】:
我最终选择了 Mark 的做法——但使用 Serilog 直接导出到 Elasticsearch。 Azure Ruby 库还不成熟,从 Azure 存储中读取数据不能很好地扩展。【参考方案2】:目前我正在使用Serilog 将我的应用程序日志消息(批量)推送到Redis queue,而Logstash 又会读取它以丰富它们并将它们推送到Elasticsearch。这会导致可靠的分布式设置,除非超过 redis 最大队列长度,否则不会丢失任何应用程序日志。增加奖金; Serilog 发出 json,因此您的 logstash 配置可以保持非常简单。示例代码可以在这里找到:https://gist.github.com/crunchie84/bcd6f7a8168b345a53ff
【讨论】:
嗨,Mark,为什么不直接将 Serilog 日志传递给 Elasticsearch?从 Serilog 到 Redis 到 Logstash 到 ES 看起来很复杂。检查这个 git:github.com/serilog/serilog-sinks-elasticsearch 这是一个解耦问题; azure 托管了 redis,并且摄取数据非常快。 elasticsearch 不是托管解决方案,因为它需要处理提交的 json,最终可能会成为可能影响日志生成应用程序的瓶颈以上是关于从 azure web 应用程序提供 logstash。如何?的主要内容,如果未能解决你的问题,请参考以下文章
无法通过赛普拉斯加载我的 Azure 托管 Web 应用程序
如何从 Azure 数据工厂安全地调用 Azure 逻辑应用
技术帖 | 在 Azure 应用服务中生成 .NET Core 和 SQL 数据库 Web 应用