php远程写syslog,(转载)把syslog接收的远程日志从/var/log/messages中分开
发布日期:2021-06-24 15:18:58 浏览次数:2 分类:技术文章

本文共 2919 字,大约阅读时间需要 9 分钟。

今天突然要配置Linux的syslog服务器,摸了一早上才弄好。记录远程机器发来的syslog消息倒是容易(网上到处都是),不过按照默认的设置,syslog会将所有信息都给写入 /var/log/messages 中,和本机的消息都混到一块去了。

实在可恨,搜了一上午都找不到解决办法。本来看到个FreeBSD中用脚本处理的方法,兴冲冲的跑去实验,结果一点反应都没有。

后来看到介绍中有一句:“※注意,不能通过“|/var/xxx.sh”方式导向日志到其他脚本中处理!!”,差点气得吐血...

网上有人说syslog不能分离远程日志,于是试图从syslog-ng下手。结果syslog-ng编译起来N麻烦不说,跑起来还有问题,于是回头继续摸索syslog。试了N次终于找到个差强人意的解决办法,算是解决分离的问题。

--------------------------------------------------------------------------------

首先确定远程发来的消息是哪一级的,比如Panabit发过来的都是emerg级消息,某些路由器用的是notice级。实在不行就先用info然后过滤(具体办法见后文)。

(红色字是要添加的内容)

vi /etc/sysconfig/syslog

SYSLOGD_OPTIONS="-r -x -m 0"

-r: 打开接受外来日志消息的功能,其监控514 UDP端口;

-x: 关闭自动解析对方日志服务器的FQDN信息,这能避免DNS不完整所带来的麻烦;

vi /etc/syslog.conf

# 把emerg等级的消息从messages中除开,免得重复记录:

*.info;*.!emerg;mail.none;authpriv.none;cron.none /var/log/messages # *.!emerg 表示不记录emerg级的消息

#*.emerg * # 注释掉原来的emerg,不将emerg级消息显示到控制台

# 输出到/var/log/mylog

*.emerg /var/log/mylog

然后重启syslog:service syslog restart

这样就把远程日志写入/var/log/syslog并且不影响本机syslog工作了。

--------------------------------------------------------------------------------

关于/etc/syslog.conf写法,这里有个详细说明:

/etc/syslog.conf 根据如下的格式定义规则

/etc/syslog.conf 根据如下的格式定义规则:

facility.level action

设备.优先级 动作

1、facility 定义日志消息的范围,其可使用的key有:

auth -由 pam_pwdb 报告的认证活动。

authpriv -包括特权信息如用户名在内的认证活动

cron -与 cron 和 at 有关的计划任务信息。

daemon -与 inetd 守护进程有关的后台进程信息。

kern -内核信息,首先通过 klogd 传递。

lpr -与打印服务有关的信息。

mail -与电子邮件有关的信息

mark - syslog内部功能用于生成时间戳

news -来自新闻服务器的信息

syslog -由 syslog 生成的信息

user -由用户程序生成的信息

uucp -由 uucp 生成的信息

local0-local7 -与自定义程序使用

* 通配符代表除了 mark 以外的所有功能

除mark为内部使用外,还有security为一个旧的key定义,等同于auth,已经不再建议使用。

2、level级别定义消息的紧急程度。按严重程度由高到低顺序排列为:

emerg -该系统不可用,等同panic

alert -需要立即被修改的条件

crit -阻止某些工具或子系统功能实现的错误条件

err -阻止工具或某些子系统部分功能实现的错误条件,等同error

warning -预警信息,等同warn

notice -具有重要性的普通条件

info -提供信息的消息

debug -不包含函数条件或问题的其他信息

none -没有重要级,通常用于排错

* 所有级别,除了none

其中,panic、error、warn均为旧的标识符,不再建议使用。

在定义level级别的时候,需要注意两点:

1)优先级是由应用程序在编程的时候已经决定的,除非修改源码再编译,否则不能改变消息的优先级;

2)低的优先级包含高优先级,例如,为某个应用程序定义info的日志导向,则涵盖notice、warning、err、crit、alert、emerg等消息。(除非使用=号定义)

3、selector选择条件

通过小数点符号“.”把facility和level连接在一起则成为selector(选择条件)。

可以使用分号“;”同时定义多个选择条件。也支持三个修饰符:

* - 所有日志信息

= - 等于,即仅包含本优先级的日志信息

! - 不等于,本优先级日志信息除外

4、action动作 由前面选择条件定义的日志信息,可执行下面的动作:

file-指定日志文件的绝对路径

terminal 或 print -发送到串行或并行设备标志符,例如/dev/ttyS2

@host -远程的日志服务器

username -发送信息本机的指定用户信息窗口中,但该用户必须已经登陆到系统中

named pipe -发送到预先使用 mkfifo 命令来创建的 FIFO 文件的绝对路径

※注意,不能通过“|/var/xxx.sh”方式导向日志到其他脚本中处理!!

另外:如果确定不了远程发来的消息属于哪一级,可以这样做:

# 先分别记录各种消息

*.info;mail.none;authpriv.none;cron.none /var/log/messages

*.emerg /var/log/testlog1

*.warning /var/log/testlog2

*.notice /var/log/testlog3

然后分别cat并与messages中比较一下看看哪个里面有需要的日志。比如发现emerg和notice里有需要的内容,再改成这样:

*.info;*.!emerg;*.!notice;mail.none;authpriv.none;cron.none /var/log/messages

*.emerg;*.notice /var/log/mylog

这样写就是将emerg和notice的内容独立出来,存入/var/log/mylog,以免都混到/var/log/messages中不好分析。

转载于:http://www.cnblogs.com/bits/archive/2009/03/09/Linux-syslog_remote_cap2sf.html

转载地址:https://blog.csdn.net/weixin_33587731/article/details/116414505 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:oracle analyze意义,oracle analyze table的作用
下一篇:oracle的外部表和内部表链接,内部表、外部表和分区表

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月09日 09时36分30秒