进一步阅读

进一步阅读

我想用来syslog(3)将应用程序日志写入中央记录器。该应用程序在同一子网上的一组计算机上运行。

(目前)对将系统(非应用程序)日志捕获到中央服务器不感兴趣。对将应用程序日志捕获到每个本地系统的 systemd 日志中不感兴趣。

目的是使用syslog(3)“local0”-“local7”跳过 systemd 日志,而是通过 UDP(可能是端口 514)写入记录器。

这似乎与通常的问题(如何将应用程序日志重定向到系统日志)相反。

目前正在思考 Centos systemd/rsyslog lashup 的意义何在。需要明确的是,我希望在接下来的几天内解决这个问题。

向下一个人提出问题,他和我一样正在寻找答案,但没有立即运气。 :)

答案1

目的是使用syslog()“local0”-“local7”跳过 systemd 日志

你不会实现它。库syslog()函数记录到 systemd 日志中。侦听与库通信的众所周知的/dev/log套接字的服务器不是rsyslogd。这是systemd-journaldrsyslogd附着在另一侧systemd-journald,并且库函数不与它对话。无论对配置进行多少修改rsyslog都不会改变这一点。

不通过发送东西的唯一方法systemd-journald是使用一些其他到达目的地的路线,不是syslog()与众所周知的套接字通信的库 函数

讽刺的是,这可能是应用程序日志的正确且更简单的位置:标准错误。将标准错误连接到与某个程序对话的管道,该程序通过网络将其传输到远程日志收集器。

我对此类内容的首选设置是在 daemontools 系列服务管理器下将应用程序作为“主要”服务运行。

  • 应用程序记录到标准错误。
  • 通常的 daemontools 风格的服务管理具有日志服务,其标准输入通过管道连接到应用程序的标准错误。服务管理负责在“主”服务和“日志”服务之间设置这些管道。
  • 这些日志服务运行cyclogmultilogs6-logsvlogd或某些此类服务,并将日志转储到本地(严格限制大小、自动轮转、与应用程序隔离)日志目录中。
  • 进一步的服务监视这些日志目录,并通过网络将新信息提供给运行logstash 或类似服务器的集中式日志服务器。我的export-to-rsyslog工具就是为此而设计的。

这样做的好处是:

  • 存在本地的、可立即访问的、每个应用程序的、单独的(不与其他事物混合或被其他事物淹没)、最近的日志;
  • 与日志服务器的不稳定网络连接不会对应用程序施加背压(就像在更直接的模型中一样,在该模型中应用程序标准错误通过网络进行通信,或者直接连接到立即通过网络中继的进程);
  • 网络传输相对于本地日志记录来说是完全非侵入性的,可以稍后设置(当数据量增长到需要像集中式 Logstash 之类的东西时),并且可以重新配置(添加/删除发送的应用程序日志)网络)而不影响它;和
  • 在极端情况下,人们甚至可以安排将最近的日志数据重播到不稳定/意外擦除的日志服务器。

进一步阅读

相关内容