-
日志服务管理和文件共享服务
一、系统日志管理
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
*.info;mail.none;authpriv.none;cron.none @@10.0.0.8:514 #TCP
*.info;mail.none;authpriv.none;cron.none @10.0.0.8:514 #UDP
[root@rocky02 ~]# systemctl restart rsyslog
2.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的日志
3 journalctl 日志管理工具
CentOS 7 以后版,利用Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。
日志的配置文件:
/etc/systemd/journald.confjournalctl命令格式:
journalctl [OPTIONS...] [MATCHES...]
范例:journalctl用法
#查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl
#查看内核日志(不显示应用日志)
journalctl -k
#查看系统本次启动的日志
journalctl -b
journalctl -b -0
#查看上一次启动的日志(需更改设置)
journalctl -b -1
#查看指定时间的日志
journalctl --since="2017-10-30 18:10:30"
journalctl --since "20 min ago"
journalctl --since yesterday
journalctl --since "2017-01-10" --until "2017-01-11 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
二、实战案例:利用 MySQL 存储日志信息
目标
- 利用rsyslog日志服务,将收集的日志记录于MySQL中
环境准备
- 两台主机
- 10.0.0.128:rsyslog日志服务器
- 10.0.0.130:mysql数据库服务器
注:可配合网络日志功能
(1)在rsyslog服务器上安装连接mysql模块相关的程序包
[root@rsyslog ~]# yum install -y rsyslog-mysql
#mysql-createDB.sql需导入到数据库服务器
[root@rocky01 ~]# rpm -ql rsyslog-mysql
/usr/lib/.build-id
/usr/lib/.build-id/09
/usr/lib/.build-id/09/927b14f8ca6dfdeca2c2bbe1369b56e6470382
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog/mysql-createDB.sql
#将sql脚本复制到数据库服库上
[root@rsyslog ~]# scp /usr/share/doc/rsyslog/mysql-createDB.sql 10.0.0.130:/data
(2)准备MySQL Server
[root@mysql ~]# yum install -y mysql-server
#在mariadb数据库服务器上创建相关数据库和表,并授权rsyslog能连接至当前服务器
#Syslog库为mysql-createDB.sql里所创建的库,创建的用户名可自定义
[root@mysql ~]# mysql
mysql> source /data/mysql-createDB.sql
mysql> create user 'rsyslog'@'10.0.0.%' identified by '123456';
mysql> grant all on Syslog.* to 'rsyslog'@'10.0.0.%';
(3)配置日志服务器将日志发送至指定数据库
#配置rsyslog将日志保存到mysql中
[root@rsyslog ~]# vim /etc/rsyslog.conf
#
####MODULES####
#在 MODULES 语言下面,如果是 CentOS 8 加下面行
module(load="ommysql")
#在 MODULES 语言下面,如果是 CentOS 7,6 加下面行
$ModLoad ommysql
#在RULES语句块加下面行的格式
#分类可自行修改
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info;mail.none;authpriv.none;cron.none :ommysql:10.0.0.130,Syslog,rsyslog,123456
[root@rsyslog ~]# systemctl restart rsyslog
(4)测试
#在日志服务器上生成日志
[root@rsyslog ~]# logger "this is a test log"
#在数据库上查询到上面的测试日志
[root@mysql ~]# mysql Syslog
mysql> select * from SystemEvents\G
*************************** 1. row ***************************
ID: 1
CustomerID: NULL
ReceivedAt: 2022-11-08 02:27:49
DeviceReportedTime: 2022-11-08 02:27:49
Facility: 1
Priority: 5
FromHost: rsyslog
Message: this is a test log
...省略...
三、logrotate 日志转储
1 logrotate 介绍
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
2 logrotate 配置
软件包:logrotate
相关文件
- 计划任务:/etc/cron.daily/logrotate
- 程序文件:/usr/sbin/logrotate
- 配置文件: /etc/logrotate.conf
- 日志文件:/var/lib/logrotate/logrotate.status
配置文件主要参数如下:
3 logroate 配置范例
范例: 设置nginx的日志转储
cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
daily
rotate 100
missingok
compress
delaycompress
notifempty
create 644 ngnix nginx
postrotate
if [ -f /app/nginx/logs/nginx.pid ]; then
kill -USR1 `cat /app/nginx/logs/nginx.pid`
fi
endscript
}
范例:对指定日志手动执行日志转储
#生成测试日志
[root@centos8 ~]#dd if=/dev/zero of=/var/log/test1.log bs=2M count=1
[root@centos8 ~]#dd if=/dev/zero of=/var/log/test2.log bs=2M count=1
#针对不同的日志创建转储配置文件
[root@centos8 ~]#cat /etc/logrotate.d/test1
/var/log/test1.log {
daily
rotate 5
compress
delaycompress
missingok
size 1M
notifempty
create 640 bin nobody
postrotate
echo `date +%F_%T` >> /data/test1.log
endscript
}
[root@centos8 ~]#cat /etc/logrotate.d/test2
/var/log/test2.log {
daily
rotate 5
compress
delaycompress
missingok
size 1M
notifempty
create 644 root root
postrotate
echo `date +%F_%T` >> /data/test2.log
endscript
}
#针对一个测试日志,手动执行日志转储
[root@centos8 ~]#logrotate /etc/logrotate.d/test1
[root@centos8 ~]#ll /var/log/test*
-rw-r----- 1 root root 0 Dec 14 16:38 /var/log/test1.log
-rw-r--r-- 1 root root 2097152 Dec 14 16:35 /var/log/test1.log.1
-rw-r--r-- 1 root root 2097152 Dec 14 16:36 /var/log/test2.log
[root@centos8 ~]#ls /data
test1.log
[root@centos8 ~]#cat /data/test1.log
2019-11-12_14:00:14
#对所有日志进行手动转储
[root@centos8 ~]#logrotate /etc/logrotate.conf
[root@centos8 ~]#ll /var/log/test*
-rw-r--r-- 1 bin nobody 0 Nov 12 14:00 /var/log/test1.log
-rw-r--r-- 1 root root 2097152 Nov 12 13:59 /var/log/test1.log.1
-rw-r--r-- 1 root root 0 Nov 12 14:01 /var/log/test2.log
-rw-r--r-- 1 root root 2097152 Nov 12 13:59 /var/log/test2.log-20191112
[root@centos8 ~]#ls /data
test1.log test2.log
[root@centos8 ~]#cat /data/test1.log
2019-11-12_14:01:51
四、网络文件共享服务