日志文件介绍与分析

日志文件

日志的功能:

  • 用于记录系统、程序运行中发生的各种事件
  • 通过阅读日志,有助于诊断和解决系统故障

日志文件的分类:

  • 内核及系统日志:

    这种日志数据由系统服务rsyslog统一管理,根据其主配置文件/etc/rsyslog.conf中的设置,决定将内核消息及各种系统程序消息记录到什么位置。日志格式基本相似。

  • 用户日志:

    记录用户登录及退出系统的相关信息,包括用户名、登录的终端、登录时间、来源主机、正在使用的进程操作等。

  • 程序日志:

    有些应用程序会选择由自己独立管理一份日志文件(而不是交给rsyslog服务管理),用于记录本程序运行过程中的各种事件信息。记录格式不统一。

日志保存位置:默认位于:/var/log 目录下

主要日志文件介绍:

日志位置描述
内核及公共消息日志/var/log/messages它是核心系统日志文件,其中包含了系统启动时的引导信息,以及系统运行时的其他状态消息。I/O 错误、网络错误和其他系统错误都会记录到此文件中。其他信息,比如某个人的身份切换为 root,以及用户自定义安装软件的日志,也会在这里列出。
计划任务日志/var/log/cron记录与系统定时任务相关的曰志
系统引导日志/var/log/dmesg记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息。
邮件系统日志/var/log/maillog记录邮件信息的曰志
用户登录日志:/var/log/lastlog记录系统中所有用户最后一次的登录时间的曰志。这个文件是二进制文件.不能直接用 vi 查看,而要使用 lastlog 命令查看。
/var/log/secure记录验证和授权方面的倍息,只要涉及账户和密码的程序都会记录。比如系统的登录、ssh的登录、su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中。
/var/log/wtmp永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样,这个文件也是二进制文件,不能直接用 vi 查看,而要使用 last 命令查看。
/var/tun/ulmp记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样,这个文件不能直接用 vi 查看,而要使用w、who、users等命令查看。
## 内核及系统日志

由系统服务 rsyslog 统一管理,根据其主配置文件 /etc/rsyslog.conf。

  • 软件包:rsyslog-8.24.0-12.el7.x86_64 (可使用 ”rpm -q“ 命令查看)
  • 主要程序:/sbin/rsyslogd
  • 配置文件:/etc/rsyslog.conf (可使用 ”rpm -qc“ 命令查看)

日志消息的级别:

级号消息级别说明
0EMERG紧急会导致主机系统不可用的情况
1ALERT警告必须马上采取措施解决的问题
2CRIT严重比较严重的情况
3ERR错误运行出现错误
4WARNING提醒可能会影响系统功能的事件
5NOTICE注意不会影响系统但值得注意
6INFO信息一般信息
7DEBUG调试程序或系统调试信息等

日志记录的一般格式:

  • 事件产生的时间。
  • 产生事件的服务器的主机名。
  • 产生事件的服务名或程序名。
  • 事件的具体信息。

用户日志

保存了用户登录、退出系统等相关信息:

  • /var/log/lastlog:最近都用户登录事件。二进制文件,使用 lastlog 命令查看。
  • /var/log/secure:与用户验证有关的安全性事件。
  • /var/log/wtmp:用户登录、注销,及系统开、关机事件。二进制文件,使用 last 命令查看。
  • /var/run/utmp:当前登录的每个用户的详细信息。二进制文件,使用w、who、users等命令查看。

分析工具:

  • users、who、w、last、lastb

示例:

1)users:查询最近三次登录的用户信息。

users 命令只是简单地输出当前登录的用户名称,每个显示的用户名对应一个登录会话。 如果一个用户有不止一个登录会话,那他的用户名将显示与其相同的次数。

[root@localhost ~]# users
111 root root root root

who:查看当前登录的用户、终端、登录时间、IP地址。

who命令用于报告当前登录到系统中的每个用户的信息。使用该命令,系统管理员可

以查看当前系统存在哪些不合法用户,从而对其进行审计和处理。who 的默认输出包括用

户名、终端类型、登录日期及远程主机。

[root@localhost ~]# who
root     pts/1        2023-04-17 14:12 (192.168.31.1)

w:查看当前登录的用户、终端、IP地址、登录时间、占用CPU的情况、进程等。

w 命令用于显示当前系统中的每个用户及其所运行的进程信息,比 users、who 命令的 输出内容要丰富一些。

[root@localhost ~]# w
 18:37:20 up  4:24,  1 user,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/1    192.168.177.1    14:12    0.00s  0.14s  0.03s w

last: 读取 /var/log/wtmp 文件,显示登录系统的用户信息。

last 命令用于查询成功登录到系统的用户记录,最近的登录情况将显示在最前面。通过 last 命令可以及时掌握 Linux 主机的登录情况,若发现未经授权的用户登录过,则表示当前 主机可能已被入侵。

[root@localhost ~]# last -n 3
root     pts/1        192.168.177.1    Mon Apr 17 14:12   still logged in   
reboot   system boot  3.10.0-957.el7.x Mon Apr 17 14:12 - 18:38  (04:26)    
root     pts/0        192.168.177.1    Fri Apr 14 15:19 - crash (2+22:52)   

wtmp begins Wed Mar 22 22:10:13 2023

lastb:读取 /var/log/btmp 文件,显示登入系统失败的用户信息。

lastb 命令用于查询登录失败的用户记录,如登录的用户名错误、密码不正确等情况都将记录在案。登录失败的情况属于安全事件,因为这表示可能有人在尝试猜解你的密码。除 了使用 lastb 命令查看以外,也可以直接从安全日志文件/var/log/secure 中获得相关信息。

[root@localhost ~]# lastb

                                 //没有登陆失败的

btmp begins Mon Apr 17 14:12:32 2023

程序日志

由相应的应用程序独立进行管理:

  • Web服务:/var/log/httpd/

    • access_log、error_log
  • 代理服务:/var/log/squid

    • access.log、cache.log
  • FTP服务:/var/log/xferlog

分析工具:

  • 文本查看、grep过滤检索、Webmin管理套件中查看
  • awk、sed等文本过滤、格式化编辑工具
  • Webalizer、Awstats等专用日志分析工具

日志管理

及时做好备份和归档

延长日志保存期限

控制日志访问权限

  • 日志中可能会包含各类敏感信息,如账户、口令等。 集中管理日志

  • 将服务器的日志文件发到统一的日志文件服务器

  • 便于日志信息的统一收集、整理和分析

  • 杜绝日志信息的意外丢失、恶意篡改或删除

内核及系统日志管理

系统日志相关服务

sysklogd 系统日志服务介绍

CentOS 5 之前版本采用的日志管理系统服务

  • syslogd: system application 记录应用日志
  • klogd: linux kernel 记录内核日志

事件记录格式:

  • 日期时间 主机 进程[pid]: 事件内容

C/S架构:

  • 通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理

rsyslog 系统日志服务

rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。

当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。

rsyslog 特性:

  • 多线程
  • UDP, TCP, SSL, TLS, RELP
  • MySQL, PGSQL, Oracle实现日志存储
  • 强大的过滤器,可实现过滤记录日志信息中任意部分
  • 自定义输出格式
  • 适用于企业级中继

rsyslog管理

系统日志术语

  • facility:设施,从功能或程序上对日志进行归类
 #内置分类
 auth(验证), authpriv, cron(定时任务), daemon,ftp,kern, lpr, mail, news, security(auth), user, uucp, syslog
 #自定义的分类
 local0-local7
  • Priority 优先级别,从低到高排序
 debug, info, notice, warn(warning), err(error), crit(critical), alert, emerg(panic)
  • 参看帮助: man 3 syslog,man logger
 [root@localhost ~]# yum -y install man-pages
 [root@localhost ~]# man 3 syslog
 level
        This  determines  the  importance  of the message.  The levels are, in order of decreasing impor‐
        tance:
 ​
        LOG_EMERG      system is unusable
 ​
        LOG_ALERT      action must be taken immediately
 ​
        LOG_CRIT       critical conditions
 ​
        LOG_ERR        error conditions
 ​
        LOG_WARNING    warning conditions
 ​
        LOG_NOTICE     normal, but significant, condition
 ​
        LOG_INFO       informational message
 ​
        LOG_DEBUG      debug-level message
  • 日志等级:
级号消息级别说明
0EMERG紧急会导致主机系统不可用的情况
1ALERT警告必须马上采取措施解决的问题
2CRIT严重比较严重的情况
3ERR错误运行出现错误
4WARNING提醒可能会影响系统功能的事件
5NOTICE注意不会影响系统但值得注意
6INFO信息一般信息
7DEBUG调试程序或系统调试信息等
  • 服务名称(即什么服务产生的日志):
服务名称说 明
auth(LOG AUTH)安全和认证相关消息 (不推荐使用authpriv替代)
authpriv(LOG_AUTHPRIV)安全和认证相关消息(私有的)
cron (LOG_CRON)系统定时任务cront和at产生的日志
daemon (LOG_DAEMON)与各个守护进程相关的曰志
ftp (LOG_FTP)ftp守护进程产生的曰志
kern(LOG_KERN)内核产生的曰志(不是用户进程产生的)
Iocal0 ~ local7 (LOG_LOCAL0-7)为本地使用预留的服务
lpr (LOG_LPR)打印产生的日志
mail (LOG_MAIL)邮件收发信息
news (LOG_NEWS)与新闻服务器相关的日志
syslog (LOG_SYSLOG)存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称)
user (LOG_USER)用户等级类别的日志信息
uucp (LOG_UUCP>uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中

rsyslog 相关文件

  • 程序包:rsyslog
  • 主程序:/usr/sbin/rsyslogd
  • CentOS 6:/etc/rc.d/init.d/rsyslog {start|stop|restart|status}
  • CentOS 7,8:/usr/lib/systemd/system/rsyslog.service
  • 配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
  • 库文件: /lib64/rsyslog/*.so

rsyslog 配置文件

/etc/rsyslog.conf 配置文件格式(由三部分组成):

  • MODULES:相关模块配置
  • GLOBAL DIRECTIVES:全局配置
  • RULES:日志记录相关的规则配置

查看/etc/rsyslog.conf 文件中的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

RULES配置格式:

 facility.priority; 
 #分类      优先级
 ​
 # priority 的表示 #
 *: 所有级别
 none:没有级别,即不记录
 PRIORITY:指定级别(含)以上的所有级别
 =PRIORITY:仅记录指定级别的日志信息
 ​
 文件路径:通常在/var/log/,文件路径前的-表示异步写入。
 用户:将日志事件通知给指定的用户,* 表示登录的所有用户。
 日志服务器:@host,把日志送往至指定的远程UDP日志服务器;@@host,将日志发送到远程TCP日志服务器。
 管道: | COMMAND,转发给其它命令处理。

日志管理工具 journalctl

CentOS 7 以后,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核及系统日志和应用日志)。

日志的配置文件:

 /etc/systemd/journald.conf

journalctl命令格式:

 journalctl [OPTIONS...]  [MATCHES...]

示例:

journalctl,查看所有日志。 默认情况下,只保存本次启动的日志。

[root@localhost ~]# journalctl | head 
-- Logs begin at 三 2023-03-22 22:10:10 CST, end at 三 2023-04-19 18:10:01 CST. --
3月 22 22:10:10 localhost.localdomain systemd-journal[92]: Runtime journal is using 8.0M (max allowed 99.0M, trying to leave 148.5M free of 982.2M available → current limit 99.0M).
3月 22 22:10:10 localhost.localdomain kernel: Initializing cgroup subsys cpuset

journalctl -k, 只查看内核日志(不显示应用日志)。

[root@localhost ~]# journalctl -k |head 
-- Logs begin at 三 2023-03-22 22:10:10 CST, end at 三 2023-04-19 18:10:01 CST. --
3月 22 22:10:10 localhost.localdomain kernel: Initializing cgroup subsys cpuset
3月 22 22:10:10 localhost.localdomain kernel: Initializing cgroup subsys cpu
3月 22 22:10:10 localhost.localdomain kernel: Initializing cgroup subsys cpuacct

5) journalctl -n <数字>,显示尾部指定行数。默认10行。

 journalctl -n      //显示尾部的最新10行日志
 journalctl -n 20   //显示尾部的最新20行日志

6)journalctl -f,实时滚动显示最新日志(显示最新10行)

[root@localhost ~]# journalctl  -f
-- Logs begin at 三 2023-03-22 22:10:10 CST. --
4月 19 18:01:01 localhost.localdomain run-parts(/etc/cron.hourly)[70181]: starting 0anacron
4月 19 18:01:01 localhost.localdomain run-parts(/etc/cron.hourly)[70187]: finished 0anacron
4月 19 18:03:42 localhost.localdomain sshd[70213]: Accepted password for root from 192.168.177.1 port 51394 ssh2

查看指定服务的日志

 journalctl /usr/lib/systemd/systemd

查看指定进程的日志

 journalctl _PID=1            //查看某个路径的脚本的日志
 journalctl /usr/bin/bash

查看指定用户的日志

 journalctl _UID=33 --since today

查看某个 Unit 的日志

实时滚动显示某个 Unit 的最新日志

 journalctl -u nginx.service
 journalctl -u nginx.service --since today
 ​
 journalctl -u nginx.service -f    //实时滚动显示某个 Unit 的最新日志

合并显示多个 Unit 的日志

 journalctl -u nginx.service -u php-fpm.service --since today

查看指定优先级的日志,表示仅显示小于或等于此等级的日志 (也就是重要程度等于或高于此等级的日志)。

 共有8级 
 0: emerg(紧急)
 1: alert(警告)
 2: crit(严重)
 3: err(错误)
 4: warning(提醒)
 5: notice(注意)
 6: info(信息)
 7: debug(调试)
 ​
 journalctl -p 3 -b    //显示重要程度等于和高于err的日志

其他选项

 #日志默认分页输出,--no-pager 改为正常的标准输出
  journalctl --no-pager
  
 #以 JSON 格式(单行)输出
  journalctl -b -u nginx.service -o json
  
 #以 JSON 格式(多行)输出,可读性更好
  journalctl -b -u nginx.serviceqq -o json-pretty
  
 #显示日志占据的硬盘空间
  journalctl --disk-usage
  
 #指定日志文件占据的最大空间
  journalctl --vacuum-size=1G
  
 #指定日志文件保存多久
  journalctl --vacuum-time=1years
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值