日志片断分析
systemd:服务报出来的信息
kvm:内核模块kvm报出来的信息
kernel: tun: 内核的tun模块报出来的信息
kernel: br0: 内核的br0模块报出来的信息
kernel: kvm [1437] kvm进程为pid1437报出来的信息
Jul 31 11:00:01 localhost systemd: Starting Session 4 of user root.
Jul 31 11:01:01 localhost systemd: Started Session 5 of user root.
Jul 31 11:01:01 localhost systemd: Starting Session 5 of user root.
Jul 31 11:01:55 localhost kvm: 1 guest now active
Jul 31 11:01:55 localhost kernel: tun: Universal TUN/TAP device driver, 1.6
Jul 31 11:01:55 localhost kernel: tun: (C) 1999-2004 Max Krasnyansky <maxk@qualcomm.com>
Jul 31 11:01:55 localhost kernel: device tap0 entered promiscuous mode
Jul 31 11:01:55 localhost kernel: br0: port 2(tap0) entered forwarding state
Jul 31 11:01:55 localhost kernel: br0: port 2(tap0) entered forwarding state
Jul 31 11:01:57 localhost kernel: kvm [1437]: vcpu0 disabled perfctr wrmsr: 0xc2 data 0xffff
Jul 31 11:01:57 localhost kernel: kvm [1437]: vcpu0 unhandled rdmsr: 0x570
Jul 31 11:02:10 localhost kernel: br0: port 2(tap0) entered forwarding state
Jul 31 11:02:17 localhost kernel: br0: port 2(tap0) entered disabled state
Jul 31 11:02:17 localhost kernel: device tap0 left promiscuous mode
Jul 31 11:02:17 localhost kernel: br0: port 2(tap0) entered disabled state
Jul 31 11:02:17 localhost kvm: 0 guests now active
Jul 31 11:02:33 localhost kvm: 1 guest now active
Jul 31 11:02:33 localhost kernel: device tap0 entered promiscuous mode
Jul 31 11:02:33 localhost kernel: br0: port 2(tap0) entered forwarding state
Jul 31 11:02:33 localhost kernel: br0: port 2(tap0) entered forwarding state
Jul 31 11:02:48 localhost kernel: br0: port 2(tap0) entered forwarding state
Jul 31 11:02:59 localhost kernel: kvm [1463]: vcpu0 disabled perfctr wrmsr: 0xc2 data 0xffff
Jul 31 11:02:59 localhost kernel: kvm [1463]: vcpu0 unhandled rdmsr: 0x570
Jul 31 11:03:36 localhost systemd: getty@tty1.service has no holdoff time, scheduling restart.
Jul 31 11:03:36 localhost systemd: Started Getty on tty1.
Jul 31 11:03:36 localhost systemd: Starting Getty on tty1...
Jul 31 11:03:58 localhost systemd-logind: New session 6 of user root.
Jul 31 11:03:58 localhost systemd: Started Session 6 of user root.
Jul 31 11:03:58 localhost systemd: Starting Session 6 of user root.
Jul 31 11:10:01 localhost systemd: Started Session 7 of user root.
Jul 31 11:10:01 localhost systemd: Starting Session 7 of user root.
Jul 31 11:11:46 localhost yum[1599]: Installed: pciutils-3.2.1-4.el7.x86_64
http://blog.csdn.net/hxh129/article/details/8089474
格式 | 日志设备(类型).(连接符号)日志级别 日志处理方式(action) 其中连接符号有.|.=|.!三种 | ||||
日志设备 | 注释 | 日志级别 | 注释 | 动作 | 注释 |
auth | pam产生的日志 | debug | 有调式信息的,日志信息最多 | /var/log/file.log | |
authpriv | ssh,ftp等登录信息的验证信息 | info | 一般信息的日志,最常用 | /dev/pts/0 | |
cron | 时间任务相关 | notice | 最具有重要性的普通条件的信息 | @192.168.0.1 | udp远程 |
kern | 内核 | warning | 警告级别 | @@192.168.0.1:10514 | tcp远程 |
mark | rsyslog服务内部的信息,时间标识 | err | 错误级别,阻止某个功能或者模块不能正常工作的信息 | root | 在线root |
uucp | unix to unix copy, unix主机之间相关的通讯 | cirt | 严重级别,阻止整个系统或者整个软件不能正常工作的信息 | root,kadefor,up01 | 在线多个 |
lpr | 打印 | alert | 需要立刻修改的信息 | * | 所有在线 |
news | 新闻组 | emerg | 内核崩溃等严重信息 | ~ | 忽略,丢弃 |
users | 用户程序产生的相关信息 | none | 什么都不记录 | ^/tmp/a.sh | 执行脚本 |
邮件 | |||||
local1~7 | 自定义的日志设备 |
last 与lastb一样,只不过lastb默认显示的是btmp文件
[root@test1 ~]# rpm -qa|grep log
sysklogd-1.4.1-46.el5
logwatch-7.3-9.el5_6
logrotate-3.7.4-12
rsyslog-3.22.1-7.el5
[root@test1 ~]# rpm -qa|grep init
initscripts-8.45.42-1.el5.centos
[root@test1 ~]# rpm -qa|grep psacct
psacct-6.3.2-44.el5
/var/run/utmp 当前的,/var/log/wtmp 历史的,/var/log/btmp 失败的
[root@cache ~]# last
root pts/0 36.44.101.18 Sat Jul 19 19:19 still logged in
root pts/0 36.44.101.18 Sat Jul 19 18:59 - 19:18 (00:19)
root pts/0 172.16.1.18 Fri Jul 18 22:18 - 01:47 (03:28)
wtmp begins Mon Jul 14 19:02:38 2014
[root@cache ~]# last -f /var/log/btmp 查看失败纪录的 -f /var/run/utmp -f /var/log/wtmp
root ssh:notty 36.44.101.18 Sat Jul 19 19:18 still logged in
root ssh:notty 36.44.101.18 Sat Jul 19 19:18 - 19:18 (00:00)
btmp begins Sat Jul 19 19:18:54 2014
登录记账
登录会话(如login程序,telnet程序和sshd程序)
/var/run/utmp
/var/log/wtmp
/var/log/lastlog
[root@250-shiyan include]# less bits/utmpx.h
[root@250-shiyan include]# less utmp.h
[root@250-shiyan include]# less utmpx.h
[root@250-shiyan include]# less paths.h
[root@250-shiyan include]# pwd
/usr/include
一般来说,应用程序无需知道/var/run/utmp,/var/log/wtmp这些路径名,因为这些路径名是编译进glibc的。需要引用这些文件的存储位置的程序应该使用在<paths.h>(and <utmpx.h>)中定义的_path_utmp和_path_wtmp路径名常量,而不是在代码中硬编码路径名。
wtmp和utmp文件都是二进制文件,他们不能被诸如tail命令剪贴或合并(使用cat命令)。用户需要使用who、w、users、last和ac来使用这两个文件包含的信息。
last命令往回搜索wtmp来显示自从文件第一次创建以来登录过的用户
lastlog命令查看各个用户最后一次登录时间
users用单独的一行打印出当前登录的用户,每个显示的用户名对应一个登录会话
w命令查询utmp文件并显示当前系统中每个用户和它所运行的进程信息
who命令查询utmp文件并报告当前登录的每个用户
ac命令根据当前的/var/log/wtmp文件中的登录进入和退出来报告用户连结的时间(小时)
ac -d按天计算登录的时间,ac -p按用户计算登录时间,ac -d lzb查找此用户每天的登录时间
包含下列结构的一个二进制记录写入这两个文件中:
struct utmp {
char ut_line[8]; /* tty line: "ttyh0", "ttyd0", "ttyp0", ... */
char ut_name[8]; /* login name */
long ut_time; /* seconds since Epoch */
};
登录时,login程序填写这样一个结构,然后将其写入到utmp文件中,同时也将其添写到wtmp文件中。
注
销时,init进程将utmp文件中相应的记录擦除(每个字节都填以0
),并将一个新记录添写到wtmp文件中。读wtmp文件中的该注销记录,其ut_name字段清除为0。在系统再启动时,以及更改系统时间和日期的前
后,都在wtmp文件中添写特殊的记录项。who( 1 )程序读utmp文件,并以可读格式打印其内容。后来的UNIX版本提供last( 1
)命令,它读wtmp文件并打印所选择的记录。wtmp文件,它跟踪各个登录和注销事件。
wted
wtmp/utmp日志编辑程序。你可以使用这个工具编辑所有wtmp或者utmp类型的文件。
z2
utmp/wtmp/lastlog日志清理工具。可以删除utmp/wtmp/lastlog日志文件中有关某个用户名的所有条目。不过,如果用于Linux系统需要手工修改其源代码,设置日志文件的位置。
连接时间日志
进程统计日志
错误日志
[root@cache ~]# rpm -qa|grep psacct
psacct-6.3.2-63.el6_3.3.x86_64
[root@cache ~]# service psacct stop
Shutting down process accounting: [ OK ]
[root@test1 account]# service psacct start 服务启动
Starting process accounting: [ OK ]
[root@test1 account]# /etc/init.d/psacct start 脚本启动
Starting process accounting: [ OK ]
[root@test1 ~]# lastcomm pts/0 通过终端名
[root@test1 ~]# lastcomm ls 通过命令名
[root@test1 ~]# lastcomm oracle 通过用户名查询
[root@cache ~]# lastcomm
crond SF root __ 0.03 secs Sat Jul 19 20:01
run-parts root __ 0.03 secs Sat Jul 19 20:01
S 命令由超级用户执行
F 命令由fork产生,但没有exec
D 命令终止并创建一个core文件
X 命令被sigterm信号终止
[root@cache ~]# sa
90 32918.77re 0.02cp 15590k
2 103.78re 0.00cp 17840k sshd
2 0.00re 0.00cp 40344k rpm
15 32719.14re 0.00cp 15922k ***other*
4 0.00re 0.00cp 27552k ps
3 95.59re 0.00cp 14420k sftp-server
3 0.00re 0.00cp 27104k psacct
6 0.00re 0.00cp 4355k unix_chkpwd
4 0.00re 0.00cp 29324k ls
7 0.00re 0.00cp 13053k bash*
0.36re "实际时间" 单位为分钟。
0.12cp 系统和用户时间总数(CPU时间, 单位为分钟)。
31156K 核心使用所占的平均CPU时间, 一个单元的大小为1KB。
up2date 命令名。
显示每一个用户:
[root@test1 ~]# sa -u
root 0.00 cpu 917k mem accton
root 0.00 cpu 15806k mem touch
root 0.00 cpu 16060k mem psacct
oracle 0.07 cpu 35696k mem oracle
oracle 0.00 cpu 327296k mem oracle *
[root@test1 ~]# sa -a
245 107.25re 0.12cp 74539k
44 57.27re 0.05cp 35697k oracle
4 0.04re 0.04cp 28412k rpmq
1 0.12re 0.03cp 78080k yum-updatesd-he
2 24.14re 0.00cp 16330k sshd
2 23.90re 0.00cp 16576k bash
[root@test1 ~]# sa -b
249 110.34re 0.12cp 74947k
4 0.04re 0.04cp 28412k rpmq
13 1.24re 0.03cp 14194k ***other
46 60.35re 0.06cp 35697k oracle
2 24.14re 0.00cp 16330k sshd
2 23.90re 0.00cp 16576k bash
2 0.00re 0.00cp 16464k ps
[root@test1 ~]# sa -m
252 111.34re 0.13cp 75499k
root 156 49.77re 0.07cp 12392k
oracle 94 61.36re 0.06cp 181496k
sshd 2 0.22re 0.00cp 16000k
你可以通过查看re, k, cp/cpu(见上面输出解释)时间来找出可疑的活动, 或某个用户/命令占用了所有的CPU时间。如果CPU/Memeory使用数(命令)在不断增加, 可以说明命令存在问题。
logrotate 指令
compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
missingok 如果日志不存在,不会发出抱怨
dateext 切换后的日志文件会附加上一个短横线和YYYYMMDD格式的日期,没有这个配置项会附加一个小数点加一个数字序号
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断,在复制当前日志文件后,将日志文件清空;而不是将当前日志文件改名后创建一个新的
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩。
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储以后需要执行的命令可以放入这个对,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5 个备份
tabootext [+] list 让logrotate 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig, .rpmsave, v, 和 ~
size size 当日志文件到达指定的大小时才转储,Size 可以指定 bytes (缺省)以及K (sizek)或者M (sizem).
prerotate 命令指定转储以前的动作
/usr/bin/chattr -a 去掉/var/log/messages文件的“只追加”属性
endscript 结束 prerotate 部分的脚本
postrotate 指定转储后的动作
/usr/bin/killall -HUP syslogd 用来重新初始化系统日志守护程序 syslogd
/usr/bin/chattr +a /var/log/messages 重新为 /var/log/messages 文件指定“只追加”属性,这样防治程序员或用户覆盖此文件。
最后的 endscript 用于结束 postrotate 部分的脚本
1、在/etc/logrotate.d目录下创建一个nginx的配置文件"nginx"配置内容如下
#vim /etc/logrotate.d/nginx
/usr/local/nginx/logs/*.log {
daily
rotate 5
missingok
notifempty
sharedscripts
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
}
#/usr/sbin/logrotate -f /etc/logrotate.d/nginx
4、配置文件说明
daily:日志文件每天进行滚动
rotate:保留最5次滚动的日志
notifempty:日志文件为空不进行滚动
sharedscripts:运行postrotate脚本
下面是一个脚本
postrotate
if [ -f /usr/local/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
fi
endscript
脚本让nginx重新生成日志文件。
以下两步即可实现一个应用的日志轮转
[root@109-com1 cron.daily]# cat /etc/logrotate.d/asterisk
/var/log/asterisk/messages
{
missingok
copytruncate
create
notifempty
rotate 5
}
[root@109-com1 cron.daily]# crontab -l
*/5 * * * * /usr/sbin/logrotate /etc/logrotate.d/asterisk
但是运行却发现每天虽然在生成新日志文件,但是日志还是被写到旧文件里去。好好研究了一下发现这错误犯的真2,rsyslog和logrotate根本就是两个软件包两回事嘛。虽然logrotate重命名了当前log,删了旧log,但是rsyslog不知道哇,打开的文件还是旧文件嘛。当然写的就是旧文件了嘛。
经探索后发现这个问题有两种解决办法。
1.copytruncate,拷贝后截断。
把当前log拷贝后截断。可以理解为把内容拷贝走作为备份,然后清空当前文件。但是这有一个问题就是拷贝和截断之间会有时间差,存在丢数据的可能。
2.给rsyslog发信号。重新打开log文件。
在/etc/logrotate.d/zw_log里添加
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
postrotate表示在日志轮转后执行
sharedscripts表示zw_notice.log、zw_info.log两个日志共享这个脚本,就是说他俩轮转完成后只执行一次这个脚本,默认情况下是每个脚本轮转完成就执行一次。
sharedscripts...endscripts设置起来使用才行。至于可用环境为:
prerotate:在启动logrotate之前进行的命令,例如修改日志文件的属性等;
postrotate:在做完logrotate之后启动的命令,例如重启某个服务。
例子:
sharedscripts
postrotate
pkill -USR1 iscsiuio 2> /dev/null || true
endscript
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
rsyslog研究
http://www.rsyslog.com/doc/v5-stable/configuration/basic_structure.html
rsyslogd日志丢失的解决
rsyslog报错误消息
imuxsock begins to drop messages
增加下面两个参数后,便不丢失日志
方法1(有效)
vi /etc/rsyslog.conf,加入下面两句,然后重启rsyslog服务即可
$IMUXSockRateLimitInterval 0
$SystemLogRateLimitInterval 0
方法2(好像不怎么有效)
$SystemLogRateLimitInterval 60
$SystemLogRateLimitBurst 3000