Linux日志(实用版)

简介: Linux日志(实用版)

39411c58ecf75e18aa78911c281a595f.jpg

image.png

一、日志系统

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

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 
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 分别记录客户访问事件和错误信息

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

#$ModLoad imudp 
#$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

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.128:514 if
$programname == 'nginx-info-access' then ~ if
$programname == 'nginx-info-error' then @192.168.8.128: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

手动切割日志:

1. logrotate -vf /etc/logrotate.d/secure
2. 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日志6c52dba86766c945773dbf997839880c.jpg

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

6c52dba86766c945773dbf997839880c.jpg

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
3月前
|
存储 监控 安全
在Linux中,如何进行日志审计?
在Linux中,如何进行日志审计?
|
19天前
|
监控 网络协议 安全
Linux系统日志管理
Linux系统日志管理
34 3
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
51 0
|
1月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
36 0
|
3月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
117 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
3月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
3月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
3月前
|
监控 安全 Linux
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
|
3月前
|
运维 监控 Ubuntu
在Linux中,如何查看系统日志文件?
在Linux中,如何查看系统日志文件?
|
3月前
|
Java Shell Linux
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志
关于如何使用Shell脚本来解析Linux系统中的应用服务日志,提供了脚本实现的详细步骤和技巧,以及一些Shell编程的技能扩展。
51 0
【Linux入门技巧】新员工必看:用Shell脚本轻松解析应用服务日志