我们使用Log4J及其SyslogAppender将消息发送到中央系统日志服务器,所有服务器都运行在Unix机器上。
有没有一种方法(无论是Java还是Unix)来限制发送的消息数量,以避免服务器不稳定,从而影响networking?
我能想到的唯一select是将日志级别设置得更高,以便实际发送更less的消息,但是这不是理想的,因为重要的消息可能会被压制在本来是自身行为的机器上。
我认为在一个理想的世界里,一个dynamic变化的水平会是很好的:如果每秒消息数量超过某个水平,那么门槛会上升,但同时这听起来有点像过度杀伤力。
有任何想法吗?
谢谢
丰富
我想问题是,如果你没有把所有的日志都放到中央服务器上,你是否在意呢? 你所谈论的基本上是放弃信息 – 在这种情况下,你将失去日志。 这个可以吗? 如果是这样,你已经回答了你自己的问题 – 提高debugging级别只能得到你真正关心的消息。
但是,如果您试图匹配带宽限制(例如Splunk的月处理限制),则需要编写一个中间服务器来从syslog中获取日志并对其进行优先级sorting。 这并不困难,但是对于您的使用情况非常具体。 这种方法的一个好处是,这个中间人可以立即发送重要的日志到聚合服务器,并在一天/月底,发送原来没有发送的次高优先级的日志。 这样,你可以准确地填写配额。
如果你添加更多的具体要求(比如为什么你需要这样做),以及限制日志(重复行数?带宽?空间?聚合服务器不能跟上?)等等。好得多的答案。
祝你好运!
如果正确使用log4j,则使用更高的日志级别不应影响导入消息,因为它们应该具有较高的级别。 使用本地轮转在本地logging详细信息。
我所知道的唯一的一点就是,对于静默消息的configuration是相同的,比如,如果日志消息重复200次,则可以要求sysloglogging一次而忽略其他消息,并且只logging一条消息该消息重复199次以上。 限制日志可能会使您失去日志消息,这是不可取的。
也许你可以把你的服务器和日志服务器之间的QOS /stream量整形,并使用它来控制速度?
如果你说的是带宽问题,你甚至可以使用压缩(它支持rsyslog,但我不知道syslog-ng)。 另外,如果您不使用实时警报的日志,则可以创build脚本,每隔几秒钟读取本地日志,并发送它们的压缩聚合。
如果你想要一个分布式的解决scheme,那么你可以使用上面的build议。 (节省很多链接的带宽)。 但是,如果您提供更集中的内容(带宽浪费稍多,因为您必须将无用的日志发送给中间服务器),那么Redmumba解决scheme要好得多。