centos环境,yum源
默认情况下Linux系统安装了SYSLOG服务,默认也是开启的
[root@localhost ~]# service syslog restart
Shutting down kernel logger: [ OK ]

Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
从上面可以看出系统日志管理有两部分组成:syslogd和klogd
syslogd记录的是系统,服务产生的信息
klogd主要纪录一些系统内核的动作
syslog的配置文件
[root@localhost ~]# vim /etc/syslog.conf
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
# 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
#把除邮件、新闻组、授权信息、计划任务等外的所有通知性消息都写入messages文件中
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
##把邮件、新闻组中仅通知性消息写入info文件,其他信息不写入,“-”表示支持异步写入,在有大量日志需要写入的时候,日志能够先缓存在内存中后写入到磁盘上。
# Log cron stuff
cron.* /var/log/cron
#把计划任务的日志信息都写入到/var/log/cron
# Everybody gets emergency messages
*.emerg *
#通常应广播到当前所有用户;
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log

从它配置文件中可以看出日志文件设置的格式如下
facility.level action
facility定义日志消息的范围,常见的facility有kern,authpriv,mail,cron,uucp ,local0-local7 (与自定义程序使用) 和通配*

level日志级别:
emerg:emerg 紧急,处于Panic状态。通常应广播到所有用户;
alert:告警,当前状态必须立即进行纠正。例如,系统数据库崩溃;
crit:关键状态的警告。例如,硬件故障;
err:阻止工具或某些子系统部分功能实现的错误条件,等同error
warning :预警信息,等同warn
notice:具有重要性的普通条件
info:提供信息的消息
debug:不包含函数条件或问题的其他信息
none:没有重要级,通常用于排错
action:定义日志存放的位置
上面就是linux日志的内容,有时候为了安全,需要把日志放到日志服务器上,下面就设置个简单日志服务器.
我使用192.168.1.99做日志服务器,配置如下:
默认情况下linux主机只接受本机的产生的日志,所以要开启99这个主机接受我的另一台机器产生的日志
[root@localhost ~]# # vim /etc/sysconfig/syslog
SYSLOGD_OPTIONS="-r -m 0" #修改成这样
[root@localhost ~]# service syslog restart
[root@localhost ~]# echo > /var/log/messages ##清空99主机上日志记录
[root@localhost ~]# cat !$
cat /var/log/messages
[root@localhost ~]#
然后我在开一台机器192.168.1.188让其产生的日志都传到192.168.1.99上,配置如下:
[root@localhost ~]# vim /etc/syslog.conf
*.info;mail.none;authpriv.none;cron.none @192.168.1.99 ##也可以是域名,但需要dns解析到。
[root@localhost ~]# echo > /var/log/messages
[root@localhost ~]# cat !$
cat /var/log/messages
[root@localhost ~]#
[root@localhost ~]# service syslog restart
Shutting down kernel logger: [ OK ]
Shutting down system logger: [ OK ]
Starting system logger: [ OK ]
Starting kernel logger: [ OK ]
此时在99主机上查看日志记录:
[root@localhost ~]# cat /var/log/messages
Apr 12 12:18:31 192.168.1.188 syslogd 1.4.1: restart.
Apr 12 12:18:31 192.168.1.188 kernel: klogd 1.4.1, log source = /proc/kmsg started.
记录已经到99主机上了,这样一个最简单没有经过优化日志服务器已经建成
日志服务器不但能够记录服务和系统产生的日志,也可以记录很多网络设备产生的日志。
只需要在日志服务器上定义
[root@localhost ~]# vim /etc/syslog.conf
local7.info /var/log/route.log
[root@localhost ~]# service syslog restart
同时在路由器全局模式下设置
#logging on
#logging 192.168.1.99
#logging trap info
#logging facility local7
但是很多时候我们需要考虑日志服务器的安全
1,不能让所有的主机都能向日志服务器发送日志
2,不能能够让所有的用户都能够连接到日志服务器
3,日志的备份等一系列问题
对于前两条我们可以通过iptables来实现
# iptables -A INPUT -s 192.168.1.188 -p tcp --dport 22 -j ACCEPT
# iptables -A OUTPUT -s 192.168.1.99 -d 192.168.1.188 -p tcp --dport 22 -j ACCEPT
# iptables -A INPUT -s 192.168.1.188 -d 192.168.1.99 -p udp --dport 514 -j ACCEPT
#iptables -P INPUT DROP
ps:设置后只有188主机的日志弄够同步到日志服务器上,也只要188主机弄够远程连接到日志服务器。
linux使用logrotate来对日志管理,通常包括日志备份,删除,这一过程通常用cron程序来执行
logrotate是个很好用日志管理工具,他的配置文件有两部分组成:/etc/logrotate.conf 和:/etc/logrotate.d下所有的文件
[root@localhost logrotate.d]# vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}
/var/log/btmp {
missingok
monthly
minsize 1M
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
这是centos默认的配置,可以看出他的语法和简单,只要明白关键字是什么意识就知道怎样使用
compress 通过gzip 压缩转储以后的日志
nocompress 不压缩以后的日志
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,4指保留4个备份
create mode owner group 转储文件,使用指定的文权限,属主和属组创建新的日志文件
nocreate 不建立新的日志文件
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
prerotate/endscript在转储以前需要执行的命令需要放到这两关键字中间,这两关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令需要放到这两关键字中间,这两关键字必须单独成行
missingok:如果日志文件丢失,进入到下一个不发出错误消息
sharedscripts 一个脚本可以运行日志文件条目多次匹配多个文件
include就是包括/etc/logrotate.d下的配置文件,同时/etc/logrotate.d下的配置文件设置属性的高于/etc/logrotate.conf 设置的,所有当两者有冲突的时候,优先使用/etc/logrotate.d下的配置文件下的设置,我们自己定义(无论是网络设备还服务)的日志管理都可以按照下面格式来定义。
[root@localhost logrotate.d]# cat syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
[root@localhost logrotate.d]# cat httpd
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}