linux 日志管理

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: linux 日志管理

系统日志存放的位置#


linux中的日志文件存储在 /var/log*

不同模块的日志会记录到不同的模块中去


模块 位置
内核及公共消息日志 /var/log/messages
计划任务日志 /var/log/cron
系统引导日志 /var/log/dmesg
邮件系统日志 /var/log/maillog


查看内核日志

tail -f /var/log/message


[root@ecs-t6-large-2-linux-20190824103606 ~]# tail -f /var/log/messages
Sep 15 07:15:30 ecs-t6-large-2-linux-20190824103606 nm-dispatcher: req:1 'dhcp4-change' [eth0]: new request (2 scripts)
Sep 15 07:15:30 ecs-t6-large-2-linux-20190824103606 nm-dispatcher: req:1 'dhcp4-change' [eth0]: start running ordered scripts...
Sep 15 08:00:26 ecs-t6-large-2-linux-20190824103606 systemd: Starting Docker Cleanup...
Sep 15 08:00:26 ecs-t6-large-2-linux-20190824103606 systemd: Started Docker Cleanup.
Sep 15 08:01:01 ecs-t6-large-2-linux-20190824103606 systemd: Started Session 312 of user root.
Sep 15 09:00:04 ecs-t6-large-2-linux-20190824103606 systemd: Starting Docker Cleanup...
Sep 15 09:00:04 ecs-t6-large-2-linux-20190824103606 systemd: Started Docker Cleanup.
Sep 15 09:01:01 ecs-t6-large-2-linux-20190824103606 systemd: Started Session 313 of user root.
Sep 15 09:03:59 ecs-t6-large-2-linux-20190824103606 systemd: Started Session 314 of user root.
Sep 15 09:03:59 ecs-t6-large-2-linux-20190824103606 systemd-logind: New session 314 of user root.


日志记录的一般格式如下


Sep 15 09:03:59 ecs-t6-large-2-linux-20190824103606 systemd-logind: New session 314 of user root.
    时间            主机名                          子系统名            消息字段


日志的分类#


内核及系统日志#


系统日志由 rsyslog统一管理,日志的格式也基本相同


查看系统上rsyslog的版本#


[root@ecs-t6-large-2-linux-20190824103606 ~]# rpm -q rsyslog
rsyslog-8.24.0-34.el7.x86_64


查看rsyslog的位置#


[root@ecs-t6-large-2-linux-20190824103606 ~]# whereis rsyslog
rsyslog: /usr/lib64/rsyslog /etc/rsyslog.d /etc/rsyslog.conf


  • 主程序 /etc/rsyslog.d
  • 配置文件 /etc/rsyslog.conf

配置文件中可以配置日志的级别/记录方式等


/etc/rsyslog.conf的配置规则#


查看配置文件 cat /etc/rsyslog.conf 然后截取RULE部分


#### RULES ####
##########  日志设备.日志级别  ##################          #########  消息发送位置  ###############
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages
# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure
# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog
# Log cron stuff
cron.*                                                  /var/log/cron
# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler
# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
local2.info           /tmp/test.log


记录日志时,会从上到下读取配置信息,只要匹配上就记录信息,每命中一个配置,就记录一下


日志设备


日志设备.级别 说明
auth -pam(linux中的认证机制) 产生的日志
authpriv -ssh,ftp 等登录信息的验证信息
cron 时间任务相关
kern -内核相关
lpr -打印
mail -邮件
mark(syslog) -rsyslog服务内部的信息,时间标识
news -新闻组
user -用户程序产生的相关信息
uucp -unix to unix copy unix主机之间的相关通信
local 1~7 自定义日志设备文件


用户可以使用local 1~7 自定义设置的设备,及其输出方式


# 定制 , info级别以上的local2 日志,全部记录到  /tmp/test.log
local2.info                                              /tmp/test.log


修改了日志文件需要重启


systemctl restart rsyslog


如果依然无效, vim /etc/selinux/config,将 selinux = disable ,然后重启

九种日志级别,自上而下级别由低到高


级别 说明
NONE 什么都不记录
EMERG (紧急) 导致主机系统不可用的情况
ALERT(警告) 必须马上采取解决措施
CRIT (严重) 比较严重的情况
ERR 运行时的错误
WARNING (提醒) 可能影响系统功能的事件
NOTICE(注意) 不会影响系统功能,但是值得注意
INFO 一般信息
DEBUG 调试信息
自下而上,信息记录的越来越少


三种连接符号


符号 说明
. 记录大于等于后面级别的日志
.= 只记录等于后面级别的日志
.!= 只记录不等于后面级别的日志


日志的处理方式


处理方式 说明
本地文件 通常就是文件的绝对路径
打印机 如: /dev/lp0
用户名称 显示给指定的用户
远程主机 @XX.XXX.XX.X


  • | 显示给所有在线的用户


用户日志#


记录了系统上用户登录/登出的相关信息


用户日志 说明
/var/log/lastlog 最近的用户登录事件
/var/log/wtmp 用户的登录/注销/及系统的开关机事件
/var/log/utmp 当前登录的每个用户的详细信息
/var/log/secure 和用户验证相关的安全性事件


/var/log 中存放的是系统上各式各样的日志文件, text类型的可以直接查看, 还有一些

是data类型的文件,这种文件是被系统上的命令使用的文件, 如 w who 命令


[root@ecs-t6-large-2-linux-20190824103606 ~]# file /var/log/utmp
/var/log/utmp: cannot open (No such file or directory)
[root@ecs-t6-large-2-linux-20190824103606 ~]# file /var/log/wtmp
/var/log/wtmp: data
[root@ecs-t6-large-2-linux-20190824103606 ~]# file /var/log/secure
/var/log/secure: ASCII text
[root@ecs-t6-large-2-linux-20190824103606 ~]# file /var/log/lastlog
/var/log/lastlog: data


用户登录分析


who、w、users、last、lastlog


手动记录日志#


命令: logger

作用: 从命令行直接向系统日志文件写入一行信息


echo hahaha | logger -it "logger test" -p user.info
-p: 指定日志设备.日志规则
-it : 描述


查看


[root@ecs-t6-large-2-linux-20190824103606 ~]# tail -1 /var/log/messages
Sep 15 10:19:30 ecs-t6-large-2-linux-20190824103606 journal: logger test[25291]: hahaha


程序日志#


由各种应用程序独立控制的日志,格式不统一


日志转储 logrotate#


系统上时时刻刻产生日志,为了防止它填满硬盘,需要对它进行转储,说白了,就是删除旧的日志文件,创建新的日志文件


查看他的配置文件#


cat /etc/logrotate.conf


[root@ecs-t6-large-2-linux-20190824103606 ~]# cat /etc/logrotate.conf 
# see "man logrotate" for details
# 每周备份一次  mv
weekly
# 保留4份旧的日志文件
rotate 4
# 每次 轮转备份 时,都使用新创建的日志文件
create
# 新创建的日志文件,使用日期当后缀
dateext
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
# 加载当前这个主要配置文件的同时, 通过下面的这条配置加载了次要配置文件
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
# 文件的转储规则
/var/log/wtmp {
    monthly
    create 0664 root utmp
  minsize 1M
    rotate 1
}
/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}


查看系统中次要的配置文件#


[root@ecs-t6-large-2-linux-20190824103606 ~]# ll /etc/logrotate.d/
total 24
-rw-r--r--  1 root root  91 Apr 11  2018 bootlog
-rw-r--r--  1 root root 137 Sep 12 17:14 log_test
-rw-r--r--. 1 root root 136 Jun 10  2014 ppp
-rw-r--r--  1 root root 224 Oct 30  2018 syslog
-rw-r--r--  1 root root 100 Oct 31  2018 wpa_supplicant
-rw-r--r--  1 root root 103 Nov  5  2018 yum


可以仿照/etc/logrotate.d/ 配置自己的日志文件的转储规则#


看一下 syslog的规则如下:


[root@ecs-t6-large-2-linux-20190824103606 ~]# cat /etc/logrotate.d/syslog 
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    missingok  # 日志在转储期间,出现任何错误都ok
    sharedscripts # sharedscripts的作用是在所有的日志文件都轮转完毕后统一执行一次脚本。如果没有配置这条指令,那么每个日志文件轮转完毕后都会执行一次脚本。
    # 下面的执行的shell 脚本
    postrotate
  /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}


可以看到了,它里面配置了 /var/log/ cron定时任务,maillog邮件,message消息,secure用户登录登出 及打印服务spooler的日志转储规则


logrotate的参数#


参数 说明
compress 通过gzip 压缩转储以后的日志
nocompress 不需要压缩时,用这个参数
copytruncate 用于还在打开中的日志文件,把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件,使用指定的文件模式创建新 的日志文件
nocreate 不建立新的日志文件
delaycompress 和 compress 一起使用时,转储的日志文件到 下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储同时压缩
errors address 专储时的错误信息发送到指定的Email 地址
ifempty 即使是空文件也转储,这个是 logrotate 的缺省选项。
notifempty 如果是空文件的话,不转储
mail address 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
olddir directory 转储后的日志文件放入指定的目录,必须和当前 日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下转储后的日志文件和当前日志文件放在同一个目录下
prerotate/endscript 在转储以前需要执行的命令可以放入这个对之间,这两个关键字必须单独成行
daily 指定转储周期为每天
weekly 指定转储周期为每周
monthly 指定转储周期为每月
rotate count 指定日志文件删除之前转储的次数,0 指没有备 份,5 指保留5 个备份
ootext [+] list 不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig .rpmsave
size 当日志文件到达指定的大小时才转储,可以指定bytes(缺省)以及KB(sizek)或者MB (sizem)
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
13天前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
33 7
|
16天前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
|
2月前
|
监控 Linux 开发者
如何在 Linux 中优雅的使用 head 命令,用来看日志简直溜的不行
`head` 命令是 Linux 系统中一个非常实用的工具,用于快速查看文件的开头部分内容。本文介绍了 `head` 命令的基本用法、高级用法、实际应用案例及注意事项,帮助用户高效处理文件和日志,提升工作效率。
40 7
|
3月前
|
监控 网络协议 安全
Linux系统日志管理
Linux系统日志管理
72 3
|
5月前
|
缓存 NoSQL Linux
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
151 1
【Azure Redis 缓存】Windows和Linux系统本地安装Redis, 加载dump.rdb中数据以及通过AOF日志文件追加数据
|
3月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控总结
Linux系统命令与网络,磁盘和日志监控总结
76 0
|
3月前
|
监控 Linux 测试技术
Linux系统命令与网络,磁盘和日志监控三
Linux系统命令与网络,磁盘和日志监控三
55 0
|
5月前
|
Ubuntu Linux 测试技术
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
在Linux中,已知 apache 服务的访问日志按天记录在服务器本地目录/app/logs 下,由于磁盘空间紧张现在要求只能保留最近7天的访问日志,请问如何解决?
|
5月前
|
应用服务中间件 Linux nginx
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
在Linux中,如何统计ip访问情况?分析 nginx 访问日志?如何找出访问页面数量在前十位的ip?
|
5月前
|
监控 安全 Linux
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
在Linux中,某个账号登陆linux后,系统会在哪些日志文件中记录相关信息?
下一篇
开通oss服务