1.系统日志介绍
在现实生活中,记录日志也非常重要,比如银行的转账记录,飞机上的黑盒子,那么将系统和应用发生的事件记录至日志中,以助于排错和分析使用日志记录的内容包括:
- 历史事件:时间,地点,人物,事件
- 日志级别:事件的关键性程度,Loglevel
sysklogd系统日志服务
CentOS 5 之前版本采用的日志管理系统服务
- syslogd: system application 记录应用日志
- klogd: linux kernel 记录内核日志
事件记录格式:
日期时间 主机 进程[pid]: 事件内容
C/S架构:通过TCP或UDP协议的服务完成日志记录传送,将分布在不同主机的日志实现集中管理
rsyslog系统日志服务 软件 帮助 管理日志
rsyslog是CentOS 6以后版本的系统管理服务:它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
当应用有限的处理时,RSYSLOG每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是惊人的”。
rsyslog 特性
- 多线程
- UDP, TCP, SSL, TLS, RELP
- MySQL, PGSQL, Oracle实现日志存储
- 强大的过滤器,可实现过滤记录日志信息中任意部分
- 自定义输出格式 可以日志
- 适用于企业级
日志 系统日志
软件日志 自己的日志
ELK 日志收集
ELK:由Elasticsearch, Logstash, Kibana三个软件组成
- 非关系型分布式数据库基于apache软件基金会jakarta项目组的项目lucene
- Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
- Logstash对日志进行收集、分析,过滤,并将其存储供以后使用
- Kibana 可以提供的日志分析友好的 Web 界面
- kafka消息队列
2.rsyslog管理
自定义 日志文件的位置
该 软件 要支持 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)
- 参看帮助: man 3 syslog,man logger
[root@centos8 ~]#man 3 syslog
2.2日志消息的级别
日志消息的级别描述了事件的严重程度。在 Linux 内核中,根据日志消息的重要程度不同,将其分为不同的优先级别(数字等级越小,优先级越高,消息越重要)。
级号 | 消息 | 级别 | 说明 |
0 | EMERG | 紧急 | 会导致主机系统不可用的情况 |
1 | ALERT | 警告 | 必须马上采取措施解决的问题 |
2 | CRIT | 严重 | 比较严重的情况 |
3 | ERR | 错误 | 运行出现错误 |
4 | WARNING | 提 | 可能会影响系统功能的事件 |
5 | NOTICE | 注意 | 不会影响系统但值得注意 |
6 | INFO | 信息 | 一般信息 |
7 | DEBUG | 调试 | 程序或系统调试信息等 |
2.3服务名称
什么服务 的日志
服务名称 | 说 明 |
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) | 为本地使用预留的服务 某软件 无记录日志的功能,他又支持rsyslog 可以使用 此项来 定义日志 |
lpr (LOG_LPR) | 打印产生的日志 |
mail (LOG_MAIL) | 邮件收发信息 |
news (LOG_NEWS) | 与新闻服务器相关的日志 |
syslog (LOG_SYSLOG) | 存syslogd服务产生的曰志信息(虽然服务名称己经改为reyslogd,但是很多配罝依然沿用了 syslogd服务的,所以这里并没有修改服务名称) |
user (LOG_USER) | 用户等级类别的日志信息 |
uucp (LOG_UUCP> | uucp子系统的日志信息,uucp是早期Linux系统进行数据传递的协议,后来 也常用在新闻组服务中 |
2.4rsyslog相关文件
- 程序包: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.5rsyslog配置文件
/etc/rsyslog.conf配置文件格式:由三部分组成
- MODULES:相关模块配置
- GLOBAL DIRECTIVES:全局配置
- RULES:日志记录相关的规则配置
2.5.1实际操作,将ssh服务的日志单独设置
原来ssh 日志 在/var/log/secure
将 ssh服务的日志 文件 独立出来
[root@localhost ~]#vim /etc/ssh/sshd_config
#修改ssh配置文件,32下一行添加自己的自定义
:set nu 显示行号
[root@localhost ~]#vim /etc/rsyslog.conf
#76 行添加自己的文件位置
2.5.2网络日志(远程日志功能)
实验步骤
1.准备两个设备一个作为客户端,一个作为服务端
先关闭两个设备的防火墙
2.分别打开两台设备rsyslog.conf下的19 20行把开头的#号删掉
3.在客户端进行修改rsyslog.conf配置文件
复制54行的内容到55行并把/var/log/messages改成服务端的IP地址
两个@ 代表使用 tcp 一个代表udp
4.最后测试,写日志进去
3.日志文件
日志默认保存在:/var/log
3.1日志的功能
- 用于记录系统、程序运行中发生的各种事件
- 通过阅读日志,有助于诊断和解决系统故障
3.2日志文件的分类
- 内核及系统日志
由系统服务rsyslog统一进行管理,日志格式基本相似
- 用户日志
记录系统用户登录及退出系统的相关信息
- 程序日志
由各种应用程序独立管理的日志文件,记录格式不统
- /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的日志操作系统安装时安装的软件信息
4.主要的日志文件介绍
4.1日常日志记录
文件位置:/var/log/messages
文件格式: 文本文件
作用:系统中大部分的信息
4.2系统安全日志
文件位置:/var/log/secure
文件格式: 文本文件
作用:系统安全日志
4.3登录失败日志
文件位置:/var/log/btmp
文件格式:二进制无法直接查看
作用:登录失败日志
查看btmp日志:二进制文件,不是普通文本文件,无法直接查看。 可以使用lastb 命令查看哪些用户登录失败
4.4记录用户最后一次登录日志
文件位置:/var/log/lastlog
文件格式: 非文本
作用:记录用户最后一次登录
例子:
[root@localhost ~]#file /var/1og/last1og12
/var/1og/last1og:data
例子:查看lastlog 日志使用lastlog 命令
4.5目前用户成功登录日志
文件位置:/var/log/wtmp
文件格式:非文本
作用:记录用户成功登录的 日志
例子:
[rootalocalhost .]#fi1e /var/log/ntmp
/var/1og/wtmp: data
可以使用last 命令 查看 最近成功登录的日志,包括一些重启日志例子:
4.6记录硬件信息日志
文件位置:/var/log/dmesg
文件格式:文本
作用:记录硬件信息日志
4.7 记录系统启动服务
位置:/var/log/boot.log
格式:文本
作用:系统服务启动的相关信息,文本格式
4.8 记录安装系统的 相关信息
位置:/var/log/anaconda:anaconda的日志
格式:文本
作用:安装系统时的相关信息,文本格式
4.9 计划任务日志
文件位置: /var/log/cron
作用:记录与系统定时任务相关的日志
5.程序日志分析
由相应的应用程序独立进行管理
- Web服务:/var/log/httpd/
access log、error log
- 代理服务:/ar/log/squid/
access.log、cache.log.
- FTP服务:/var/log/xferlog
5.1分析工具
- 文本查看、grep过滤检索、Webmin管理套件中查看
- awk、sed等文本过滤、格式化编辑工具
- Webalizer、Awstats等专用日志分析工具
6.日志管理策略
口及时作好备份和归档
延长日志保存期限
控制日志访问权限·日志中可能会包含各类敏感信息,如账户、口令等集中管理日志
将服务器的日志文件发到统一的日志文件服务器·便于日志信息的统一收集、整理和分析
·杜绝日志信息的意外丢失、恶意篡改或删除
6.1日志管理工具journalctl
CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。
日志的配置文件:
/etc/systemd/journald.conf
journalctl命令格式
journalctl [OPTIONS...] [MATCHES...]
选项说明:
#查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl
#查看内核日志(不显示应用日志)
journalctl -k
#查看系统本次启动的日志
2 实战案例
journalctl -b
journalctl -b -0
#查看上一次启动的日志(需更改设置)
journalctl -b -1
#查看指定时间的日志 -S=since -U=unit
journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl -S "2023-07-31 2:00" -U "2023-07-31 03:00"
journalctl --since 09:00 --until "1 hour ago"
#显示尾部的最新10行日志
journalctl -n
#显示尾部指定行数的日志
journalctl -n 20
#实时滚动显示最新日志
journalctl -f
#查看指定服务的日志
journalctl /usr/lib/systemd/systemd
#查看指定进程的日志
journalctl _PID=1 #查看某个路径的脚本的日志
journalctl /usr/bin/bash
#查看指定用户的日志
journalctl _UID=33 --since today
#查看某个 Unit 的日志
journalctl -u nginx.service
journalctl -u nginx.service --since today
#实时滚动显示某个 Unit 的最新日志
journalctl -u nginx.service -f
#合并显示多个 Unit 的日志
journalctl -u nginx.service -u php-fpm.service --since today
#查看指定优先级(及其以上级别)的日志,共有8级 0: emerg
1: alert
2: crit
3: err
4: warning
5: notice
6: info
7: debug
journalctl -p err -b
#日志默认分页输出,--no-pager 改为正常的标准输出
journalctl --no-pager
#日志管理journalctl
#以 JSON 格式(单行)输出
journalctl -b -u nginx.service -o json
#以 JSON 格式(多行)输出,可读性更好
journalctl -b -u nginx.serviceqq -o json-pretty
#显示日志占据的硬盘空间
journalctl --disk-usage
#指定日志文件占据的最大空间
journalctl --vacuum-size=1G
#指定日志文件保存多久
journalctl --vacuum-time=1years
6.2logrotate日志转储 手动去 分割日志
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
logrotate 配置
软件包:logrotate
相关文件
- 计划任务:/etc/cron.daily/logrotate
- 程序文件:/usr/sbin/logrotate
- 配置文件: /etc/logrotate.conf
- 日志文件:/var/lib/logrotate/logrotate.status
配置文件主要参数如下:
[root@localhost ~]#vim /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
#一周生成一个新的日志文件
# keep 4 weeks worth of backlogs
rotate 4
#只保留最近的4个文件
# use date as a suffix of the rotated file
dateext
# 添加一个日期后缀
配置参数 | 说明 |
compress | 通过gzip压缩转储以后的日志 |
nocompress | 不压缩 |
copytruncate | 用于还在打开中的日志文件,把当前日志备份并截断 |
nocopytruncate | 备份日志文件但是不截断 |
create mode ownergroup | 转储文件,使用指定的权限,所有者,所属组创建新的日志文件 |
nocreate | 不建立新的日志文件 |
delaycompress | 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩 |
nodelaycompress | 覆盖 delaycompress 选项,转储同时压缩 |
errors address | 专储时的错误信息发送到指定的Email地址 |
ifempty | 即使是空文件也转储,此为默认选项 |
notifempty | 如果是空文件的话,不转储 |
mail address | 把转储的日志文件发送到指定的E-mail 地址 |
nomail | 转储时不发送日志文件 |
olddir directory | 转储后的日志文件放入指定目录,必须和当前日志文件在同一个文件系统 |
noolddir | 转储后的日志文件和当前日志文件放在同一个目录下 |
prerotate/endscript | 在转储以前需要执行的命令,这两个关键字必须单独成行 |
postrotate/endscript | 在转储以后需要执行的命令,这两个关键字必须单独成行 |
daily | 指定转储周期为每天 |
weekly | 指定转储周期为每周 |
monthly | 指定转储周期为每月 |
rotate count | 指定日志文件删除之前转储的次数,0指没有备份,5指保留5个备份 |
tabooext [+] list | 让logrotate*不转储指定扩展名的文件,缺省的扩展名是:.rpm-orig,.rpmsave, v, 和~ |
size size | 当日志文件到达指定的大小时才转储bytes(缺省)及KB或MB |
sharedscripts | 默认,对每个转储日志运行prerotate和postrotate脚本,日志文件的绝对路径作为第一个参数传递给脚本。 这意味着单个脚本可以针对与多个文件匹配的日志文件条目多次运行(例如/ var / log / news /.example)。 如果指定此项sharedscripts,则无论有多少个日志*与通配符模式匹配,脚本都只会运行一次 |
nosharedscripts | 针对每一个转储的日志文件,都执行一次prerotate和 postrotate脚本,此为默认值 |
missingok | 如果日志不存在,不提示错误,继续处理下一个 |
nomissingok | 如果日志不存在,提示错误,此为默认值 |
补充:服务程序启动不了,查错
systemctl status 服务名称
journalctl -xe --no-pager
-x | 提示信息 |
-e | 显示到末尾 |
--no-pager | 自动换行 |