Logging 集中式日志记录-是否先写入本地文件?
我有一个服务器API,它有几个应用程序实例和一个工作者实例。目前,应用程序将一些数据发送到Loggly(一种SAAS集中式日志服务)。这是一个很好的开始,但我开始考虑使用一些开源软件创建一个设置 此外,目前使用Loggly my的成本,最大的担忧是:在请求结束时连接到Loggly以记录数据,这会增加请求的时间 我已经阅读了一些关于Logstash、Graphite、ElasticSearch等与LogRotate的相关内容,一些来源似乎建议在每台服务器上写入一个本地文件,然后在Logrotation时,将它们发送到LogstashLogging 集中式日志记录-是否先写入本地文件?,logging,
elasticsearch,logstash,logrotate,Logging,
elasticsearch,Logstash,Logrotate,我有一个服务器API,它有几个应用程序实例和一个工作者实例。目前,应用程序将一些数据发送到Loggly(一种SAAS集中式日志服务)。这是一个很好的开始,但我开始考虑使用一些开源软件创建一个设置 此外,目前使用Loggly my的成本,最大的担忧是:在请求结束时连接到Loggly以记录数据,这会增加请求的时间 我已经阅读了一些关于Logstash、Graphite、ElasticSearch等与LogRotate的相关内容,一些来源似乎建议在每台服务器上写入一个本地文件,然后在Logrotati
我很好奇人们发现在集中式日志场景中什么做法最有效。我应该先写入每个服务器上的本地文件吗?或者是将每个框设置为“有状态”,而不是直接从日志存储(或SQS)发送数据以供集中式服务器处理吗?在集中式日志记录场景中,将日志生成器与日志存储紧密耦合与松散耦合之间存在实现差异。对于非常大的规模,应避免向中间紧密耦合。紧密耦合是在生产者和接受者之间创建一个套接字来传输事件,如果接受者速度慢,这会在生产者端产生延迟 松耦合有多种方法:
- 队列中介,通过SQS、Redis、Kafka、AQMP等
- 文件中介,通过文件
- Logstash安装在生产节点上。
- 该实例被配置为侦听TCP端口以进行应用程序日志记录,侦听几个文件以进行系统日志记录
- 实例日志存储将事件发送到SQS
- 一组解析器日志存储实例从SQS中提取作业并处理它们,输出到任何地方
- 如果我直接通过TCP套接字连接,如果日志接收器在5分钟内不可用,我的应用程序会发生什么情况
- 我的实例对存储I/O的敏感程度如何
如果您对存储I/O非常敏感,并且对TCP状态也非常敏感,那么您仍然可以将中介排队到某个点。安装一个本地redis实例,让你的应用程序发送到该实例,然后让logstash从那里提取并发送到中心队列。这使得应用程序可以从队列事件集中缓冲。不过,在某些情况下,如果应用程序可以配置为直接发送到中心队列,则最好直接发送到中心队列。在集中式日志记录场景中,将日志生成器与日志存储紧密耦合与松散耦合之间存在实现差异。对于非常大的规模,应避免向中间紧密耦合。紧密耦合是在生产者和接受者之间创建一个套接字来传输事件,如果接受者速度慢,这会在生产者端产生延迟 松耦合有多种方法:
- 队列中介,通过SQS、Redis、Kafka、AQMP等
- 文件中介,通过文件
- Logstash安装在生产节点上。
- 该实例被配置为侦听TCP端口以进行应用程序日志记录,侦听几个文件以进行系统日志记录
- 实例日志存储将事件发送到SQS
- 一组解析器日志存储实例从SQS中提取作业并处理它们,输出到任何地方