认识与分析日志文件

一   什么是登录文件或日志文件
a 说明
记录系统活动信息的文件    何时,何地 ,何人做了什么动作  信息登录    
日志文件的重要性
解决系统方面的错误 debug
解决网络服务的问题
事件记录簿
常见的日志文件的文件名
仅root有权限访问
/var/log/boot.log     保存当次系统硬件检测和核心支持的功能流程
/var/log/cron 例行性工作安排
/var/log/dmesg 系统开机时核心检测过程所产生的各项信息   
/var/log/lastlog 记录系统上的账号最近一次登入系统时的相关信息
/var/log/maillog   或者/var/log/mail/* 邮件来往信息
/var/log/messages 相当重要的日志文件  系统发生的错误信息或重要的信息  都会记录在这个文件中
/var/log/secure 登录时需要账号和密码的程序  例如  login     gdm    su  sudo    ssh   telnet等
/var/log/wtmp    /var/log/faillog 记录正确登录系统用户的账号信息与错误登录时使用的账号信息
/var/log/httpd/*    /var/log/samba/* 各自的网络服务记载各自产生的信息
日志文件所需相关服务与程序
分为两类  一类是软件自行处理日志文件的信息  另一种是操作系统中rsyslog.service服务来统一管理日志文件
需要轮替存储文件来完成日志文件容量与更新的问题   logrotate   新产生的文件替换旧的文件
针对日志文件所需要的功能   我们需要的服务程序有
systemd-journald.service     最主要的信息接收者 有systemd提供
rsyslog.service 主要的日志系统与网络服务的信息   登陆验证等
logrotate 主要的日志文件轮替功能
centos7.x 使用systemd提供的journalctl日志管理
所有经由systemd管理的启动的服务  所产生的信息  会将该信息有systemd-journald.service以二进制的方式记录下来   之后再发送给rsyslog.service作进一步的记载
 
 
登录文件内容的一般格式
包括  事件发生的日期与时间 
发生此事件的主机名称
启动此事件的服务名称  例如systemd    crond或指令与函数名称  su   login
该信息的实际内容   信息说明
 
 
何时查看日志文件
a 系统不正常
b daemon无法正常启动
c 用户无法登陆
d daemon执行不顺畅
 
 
二 rsyslog.service记录登陆文件的服务
linux系统的登陆文件主要由rsyslog.service这个服务负责
a rsyslog.service的配置文件 /etc/rsyslog.conf 用来定义某项系统信息或服务信息日志文件记录的位置 分类规范分别存储
各种服务信息记录在rsyslog.conf这个配置文件中 基本上定义了 1.什么服务 2.信息的等级 3.需要记录在哪里 装置或文件或主机
例如:
mial.info /var/log/mailog_info
服务名称
0 kern(kernel) 核心产生的信息 大部分为硬件检测和核心功能的启用
1 user 用户等级的信息
2 mail 邮件的手法
3 daemon 系统服务
4 auth 需要用户名和密码 登陆的机制 例如login ssh su等
5 syslog 由syslog的相关协定产生的信息 其实就是syslogd这个程序本身产生的信息
6 lpr 打印相关的信息
7 news 新闻组服务器有关
8 uucp unix to unix copy protocol
9 cron 例行性工作安排 cron或at产生信息的地方
10 authpriv 类似于auth 记录较多的账号私人信息 包括pam模组的运行
11 ftp 于ftp通信协定相关的额信息输出
16-23 local0~local17 保留本机用户使用的登陆信息 与终端机互动
 
以上为linux系统核心的syslog函数定制的服务     
第三方软件通过调用上述的服务名来记录他们的软件   例如sendmail是邮件收发的软件   会调用syslog内的mail服务名称
 

 

 
信息的等级
由syslog.h定义
等级数值 等级名称 说明
7 debug 用来排错产生的信息
6 info 一般的基本信息说明
5 notice 正常的信息 比info需要被注意到的
4 warning (warn) 警告的信息 可能会有问题 但是不至于影响daemon的运行
3 err(error) 重大的错误信息 例如配置文件的某些设置值会造成服务无法启动
2 crit 临界点 critical 很严重的错误信息
1 alert 警告警告
0 emerg(panic) 严重的错误 硬件有问题 核心无法顺利运行
debug还要低的等级为none 不需要登录等级 也就是不需要记录
其中需要注意的是信息等级之前 .=! 的连接符号 代表的意思
. 代表比后面还要严重的等级都要被记录 info代表等级严重于info的包含info本身的 都会被记录下来
.= 代表所需要的等级就是后面接的等级而已
.! 表示不等于 就是除了该等级外的其他等级都记录
 
记录信息的文件或设备或主机
日志文件可以记录到文件或者装置上 也可以存放到其他的网络主机上
日志文件的绝对路径:/var/log/下面的文件
打印机或者其他 /dev/lp0
用户的名称
网络主机 例如@study.tsai 需要对方主机的设置
* 代表目前线上的所有人
服务、daemon于函数名称
syslog 设计指引 所有的要求都写进一个名为syslog.h的头文件中
rsyslogd 实际的信息分类 daemon程序
rsyslog.service 服务启动脚本
 
rsyslog.conf  语法练习   
1. 将mail的信息写入/var/log/maillog
mail.info /var/log/maillog
2. 将news及例行性工作安排cron写入/var/log/cronnews 但是警告信息则记录在/var/log/cronnews.warn中
    news.*;cron.* /var/log/cronnews
news.=warn;cron.=warn /var/log/cronnews.warn
3.messages 记录所有的信息 但是不要记录cron mail及news的信息
*.*;news,cron,mail.none /var/log/messages
或者
*.*;news.none,cron.none;mail.none /var/log/messages
 
 
centos 7.x 默认的配置文件内容 rsyslog.conf
 

 

  自定义增加日志文件的功能

将所有额外的信息写入到/var/log/admin.log中
vim  /etc/rsyslog.conf
*.info  /var/log/admin.log
日志文件的安全性设置
防黑
将日志文件的权限设置为a 只能增加信息  不能删除
chattr +a /var/log/admin.log
lsattr /var/log/admin.log
注意如果日志文件被vi 或者vim等编辑器 并wq退出 则rsyslogd服务会认为此文件被更动过,则会再写入新的内容
需要重新启动rsyslogd.service即可。
另一个问题是+a的属性被设置后 导致该文件无法被删除和修改 则当logratate轮替程序无法删除替换词文件,也就无法实现轮替的功能,所以还需要先将+a的标志去掉
日志文件服务器的设置
当局域网内有多个linux主机的时候 此功能比较有用 单个主机再传送一份出去给日志文件服务器
rsyslogd具有日志文件服务器的功能,默认没有启动。
默认端口为UPD和TCP的514

 

  服务器端的设置如下
在/etc/rsyslog.conf内的设定
vim /etc/rsyslog.conf
#provides UDP syslog recepiton
#$ModLoad imudp
#$UDPServerRun 514
 
#provides tcp syslog reception
#$ModLoad imtcp
#$inputTCPServerRun 514
 
systemctl restart rsyslog.service
netstat -ltnp | grep syslog
 

客户端的设置如下
vim /etc/rsyslog.conf
*.* @@192.168.1.100 此为TCP传输
*.* @192.168.1.100 此为UDP传输
 
日志文件的轮替 logrotate
 
1.logrotate的设置
需要注意的是chattr 设置了文件的+a属性 rsyslogd利用的是daemon的方式来启动,有需求的时候立即执行 所以logrotate是在规定的时间到了之后才来进行日志文件的轮替,所以这个logrotate程序是挂载在cron底下进行的。
在/etc/cron.daily/logrotate 进行记录  
设置文件:
/etc/logrotate.conf
/etc/logrotate.d
logrotate.d中的所有文件都会被主动的读入logrotate.conf中进行
 
vim /etc/logrotate.conf
weekly   默认一个礼拜进行一次rotate的工作
rotate 4   保留的文件数目 也是最大数
create
dateext  
include /etc/logrotate.d   将此目录内的文件读进.conf里来执行
 
/var/log/wtmp{   针对wtmp这类的日志文件进行的参数设置
monthly
...
}
 
 

 

  其中包括文件名部分   
参数部分   {   }
执行的脚本部分 
sharedscripts ...   endscript设定配合使用
可用的环境
prerotate   启动轮替之前的指令   例如修改文件的属性
postrotate 轮替执行完之后的指令   例如重启某个服务
他们两个之间的指令相当重要
本例中只针对/var/log中的那些个文件名有效
轮替完毕后取得syslog的PID后   以kill -HUP重新启动syslogd
假如 /var/log/messages   这个文件增加了chattr +a的属性时,根据logrotate的工作原理   messages会更名为messages.1
但是由于有a属性   限制不能改名   所以利用prerotate于postrotate来进行轮替前的属性修改   和之后的动作
{
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/messages
endscript
postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
        /usr/bin/chattr +a /var/log/messages
    endscript
}
 
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true的意义将rsyslogd重新将rsyslog.conf的配置文件 重新reload   因为配置已经改变。   
 
 
2.实际测试logrotate的动作
语法:logrotate [-vf] logfile -v 显示详细过程 f为force 强制 不论是否符合配置文件
example1:
logrotate -v /etc/logrotate.conf
example2:
logrotate -vf /etc/logrotate.conf
 
3.自定义日志文件的轮替功能
example3:
假设已经建立/var/log/admin.log 这个文件 想要加上a这个隐藏的属性
轮替配置
每月一次
大于100m时 主动轮替 不需要考虑一个月的期限;
保存5个备份
备份需要压缩
 
命令 :1.先添加a的属性
chattr +a /var/log/admin.log   设置
lsattr /var/log/admin.log 查看
mv /var/log/admin.log /var/log/admin.log.1   根据结果查看  a是否成功
2.建立Logroate的设定文件    增加一个文件在/etc/logrotate.d内就可以了
vim /etc/logrotate.d/admin
/var/log/admin.log{
monthly
size=100m
rotate 5
compress
 
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/admin.log
endscript
sharedscripts
postrotate
/bin/kill  -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true   重新载入配置文件
/usr/bin/chattr +a /var/log/admin.log    增加a属性
endscript
}
3.测试
logrotate -v /etc/logrotate.conf    查看过程
 
systemd-journald.service介绍
原来只有rsyslogd的时候,必须等到开机完成 并且执行了rsyslogd的daemon之后才能记录日志    所以核心需要先运行一个klogd的服务   记录开机过程  启动服务过程的日志   然后再讲记录的信息  发送给rsyslogd。
现在有了systemd的这个核心调用的服务    又是第一个执行的软件   可以主动调用systemd-journald来协助记录日志  所以在开机过程中的所有信息 包括启动服务于服务启动失败等的信息都可以记录到systemd-journald中,但是缺陷是此文件记录的信息是内存中的  也就是代表仅仅记录此次开机运行的日志   以前的日志需要rsyslogd 来协助
1.使用journalctl来观察日志信息
   语法: journalctl [-nrpf] [--since TIME] [--until TIME] _optional
n 最近几行
r 反向输出 新的在前 旧的在后
p 按照重要性排序
f 类似于   tail -f   持续显示journal日志的内容
实例:
journalctl --since yesterday --until today 显示昨天的日志信息
journalctl -p err 显示信息等级为错误的信息
journalctl --SYSTEMD_UNIT=crond.service -n 10 显示最新的10行记录
2.logger指令的使用 自行添加信息到登陆文件中 主要用来注释等 提示信息
将信息存储的日志文件当中
语法:logger [-p 服务名称.等级] “信息”
logger -p user.info "i will check logger command"
journalctl SYSLOG_FACILITY=1 -n 3
接下来会显示出 "i will check logger command" 的记录
3.保存journal的方式
如果需要保存journal的日志文件 需要先建立目录
mkdir /var/log/journal
chown root:systemd-journal /var/log/journal 更改属主和组
chmod 2775 /var/log/journal 主 组的权限设置
systemctl restart .....
会发现在journal/的目录下回出现日志文件
当然 rsyslogd和lograotate 回记录日志信息 所以上面所说的并非必要   依据个人习惯
分析日志文件
 
可以通过vim或journalctl进入日志文件查阅相关的信息
last lastlog dmesg等等指令 查看日志信息 比较分散
centos提供的软件工具 logwatch 专门分析日志文件
1.默认的logwatch
 
/etc/cron.daily/0logwatch   先执行logwatch命令
每天会发一封email给root查看  
然后用root身份去读取email    执行mail命令即可
 
2.自己写的日志分析工具
    有journalctl 所产生   抓取日志文件来分析   比对rsyslog.service所产生的日志文件   主要用到底下几个对应的文件名
    /var/log/secure
   /var/log/messages
    /var/log/maillog
在根目录下解压    压缩包中的文件会自动安装到需要的目录中
   举例:
   tar -zxvf /logfile_centos7.tar.gz -C /
   cat /etc/cron.d/vbirdlogfile
   会显示分析的程序文件
   *****     /root/bin/logfile/logfile.sh &> /dev/null
   执行此命令    sh /root/bin/logfile/logfile.sh   同样会发送邮件给root用户
    mail   同样用mail命令查看 email的信息
posted on 2017-11-27 09:07  学习记录园  阅读(627)  评论(0编辑  收藏  举报