Linux Syslog

介绍Linux Syslog基础与相关配置。syslog常被称为系统日志或系统记录,是一种用来在互联网协议(TCP/IP)的网上中传递记录档消息的标准。syslog是Linux系统默认的日志守护进程。。syslog日志消息既可以记录在本地文件中,也可以通过网络发送到接收syslog的服务器。接收syslog的服务器可以对多个设备的syslog消息进行统一的存储,或者解析其中的内容做相应的处理。常见的应用场景是网络管理工具、安全管理系统、日志审计系统。 完整的syslog日志中包含产生日志的程序模块(Facility)、严重性(Severity或 Level)、时间、主机名或IP、进程名、进程ID和正文。我们开发的Java程序或者C程序也可以调用SYSLOG接口给syslog日志服务器实时发送日志,我们自己程序一般使用USER.NOTICE。

Redhat6.5 Syslog配置

架构说明: 1台日志发送服务器(可以是各种设备或者应用服务器),1台日志收集服务器(负责统一收集各种设备的日志)

日志收集服务器配置

假设当前日志收集服务器IP地址为192.168.33.226,主机名host1

  1. vi /etc/rsyslog.conf
  2. 打开如下配置,分别是启用日志,UDP接收,TCP接收,日志路径
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    $ModLoad imklog # provides kernel logging support (previously done by rklogd)

    # Provides UDP syslog reception
    $ModLoad imudp
    $UDPServerRun 514

    # Provides TCP syslog reception
    $ModLoad imtcp
    $InputTCPServerRun 514

    # Log anything (except mail) of level info or higher.
    # Don't log private authentication messages!
    *.info;mail.none;authpriv.none;cron.none /var/log/messages
  3. vi /etc/sysconfig/rsyslog
    1
    SYSLOGD_OPTIONS="-r -c 5"
  4. 重启进程service rsyslog restart
  5. 查看日志tail -f /var/log/messages
  6. 本机测试日志logger –p authpriv.notice "Hello"
  7. /var/logmessages 中出现 Sep 19 08:18:39 host1 root: authpriv.notice Hello
  8. 查看网络信息netstat -tulpn | grep rsyslog

客户端日志服务配置

配置一台服务器host2,往日志收集服务器192.168.33.226发送日志信息

  1. vi /etc/rsyslog.conf 添加发送所有日志倒226的配置,可以根据需要调整,*.*@通过TAB隔开
    1
    2
    3
    4
    $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    $ModLoad imklog # provides kernel logging support (previously done by rklogd)

    *.* @192.168.33.226
  2. 重启进程service rsyslog restart
  3. 查看192.168.33.226服务器的日志tail -f /var/log/messages
  4. 测试日志logger –p authpriv.notice "Hello"
  5. 192.168.33.226服务器的日志打印出:Sep 19 08:28:21 host2 root: authpriv.notice Hello

配置说明

/etc/syslog.conf 文件格式 facility.level action action和facility.level之间使用TAB隔开

facility 消息类型:

1
2
3
4
5
6
7
8
9
10
11
12
13
kern     内核信息,首先通过 klogd 传递
user 用户进程
mail 邮件
daemon 后台进程
authpriv 授权信息
syslog 系统日志
lpr 打印信息
news 新闻组信息
uucp 由uucp生成的信息
cron 计划和任务信息。
mark syslog 内部功能用于生成时间戳
local0----local7 与自定义程序使用,例如使用 local5 做为 ssh 功能
* 通配符代表除了 mark 以外的所有功能

level 消息级别:

1
2
3
4
5
6
7
8
9
10
emerg 或 panic   该系统不可用(最紧急消息)
alert 需要立即被修改的条件(紧急消息)
crit 阻止某些工具或子系统功能实现的错误条件(重要消息)
err 阻止工具或某些子系统部分功能实现的错误条件(出错消息)
warning 预警信息(警告消息)
notice 具有重要性的普通条件(普通但重要的消息)
info 提供信息的消息(通知性消息)
debug 不包含函数条件或问题的其他信息(调试级-信息量最多)
none 没有重要级,通常用于排错(不记录任何日志消息)
* 所有级别,除了none

日志信息可以分别记录到多个文件里,还可以发送到命名管道、其他程序甚至另一台机器。包括三类:

1
2
3
file                    指定文件的绝对路径
terminal 或 prin 完全的串行或并行设备标志符
@host(@IP地址使用UDP协议,@@IP地址代表使用TCP协议) 远程的日志服务器

API

Linux C中提供一套系统日记写入接口,包括三个函数:openlog,syslog和closelog。
JAVA 可以自行封装一个UdpClientSocket进行发送