elasticsearch 如何将应用程序日志从NodeJS应用程序发送到Kubernetes中托管的弹性堆栈?,elasticsearch,logstash,elastic-stack,elasticsearch,Logstash,Elastic Stack" /> elasticsearch 如何将应用程序日志从NodeJS应用程序发送到Kubernetes中托管的弹性堆栈?,elasticsearch,logstash,elastic-stack,elasticsearch,Logstash,Elastic Stack" />

elasticsearch 如何将应用程序日志从NodeJS应用程序发送到Kubernetes中托管的弹性堆栈?

elasticsearch 如何将应用程序日志从NodeJS应用程序发送到Kubernetes中托管的弹性堆栈?,elasticsearch,logstash,elastic-stack,elasticsearch,Logstash,Elastic Stack,我正在构建一个NodeJS应用程序,并尝试使用弹性堆栈来收集日志。我想要的日志是: 错误日志 应用程序日志,如用户登录、用户执行此任务、系统执行此任务等 现在,我的应用程序托管在Kubernetes中,我还将弹性堆栈部署到同一个GKE集群中。现在我对弹性堆栈还不熟悉。我有一个小主意,我们必须将数据发送到logstash,然后它会发送到弹性搜索。然后我们可以想象在基巴纳。我试着按照几个教程,但仍然没有一个坚实的想法如何做到这一点。将我的应用程序连接到堆栈。所以,我可以知道 我应该将日志发送到

我正在构建一个NodeJS应用程序,并尝试使用弹性堆栈来收集日志。我想要的日志是:

  • 错误日志
  • 应用程序日志,如用户登录、用户执行此任务、系统执行此任务等
现在,我的应用程序托管在Kubernetes中,我还将弹性堆栈部署到同一个GKE集群中。现在我对弹性堆栈还不熟悉。我有一个小主意,我们必须将数据发送到logstash,然后它会发送到弹性搜索。然后我们可以想象在基巴纳。我试着按照几个教程,但仍然没有一个坚实的想法如何做到这一点。将我的应用程序连接到堆栈。所以,我可以知道

  • 我应该将日志发送到堆栈中的哪个位置(弹性搜索、日志存储或filebeat)
  • 如何将日志从NodeJS应用发送到同一Kubernetes集群中托管的弹性堆栈
  • 我应该使用什么工具来做这项工作

提前感谢免责声明:我不是DevOps人,但从用户角度来看,我习惯于使用ELK stack

我认为您可以从3个基本组件开始:

  • Logstash(或filebeat)
  • 弹性搜索本身
  • 基巴纳
Logstash应该读取NodeJS生成的日志(写入某个文件)并将其发送到ElasticSearch

由于您正在运行K8S,节点应用程序很可能部署在某个POD中。在这种情况下,您可以考虑在其中添加一个带有LogStuh过程的siDAR容器作为一种可能的解决方案。 在我看来,这是最灵活的方法,尽管如果您在一台机器(节点)上运行多个pod,那么logstash进程将吃掉您的cpu。 如果这是一个问题,您可以配置一些卷来包含来自pod的日志,并配置一个带有LogStash的专用pod来映射主机节点上所有pod的所有日志

在任何情况下,Logstash都应该将数据发送到ElasticSearch,并跟踪到目前为止发送的内容。如果你有很多日志,考虑每天在ES中创建一个索引,有一定的时间(保留期),比如1周。然后ES将通过自动删除索引来删除数据

就Kubernetes而言,ES集群也可以部署在POD中,它应该公开用于访问的端口(默认情况下,9200用于http,9300用于二进制访问)。如果您没有很多服务,可能2-3台服务器就足够了,如果您不关心高可用性,甚至可以从运行一个pod开始

现在是基巴纳。它是一个连接到弹性搜索的UI,允许对日志数据进行切分。您可以按级别、主机、消息等进行筛选,ES非常适合搜索,因此此用例得到了很好的支持

同样,对于K8S,您可以在一个Pod中部署Kibana,该Pod具有一个公开的HTTP端口,用于从浏览器进行访问。 这里请注意,这个HTTP端口将由浏览器访问,从技术上讲,它不是kubernetes集群的一部分,因此请分别定义K8S infra


这是一个基本的堆栈,虽然基本仍然非常灵活,可以用于实际项目。

非常感谢。现在,我使用winston将日志写入节点应用程序中的一个文件。因此,它在应用程序根目录中创建
error.log
combined.log
(根据我的docker文件
WORKDIR/usr/src/app
)。现在我已经安装了filebat,但它需要Nginx和其他东西的所有日志,但不是这个。如何告诉它准确地获取这两个文件?我没有使用filebeat,但我相信您应该配置要读取的日志模式(他们称之为“源”或“浏览者”),您应该找到一个filebeat.yml文件,其中包含此文件的配置。。。看起来已对浏览者进行了清理。它给了我一个错误,说:
“filebeat.prospectors”已被删除
,可能这取决于您使用的filebeat版本。这里是最新文档的链接:还可以查看文件/etc/filebeat/filebeat.reference.yml。它应该包含一个您可以从中引用的示例