Linux 日志管理
一.Linux 下的日志服务简介
1.1 CentOS5 之前的版本
-
centos5 之前的版本使用系统和内核日志分离的格式记录日志
- syslogd:该服务专门用于记录系统日志(system application logs)
- klogd: 该服务专门用于记录内核日志(linux kernel logs) centos5 之前事件的记录格式
- 日期 时间 主机 进程[PID]: 事件内容
-
C/S 架构: 通过 TCP 或者 UDP 协议的服务完成日志记录和传输,
可以将分布在不同主机的日志实现集中管理
1.2 CentOS6 以后的版本
centos6 以后的版本将内核日志和系统日志合并为一个,统一使用 rsyslog
服务管理日志。
-
rsyslog 服务有以下特点:
- 多线程
- 支持多种协议: DUP,TCP,SSL,TLS,RELP
- 可以借助多种数据库存储日志: MySQL,PGSQL,Oracle
- 使用强大的过滤器过滤日志的任何内容
- 还可以自定义输出格式
ELK–另一种日志收集和处理的架构
-
-
ELK:由 Elasticsearch, Logstash, Kibana 三个软件组成,有以下特点
- 非关系型分布式数据库
- 基于 apache 软件基金会 jakarta 项目组的项目 lucene
-
Elasticsearch 是个开源分布式搜索引擎,可以处理大规模日志
数据,比如:Nginx、Tomcat、系统日志等功能 - Logstash 对日志进行收集、分析,过滤,并将其存储供以后使用
- Kibana 可以提供的日志分析友好的 Web 界面
ELK 和 LAMP 类似,三个开源软件的组合可以让日志管理变得极其便利和直观,
前提了解各个软件的特点和用法,有机的组合。
二.使用 rsyslog 服务管理系统日志
2.1 rsyslog 管理日志涉及的俗语
-
auth
-
authpriv
-
cron
-
daemon
-
ftp
-
kern
-
lpr
-
mail
-
news
-
security(auth)
-
user
-
uucp
-
local0-local7
-
syslog
facility
:设施,从功能或程序上对日志进行归类
local0-local7
: 可以用户自定义的日志类型
-
debug-->info-->notice-->warn(warning)-->err(error)-->crit(critical)-->alert--> emerg(panic)
Priority
优先级别,下面的优先级别从左到右从低到高排序
- 参看帮助: man syslog,man logger
2.2 rsyslog 相关文件
-
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
2.3 rsyslog 配置文件
2.3.1 配置文件格式
-
rsyslog 配置文件格式由三部分组成
- MODULES: 相关的模块配置
- GLOBAL DIRECTIVES: 全局配置
- RULES: 日志记录相关的规则配置 RULES 规则配置格式
-
facility.priority; facility.prioriry... target
facility
日志类型·
priority
日志
target
目标,表示日志存放的文件路径
facility 格式
* # *号表示所有类型的日志
faciluty1,facility2,... # 多个类型的日志使用逗号分隔
priority 格式
*: 所有级别
none: 没有级别,即不记录
PRIORITY: 指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
target 格式
文件路径: 通常在/var/log/,文件路径前的-表示异步写入
用户: 将日志事件通知给指定的用户,* 表示登录的所有用户
日志服务器:@host,把日志送往至指定的远程UDP日志服务器 @@host 将日志发送到远程TCP日志服务器
管道: | COMMAND,转发给其它命令处理
- 如:
*.info;mail.none;authpriv.none;cron.none /var/log/messages
上面例子表示记录优先级在info
及以上的日志到文件/var/log/messages
日志优先级别 none 为无优先级,即表示不记录 mail,authpriv 和
cron 类型的日志
2.3.2 通常的日志格式
- 由于日志的多样性,linux 下记录日志的文件很多,记录的基本格式如下:
事件产生的日期和时间 主机 进程(PID): 事件内容
-
常见的日志文件有
-
/var/log/secure
: 系统安装日志,文本格式,应周期性分析 -
/var/log/btmp
: 当前系统上,用户的失败尝试登录相关的日
志信息,二进制格式,lastb 命令进行查看 -
/var/log/wtmp
: 当前系统上,用户正常登录系统的相关日志
信息,二进制格式,last 命令可以查看 -
/var/log/lastlog
: 每一个用户最近一次的登录信息,
二进制格式,lastlog 命令可以查看 -
/var/log/dmesg
: CentOS7 之前版本系统引导过程
中的日志信息,文本格式,开机后的硬件变化将不再记录专用命令 dmesg 查看,
可持续记录硬件变化的情况 -
/var/log/boot.log
系统服务启动的相关信息,文本格式 -
/var/log/messages
: 系统中大部分的信息 -
/var/log/anaconda
: anaconda 的日志
- 范例:日志文件格式
[root@centos8 ~]#tail /var/log/messages
Nov 12 08:34:18 centos8 dnf[14114]: Metadata cache created.
Nov 12 08:34:18 centos8 systemd[1]: Started dnf makecache.
Nov 12 09:35:14 centos8 systemd[1]: Starting dnf makecache...
Nov 12 09:35:14 centos8 dnf[14249]: Metadata cache refreshed recently.
Nov 12 09:35:14 centos8 systemd[1]: Started dnf makecache.
Nov 12 10:21:22 centos8 systemd[1]: Starting man-db-cache-update.service...
Nov 12 10:21