日志分析与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" 

原文地址:https://www.cnblogs.com/yanghaitao/p/11528010.html