如何使用node.js设置ELK

时间:2017-08-17 05:50:28

标签: node.js elasticsearch logstash kibana

我想将node.js服务器的错误记录到另一台服务器。我正在考虑使用elasticsearch,logstash和kibana。我想知道如何使用我的节点服务器设置ELK。

3 个答案:

答案 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