我想将node.js服务器的错误记录到另一台服务器。我正在考虑使用elasticsearch,logstash和kibana。我想知道如何使用我的节点服务器设置ELK。
答案 0 :(得分:3)
可以使用没有运行代理的logstash来从应用程序收集日志。 Logstash有输入插件(https://www.elastic.co/guide/en/logstash/current/input-plugins.html)。这可以在管道中配置。一个基本设置是配置TCP(https://www.elastic.co/guide/en/logstash/current/plugins-inputs-tcp.html)或UDP(https://www.elastic.co/guide/en/logstash/current/plugins-inputs-udp.html)input插件.Logstash可以监听插件中配置的端口。 然后,应用程序可以将日志直接发送到logstash服务器。然后管道可以转换并转发到ES。 通过将Logstash管道配置为持久,可以避免数据丢失。当应用程序服务器是短暂的(如在容器中)时,这种方法更好。
对于nodejs,https://www.npmjs.com/package/winston-logstash是一个非常活跃的包。这个要点https://gist.github.com/jgoodall/6323951为其他语言的整体方法提供了一个很好的例子。
这是示例(最小)TCP输入插件配置
input {
tcp {
'port' => '9563'
}
}
答案 1 :(得分:1)
我的旧组织中确实有这个用例。使用Beats + ELK启动的基本教程 - https://www.elastic.co/guide/en/beats/libbeat/current/getting-started.html
所以基本上这就是它的工作原理 - 你的nodejs应用程序将以不同的格式登录文件(你可以使用bunyan),例如错误/警告/信息等.Filebeat将拖尾这些日志文件并向logstash服务器发送消息。 Logstash input.conf将有一些输入过滤器(在您的情况下,它将是错误过滤器)。当任何日志消息通过这些过滤器时,logstash会将其转发到某个端点,如output.conf文件中所确定的那样。
这是我们做的 -
初始架构 - 安装filebeat(之前我们使用的是logstash forwarder)客户端来拖尾nodejs服务器上的日志并将其转发到logstash机器。 Logstash将对输入日志执行一些处理并将它们发送到ES集群(可以与Logstash在同一台计算机上)。 Kibana只是这个ES的可视化。
最终架构 - 初始设置对于小流量来说很酷,但我们意识到logstash可能是单点故障,并且当流量增加时可能导致日志丢失。因此,我们将Kafka与Logstash集成在一起,以便系统顺利扩展。这是一篇文章 - https://www.elastic.co/blog/logstash-kafka-intro
希望这有帮助!
答案 2 :(得分:0)
您可以将Logstash安装在NodeJS Server中,然后创建一个接受输入(日志文件的位置)并输出到您的Elastic Server主机的配置文件。
下面是示例配置文件(custom.conf),必须在您的logstash目录中创建。
input {
file {
path => "/path to log"
start_position => beginning
}
}
output {
stdout { }
elasticsearch{
type => "stdin-type"
embedded => false
host => "192.168.0.23"
port => "9300"
cluster => "logstash-cluster"
node_name => "logstash"
}
}
执行logstash
logstash -f custom.conf
参考:https://www.elastic.co/guide/en/logstash/current/config-examples.html
如果您打算自定义NodeJS应用程序以发送错误日志,则可以安装一些ELKStack Nodjs包装器并将错误日志发布到您的应用程序中。 ELKStack Nodjs包装器-https://www.npmjs.com/package/elksdk