一,了解日志:
日志文件:系统中各个运行消息的文件,不同的日志文件记录了不同类型 的信息,如内核消息、错误消息等
日志的类型:
1、内核及系统日志:数据由系统服务rsyslog统一管理 可以根据主配文件/etc/rsyslog.conf中的设置决定内核消息 及其各种系统消息的记录位置/var/log/messages
2、用户日志:数据用于记录系统用户登录及其退出系统的相关信息 ,包括用户名、登录终端、登录时间、来源、使用的进程等等/var/log/secure
3、 程序日志:应用程序自己独立管理的一个日志,记录程序本身运行 过程中的各种事件信息/var/log/nginx/access.log
常见的日志文件:
/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、finger等就需要访问这个文件
日志级别:
0 emerg 会导致主机系统不可用的情况 1 alert 必须马上采取措施解决的问题 2 crit 比较严重的情况 3 err 运行出现问题 --------------------------------------------- 4 warning 可能影响系统功能,需要提醒用户的重要事件 5 notice 不会影响正常功能,但是需要注意的事件 6 info 一般信息 7 debug 程序或系统调试信息等 8 none 不记录任何日志
二,rsyslog.conf文件分析
rsyslog服务的配置文件:
[root@localhost ~]# cat /etc/rsyslog.conf | grep -v "^$" | grep -v "^#" $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal $WorkDirectory /var/lib/rsyslog $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf $OmitLocalLogging on $IMJournalStateFile imjournal.state *.info;mail.none;authpriv.none;cron.none /var/log/messages authpriv.* /var/log/secure mail.* -/var/log/maillog cron.* /var/log/cron *.emerg :omusrmsg:* uucp,news.crit /var/log/spooler local7.* /var/log/boot.log
加载模块,转发端口等基本配置
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command) $ModLoad imjournal # provides access to the systemd journal $WorkDirectory /var/lib/rsyslog $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat $IncludeConfig /etc/rsyslog.d/*.conf $OmitLocalLogging on $IMJournalStateFile imjournal.state
服务名称
auth # 认证相关的 authpriv # 权限,授权相关的 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
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
三,日志的采集
虽然以后,我们接触到很多相关日志采集的服务和应用,气死系统本身也 是支持日志采集功能的,使用系统的rsyslog服务即可。
实验需求
企业环境可以使用ELK,但rsyslog也可以实现日志收集功能
案例环境:将node01的日志发送到node02
node01: vim /etc/rsyslog.conf 15 $ModLoad imudp 16 $UDPServerRun 514 18 # Provides TCP syslog reception 19 $ModLoad imtcp 20 $InputTCPServerRun 514 //文件最后添加 92 *.* @192.168.8.20 systemctl restart rsyslog node02: vim /etc/rsyslog.conf 15 $ModLoad imudp 16 $UDPServerRun 514 18 # Provides TCP syslog reception 19 $ModLoad imtcp 20 $InputTCPServerRun 514 systemctl restart rsyslog tailf /var/log/messages
案例2:把nginx的日志发送给node02
node01: vim /etc/rsyslog.conf $ModLoad imfile $InputFilePollInterval 1 $InputFileName /var/log/nginx/access.log $InputFileTag nginx-info-access; $InputFilestateFile state-nginx-info-accesslog $InputRunFileMonitor $InputFileName /var/log/nginx/error.log $InputFileTag nginx-info-error; $InputFilestateFile state-nginx-info-errorlog $InputRunFileMonitor $InputFilePollInterval 10 if $programname == 'nginx-info-access' then @192.168.8.20:514 if $programname == 'nginx-info-access' then ~ if $programname == 'nginx-info-error' then @192.168.8.20:514 if $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)为甚么要做日志的切割那?
因为日志会越来越大,我们做的实验这才仅仅只是一台主机的日志,如果 是一个集群,像百度这样的大型网站,到时候访问量很大的情况之下,我 们就的日志就会变的很大
2)为了防止日志文件过大,所以我们要做到日志定期的切割和清理。
3)怎么做那? 我们的系统有自带的日志轮滚的功能,需要调试。配置文件 在/etc/logrotate.conf
可能有人就会有疑问,我们可以直接用命令cp、另一份,然后保存一下就 可以了,但大家忘了一点了,日志有可能是时时刻刻都在更新,这就有可 能在你CP的时候,数据就会不完整。
//查看/etc/logrotate.conf相关配置信息。
[root@localhost ~]# cat /etc/logrotate.conf | grep -v "^$" | grep -v "^#" weekly #分割周期 rotate 4 #保留多少日志 create #旧日志分割后,源文件是否生成新的日志 dateext #分割后日志的文件类型,默认是以日期来分割 include /etc/logrotate.d #还需要读取这个地方,目录里都是其他地方的日志 /var/log/wtmp { #特指某个文件的分割方式 monthly #每月分割 create 0664 root utmp #分割后这个文件的权限,以及属主和属组 minsize 1M #文件超过1M之后才分割 rotate 1 #保留1个 } /var/log/btmp { missingok #丢了也没关系,热日志会出现中断 monthly create 0600 root utmp rotate 1 }
除了这些之外,还有其他的一些单词
compress //压缩,gzip delaycompress //延迟压缩 nocompress //不压缩 copytruncate //先拷贝,再清空。 errors Email ifemty //即使日志文件为空,到日期也切割 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
实例:
//切割安全日志secure
[root@localhost ~]# cd /etc/logrotate.d/ [root@localhost logrotate.d]# vi secure /var/log/secure { missingok notifempty daily create rotate 4 compress }
//添加用户,切换用户触发日志
[root@localhost logrotate.d]# useradd bdqn [root@localhost logrotate.d]# echo "1" | passwd --stdin bdqn 更改用户 bdqn 的密码 。 passwd:所有的身份验证令牌已经成功更新。
//手动分割日志
[root@localhost logrotate.d]# logrotate -vf /etc/logrotate.d/secure
//查看源文件已被分割
1. [root@localhost logrotate.d]# ls /var/log/ | grep "secure" 2. secure 3. secure.1.gz
//如果有特殊权限,而每次切割完成之后,都需要重新启动一下我们 rsyslog服务,所以这个时候就需要我们自己来写脚本支持。
/var/log/secure { sharedscripts prerotate /usr/bin/chattr -a /var/log/secure endscript missingok notifempty daily create rotate 4 compress sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null /usr/bin/chattr +a /var/log/secure endscript }
PS: 在做切割之前将刚才做的切割文件删除,否者会报错,说一天之内切割 次数过多