从c程序每秒记录3000个事件

从c程序每秒记录3000个事件,c,logging,cgi-bin,C,Logging,Cgi Bin,从c文件记录每秒3k事件的最佳选项是什么?下面是我想到的选项。无法决定哪种解决方案是故障点更少、可靠性更高、延迟更少的健壮解决方案 使用消息服务器在事件发生时中继事件 使用syslog进行日志记录 使用Unix管道 使用诸如fluent之类的日志代理,将事件发送到分析服务器 在本地写入日志文件,然后使用rsync之类的工具定期将其旋转到分析服务器 试试系统日志。没有理由把它弄得太复杂。使用syslog ng,您可以通过UDP进行本地日志记录,然后设置本地syslogd,通过TCP将所有内容转发到

从c文件记录每秒3k事件的最佳选项是什么?下面是我想到的选项。无法决定哪种解决方案是故障点更少、可靠性更高、延迟更少的健壮解决方案

  • 使用消息服务器在事件发生时中继事件

  • 使用syslog进行日志记录

  • 使用Unix管道

  • 使用诸如fluent之类的日志代理,将事件发送到分析服务器

  • 在本地写入日志文件,然后使用rsync之类的工具定期将其旋转到分析服务器


  • 试试系统日志。没有理由把它弄得太复杂。使用syslog ng,您可以通过UDP进行本地日志记录,然后设置本地syslogd,通过TCP将所有内容转发到中央syslog服务器。您可能需要在中央syslog服务器上不使用fsync的情况下运行,以跟上该负载(但首先要进行测试),但是可以通过将所有内容转发到两台单独的计算机来缓解这一问题。这为您提供了本地异步性能和足够的可靠性,您几乎永远不会丢失事件


    我做过的另一个选择是将事件记录到Redis、Riak或其他一些nosql数据存储中(我通常不建议将它们用于任何复杂的事情,但事件记录是他们的拿手好戏)。为冗余设置镜像,它们应该能够保持每秒3k以上的事件。

    @JoachimPileborg eh?除非记录的事件每个事件都会生成几kB的数据,或者在每个事件之后都必须进行fsync,否则我看不出这是一个多么大的数据量。我这里有每秒超过10k行的syslog机器,而且很容易保持(通过UDP将Sysloging记录到服务器上的本地syslog守护进程,通过TCP将其转发到两个单独的syslog收集器机器,因此可以在没有fsync的情况下完成)。这是在旋转的圆盘上。有了合作伙伴在类似设置上拥有的SSD,他们可以在夜间以25k线/秒+fsync的速度旋转到旋转的磁盘。谢谢。感谢当场回复。