linux日志
常见日志文件
在 CentOS 7 中,常见的日志文件包括但不限于以下几种:
-
/var/log/messages: 这是系统的主要日志文件,记录了系统的各种信息,包括系统启动、关机、服务启动、系统错误等。
-
/var/log/secure: 这个文件包含了安全相关的信息,比如 SSH 登录尝试、su 切换用户等操作的日志。
-
/var/log/boot.log: 记录系统启动时的日志信息,包括启动过程中各个服务的启动情况。
-
/var/log/cron: 记录了 cron 定时任务的执行情况,包括任务的执行时间、执行结果等。
-
/var/log/yum.log: 记录了 yum 命令的操作记录,包括安装、卸载、更新软件包等操作。
-
/var/log/httpd/: Apache Web 服务器的日志文件目录,其中包括 access_log(记录 HTTP 请求)、error_log(记录服务器错误信息)等文件。
-
/var/log/mysql/: MySQL 数据库的日志文件目录,包括 error.log(记录数据库错误信息)、query.log(记录数据库查询信息)等文件。
-
/var/log/maillog: 记录邮件服务器(如 Postfix)的日志信息,包括邮件的发送、接收等操作记录。
- /var/log/dmesg:记录了系统在开机时内核自检的信息,也可以使用dmesg命令直接查看内核自检信息。
查看日志
- journalctl -ex:以详细的方式显示最近的系统日志记录。
- systemctl status:查看系统服务状态。
用户日志
-
/var/log/lastlog: 记录了系统中所有用户最近一次登录的时间和相关信息。可以使用 lastlog命令来查看其内容。
-
/var/log/wtmp: 记录了系统中所有用户的登录、注销和系统启动、关机等事件,以二进制格式存储。可以使用
last
命令查看其内容,例如last -a
可以查看所有登录和注销事件。 -
/var/log/btmp: 记录了登录失败的尝试,包括登录失败的用户名、IP地址和尝试的时间等信息。可以使用
lastb
命令查看其内容。 - /var/run/utmp: 这个文件记录了当前已登录的用户信息,包括用户名、登录终端、登录时间等。它是一个二进制文件,可以使用 who 、 w 、user命令来查看其内容。
内核和公共日志
在Linux系统中,日志可以分为两类:内核日志和用户空间(公共)日志。
-
内核日志:内核日志是由操作系统内核生成的日志,通常包含与系统硬件和内核相关的信息,如系统启动信息、硬件故障、内核模块加载和卸载等。这些日志通常由内核级别的设备驱动程序、中断处理程序和内核代码生成,并存储在系统内核环缓冲区(kernel ring buffer)中。可以通过
dmesg
命令查看内核日志。 -
用户空间(公共)日志:用户空间日志是由用户空间应用程序生成的日志,通常包含应用程序的运行状态、错误信息等。这些日志通常由系统日志守护进程(如syslogd、rsyslogd或systemd-journald)收集和处理,存储在系统的日志文件中(如/var/log/messages)。用户空间日志包括来自各种应用程序、服务和系统组件的消息,可以帮助诊断问题和跟踪系统行为。
日志服务管理
消息级别Loglevel
在Linux系统中,日志消息按照其重要程度可以分为不同的级别,这些级别是通过数字来表示的,数字越小表示优先级越高,消息越重要。常见的级别包括(按照从高到低的顺序):
-
EMERGENCY(0)(紧急):表示系统已经不可用,需要立即采取行动。
-
ALERT(1)(警报):表示需要立即采取行动以防止进一步的损失或损害。
-
CRITICAL(2)(临界):表示严重的错误,可能导致系统无法正常工作。
-
ERROR(3)(错误):表示发生了某种错误,需要立即处理。
-
WARNING(4)(警告):表示可能存在问题,但程序仍然可以继续运行。
-
NOTICE(5)(注意):表示需要用户注意的信息,但不是错误或警告。
-
INFO(6)(信息):表示一般信息,通常用于输出程序状态或操作。
-
DEBUG(7)(调试):表示调试信息,通常用于开发和调试过程中。
这些级别通常用于系统日志(如syslog)或应用程序日志中,可以根据需要进行配置和调整。
日志类型
在rsyslog系统日志工具中,日志消息通常按照设备、设施和优先级进行分类。下面是一些常见的日志类型及其含义:
-
auth (LOG AUTH):安全和认证相关消息的日志,记录用户登录、认证尝试等活动。
-
authpriv (LOG_AUTHPRIV):私密的安全和认证相关消息的日志,通常包含敏感信息,如用户登录失败的尝试,建议不使用此项,推荐使用auth替代。
-
cron (LOG_CRON):系统定时任务(如crontab和at)产生的日志,记录计划任务的执行情况。
-
daemon (LOG_DAEMON):与各个守护进程相关的日志,记录守护进程的活动和状态。
-
ftp (LOG_FTP):FTP守护进程产生的日志,记录FTP传输的信息和状态。
-
kern (LOG_KERN):内核产生的日志,记录与内核相关的消息,如系统启动和关机消息、硬件故障等。
-
local0-local7 (LOG_LOCAL0-7):为本地使用预留的服务,可以用于定义特定应用程序或服务产生的日志消息。
-
lpr (LOG_LPR):打印产生的日志,记录打印任务的状态和信息。
-
mail (LOG_MAIL):邮件收发信息的日志,记录邮件传输代理(MTA)的活动和状态。
-
news (LOG_NEWS):与新闻服务器相关的日志,记录新闻发布和传输的信息。
-
syslog (LOG_SYSLOG):存储syslogd服务产生的日志信息,尽管服务名称可能已经改为rsyslogd,但仍然沿用syslogd服务的配署。
-
user (LOG_USER):用户等级类别的日志信息,记录用户活动和事件。
查看rsyslog的相关文件,可以看出/etc/rsyslog.conf是他的配置文件。进入配置文件。\
日志处理规则#### RULES ####
找到#### RULES ####可以定制日志处理规则。
# The authpriv file has restricted access. authpriv.* /var/log/secure
例如,在上面这一行中,authpriv
表示的是日志类型,*为所有消息级别,表示私密的安全和认证相关消息的日志,将日志保存到/var/log/secure
。
# Don't log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages
上面一行的解释如下:
*.info
: 这是一个选择器,指定了日志消息的设施和级别。*
表示所有设施(如 auth、cron、mail 等),而 info
表示消息级别为 info 或更高(包括 notice、warning、error、critical 和 alert)的消息。换句话说,这将匹配所有设施中级别为 info 或更高的消息。
mail.none
: 这是一个排除器,指定不记录特定设施的消息。mail.none
意味着不记录邮件相关的消息。authpriv.none;cron.none
相同。
/var/log/messages
: 这是指定日志消息应该记录到的文件路径。在这种情况下,它将消息记录到 /var/log/messages
文件中。
日志传输协议#### MODULES ####
如果需要将日志传输远程给日志服务器,则需要选择传输协议。如下图所示,找到#### MODULES ####可以选择udp或tcp传输。
单独设置ssh服务日志
首先使selinux为宽松模式
原来ssh日志在/var/log/secure,现在需要把ssh服务的日志文件独立出来。
如图可知,ssh的配置文件为/etc/ssh/sshd_config。
先修改日志类型,将32行的AUTHPRIV类型改为LOCAL6类型。因为LOCAL7类型已经存在。
在/etc/rsyslog.conf文件中添加local6,级别为任意,日志保存位置为/data/ssh.log。并且加上注释。
重启rsyslog和ssh服务,查看新的日志文件。
远程日志
现在需要将本机的日志保存到日志服务器上。
首先将两边selinux设为宽松模式
在/etc/rsyslog.conf中为两端开启tcp服务,可以看到开放了514端口为传输使用。
重启服务后可以看到端口514开启
在客户端上,例如我们想将保存到/var/log/messages的日志保存到ip地址为192.168.146.146的服务器上,我们可以在后面加上一行,用tcp传输,将日志保存位置改为@@加上ip地址。
如果是upd传输,只需要一个@。
在防火墙上放通tcp的514端口。
此时我们在客户端上写入日志。
开日志服务器上使用tail -f /var/log/messages命令可以看到客户端更新的日志。
ELK
ELK:由Elasticsearch, Logstash, Kibana三个软件组成,适用于服务器数量很多的情况。
-
非关系型分布式数据库基于apache软件基金会jakarta项目组的项目lucene
-
Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
-
Logstash对日志进行收集、分析,过滤,并将其存储供以后使用
-
Kibana 可以提供的日志分析友好的 Web 界面
-
kafka消息队列