Linux基础十一

一、日志系统

日志文件:记录系统中各个运行消息的文件,不同的日志文件记录了不同类型的信息,
          如内核消息、错误消息等
          
syslog服务:
    syslogd: 系统,非内核产生的信息
    klogd:内核,专门负责记录内核产生的日志信息
    
分析日志文件:
    通过浏览日志查找关键信息,对系统服务进行调试,判断故障发生的原因
    
1、分类
内核及系统日志:
    数据由系统服务rsyslog统一管理可以根据主配文件/etc/rsyslog.conf中的设置
    决定内核消息及其各种系统消息的记录位置
    /var/log/messages

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

程序日志:
    应用程序自己独立管理的一个日志,记录程序本身运行过程中的各种事件信息
    /var/log/nginx/access.log 
    
    
(1)内核和系统日志
/etc/rsyslog.conf

mail.notice(举例)
服务.级别 /var/log/messages 内核和大多数系统消息日志位置

消息内容组成
    时间:消息发出的时间和日期
    主机名:生成消息的计算机的名称
    子系统的名称:发出消息的应用程序的名称
    消息内容:消息的具体内容
    
(2)用户日志和程序日志
查询当前登录的用户情况:users,who,w
查询用户登录的历史记录:last 成功日志,lastb 失败日志
查看安全日志文件:/var/log/secure
举例:查看/var/log/secure安全日志文件,打开新终端会看到信息。

tailf /var/log/secure 

May 4 20:39:32 base sshd[28835]: Accepted password for root from 192.168.1.1 port 6069 ssh2 
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
分别记录客户访问事件和错误信息
/var/log/httpd/access_log
/var/log/httpd/error_log

例2:nginx服务的日志文件access.log和error.log
/var/log/nginx/access.log
/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 
#$ModLoad imudp 
#$UDPServerRun 514 

# Provides TCP syslog reception 
#$ModLoad imtcp 
#$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

三、日志的采集
企业环境可以使用ELK,但rsyslog也可以实现日志收集功能

案例环境:将node01的日志发送到node02
    node01    192.168.8.10
    node02  192.168.8.20
    
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


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

/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
authpriv.*         /var/log/secure

vim /etc/logrotate.d/secure
/var/log/secure { 
    missingok 
    notifempty 
    daily 
    create 
    rotate 4 
    compress 
}

 useradd zhangsan
 echo 123.com | passwd --stdin zhangsan
 su - zhangsan
 exit
 
 tail /var/log/secure
 
 手动切割日志:
 logrotate -vf /etc/logrotate.d/secure
 ls /var/log/ 
 
 如果有特殊权限,而每次切割完成之后,都需要重新启动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 
}

案例2:脚本切割nginx日志
vim /root/cut_nginx_log.sh
#!/bin/bash
LOG_PATH=/var/log/nginx/
PID=/var/run/nginx.pid
mv ${LOG_PATH}access.log  ${LOG_PATH}access_$(date +%F).log
mv ${LOG_PATH}error.log  ${LOG_PATH}error_$(date +%F).log
kill -USR1 `cat ${PID}`

chmod +x /root/cut_nginx_log.sh

crontab -e 
30 23 * * * /bin/bash /usr/local/nginx/cut_nginx_log.sh


案例3:logrotate切割nginx日志
vim /etc/logrotate.d/nginx
/var/log/nginx/*.log {
    daily
    dateext
    compress
    rotate 7
    sharedscripts
    postrotate
        kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

logrotate -d -f /etc/logrotate.d/nginx  检测运行

crontab -e
30 23 * * *  /usr/sbin/logrotate -f /etc/logrotate.d/nginx

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值