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

标签 c logging cgi-bin

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

  1. 使用消息传递服务器在事件发生时中继事件

  2. 使用系统日志进行日志记录

  3. 使用 Unix 管道

  4. 使用 Fluent 等日志代理将事件发送到分析服务器

  5. 在本地写入日志文件,然后使用 rsync 等工具定期将其轮换到分析服务器

最佳答案

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

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

关于c - 从 C 程序每秒记录 3000 个事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17828794/

相关文章:

c - 如何使用 while 循环和代表数组大小的变量打印出数组?

java - 在java产品中记录源类名和方法名可以吗?

html - 通过 c/cgi-bin/html 显示密码字段和下一步按钮。我希望当屏幕显示时焦点位于密码字段中

java - Google 应用程序灵活的 Java 日志记录不起作用

linux - AWS beanstalk cgi-bin 权限

php - 通过 Web 服务器 bash 脚本执行 rsync 不起作用

c - WM_ERASEBKGND 消息是否发布到消息队列?

在C中通过memcpy将一个矩阵复制到另一个矩阵

从 char 到 int 的转换并打印十进制值

ruby - 如何将自定义日志级别添加到 ruby​​ 中的记录器?