文章目录
- Linux系统日志服务
- rsyslog
- 日志分类
- rsyslog相关文件
- /var/log/message
- 重启失败分析
- /var/log/secure
- 自定义日志输出路径
- 1.修改sshd_config配置文件
- 2.修改rsyslog.conf
- 3.重启服务
- 常见日志文件
- 日志管理工具journalctl
- 选项说明
- journalctl用法示例
- 日志分析实战
- host无法解析
- 1.查看日志什么原因导致无法解析
- Httpd启动失败分析
- 1.80端口占用
- 2. 查找端口占用进程
- 3.关掉端口占用进程
Linux系统日志服务
虽然运行在Linux系统上的各个服务都有自己的日志系统 ,如redis,nginx,mysql等,它们各自的日志都只是单独记录了它们自身服务的运行状况。如果这些服务自身宕掉了或起不来了该去查看什么日志呢?此时就需要去看Linux的系统日志了。
Linux系统日志记录着Linux本身和运行在Linux系统上各种应用服务的事件和运行信息,它就是Linux系统的公用日志服务。
日志记录的内容包括:
1.历史事件: 时间,地点,人物,事件
2.日志级别: 事件的关键性程度,Loglevel
rsyslog
rsyslog是CentOS 6以后版本的系统管理服务,它提供了高性能,出色的安全性和模块化设计。尽管rsyslog最初是常规的syslogd,但已发展成为一种瑞士军刀式的记录工具,能够接受来自各种来源的输入,并将其转换,然后输出到不同的目的地。
当应用有限的处理时,rsyslog每秒可以将超过一百万的消息传递到本地目的地。即使在远程的目的地和更精细的处理中,性能通常也被认为是“惊人的"。
官方网站:https://www.rsyslog.com/
rsyslog是linux的标配,linux系统已装好就有
rsyslog特性
1.多线程
2.UDP,TCP,SSL,TLS,RELP
3.MySQL, PGSQL, Oracle实现日志存储
4.强大的过滤器,可实现过滤记录日志信息中任意部分
5.自定义输出格式
6.适用于企业级中继链
ELK:由Elasticsearch, Logstash, Kibana三个软件组成非关系型分布式数据库
ELK
1.基于apache软件基金会jakarta项目组的项目lucene
2.Elasticsearch是个开源分布式搜索引擎,可以处理大规模日志数据,比如:Nginx、Tomcat、系统日志等功能
3.Logstash对日志进行收集、分析,过滤,并将其存储供以后使用Kibana可以提供的日志分析友好的Web界面
centos中rsyslog的详细信息
[root@centos8 ~]# rpm -qi rsyslog
Name : rsyslog
Version : 8.1911.0
Release : 7.el8
Architecture: x86_64
Install Date: Sun 12 Nov 2023 10:29:14 AM CST
Group : System Environment/Daemons
Size : 2431186
License : (GPLv3+ and ASL 2.0)
Signature : RSA/SHA256, Fri 11 Dec 2020 11:38:51 PM CST, Key ID 05b555b38483c65d
Source RPM : rsyslog-8.1911.0-7.el8.src.rpm
Build Date : Thu 10 Dec 2020 11:01:43 AM CST
Build Host : x86-02.mbox.centos.org
Relocations : (not relocatable)
Packager : CentOS Buildsys <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.
ubuntu中rsyslog软件包的详细信息
root@ubuntu:~# dpkg -s rsyslog
Package: rsyslog
Status: install ok installed
Priority: important
Section: admin
Installed-Size: 1655
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: amd64
Version: 8.2001.0-1ubuntu1.3
Provides: linux-kernel-log-daemon, system-log-daemon
Depends: libc6 (>= 2.27), libestr0 (>= 0.1.4), libfastjson4 (>= 0.99.7), libsystemd0 (>= 209), libuuid1 (>= 2.16), zlib1g (>= 1:1.1.4), adduser, ucf
Pre-Depends: init-system-helpers (>= 1.54~)
Recommends: logrotate
Suggests: rsyslog-mysql | rsyslog-pgsql, rsyslog-mongodb, rsyslog-doc, rsyslog-openssl | rsyslog-gnutls, rsyslog-gssapi, rsyslog-relp, apparmor (>= 2.8.96~2541-0ubuntu4~)
Conflicts: linux-kernel-log-daemon, system-log-daemon
Conffiles:
/etc/apparmor.d/usr.sbin.rsyslogd 88fe4a6a37a5cbb88fcadf1e564874c2
/etc/init.d/rsyslog bd41a0654a192d74dfb9c551b06fa855
/etc/logcheck/ignore.d.server/rsyslog 80e9fc074b97751dd4de99855bb8d0e0
/etc/logrotate.d/rsyslog 8159203bf98416c898849057f585e31f
/etc/rsyslog.conf 8f03326e3d7284ef50ac6777ef8a4fb8
Description: reliable system and kernel logging daemon
Rsyslog is a multi-threaded implementation of syslogd (a system utility
providing support for message logging), with features that include:
* reliable syslog over TCP, SSL/TLS and RELP
* on-demand disk buffering
* email alerting
* writing to MySQL or PostgreSQL databases (via separate output plugins)
* permitted sender lists
* filtering on any part of the syslog message
* on-the-wire message compression
* fine-grained output format control
* failover to backup destinations
* enterprise-class encrypted syslog relaying
.
It is the default syslogd on Debian systems.
Homepage: http://www.rsyslog.com/
Original-Maintainer: Michael Biebl <biebl@debian.org>
root@ubuntu:~# dpkg -L rsyslog
/etc
/etc/apparmor.d
...
/etc/init.d
/etc/init.d/rsyslog
/etc/logcheck
....
/etc/logrotate.d
/etc/logrotate.d/rsyslog
/etc/rsyslog.conf
/etc/rsyslog.d
/lib
/lib/systemd
/lib/systemd/system
/lib/systemd/system/dmesg.service
/lib/systemd/system/rsyslog.service
/usr
/usr/lib
/usr/lib/rsyslog
....
/usr/sbin
/usr/sbin/rsyslogd
/usr/share
/usr/share/doc
/usr/share/doc/rsyslog
....
/usr/share/man
/usr/share/man/man1
....
/usr/share/rsyslog
/usr/share/rsyslog/50-default.conf
/var
/var/spool
/var/spool/rsyslog
日志分类
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(critica1), alert, emerg(panic)
参看帮助: man 3 syslog,man logger
[root@centos8 ~]#yum -y insta11 man-pages
[root@centos8 ~]#man 3 syslog
man syslog
rsyslog相关文件
vim /etc/rsyslog.conf
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
# The authpriv file has restricted access.
authpriv.* /var/log/secure
# Log all the mail messages in one place.
mail.* -/var/log/maillog
# Log cron stuff
cron.* /var/log/cron
# Everybody gets emergency messages
*.emerg :omusrmsg:*
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
# Save boot messages also to boot.log
local7.* /var/log/boot.log
/var/log/message
由配置文件,我们可以看出系统的主要日志是记录在“/var/log/messages”里的
*.info;mail.none;authpriv.none;cron.none /var/log/messages
当我开启httpd服务时,/var/log/message日志里也会有httpd服务的相关信息记录
重启失败分析
那我们就去45行找错误
vim +45 /etc/httpd/conf/httpd.conf
/var/log/secure
/var/log/secure里记录着远程登录信息又记录着用户授权信息auth和privilege
1.远程登录信息
2.用户授权信息
/var/log/message是个需要经常关注的日志文件,它记录者远程登录的ip,是否有人一直在尝试登录密码。
自定义日志输出路径
1.修改sshd_config配置文件
SyslogFacility
2.修改rsyslog.conf
主配置文件中可包含子配置文件,于是我们单独写一个子配置文件
[root@rocky ~]# vim /etc/rsyslog.d/sshd.config
local6.* /var/log/ssh.log
3.重启服务
systemctl restart sshd rsyslog
此时/var/log/secure文件中没有了具体远程登录的ip地址信息了
常见日志文件
/var/log/secure: 系统安全日志,文本格式,应周期性分析
/varlog/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的日志
日志管理工具journalctl
CentOS 7以后版本,利用Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl—个命令,查看所有日志(内核日志和应用日志)。
journalctl的配置文件
/etc/systemd/journald.conf
journalctl的命令格式
journalctl [OPTIONS...] [MATCHES...]
选项说明
-e, --pager-end
在分页工具内立即跳转到日志的尾部。此选项隐含了-n1000
以确保分页工具不必缓存太多的日志行。不过这个隐含的行数可以被明确设置的 -n选项覆盖。
注意,此选项仅可用于less(1)分页器。
-×, --catalog
在日志的输出中增加一些解释性的短文本,以帮助进一步说明日志的含义、问题的解决方案、支持论坛、开发文档、以及其他任 何内容。
并非所有日志都有这些额外的帮助文本,详见 Message catalog DeveloperDocumentation[5]文档。
注意,如果要将日志输出用于bug报告,请不要使用此选项。
journalctl用法示例
#查看所有日志(默认情况下,只保存本次启动的日志)
journalctl
#查看内核日志(不显示应用日志)
journalctl -k
#查看系统本次启动的日志
journalctl -b
journalctl -b -0
#查看上一次启动的日志(需更改设置)
journalctl -b -1
#查看指定时间的日志
journalctl --since="2017-10-30 18:10: 30"
journa1ctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2017-01-10"--until "2017-01-11 03:00"
journalctl --since 09:00 --unti1 "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 的日志
journa1ctl -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
#日志管理journa1ct1
#以JSON格式(单行)输出
journalctl -b -u nginx.service -o json
#以 SON格式(多行)输出,可读性更好
journalctl -b -u nginx.service -o json-pretty
#显示日志占据的硬盘空间
journalct1 --disk-usage
#指定日志文件占据的最大空间
journalctl --vacuum-size=1G
#指定日志文件保存多久
journalctl --vacuum-time=1years
日志分析实战
host无法解析
1.查看日志什么原因导致无法解析
当我修改了DNS为114后就解析正常了,因为我自己的DNS服务确实有问题
Httpd启动失败分析
1.80端口占用
2. 查找端口占用进程
netstat -tunlp 用于显示 tcp,udp 的端口和进程等相关情况。
netstat -tunlp | grep 端口号
-t (tcp) 仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化为数字
-l 仅列出在Listen(监听)的服务状态
-p 显示建立相关链接的程序名
3.关掉端口占用进程
关掉nginx服务