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 管理日志涉及的俗语
facility:设施,从功能或程序上对日志进行归类
: auth : authpriv : cron : daemon : ftp : kern : lpr : mail : news : security(auth) : user : uucp : local0-local7 : syslog
local0-local7: 可以用户自定义的日志类型
Priority 优先级别,下面的优先级别从左到右从低到高排序
: debug-->info-->notice-->warn(warning)-->err(error)-->crit(critical)-->alert--> emerg(panic)
- 参看帮助: 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:22 centos8 systemd[1]: Reloading.
Nov 12 10:21:22 centos8 systemd[1]: Started man-db-cache-update.service.
[root@centos8 ~]#tail /var/log/secure
Nov 11 18:27:12 centos8 groupadd[11940]: group added to /etc/group: name=dhcpd,GID=177
Nov 11 18:27:12 centos8 groupadd[11940]: group added to /etc/gshadow: name=dhcpd
Nov 11 18:27:12 centos8 groupadd[11940]: new group: name=dhcpd, GID=177
Nov 11 18:27:12 centos8 useradd[11948]: new user: name=dhcpd, UID=177, GID=177,home=/, shell=/sbin/nologin