我想集中所有服务器的日志记录。服务器操作系统包括 Windows 2003、2008、Ubuntu 和 Redhat。我认为 Splunk 太贵了,有没有人使用开源或价格合理的软件设置过这样的东西。如果您有使用该产品的经验,请仅回答,我已经进行了谷歌搜索!
linux windows-server-2003 windows-server-2008 logging syslog
我有一个脚本会定期检查 /var/log/system.log,我注意到在我们的网络中,有些机器通过重新启动和其他活动将日志文件保留一个月,而有些则每晚或每次重新启动时清除文件。
有谁知道这里的确切规则,或者我是否可以指定间隔?提前致谢。
我一直在查看RFC5424以找到将结束系统日志事件的正式指定标记。
不幸的是我找不到它。因此,如果我想实现一些对某些消息做出反应的小型系统日志服务器,那么结束消息的标记是什么(是的,通常事件是一行,但我在规范中找不到它)
澄清:
我称之为事件是因为我将一条消息与一行相关联。一个事件可能是这样的
Type: foo
Source: webservers
Run Code Online (Sandbox Code Playgroud)
而给我的信息是这样的:
Type: foo Source: webservers
Run Code Online (Sandbox Code Playgroud)
http://tools.ietf.org/html/rfc5424#section-6定义:
SYSLOG-MSG = HEADER SP STRUCTURED-DATA [SP MSG]
Run Code Online (Sandbox Code Playgroud)
既不STRUCTURED-DATA也不MSG告诉我这些领域如何结束。特别MSG是被定义为MSG-ANY / MSG-UTF8几乎可以扩展到任何东西。没有什么说换行符标志着结束(或 an8或 ana就此而言)。鉴于示例消息(第 6.5 节):
这是一条有效消息,或 2 条有效消息,具体取决于您是否说HEADER元素绝不能出现在任何MSG元素中:
文字空白
<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 - <34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47
|
is this an end marker?
Run Code Online (Sandbox Code Playgroud)
\t 代表一个选项卡
<34>1 2003-10-11T22:14:15.003Z mymachine.example.com su - ID47 -\t<34>1 …Run Code Online (Sandbox Code Playgroud) 我们有大约 9-10 个设备,我们希望将日志记录定向到我们的 rsyslog 服务器。但是,只有 8 个本地设施(0-7)。我们怎样才能绕过这个限制?
我在系统日志中收到这样的消息。
rsyslogd-2177: imuxsock lost 21869 messages from pid 3418 due to rate-limiting
rsyslogd-2177: imuxsock begins to drop messages from pid 3427 due to rate-limiting
Run Code Online (Sandbox Code Playgroud)
我的服务器在最近几天变得没有响应,我必须重新启动机器 2-3 次。
请让我知道这些消息可能是什么,以及这些消息是否可能是服务器停机的原因。
Munin 非常冗长,并且在每次运行时都会将一堆内容记录到munin-graph.log、munin-html.log和munin-limits.log中。munin-update.logmunin-cron
log_level 0我已经通过在munin-node.conf中设置来降低 munin-node 日志记录级别,效果很好。munin-node.log仅在生成错误消息时更新。
不过我也尝试在 中添加相同的选项munin.conf,但它使 munin 崩溃。
如何减少 munin 写入的日志量?
在我的standalone.xml,我有这样的syslog-handler配置:
<syslog-handler name="SYSLOG" enabled="true">
<level name="INFO"/>
<hostname value="i-XXXXXXX"/>
<formatter><syslog-format syslog-type="RFC3164"/></formatter>
</syslog-handler>
...
<root-logger>
<level name="INFO"/>
<handlers>
<handler name="SYSLOG"/>
<handler name="CONSOLE"/>
<handler name="FILE"/>
</handlers>
</root-logger>
Run Code Online (Sandbox Code Playgroud)
然而,没有输出传送到/var/log/syslog. 如果我用 启动 jboss standalone.sh | logger,我会在那里看到输出,所以我认为我的 rsyslogd 设置/工作合理(一个股票的 Ubuntu 安装,FWIW)。
我的用户经常要求我负责知道事件是否没有发生。
我总是不得不使用 cron'ed shell 脚本和大量日期边缘案例测试来构建自定义和脆弱的解决方案。
集中式日志记录应该提供一种更好、更易于维护的方式来掌握过去 N 小时内未发生的事情。像logstash通知和nagios警报之类的东西。
toppledwagon 的回答非常有帮助。o O(灯泡。)我现在有十几个批处理作业正在检查新鲜度。我想彻底公正地回答他,并跟进我如何实施他的想法。
我将 jenkins 配置为发出系统日志,logstash 捕获它们并通过 nsca 将状态更新发送到 nagios。我还使用 check_mk 使所有内容保持干燥并在 nagios 中组织起来。
:::ruby
filter {
if [type] == "syslog" {
grok {
match => [ "message", '%{SYSLOGBASE} job="%{DATA:job}"(?: repo="%{DATA:repo}")?$',
"message", "%{SYSLOGLINE}" ]
break_on_match => true
}
date { match => [ "timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] }
}
}
Run Code Online (Sandbox Code Playgroud)
神奇之处在于 grok 的 match 参数中的那对双模式以及 break_on_match => true。Logstash 将依次尝试每个模式,直到其中一个匹配。
我们使用 logstash …
在 /etc/rsyslog.d/ 的文件中,我有以下内容:
local3.* /var/log/mylog.log
Run Code Online (Sandbox Code Playgroud)
当我登录到该设施时,记录的时间戳如下所示:
Apr 27 21:12:20 hostname msg
Run Code Online (Sandbox Code Playgroud)
我如何设置东西,使它们看起来像这样?
2014-04-27T21:12:20 hostname msg
Run Code Online (Sandbox Code Playgroud) 我找到了这些针对 syslogd 的解决方案,它们在某些事件(如 local0.crit 或 local1.err)上发送电子邮件
如何让 syslogd 通过电子邮件将某些日志消息发送给我? http://www.johnandcailin.com/blog/john/how-setup-real-time-email-notification-critical-syslog-events
但是,我的系统在 systemd 上运行,因此将日志用于系统日志。如何在不运行 cron 每 5 分钟检查所有日志并将日志发送到地址或类似地址的情况下基于事件实施电子邮件?