1, 相关概念
facility: 设施, 从功能或程序上对日志进行归类
auth authpriv cron daemon ftp kern lpr mail news security(auth) user uucp local0-local7 syslog
Priority: 优先级别, 从低到高排序
debug info notice warn(warning) err(error) crit(critical) alert emerg(panic)
2,rsyslog 服务
程序包: rsyslog
主程序:/usr/sbin/rsyslogd
- CentOS 6:service rsyslog {start|stop|restart|status}
- CentOS 7:/usr/lib/systemd/system/rsyslog.service
库文件: /lib64/rsyslog/*.so
配置文件:/etc/rsyslog.conf,/etc/rsyslog.d/*.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, 把日志送往至指定的远程服务器记录
管道: | COMMAND, 转发给其它命令处理
~]# cat /etc/rsyslog.conf |grep -v "^ *$"
################# MODULES #############################################
$ModLoad imuxsock # 为本地系统日志记录提供支持 (e.g. via logger command)
$ModLoad imjournal # 提供对 systemd 日志的访问
#$ModLoad imklog # 读取内核消息 (the same are read from journald)
#$ModLoad immark # 提供了 --MARK-- 消息功能
# 提供 UDP 系统日志接收
#$ModLoad imudp
#$UDPServerRun 514
# 提供 TCP 系统日志接收
#$ModLoad imtcp
#$InputTCPServerRun 514
################# GLOBAL DIRECTIVES ####################################
# 在哪里放置辅助文件
$WorkDirectory /var/lib/rsyslog
# 使用默认的时间戳格式
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
# 文件同步功能默认为禁用. 此功能通常不是必需的
#$ActionFileEnableSync on
# 将所有配置文件包含在 / etc/rsyslog.d / 中
$IncludeConfig /etc/rsyslog.d/*.conf
# 通过本地日志套接字关闭信息接收; 本地消息现在通过 imjournal 检索.
$OmitLocalLogging on
# 文件在日志中存储位置
$IMJournalStateFile imjournal.state
################# RULES ##########################################
#kern.*/dev/console
*.info;mail.none;authpriv.none;cron.none /var/log/messages
authpriv.*/var/log/secure
- mail.* -/var/log/maillog
- cron.*/var/log/cron
- *.emerg :omusrmsg:*
- uucp,news.crit /var/log/spooler
- local7.*/var/log/boot.log
- # ### begin forwarding rule #######################################
- #$ActionQueueFileName fwdRule1 # unique name prefix for spool files
- #$ActionQueueMaxDiskSpace 1g # 1GB 的空间限制 (use as much as possible)
- #$ActionQueueSaveOnShutdown on # 在关机时将消息保存到磁盘
- #$ActionQueueType LinkedList # 异步运行
- #$ActionResumeRetryCount -1 # 如果主机停机, 无限重试
- # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
- #*.* @@remote-host:514
- # ### end of the forwarding rule ##################################
3, 系统日志
/var/log/secure: 系统安装日志, 文本格式, 应周期性分析
/var/log/btmp: 当前系统上, 用户的失败尝试登录相关的日志信息, 二进制格式, lastb 命令进行查看
/var/log/wtmp: 当前系统上, 用户正常登录系统的相关日志信息, 二进制格式, last 命令可以查看
/var/log/lastlog: 每一个用户最近一次的登录信息, 二进制格式, lastlog 命令可以查看
/var/log/dmesg: 系统引导过程中的日志信息, 文本格式, 专用命令 dmesg 查看
/var/log/messages : 系统中大部分的信息
/var/log/anaconda/* : anaconda 的日志
4,journalctl 命令
Systemd 统一管理所有 Unit 的启动日志. 带来的好处就是, 可以只用 journalctl 一个命令, 查看所有日志(内核日志和应用日志)
配置文件:
/etc/systemd/journald.conf
常用选项:
-k: 查看内核日志
-b -0: 查看系统本次启动的日志
-b -1: 查看上一次启动的日志
--since "2017-01-10" --until "2017-01-11 03:00": 查看指定时间的日志
-n 20: 显示尾部 20 行的日志
-f: 实时滚动显示最新日志
/usr/sbin/sshd: 查看指定服务的日志
/usr/bin/bash: 查看某个路径的脚本的日志
_PID=1: 查看指定进程的日志
_UID=0: 查看指定用户的日志
-u httpd.service: 查看某个 Unit 的日志
-u httpd.service -f: 实时滚动显示某个 Unit 的最新日志
-p err: 查看指定级别及以上的日志
--no-pager: 不分页输出
-o json: 以 JSON 格式 (单行) 输出
-o json-pretty: 以 JSON 格式 (多行) 输出, 可读性更好
--disk-usage: 显示日志占据的硬盘空间
--vacuum-size=1G: 指定日志文件占据的最大空间
--vacuum-time=1years: 指定日志文件保存多久
5,logrotate 程序
logrotate 程序是一个日志文件管理工具. 用来把旧的日志文件删除, 并创建新的日志文件, 称为日志转储或滚动. 可以根据日志文件的大小, 也可以根据其天数来转储, 这个过程一般通过 cron 程序来执行
配置文件:
/etc/logrotate.conf
和 /etc/logrotate.d/*
配置文件参数:
compress 通过 gzip 压缩转储以后的日志
nocompress 不需要压缩时, 用这个参数
copytruncate 用于还在打开中的日志文件, 把当前日志备份并截断
nocopytruncate 备份日志文件但是不截断
create mode owner group 转储文件, 使用指定的文件模式创建新的日志文件
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 指定转储周期为每月
size 大小 指定日志超过多大时, 就执行日志转储
rotate count 指定日志文件删除之前转储的次数, 0 指没有备份, 5 指保留 5 个备份
Missingok 如果日志不存在, 提示错误
Nomissingok 如果日志不存在, 继续下一次日志, 不提示错误
6,rsyslog 服务实现将日志记录到远程主机
1)rsyslog 服务器端配置
~]# vim /etc/rsyslog.conf
#### MODULES ####
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
#### RULES ####
local2.*/data/192.168.0.7-sshd.log
~]# systemctl restart rsyslog
2)客户端, 这里以 sshd 服务为例
- ~]# vim /etc/ssh/sshd_config #修改 sshd 记录日志的设施
- SyslogFacility local2 #local2 为自定义设施
- LogLevel INFO
- ~]# vim /etc/rsyslog.d/sshd.conf
- local2.* @@192.168.0.8 #将 local2 设施的所有级别的日志都发送给 0.8 主机
- ~]# systemctl restart sshd
- ~]# systemctl restart rsyslog
3)测试, 在其他客户端 ssh 登录 192.168.0.7sshd 服务器, 在 192.168.0.8 日志服务器查看日志
- ~]# cat /data/192.168.0.7-sshd.log
- Jun 24 16:37:30 centos7 sshd[58547]: Accepted password for root from 192.168.0.6 port 52420 ssh2
7, 实现 rsyslog 将日志记录于 MySQL 中, 并且通过 loganalyzer 展示数据库中的日志
1)准备需要的软件包
~]# yum -y install rsyslog-mysql httpd mariadb-server php php-mysql php-gd
2)配置数据库
- ~]# systemctl start mariadb
- ~]# mysql </usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
- MariaDB [(none)]> GRANT ALL ON Syslog.* TO 'loguser'@'127.0.0.1' IDENTIFIED BY 'logpass';
3)配置 rsyslog 服务, 将日志保存到 MySQL 中
- ~]# vim /etc/rsyslog.conf
- #### MODULES ####
- $ModLoad ommysql
- #### RULES ####
- *.info;mail.none;authpriv.none;cron.none :ommysql:127.0.0.1,Syslog,loguser,logpass
- ~]# systemctl restart rsyslog
4)配置 loganalyzer
loganalyzer 程序是基于 PHP 开发的应用, 所以我们需要准备 lamp 环境, 需要注意: 不支持 FastCGI 工作方式的 LAMP 环境
- ~]# wget http://download.adiscon.com/loganalyzer/loganalyzer-4.1.6.tar.gz
- ~]# tar xf loganalyzer-4.1.6.tar.gz
- ~]# cp -a loganalyzer-4.1.6/src /var/www/html/lay
- ~]# touch /var/www/html/lay/config.php
- ~]# chmod 666 /var/www/html/lay/config.php
- ~]# systemctl restart httpd
访问: http://HOST/lay/, 点击 here 安装
安装过程: next - next - next - next - Finish!
来源: https://www.cnblogs.com/L-dongf/p/9221068.html