日志管理
rsyslog配置相关
配置文件:
/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
库文件:
/lib64/rsyslog/*.so
配置文件格式:
MODULES:相关模块配置
GLOBAL DIRECTIVES:全局配置
RULES:日志记录相关的规则配置
facility 从功能或程序上对日志进行归类
auth, authpriv, cron, daemon,ftp,kern, lpr, mail,news, security(auth), user, uucp, local0-local7, syslog
auth pam产生的日志
authpriv ssh,ftp等登录信息的验证信息
cron 计划任务相关
kerl 内核
lpr 打印
mail 邮件
syslog Rsyslog服务内部信息,时间标识
news 新闻组
user 用户程序产生的相关信息
uucp unix to unix copy;Unix主机之间相关的通信
local 0-7 自定义的日志设备
其它的日志文件
/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的日志
Priority 优先级别,从上到下级别越来越高
7 debug 调试信息的日志,日志信息最多
6 info 一般信息的日志,最常用
5 notice 最具有重要性的普通条件的信息
4 warn 警告级别
3 err 错误级别,阻止某个功能或者模块不能正常工作的信息
2 crit 严重级别,阻止整个系统或者整个软件不能正常工作的信息
1 alert 需要立刻修改的信息
0 emerg 内核崩溃等严重信息
如果在日志中设定了比如warn,那么日志将会记录warn(含)之后的级别日志
配置语法:
日志类别.日志级别 日志文件
cron.* /var/log/cron
*.info;mail.none;authpriv.none;cron.none /var/log/messages
mail.* -/var/log/maillog
local2.* root
语法分别2部分
前面的部分
. 分隔日志类别.日志级别
* 全部
noen 不记录
, 指定的facility列表
; 语句分隔
后面文件路径的部分
- 异步写磁盘(非实时)
user:将日志事件通知给指定的用户,* 表示登录的所有用户。su - 切换用户无法接收
@host,把日志送往至指定的远程服务器记录
| COMMAND,管道,转发给其它命令处理
日志管理journalctl
Centos 7 Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件/etc/systemd/journald.conf
查看所有日志(默认情况下 ,只保存本次启动的日志)
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-1103: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
以 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
Logrotate日志存储
logrotate 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根
据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
配置文件
/etc/logrotate.conf
配置项说明:
指定以时间为转储周期,与文件大小周期互斥
daily 每天
weekly 每周
monthly 第月
日志转储后多少天被删除
maxage 60
指定以文件大小为转储周期,与时间周期互斥
maxsize size
minsize size
指定日志文件删除之前滚动的次数,每个转储周期为1次
rotate 4 保留4次
rotate 0 没有日志
达到多大时转储日志
size 100k
size 100M
size 100G
转储周期后使用指定的文件模式创建新的日志文件
create 创建空的文件
nocreate 不建立新的日志文件
create mode owner group 创建指定信息的空日志文件
create 600 root group1
create owner group 创建指定信息的空日志文件
对于空的日志文件的处理方法
ifempty 即使是空文件也转储,是缺省选项
notifempty 如果是空文件的话,不转储
日志不存在时的处理方法:
Missingok 如果日志不存在,提示错误
Nomissingok 如果日志不存在,继续下一次日志,不提示错误
旧的日志文件被转储后的后缀
dateext 日期格式:YYYYMMDD,使用dateformat指定的方法
dateformat format_string 指定格式。只支持%Y %m %d %s 默认 -%Y%m%d
nodateext 没有日期后缀,覆盖dateext选项
压缩方法:
compress 使用gzip
nocompress 不压缩
delaycompress 和 compress 一起使用时,转储的日志文件到下一次转储时才压缩
nodelaycompress 覆盖 delaycompress 选项,转储并压缩
对于正在打开的日志的处理方法
copytruncate 把当前日志备份并截断
ocopytruncate 备份日志文件但是不截断
转储通知方法:
mail hunk 把转储的日志文件发送到指定的E-mail 地址
nomail 转储时不发送日志文件
errors hunk 转储时的错误信息发送到指定的E-mail 地址
转储目标路径
olddir directory 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
noolddir 转储后的日志文件和当前日志文件放在同一个目录下
转储日志时指定操作
prerotate/endscript 在转储前需要执行的命令可以放入这个对,这两个关键字必须单独成行
postrotate/endscript 在转储后需要执行的命令可以放入这个对,这两个关键字必须单独成行
子配置文件路径
include /etc/logrotate.d
更多的选项请man logrotate
具体定义规则示例:
/var/log/wtmp { > 定义了/var/log/wtmp的日专业转储规则
monthly > 以月为周期
create 0664 root utmp > 达到周期后以创建的方式产生新的日志文件,并指定权限和所有者与所有组
minsize 1M > 最小转发储条件为1M
rotate 1 > 保留一份转储
}
/usr/local/httpd/*.logs{
daily
olddir old_logs
create 0664 root root
minsize 1M
maxsize 10M
rotate 2
maxage 3
mail root
}
可以在一个配置文件里定义多个日志规则
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
应用案例
其他应用程序调用rsyslog
1.先在/etc/rsyslog.conf中RULES语句块中定义规则
local0.* /var/log/ssh.log
2.在其他应用程序中定义,这里以sshd服务为例
# vim /etc/ssh/sshd_config
SyslogFacility local0
#service restart rsyslog
#service restart sshd
向远程主机发送日志消息
1.远程主机加载模快并监听端口
# vim /etc/rsyslog.conf
启用UDP方式
$ModLoad imudp
$UDPServerRun 514
启用TCP方式
$ModLoad imtcp
$InputTCPServerRun 514
2.#systemctl restart rsyslog.service
3.在发送日志主机上填写规则
# vim /etc/rsyslog.conf
local0.* @192.168.5.103 > 使用UDP
local0.* @@192.168.5.103 > 使用TCP
4. #service rsyslog restart
5.测试
#logger -p local0.info "test logs"
6.在远程主机是可以看到消息了
#tailf /var/log/messages
Mar 5 19:53:15 6-web-1 root: test logs
将日志存放于远程主机的Mysql中
环境说明
主机 | 描述 | IP |
---|---|---|
Centos 6 | Mysql数据库 | 192.168.5.102 |
Centos 7 | rsyslog服务器 | 192.168.5.103 |
1.安装Mysql
参考CentOS 6.9 自定义单实例 二进制方式 安装mysql5.7.21
2.安装用于rsyslog连接mysql的模块
在Centos 7
# yum install rsyslog-mysql
#rpm -ql rsyslog-mysql
/usr/lib64/rsyslog/ommysql.so
/usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql
因为这里使用了不同的系统,yum安装的rsyslog-mysql版本不同,此时,必须将本机安装的脚本传送到mysql所在主机上执行,当然,如果可以远程连接mysql服务器也是可以的
#scp /usr/share/doc/rsyslog-8.24.0/mysql-createDB.sql 192.168.5.102:/app/
3.创建用于rsyslog的数据库
在Centos 6
mysql> source /app/mysql-createDB.sql;
Query OK, 1 row affected (0.09 sec)
Database changed
Query OK, 0 rows affected (0.10 sec)
Query OK, 0 rows affected (0.03 sec)
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| Syslog |
4.创建用于访问数据库的账户
在Centtos 6
mysql> set global validate_password_policy=0;
Query OK, 0 rows affected (0.00 sec)
mysql> grant all on Syslog.* to 'rsyslog'@'192.168.5.103' identified by '12345678';
Query OK, 0 rows affected, 1 warning (0.06 sec)
5.测试远程连接mysql
在Centos 7
#mysql -ursyslog -h192.168.5.102 -p -D Syslog > 数据库注意大小写
Enter password:
MySQL [Syslog]> 成功
6.配置rsyslog
在Centos 7
#vim /etc/rsyslog.conf
#### MODULES #### 中
$ModLoad ommysql
#### RULES ####中
语法格式:
#:ommysql:数据库主机,数据库名,数据库用,数据库密码
*.info;mail.none;authpriv.none;cron.none :ommysql:192.168.5.102,Syslog,rsyslog,12345678 > 注意大小写
重启rsyslog服务
#systemctl restart rsyslog
7.验证
在Centos 6
mysql> select ID,ReceivedAt,FromHost,Message,InfoUnitID from SystemEvents;
基于LAMP + Loganalyzer 日志管理
1.LAMP实现
参考Centos 6.9 编译安装 LAMP + Zend OPcach
2.官网下载loganalyzer
http://loganalyzer.adiscon.com/ ,可能需要*。
3.复制loganalyzer源码目录至网站指定目录
# tar xvf loganalyzer-4.1.6.tar.gz
# cp -a loganalyzer-4.1.6/src/ /app/www/virtualhost/log
# cd /app/www/virtualhost/log
# touch config.php && chmod 666 config.php
4.安装loganalyzer
http://192.168.5.102/log/
5.修改权限
# chmod 644 config.php
效果演示
这个属于小型的日志管理WEB界面,数据量不大的时候,还凑合着。后面还有更加专业的日志引擎。
转载于:https://blog.51cto.com/191226139/2083631