共计 3198 个字符,预计需要花费 8 分钟才能阅读完成。
Syslog 在网络管理中的应用
Syslog 是一种工业标准的协议,可用来记录设备的日志。在 UNIX 系统,路由器、交换机等网络设备中,系统日志(System Log)记录系统中任何时间发生的大小事件。管理者可以通过查看系统记录,随时掌握系统状况。UNIX 的系统日志是通过 syslogd 这个进程记录系统有关事件记录,也可以记录应用程序运作事件。通过适当的配置,我们还可以实现运行 syslog 协议的机器间通信,通过分析这些网络行为日志,藉以追踪掌握与设备和网络有关的状况。
Ubuntu 下安装 syslog apt-get install inetutils-syslogd
这里面的三个函数 openlog,syslog,closelog 是一套系统日志写入接口。另外那个 vsyslog 和 syslog 功能一样,只是参数格式不同。
通常,syslog 守护进程读取三种格式的记录消息。此守护进程在启动时读一个配置文件。一般来说,其文件名为 /etc/syslog.conf,该文件决定了不同种类的消息应送向何处。例如,紧急消息可被送向系统管理员(若已登录),并在控制台上显示,而警告消息则可记录到一个文件中。该机制提供了 syslog 函数,其调用格式如下
#include <syslog.h>
void openlog (char*ident,int option ,int facility);
void syslog(int priority,char*format,……)
void closelog();
调用 openlog 是可选择的。如果不调用 openlog,则在第一次调用 syslog 时,自动调用 openlog。调用 closelog 也是可选择的,它只是关闭被用于与 syslog 守护进程通信的描述符。调用 openlog 使我们可以指定一个 ident,以后,此 ident 将被加至每则记录消息中。ident 一般是程序的名称(例如,cron,ine 等)
程序的用法示例代码如下:
#include <syslog.h>
int main(int argc, char **argv)
{
openlog(“MyMsgMARK”, LOG_CONS | LOG_PID, 0);
syslog(LOG_DEBUG,
“This is a syslog test message generated by program ‘%s’\n”,
argv[0]);
closelog();
return 0;
}
编译生成可执行程序后,运行一次程序将向 /var/log /message 文件添加一行信息如下:
Feb 12 08:48:38 localhost MyMsgMARK[7085]: This is a syslog test message generated by program ‘./a.out’
syslog 函数及参数
syslog 函数用于把日志消息发给系统程序 syslogd 去记录,此函数原型是:
void syslog(int priority, const char *format, …);
第一个参数是消息的紧急级别,第二个参数是消息的格式,之后是格式对应的参数。就是 printf 函数一样使用。
如果我们的程序要使用系统日志功能,只需要在程序启动时使用 openlog 函数来连接 syslogd 程序,后面随时用 syslog 函数写日志就行了。
下面介绍在 RedHat 和 ubuntu 中如何配置它:
Ubuntu 和红帽常使用它,并且通过文件 /etc/rsyslog.conf 进行管理。文件中包含许多指定的特殊系统日志:有的是控制台方面的,有的是文件方面或其它主机的。
首先,我们需要载入合适的 TCP 和 UDP 插件以支持接收系统日志。把下面的代码添加到 rsyslog.conf 的头部:
$modload imtcp
$modload imudp
$InputTCPServerRun 10514
$UDPServerRun 514
载入的这两个模块能支持监听 TCP 和 UDP 的端口,并且指定哪个端口来接受事件,在这种情况下,使用 TCP 的 10514 端口和 UDP 的 514 端口。你需要确认一下本地防火墙(在你的主机和中央系统日志服务器之间的防火墙)
下面我们需要指定一些规则来告诉 rSyslog 在哪放输入事件。如果你不添加任何规则,输入事件将按照本地的规则进行处理,并且与本地主机的事件交织在一起。我们需要在上面添加节之后和本地处理系统日志之前来正确的指定这个规则,例如:
if $fromhost-ip isequal ‘192.168.0.2’ then /var/log/192.168.0.2.log
& ~
这里我们说的每一个来自于 192.168.0.2 的系统日志都应该保存在 /var/log/192.168.0.2.log 文件中。&~ 这个符号是非常重要的,因为它告诉 rSyslog 将停止处理消息。如果你把它忘写了,消息将越过下一个规则,并且继续处理。在这一规则中还有其他的变量。例如:
if $fromhost-ip startswith ‘192.168.’ then /var/log/192.168.log
& ~
这里我们用 192.168.* 替代了以这个为开始的所有 IP 地址,写入到 /var/log/192.168.log 文件中。你还可以看到一些其它的过滤。
你将需要重启这个 rsyslog 服务来激活我们所做的新的配置:
$ sudo service rsyslog restart
现在,对于发送方的主机,我们还需要对文件 rsyslog.conf 进行一些更改,在文件的头部,添加下面这行:
*.* @@192.168.0.1:10514
这是发送的所有事件,来自于所有源代码和所有重要级别(用 *.*),通过 TCP 协议传给 IP 地址为 192.168.0.1 的 10514 端口。你可是用你所在环境的地址来替换这个 IP 地址。要启用此配置,你将需要重启主机上的 rSyslog。
你可以通过 SSL/TLS 更进一步地发送你的系统日志。如果你在互联网上或其它网络间传输系统日志,这也没什么坏处,你可能会发现这个的简单说明。
现在,如果给你的配置管理系统 (如果不使用这个,你可以试一试 Puppet 或 Cfengine 工具) 添加这个配置,然后,您可以用适当的系统日志来有效地配置每台主机,以确保你的日志将被发送到中央系统日志服务器。
————————————– 分割线 ————————————–
RHEL5.4 部署中央日志服务器之 rsyslog+Log Analyzer http://www.linuxidc.com/Linux/2012-01/51853.htm
CentOS 6.3 下利用 Rsyslog+LogAnalyzer+MySQL 部署日志服务器 http://www.linuxidc.com/Linux/2013-07/86956.htm
使用 rsyslog mysql 和 logAnalyzer 的日志服务器 http://www.linuxidc.com/Linux/2012-09/70717.htm
CentOS 6.3 下利用 Rsyslog+LogAnalyzer+MySQL 部署日志服务器 http://www.linuxidc.com/Linux/2013-07/86956.htm
RHEL5.4 部署中央日志服务器之 rsyslog+loganalyzer http://www.linuxidc.com/Linux/2010-12/30801.htm
————————————– 分割线 ————————————–
Rsyslog 的详细介绍:请点这里
Rsyslog 的下载地址:请点这里