日志服务管理**
1 系统日志管理
1.1 系统日志介绍
在现实生活中,记录日志也非常重要,比如银行的转账记录,飞机上的黑盒子,那么将系统和应用发生的事件记录至日志中,以助于排错和分析使用
日志记录的内容包括:
- 历史事件:时间,地点,人物,事件
- 日志级别:事件的关键性程度,Loglevel
1.1.1 sysklogd 系统日志服务
CentOS 5 之前版本采用的日志管理系统服务
- syslogd: system application 记录应用日志
- klogd: linux kernel 记录内核日志
事件记录格式:
日期时间 主机 进程[pid]: 事件内容
C/S架构:通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理
1.1.2 rsyslog 系统日志服务
rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。
rsyslog 特性
- 多线程
- UDP, TCP, SSL, TLS, RELP
- MySQL, PGSQL, Oracle实现日志存储
- 强大的过滤器,可实现过滤记录日志信息中任意部分
- 自定义输出格式
- 适用于企业级中继
[root@localhost ~]# rpm -qi rsyslog
Name : rsyslog
Version : 8.24.0
Release : 12.el7
Architecture: x86_64
Install Date: 2022年03月17日 星期四 06时15分25秒
Group : System Environment/Daemons
Size : 2001814
License : (GPLv3+ and ASL 2.0)
Signature : RSA/SHA256, 2017年08月11日 星期五 03时43分05秒, Key ID 24c6a8a7f4a80eb5
Source RPM : rsyslog-8.24.0-12.el7.src.rpm
Build Date : 2017年08月07日 星期一 08时56分12秒
Build Host : c1bm.rdu2.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://www.rsyslog.com/
Summary : Enhanced system logging and kernel message trapping daemon
Description :
Rsyslog is an enhanced, multi-threaded syslog daemon. It supports MySQL,
syslog/TCP, RFC 3195, permitted sender lists, filtering on any message part,
and fine grain output format control. It is compatible with stock sysklogd
and can be used as a drop-in replacement. Rsyslog is simple to set up, with
advanced features suitable for enterprise-class, encryption-protected syslog
relay chains.
1.1.3 ELK
ELK:由Elasticsearch, Logstash, Kibana三个软件组成
- 非关系型分布式数据库基于apache软件基金会jakarta项目组的项目lucene
- Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
- Logstash对日志进行收集、分析,过滤,并将其存储供以后使用
- Kibana 可以提供的日志分析友好的 Web 界面
1.2 rsyslog 管理
1.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)
- 参看帮助: man 3 syslog,man logger
[root@centos8 ~]#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
日志等级**
| 等级名称 | 说 明 |
|---|---|
| debug (LOG_DEBUG) | 一般的调试信息说明 |
| info (LOG_INFO) | 基本的通知信息 |
| notice (LOG_NOTICE) | 普通信息,但是有一定的重要性 |
| warning(LOG_WARNING) | 警吿信息,但是还不会影响到服务或系统的运行 |
| error(LOG_ERR) | 错误信息, 一般达到err等级的信息已经可以影响到服务成系统的运行了 |
| crit (LOG_CRIT) | 临界状况信思,比err等级还要严® |
| alert (LOG_ALERT) | 状态信息,比crit等级还要严重,必须立即采取行动 |
| emerg (LOG_EMERG) | 疼痛等级信息,系统已经无法使用了 |
| * | 代表所有日志等级。比如,“authpriv.*”代表amhpriv认证信息服务产生的日志,所有的日志等级都记录 |
服务名称
什么服务 的日志
| 服务名称 | 说 明 |
|---|---|
| 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系统进行数据传递的协议,后来 也常用在新闻组服务中 |
1.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
1.2.3 rsyslog配置文件
/etc/rsyslog.conf 配置文件格式:由三部分组成
- MODULES:相关模块配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志记录相关的规则配置
[root@localhost ~]#rpm -ql rsyslog |grep imuxsock
/usr/lib64/rsyslog/imuxsock.so
RULES配置格式:
facility.priority;
#分类 优先级
*: 所有级别
none:没有级别,即不记录
PRIORITY:指定级别(含)以上的所有级别
=PRIORITY:仅记录指定级别的日志信息
文件路径:通常在/var/log/,文件路径前的-表示异步写入
用户:将日志事件通知给指定的用户,* 表示登录的所有用户
日志服务器:@host,把日志送往至指定的远程UDP日志服务器 @@host 将日志发送到远程TCP日志服务器
管道: | COMMAND,转发给其它命令处理
通常的日志文件的格式:
日志文件有很多,如: /var/log/messages,cron,secure等,基本格式都是类似的。格式如下
[root@localhost ~]# tail /var/log/messages
Mar 30 22:30:01 localhost systemd: Started Session 12 of user root.
Mar 30 22:30:01 localhost systemd: Starting Session 12 of user root.
Mar 30 22:40:01 localhost systemd: Started Session 13 of user root.
Mar 30 22:40:01 localhost systemd: Starting Session 13 of user root.
Mar 30 22:50:01 localhost systemd: Started Session 14 of user root.
Mar 30 22:50:01 localhost systemd: Starting Session 14 of user root.
Mar 30 23:00:01 localhost systemd: Started Session 15 of user root.
Mar 30 23:00:01 localhost systemd: Starting Session 15 of user root.
Mar 30 23:01:01 localhost systemd: Started Session 16 of user root.
Mar 30 23:01:01 localhost systemd: Starting Session 16 of user root.
1.3 实际操作,将ssh服务的日志单独设置
原来ssh的日志位置: /var/log/secure
[root@localhost ~]#tail -f /var/log/secure
#查看ssh服务的日志位置
[root@localhost ~]#vim /etc/ssh/sshd_config
#修改ssh配置文件,32下一行添加自己的自定义
32 #SyslogFacility AUTHPRIV
33 SyslogFacility LOCAL6
local 0-7
[root@localhost ~]#vim /etc/rsyslog.conf
#76 行添加自己的文件位置
74 local6.* /var/log/ssh.log
1.4网络日志(远程日志功能)
#开启日志的远程传输功能在192.168.91.100
[root@localhost ~]#rpm -ql rsyslog
/usr/lib64/rsyslog/imtcp.so
/usr/lib64/rsyslog/imudp.so
[root@localhost ~]#ss -ntap |grep 514
[root@localhost ~]#vim /etc/rsyslog.conf
#打开19 20 行
19 #$ModLoad imtcp
20 #$InputTCPServerRun 514
[root@localhost ~]#ss -ntap |grep 514
#查看514端口是否打开
#在192.168.91.101 上设置发送到哪台主机去
[root@centos7-2 ~]#vim /etc/rsyslog.conf
#修改配置文件
54 *.info;mail.none;authpriv.none;cron.none /var/log/messages
#复制54行 改成ip地址
55 *.info;mail.none;authpriv.none;cron.none @@192.168.91.100
如果修改 的是udp @192.168.91.100
如果要想指定端口 @192.168.91.100:端口号
[root@centos7-2 ~]#logger "this is test log from 192.168.91.101 2"
#测试,写日志进去
1.5 日志文件
- /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@localhost ~]#lastb
#btmp 无法查看需要使用 lastb 来查看
root :0 :0 Tue Mar 8 01:32 - 01:32 (00:00)
root ssh:notty 192.168.91.101 Tue Mar 8 00:53 - 00:53 (00:00)
root ssh:notty 192.168.91.101 Tue Mar 8 00:50 - 00:50 (00:00)
btmp begins Tue Mar 8 00:50:35 2022
[root@localhost ~]#last
#上一次成功登录包括重启
root pts/2 192.168.91.101 Tue Mar 8 00:50 - 00:53 (00:02)
root pts/0 192.168.91.1 Mon Mar 7 23:44 still logged in
[root@localhost ~]#lastlog
#最后一次登录