本文共 7602 字,大约阅读时间需要 25 分钟。
/etc/rsyslog.conf,/etc/rsyslog.d/*.conf
/lib64/rsyslog/*.so
MODULES:相关模块配置GLOBAL DIRECTIVES:全局配置RULES:日志记录相关的规则配置
auth, authpriv, cron, daemon,ftp,kern, lpr, mail,news, security(auth), user, uucp, local0-local7, syslogauth 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的日志
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/messagesmail.* -/var/log/mailloglocal2.* root语法分别2部分前面的部分. 分隔日志类别.日志级别* 全部noen 不记录, 指定的facility列表; 语句分隔后面文件路径的部分- 异步写磁盘(非实时)user:将日志事件通知给指定的用户,* 表示登录的所有用户。su - 切换用户无法接收@host,把日志送往至指定的远程服务器记录| COMMAND,管道,转发给其它命令处理
Centos 7 Systemd 统一管理所有 Unit 的启动日志。带来的好处就是,可以只用journalctl一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件/etc/systemd/journald.conf
查看所有日志(默认情况下 ,只保存本次启动的日志)
journalctl
查看内核日志(不显示应用日志)
journalctl -k
查看系统本次启动的日志
journalctl -bjournalctl -b -0
查看上一次启动的日志(需更改设置)
journalctl -b -1
查看指定时间的日志
journalctl --since="2017-10-30 18:10:30"journalctl --since "20 min ago"journalctl --since yesterdayjournalctl --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.servicejournalctl -u nginx.service --since today
实时滚动显示某个 Unit 的最新日志
journalctl -u nginx.service -f
合并显示多个 Unit 的日志
journalctl -u nginx.service -u php-fpm.service --since today
查看指定优先级(及其以上级别)的日志,共有8级
0: emerg1: alert2: crit3: err4: warning5: notice6: info7: debugjournalctl -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 程序是一个日志文件管理工具。用来把旧的日志文件删除,并创建新的日志文件,称为日志转储或滚动。可以根据日志文件的大小,也可以根据其天数来转储,这个过程一般通过 cron 程序来执行
/etc/logrotate.conf
指定以时间为转储周期,与文件大小周期互斥
daily 每天weekly 每周monthly 第月
日志转储后多少天被删除
maxage 60
指定以文件大小为转储周期,与时间周期互斥
maxsize sizeminsize size
指定日志文件删除之前滚动的次数,每个转储周期为1次
rotate 4 保留4次rotate 0 没有日志
达到多大时转储日志
size 100ksize 100Msize 100G
转储周期后使用指定的文件模式创建新的日志文件
create 创建空的文件nocreate 不建立新的日志文件create mode owner group 创建指定信息的空日志文件create 600 root group1create owner group 创建指定信息的空日志文件
对于空的日志文件的处理方法
ifempty 即使是空文件也转储,是缺省选项notifempty 如果是空文件的话,不转储
日志不存在时的处理方法:
Missingok 如果日志不存在,提示错误Nomissingok 如果日志不存在,继续下一次日志,不提示错误
旧的日志文件被转储后的后缀
dateext 日期格式:YYYYMMDD,使用dateformat指定的方法dateformat format_string 指定格式。只支持%Y %m %d %s 默认 -%Y%m%dnodateext 没有日期后缀,覆盖dateext选项
压缩方法:
compress 使用gzipnocompress 不压缩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}
1.先在/etc/rsyslog.conf中RULES语句块中定义规则local0.* /var/log/ssh.log2.在其他应用程序中定义,这里以sshd服务为例# vim /etc/ssh/sshd_configSyslogFacility local0#service restart rsyslog#service restart sshd
1.远程主机加载模快并监听端口# vim /etc/rsyslog.conf启用UDP方式$ModLoad imudp$UDPServerRun 514启用TCP方式$ModLoad imtcp$InputTCPServerRun 5142.#systemctl restart rsyslog.service3.在发送日志主机上填写规则# vim /etc/rsyslog.conflocal0.* @192.168.5.103 > 使用UDPlocal0.* @@192.168.5.103 > 使用TCP4. #service rsyslog restart5.测试#logger -p local0.info "test logs"6.在远程主机是可以看到消息了 #tailf /var/log/messagesMar 5 19:53:15 6-web-1 root: test logs
环境说明
主机 | 描述 | IP |
---|---|---|
Centos 6 | Mysql数据库 | 192.168.5.102 |
Centos 7 | rsyslog服务器 | 192.168.5.103 |
参考
在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/
在Centos 6mysql> source /app/mysql-createDB.sql;Query OK, 1 row affected (0.09 sec)Database changedQuery OK, 0 rows affected (0.10 sec)Query OK, 0 rows affected (0.03 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || Syslog |
在Centtos 6mysql> 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)
在Centos 7#mysql -ursyslog -h192.168.5.102 -p -D Syslog > 数据库注意大小写Enter password: MySQL [Syslog]> 成功
在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
在Centos 6mysql> select ID,ReceivedAt,FromHost,Message,InfoUnitID from SystemEvents;
参考
,可能需要科学上网。
# 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
http://192.168.5.102/log/
# chmod 644 config.php
这个属于小型的日志管理WEB界面,数据量不大的时候,还凑合着。后面还有更加专业的日志引擎。
转载于:https://blog.51cto.com/191226139/2083631