当前位置:   article > 正文

Linux日志(实用版)

linux日志

日志文件说 明
/var/log/cron记录与系统定时任务相关的曰志
/var/log/cups/记录打印信息的曰志
/var/log/dmesg记录了系统在开机时内核自检的信总。也可以使用dmesg命令直接查看内核自检信息
/var/log/btmp记录错误登陆的日志。这个文件是二进制文件,不能直接用Vi查看,而要使用lastb命令查看。命令如下:
[root@localhost log]#lastb
root tty1 Tue Jun 4 22:38 - 22:38 (00:00)
#有人在6月4 日 22:38便用root用户在本地终端 1 登陆错误
/var/log/lasllog记录系统中所有用户最后一次的登录时间的曰志。这个文件也是二进制文件.不能直接用Vi 查看。而要使用lastlog命令查看
/var/Iog/mailog记录邮件信息的曰志
/var/log/messages它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,已经用户自定义安装软件的日志,也会在这里列出。
/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录,比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp永久记录所有用户的登陆、注销信息,同时记录系统的后动、重启、关机事件。同样,这个文件也是二进制文件.不能直接用Vi查看,而要使用last命令查看
/var/tun/ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用Vi查看,而要使用w、who、users等命令查看

一、日志系统

日志文件:记录系统中各个运行消息的文件,不同的日志文件记录了不同类型的信息, 如内核消息、错误消息等

syslog服务: syslogd: 系统,非内核产生的信息 klogd:内核,专门负责记录内核产生的日志信息

分析日志文件: 通过浏览日志查找关键信息,对系统服务进行调试,判断故障发生的原因

1、分类

内核及系统日志:

数据由系统服务rsyslog统一管理可以根据主配文件/etc/rsyslog.conf中的设置

决定内核消息及其各种系统消息的记录位置 /var/log/messages

用户日志:

数据用于记录系统用户登录及其退出系统的相关信息,包括用户名、登录终端、 登录时间、来源、使用的进程等等 /var/log/secure

程序日志:

应用程序自己独立管理的一个日志,记录程序本身运行过程中的各种事件信息 /var/log/nginx/access.log

(1)内核和系统日志

/etc/rsyslog.conf

服务.级别 /var/log/messages 内核和大多数系统消息日志位置

消息内容组成 时间:消息发出的时间和日期

主机名:生成消息的计算机的名称

子系统的名称:发出消息的应用程序的名称

消息内容:消息的具体内容

(2)用户日志和程序日志

查询当前登录的用户情况:users,who,w 查询用户登录的历史记录:last 成功日志,lastb 失败日志 查看安全日志文件:/var/log/secure 举例:查看/var/log/secure安全日志文件,打开新终端会看到信息。

tailf /var/log/secure 
  1. May 4 20:39:32 base sshd[28835]: Accepted password for root from 192.168.1.1 port 6069 ssh2
  2. May 4 20:39:32 base sshd[28835]: pam_unix(sshd:session): session opened for user root by (uid=0)

(3)程序日志:

例1:httpd 服务的日志文件access_log和error_log 分别记录客户访问事件和错误信息

  1. /var/log/httpd/access_log
  2. /var/log/httpd/error_log

、例2:nginx服务的日志文件access.log和error.log

  1. /var/log/nginx/access.log
  2. /var/log/nginx/error.log

例3:源码安装nginx日志路径

/usr/local/nginx/logs 

注意:/var/log/dmesg 系统启动硬件检查日志:直接运行命令 dmesg

2、常见日志文件

var/log/boot.log 记录了系统在引导过程中发生的事件,就是Linux系统开机自检过程显示的信息 /var/log/messages 记录Linux操作系统常见的系统和服务错误信息

/var/log/cron crond 计划任务产生的事件信息

/var/log/dmesg 引导过程中产生的信息

/var/log/maillog 记录电子邮件活动信息

/var/log/lastlog 记录最后一次用户成功登陆的时间、登陆IP等信息

/var/log/secure Linux系统安全日志,记录用户和工作组变化情况、用户登陆认证情况 /var/log/syslog 只记录警告信息,常常是系统出问题的信息,使用lastlog查看

/var/log/wtmp 记录用户登录、注销、系统启动、关键等信息,使用last命令查看

/var/log/btmp 记录失败或者是错误的登录信息和验证 lastb命令查看

/var/run/utmp 该日志文件记录有关当前登录的每个用户的信息。如 who、w、users等就需要访问这个文件

3、日志消息的级别

0 emerg 会导致主机系统不可用的情况

1 alert 必须马上采取措施解决的问题

2 crit 比较严重的情况

3 err 运行出现问题

4 warning 可能影响系统功能,需要提醒用户的重要事件

5 notice 不会影响正常功能,但是需要注意的事件

6 info 一般信息

7 debug 程序或系统调试信息等

8 none 不记录任何日志

二、rsyslog.conf文件分析

1、加载模块、转发端口等基本配置

MODULES

Provides UDP syslog reception

  1. #$ModLoad imudp
  2. #$UDPServerRun 514

Provides TCP syslog reception

  1. #$ModLoad imtcp
  2. #$InputTCPServerRun 514

2、服务名称

auth # 认证相关的 authentication

authpriv # 权限,授权相关的 authorization

cron # 任务计划相关的

daemon # 守护进程相关的

kern # 内核相关的

lpr # 打印相关的

mail # 邮件相关的

mark # 标记相关的

news # 新闻相关的

security # 安全相关的,与auth 类似

syslog # syslog自己的

user # 用户相关的

uucp # unix to unix cp 相关的

local0 到 local7 # 用户自定义使用

  • *表示所有的facility

配合日志级别举例:

1、//mail的info级别以上的信息,记录的位置 mail.info /var/log/mail

2、//只记录info这一个级别。 auth.=info

3、//user的相关信息但不包括error,取反。 user.!=error

4、//所有日志的info以上的信息 .info

5、//mail的所有级别 mail.

6、//所有服务的所有级别 .

7、//合并日志,写到一块 cron.info;mail.info

3、action(动作)日志记录的位置

  • //延迟写入,系统不繁忙的时候才写入。

发送邮件,通过什么协议 @@192.168.1.1 TCP @192.168.1.1 UDP

*号表示所有在线用户

~ 忽略日志

^号后跟可执行脚本或程序的绝对路径

案例:更改系统安全日志secure的记录位置 将secure的位置更改为/usr/local/secure authpriv.*

/usr/local/secure
systemctl restart rsyslog chattr +a /usr/local/secure

三、日志的采集

案例环境:将node01的日志发送到node02

  1. node01 192.168.8.10
  2. node02 192.168.8.20
  3. node01:
  4. vim /etc/rsyslog.conf
  5. 15 $ModLoad imudp
  6. 16 $UDPServerRun 514
  7. 18 # Provides TCP syslog reception
  8. 19 $ModLoad imtcp 20
  9. $InputTCPServerRun 514
  10. //文件最后添加 92 . @192.168.8.20
  11. systemctl restart rsyslog
  12. node02:
  13. vim /etc/rsyslog.conf
  14. 15 $ModLoad imudp
  15. 16 $UDPServerRun 514
  16. 18 # Provides TCP syslog reception
  17. 19 $ModLoad imtcp
  18. 20 $InputTCPServerRun 514
  19. systemctl restart rsyslog tailf /var/log/messages

案例2:把nginx的日志发送给node02

  1. node01:
  2. vim /etc/rsyslog.conf
  3. $ModLoad imfile
  4. $InputFilePollInterval 1
  5. $InputFileName /var/log/nginx/access.log
  6. $InputFileTag nginx-info-access;
  7. $InputFilestateFile state-nginx-info-accesslog
  8. $InputRunFileMonitor
  9. $InputFileName /var/log/nginx/error.log
  10. $InputFileTag nginx-info-error;
  11. $InputFilestateFile state-nginx-info-errorlog
  12. $InputRunFileMonitor
  13. $InputFilePollInterval 10 if
  14. $programname == 'nginx-info-access' then @192.168.8.128:514 if
  15. $programname == 'nginx-info-access' then ~ if
  16. $programname == 'nginx-info-error' then @192.168.8.128:514 if
  17. $programname == 'nginx-info-error' then ~

参数解释: //间隔多久采集1次。默认单位是秒

$InputFilePollInterval 1

//采集的日志的名称

$InputFileName /usr/local/nginx/logs/access.log

//给对应的日志打一个标签

$InputFileTag nginx-info-access;

//给这个日志命名

$InputFilestateFile state-nginx-info-accesslog

//启动监控

$InputRunFileMonitor

四、日志的切割

为了防止日志文件过大,所以我们要做到日志定期的切割和清理

  1. logrotate 日志轮替
  2. /etc/logrotate.conf

weekly //切割周期,默认每周 rotate 4 //保留多少个日志文件,那么一周一个,也就是能看到一个月的日志。如果是0就表示不作备份,仅做了一个切割,表示每周清空一下日志。

create //旧日志切割后,源文件是否生成新的日志。这一点就跟脚本切割日志有很大不同的地方。 dateext //切割后,日志的文件类型是什么样?默认是以日期来切割的。

include /etc/logrotate.d //还需要读取这个地方的内容 ,目录里都是其他地方的日志

/var/log/wtmp { //特指某个文件的切割方式,

monthly //每月切割 create 0664 root utmp //切割完成之后,这个文件的权 限,以及属主和属组是谁 minsize 1M //文件超过1M之后才切割,这表示即便过了1个月, 大小没到1M,也不切割 rotate 1 //保留1个

其他参数:

compress //压缩,

gzip delaycompress //延迟压缩

nocompress //不压缩

copytruncate //先拷贝,再清空。

missingok //丢了也没关系,热日志会出现中断

ifempty //即使日志文件为空,到日期也切割

notifempty //为空者不切割

mail Email //切割后的日志文件,不在本地保存,发送邮件到其他地方。

nomail //生成的日志不发送,在本地使用

olddir Directory //另存为的地址,如果不写则默认是在同一个目录下边。

noolddir //转存文件都保存在本地。

sharedscripts //运行脚本,为脚本添加的a权限后需要暂时调整权限

postrotate //切割之后,执行脚本

prefotate //切割之前,执行脚本时间参数 daily //每天 weekly //每周 mounthly //每月 yearly //每年 rotate count //保存几份。

dateext //使用当前日期。

size(minisize) //达到多少才切割,默认单位是M,sizeksizem默认单位是kb。size = 5

案例1:切割安全日志 vim /etc/rsyslog.conf

  1. authpriv.* /var/log/secure
  2. vim /etc/logrotate.d/secure
  3. /var/log/secure { missingok notifempty daily create rotate 4 compress }
  4. useradd zhangsan
  5. echo 123.com | passwd --stdin zhangsan
  6. su - zhangsan exit
  7. tail /var/log/secure

手动切割日志:

  1. logrotate -vf /etc/logrotate.d/secure
  2. ls /var/log/

如果有特殊权限,而每次切割完成之后,都需要重新启动rsyslog服务,需要写脚本支持
 

  1. /var/log/secure {
  2. sharedscripts
  3. prerotate
  4. /usr/bin/chattr -a /var/log/secure
  5. endscript
  6. missingok
  7. notifempty
  8. daily
  9. create
  10. rotate 4
  11. compress
  12. sharedscripts
  13. postrotate
  14. /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null
  15. /usr/bin/chattr +a /var/log/secure
  16. endscript
  17. }

案例2:脚本切割nginx日志
 

  1. vim /root/cut_nginx_log.sh
  2. #!/bin/bash
  3. LOG_PATH=/var/log/nginx/
  4. PID=/var/run/nginx.pid
  5. mv ${LOG_PATH}access.log
  6. ${LOG_PATH}access$(date +%F).log
  7. mv ${LOG_PATH}error.log ${LOG_PATH}error$(date +%F).log
  8. kill -USR1 cat ${PID}
  9. chmod +x /root/cut_nginx_log.sh
  10. crontab -e
  11. 30 23 * * * /bin/bash /usr/local/nginx/cut_nginx_log.sh

案例3:logrotate切割nginx日志

  1. vim /etc/logrotate.d/nginx
  2. /var/log/nginx/*.log {
  3. daily
  4. dateext
  5. compress
  6. rotate 7
  7. sharedscripts
  8. postrotate
  9. kill -USR1 cat /var/run/nginx.pid
  10. endscript
  11. }
  12. logrotate -d -f /etc/logrotate.d/nginx 检测运行
  13. crontab -e
  14. 30 23 * * * /usr/sbin/logrotate -f /etc/logrotate.d/nginx

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号