共计 3148 个字符,预计需要花费 8 分钟才能阅读完成。
这篇文章将为大家详细讲解有关 Solaris 中 syslog 机制有什么用,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
syslog 机制负责发送、记录系统内核及工具所产生的信息,由 syslog() 调用、syslogd 守护进程和配置文件 /etc/syslog.conf 组成。当系统内核及工具产生信息时,通过调用 syslog(),把信息送往 syslogd,syslogd 再根据 /etc/syslog.conf 中的配置要求,将这些信息分别作如下处理:
1. 记录到系统日志中;
2. 输出到系统控制台上;
3. 转发给指定的用户;
4. 通过网络转发给其它主机上的 syslogd。
通过 syslog.conf 的配置,我们可以灵活地对信息的发送和保存进行控制。
syslogd 进程在系统启动时由 /etc/rc2.d/S74syslog 启动。如果需要手工启动或停止 syslogd,可以使用命令:
# /etc/init.d/syslog start | stop
/etc/syslog.conf 文件中的一项配置记录由“选项”(selector) 和“动作”(action) 两个部分组成,两者间用 tab 制表符进行分隔。而“选项”又由一个或多个形如“类型. 级别”格式的保留字段组合而成,各保留字段间用分号分隔。
保留字段中的“类型”代表信息产生的源头,可以是:
kern 由 kernel 产生的信息;
user 由用户进程产生的信息。对那些由程序或不在此列出的工具产生的信息,其缺省类型都是“user”;
mail 邮件系统产生的信息;
daemon 系统守护进程的信息,如 in.ftpd、telnetd;
auth 由 login, su, getty 等进行身份认证时产生的信息;
syslog 由 syslogd 自己内部产生的信息;
lpr 行打印 spooling 系统的信息;
news USENET 网络新闻系统的信息;
uucp UUCP 系统信息;
cron cron 和 at 工具信息;
local0-7 保留为 local 使用;
mark syslogd 内部产生的时间戳信息;
* 除 mark 之外的所有其它类型(此符号不可用以代表所有级别)。
保留字段中的“级别”代表信息的重要性,可以是:
emerg 紧急,处于 Panic 状态。通常应广播到所有用户;
alert 告警,当前状态必须立即进行纠正。例如,系统数据库崩溃;
crit 关键状态的警告。例如,硬件故障;
err 其它错误;
warning 警告;
notice 注意;非错误状态的报告,但应特别处理;
info 通报信息;
debug 调试程序时的信息;
none 通常调试程序时用,指示带有 none 级别的类型产生的信息无需送出。如 *.debug;mail.none 表示调试时除邮件信息外其它信息都送出。
“动作”域指示信息发送的目的地。可以是:
/filename 日志文件。由绝对路径指出的文件名,此文件必须事先建立;
@host 远程主机;
user1, user2 指定用户。如果指定用户已登录,那么他们将收到信息;
* 所有用户。所有已登录的用户都将收到信息。
我们来看看 /etc/syslog.conf 文件中的实例:
……
*.err;kern.debug;daemon.notice;mail.crit /var/adm/messages
……
这行中的“action”就是我们常关心的那个 /var/adm/messages 文件,输出到它的信息源头“selector”是:
*.err – 所有的一般错误信息;
kern.debug – 核心产生的调试信息;
daemon.notice – 守护进程的注意信息;
mail.crit – 邮件系统的关键警告信息
于是我们对 /var/adm/messages 中的东东怎么来的大致清楚一点了。再看下面(不理会那个注释符号“#”):
……
# if a non-loghost machine chooses to have authentication messages
# sent to the loghost machine, un-comment out the following line:
#auth.notice ifdef(‘LOGHOST’, /var/log/authlog, @loghost)
……
这里涉及 Solaris 下的 loghost 和 m4 宏解释器。loghost 好理解,就是在局域网内多台 SUN 机器中指定一台作为 loghost,大家的 syslogd 有水就都往它上面灌。具体谁是 loghost 在 /etc/hosts 中定义:
……
192.168.1.11 host1 loghost
192.168.1.22 host2
……
m4 负责解释 ifdef,它的事迹这里就不去深究了(要考 SA 的兄弟姐妹们可要去看啊,有题的),反正上面那个 ifdef 的意思就是:如果本机是 loghost,那么信息送到 /var/log/authlog 中,否则送到 @后的主机上。
下面作为一个示例,看看如何使用 syslog 机制来对 telnet 登录进行记录。
Telnet 和 ftp 等许多网络服务是通过 inetd 来提供的。因此先检查一下 inetd 使用了什么类型和级别的 syslog 调用:
# man inetd
……
-t Instructs inetd to trace the incoming
connections for all of its TCP services. It does this by
logging the client’s IP address and TCP port number,
along with the name of the service, using the syslog(3)
facility. UDP services can not be traced. When tracing is
enabled, inetd uses the syslog facility code “daemon’’
and “notice’’priority level.
……
就是说,启动带 - t 选项的 inetd,它才会调用 syslog 来记录 TCP 服务的细节,类型是 daemon,级别是 notice。于是先修改 inetd 的启动脚本 /etc/init.d/inetsvc,找到 inetd 那行,改为:
/usr/sbin/inetd -s -t
前面看到,daemon.notice 已经包括在 syslog.conf 中,action 是 /var/adm/messages。如果 action 不想变,那么就不用做修改了。
重启一下 syslogd:
# /etc/init.d/syslog stop
# /etc/init.d/syslog start
重启一下 inetd:
# /etc/init.d/inetsvc stop
# /etc/init.d/inetsvc start
试验一下结果。开一个窗口监视有没有新的 message 来:
# tail -f /var/adm/messages
从另一台机器上 telnet 或 ftp 上来。上面的监视窗口中应该有输出(^C 终止监视):
……
Jun 18 12:08:42 host1 inetd[755]: [ID 317013 daemon.notice] ftp[759] from 192.168.1.88 1082
Jun 18 12:09:13 host1 inetd[755]: [ID 317013 daemon.notice] telnet[760] from 192.168.1.88 1083
Jun 18 12:11:22 host1 inetd[755]: [ID 317013 daemon.notice] ftp[771] from 192.168.1.88 1084
关于“Solaris 中 syslog 机制有什么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。