一、系统日志管理
1 系统日志介绍
1.1 sysklogd 系统日志服务
CentOS 5 之前版本采用的日志管理系统服务
- klogd: linux kernel 记录内核日志
- syslogd: system application 记录应用日志
1.2 rsyslog 系统日志服务
rsyslog是CentOS 6 以后版本的系统管理服务.它提供了高性能,出色的安全性和模块化设计。 尽管rsyslog最初是常规的syslogd,但已发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。 即使在远程的目的地和更精细的处理中,性能通常也被认为是“惊人的”。
1.3 ELK
ELK:由Elasticsearch, Logstash, Kibana三个软件组成
- 非关系型分布式数据库
- 基于apache软件基金会jakarta项目组的项目lucene
- Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
- Logstash对日志进行收集、分析,过滤,并将其存储供以后使用
- Kibana 可以提供的日志分析友好的 Web 界面
2 rsyslog 管理
2.1 系统日志术语
- 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)
- logger 命令:可在系统日志中输入消息
#范例 [root@rsyslog ~]# logger "this is a test log" [root@rsyslog ~]# cat /var/log/messages Nov 8 03:30:05 rsyslog root[2127]: this is a test log
2.2 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配置文件
/etc/rsyslog.conf 配置文件格式:由三部分组成
- MODULES:相关模块配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志记录相关的规则配置
RULES配置格式
facility.priority; facility.priority… target
facility格式
* #所有的facility
facility1,facility2,facility3,... #指定的facility列表
priority格式
*: 所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
target格式
- 文件路径:通常在/var/log/,文件路径前的-表示异步写入
- 用户:将日志事件通知给指定的用户,* 表示登录的所有用户
- 日志服务器:@host,把日志送往至指定的远程UDP日志服务器 @@host 将日志发送到远程TCP日志服务器
- 管道: | COMMAND,转发给其它命令处理
通常的日志文件的格式
日志文件有很多,如: /var/log/messages,cron,secure等,基本格式都是类似的。格式如下
事件产生的日期时间 主机 进程(pid):事件内容
范例:将ssh服务的日志记录至自定义的local的日志设备
#修改sshd服务的配置
[root@rocky01 ~]# vim /etc/ssh/sshd_config
#SyslogFacility AUTHPRIV #更改此行
SyslogFacility local6
#修改rsyslog的配置
[root@rocky01 ~]# vim /etc/rsyslog.d/sshd.conf
local6.* /var/log/sshd.log
[root@rocky01 ~]# systemctl reload sshd
[root@rocky01 ~]# systemctl restart rsyslog.service
#测试
#ssh登录后,查看/var/log/sshd.log有记录
[root@rocky01 ~]# tail -f /var/log/sshd.log
Nov 7 16:26:12 rocky01 sshd[3903]: Accepted password for root from 10.0.0.1 port 51367 ssh2
2.4 启用网络日志服务
启用网络日志服务功能,可以将多个远程主机的日志,发送到集中的日志服务器,方便统一管理。
端口:514
范例:CentOS 8 启用网络日志功能
#接收日志的服务器
[root@rocky01 ~]# vim /etc/rsyslog.conf
#udp和tcp开启一个即可(同网段UDP,不同网段TCP)
## MODULES ####
...省略...
# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
module(load="imudp") # needs to be done just once
input(type="imudp" port="514")
# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")
[root@rocky01 ~]# systemctl restart rsyslog
#在客户端指定将日志发送到远程的TCP、UDP的日志服务器
#一个@是UDP,两个@@是TCP
[root@rocky02 ~]# vim /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages