日志分析与Rsyslog
---------------------------分析和存储日志--------------------------------
#tail -f /var/log/messages[实时监控日志]
rsyslog设施类型(facility)
设施名代码说明
kern 0 内核日志消息
user 1 随机的用户日志消息
mail 2 邮件系统日志消息
daemon 3 系统守护进程日志消息
auth 4 安全管理日志消息
syslog 5 syslogd本身的日志消息
lpr 6 打印机日志消息
news 7 新闻服务日志消息
uucp 8 uucp(unix2unixcopy)日志消息
cron 9 crond日志消息
authpriv 10 授权相关的日志信息
ftp 11 ftp守护进程的日志信息
12-15 保留,由系统使用
local0~local7 16-23 保留,本地使用(可自定义)
使用logger发送日志消息
发送一个local3.info的日志消息
#logger -p local3.info "hello!"
//*-p指定优先级
发送一个以kern设备优先级为err级别的消息
#logger -t kern -p err “hello,wahahah.”
Rsyslog
查看当前系统中rsyslog状态
#systemctl status rsyslog
#systemctl is-enabled rsyslog
#systemctl is-active rsyslog
通过ps查看rsyslog进程
#ps -ef | grep rsyslogd | grep -v grep
配置说明:
举例:
/var/log/wtmp {
monthly ←每月转储
create 0664 root utmp ←创建wtmp文件,
文件权限0644,属主root,属组:utmp
minsize:1M ←日志大于1M才将被转储
rotate 1 ←转储文件保留1份
}
示例1:
1.编辑一个test的配置
#vim /etc/logrotate.d/test
/var/log/test.log {
missingok
rotate 5
size 1k
create 0640 root root
}
2.创建/var/log/test.log文件,大小为1000K
#dd if=/dev/zero of=/var/log/test.log bs=1024 count=1000
3.执行logrotate转储
#logrotate -v /etc/logrotate.conf
4.查看转储
#ls -l /var/log/test.log*
#journalctl[查看当前系统日志]
#journalctl -n 5[显示最新的5条日志记录]
#journalctl -p err[仅列示出err的错误信息]
#journalctl -f[实时查看日志信息]
#journalctl --since today[查看今天的日志]
#journalctl –snice yesterday[查看昨天的日志]
#journalctl --since “2014-09-09” --until “2014-09-15”[查看2014-09-09至2014-09-15的日志信息]
#journalctl --since “2014-09-09 12:50:00” --until “2014-09-15 12:00:00”[查看2014-09-09 12:50至2014-09-15 12:00的日志信息]
#journalctl --since 9:00 --until 18:00[按当日指定时间查看]
#journalctl --since 9:00_SYSTEMD_UNIT=sshd.service[依照某个时间查看指定的单元信息]
注:计算机必须uptime,一旦reboot,将只能看到启动之后的日志
#journalctl -o verbose[通过journalctl获得更多的各项服务/进程的信息]
#journalctl -o verbose -n[显示10个服务/进程的详细信息]
#journalctl -o verbose -n 1[显示1个服务/进程的详细信息]
#journalctl_SYSTEMD_UNIT=sshd.service[显示指定的单元类型的相关日志信息]
#journalctl_SYSTEMD_UNIT=sshd.service _PID=862[显示指定的单元类型及其PID的相关日志信息]
#journalctl _UID=0[显示指定的UID所运行的服务/进程]
#journalctl _PID=1[显示指定的PID信息]
#journalctl -b[查看从启动时开始的所有信息]
#journalctl -b -1[显示上一次系统启动前产生的日志]
#journalctl -k[显示由kernel产生的日志信息]
#systemd-analyze[显示本次启动系统过程中用户、initrd和kernel所花费的时间]
#systemd-analyze blame[显示每个启动项所花费的时间明细]
#systemd-analyze critical-chain[时间顺序你打印UNIT树]
#systemd-analyze plot > bootplot.svg[产生开机启动过程的时间图标]
#systemd-analyze dot | dot -Tsvg >systemd.svg[产生开机启动过程生成向量图]
将systemd journal写入至硬盘
(1)建立存放路径并设置相关权限
#mkdir -v /var/log/journal
#chown root.systemd-journal /var/log/journal
#chmod 2755 /var/log/journal
(2)重启你的系统或执行
#killall -USR1 systemd-journald
//*USR1用户自定义信号,本实验用来产生日志消息
(3)确认目录下内容
#cd /var/log/journal
#cd $ID ←进入你机器的编号
#ls
system.journal
---------------------------------Rsyslog----------------------------------
实现集中管理日志目的:
将B主机(client)的指定日志信息发送至A
主机(Server).在A主机上可以集中查看A和B主机的全部信息
IP说明
host-A:192.168.131.129
host-B:192.168.131.136
Server端(A主机)实现
(1)配置rsyslog.conf
#vim /etc/rsyslog.conf
将下列注释开启
$ModLoad imudp ←开启UDP syslog输入插件
$UDPServerRun 514 ←-开启UDP监听端口514
$ModLoad imtcp ←开启TCP syslog输入插件
$InputTCPServerRun 514 ← 开启TCP监听端口
rsyslog的传统传送日志方式的有3 种
1.UDP传输, 但信息有损耗
2.基于TCP明文的传输,只在特定情况下丢失信息,并被广泛使用
3.RELP传输,不会丢失信息,但只在rsyslogd 3.15.0及以上版本中可用
如果准备使用RELP传输,需要手动添加以下内容:
$ModLoad imrelp
$InputRELPServerRun 2514
(2)#vim /etc/sysconfig/rsyslog改为 SYSLOGD_OPTIONS="-r514 -c2"[启用监听服务]
Rsyslog
参数:
-c 指定运行兼容模式(兼容syslog)
-r 指定监听端口
-x再接收客户端时,禁用DNS查找(与-r配合)
-m标记时间戳.单位:分钟,为0时,表示禁用。(即每个多少分钟,在日志文件里增加—MARK--,以便于确认syslog守护进程没有停止)
-s ip :表示仅允许接收来自指定的IP信息
-s 192.168.131.136:192.168.10.2
#systemctl restart rsyslog[重启主机A的rsyslog服务]
Client(Host B)配置
#vim /etc/rsyslog.conf[配置rsyslog.conf]
在下面添加一行如下配置
*.* @192.168.131.129
注:
UDP传输 在主机名前加"@"→在客户端更改传输方式后需重启服务
TCP传输 在主机名前加"@@"
RELP传输 在主机名前加":omrelp:"
#systemctl restart rsyslog.service[启动rsyslog]
测试
1)Server端(Host-A)
#tail -f /var/log/messages[时时监控]
2)Client端(Host-B)
#logger -t kern -p err "hahaha"