1、相关概念 2、journalctl 3、跨网络记录日志 4、跨网络将rsyslog产生的日志记录到MySQL中并使用日志管理工具 5、Logrotate日志存储 ================================================================================================================================================ 相关概念 1、日志类型 查询日志 事务日志 历史日志 二进制日志 2、系统日志服务 syslog(CentOS5) 负责为各程序运行产生的日志。但并不是所有的程序都使用 syslog 记录日志 syslog服务由两个进程: syslogd:负责记录非内核产生的信息(用户空间的进程运行所产生的日志) klogd:负责记录内核产生的信息 3、CentOS 6.X上的日志服务rsyslog rsyslog:增强版。CentOS 6.X之后的日志系统都是rsyslog 特性: 1、rsyslog 是一个 syslogd 的多线程增强版 2、还可以接收非本机上产生的日志信息 3、支持使用UDP、TCP、SSL、TLS协议进行传输日志,可以进行远程记录日志。C/S架构 4、可以将日志存储到MySQL、PGSQL、Pralce 5、强大的过滤器,可实现郭茹日志信息中的任何部分 6、自定义输出格式 4、日志管理平台 elk平台 elasticsearch # 开源分布式搜索引擎 logstash # 对日志进行收集、分析、存储 kibana # 提供日志分析及web界面 5、服务配置 1、facility facility,子系统,可以理解为运行在Liunx上不同类别的程序{具有相同特性的程序产生的日至流} 2、priority priority(log level)日志的级别,一般有以下几种级别(从低到高) 如果设置为某个级别,则比这个级别高的所有信息都会被记录 3、facility: auth # 认证相关的 authpriv # 权限,授权相关的 cron # 任务计划相关的 daemon # 守护进程相关的 kern # 内核相关的 lpr # 打印相关的 mail # 邮件相关的 mark # 标记相关的 news # 新闻相关的 security # 安全相关的,与auth 类似 syslog # syslog自己的日志 user # 用户相关的 uucp # unix to unix cp 相关的 local0 ~ local7 # 用户自定义使用 * # *表示所有的facility 4、priority: debug # 程序或系统的调试信息 info # 一般信息 notice # 不影响正常功能,需要注意的消息 warning/warn # 可能影响系统功能,需要提醒用户的重要事件 err/error # 错误信息 crit # 比较严重的 alert # 必须马上处理的 emerg/panic # 会导致系统不可用的 * # 表示所有的日志级别 none # 跟* 相反,表示啥也没有,表示不记录日志 5、定义格式: facility.priority action 6、相关文件 /etc/logrotate.d/syslog /etc/rsyslog.conf # 配置文件 /etc/rsyslog.d /etc/sysconfig/rsyslog # 环境配置文件 /usr/bin/rsyslog-recover-qi.pl /usr/lib/systemd/system/rsyslog.service # 服务脚本 /var/lib/rsyslog /usr/sbin/rsyslogd # 二进制程序 7、rsyslog.conf 配置文件 #### MODULES #### #### GLOBAL DIRECTIVES #### #### RULES #### action(动作)日志记录的位置: 系统上的绝对路径 # 普通文件 如: /var/log/xxx | # 管道,通过管道送给其他的命令处理 终端 # 终端,如:/dev/console @HOST # 远程主机 如:@10.0.0.1,tcp协议使用@@10.0.0.1 用户 # 系统用户 如:root,使得某个用户收到logger -p local2.info "***********" * # 登录到系统上的所有用户,一般emerg级别的日志是这样定义的 定义格式例子: *.info;mail.none;authpriv.none;cron.none /var/log/messages # 处理mail、authpriv、cron的日志不记录 mail.info /var/log/mail.log # 表示将mail相关的,级别为info及 # info以上级别的信息记录到/var/log/mail.log文件中 auth.=info @10.0.0.1 # 表示将auth相关的,基本为info的信息记录到10.0.0.1主机上去 # 前提是10.0.0.1要能接收其他主机发来的日志信息 user.!=error # 表示记录user相关的,不包括error级别的信息 user.!error # 与user.error相反 *.info # 表示记录所有的日志信息的info级别 mail.* # 表示记录mail相关的所有级别的信息 *.* # 你懂的. cron.info;mail.info # 多个日志来源可以用";" 隔开 cron,mail.info # 与cron.info;mail.info 是一个意思 mail.*;mail.!=info # 表示记录mail相关的所有级别的信息,但是不包括info级别的 mail.* -/var/log/maillog # 表示异步写入记录日志 3、日志文件 1、加载内核后,进行内核初始化的过程有klogd进程记录。日志记录在/var/log/dmesg 可以用cat /var/log/dmesg 或者dmesg命令查看 2、系统初始化程序init产生的日志 /var/log/messages # 系统标准错误日志信息 3、当前系统上,用户的失败尝试登录相关的日志信息,二进制格式,lastb命令进行查看 /var/log/btmp  4、当前系统上,用户正常登录系统的相关日志信息,二进制格式,last命令可以查看 /var/log/wtmp  5、每一个用户最近一次的登录信息,二进制格式,lastlog命令可以查看 /var/log/lastlog  6、系统引导过程中的日志信息,文本格式文本查看工具查看专用命令dmesg查看 /var/log/dmesg 7、邮件产生的日志信息 /var/log/maillog 4、登陆日志 /var/log/secure 5、 anaconda的日志 /var/log/anaconda 4、日志滚动(日志切割) logrotate负责备份和删除旧日志, 以及更新日志文件 1、Linux系统中的一支程序:logrotate,可以进行日志滚动 2、logrotate程序借助于系统的任务计划,进行日志滚动,任务计划执行的脚本是/etc/cron.daily/logrotate,这支程序的配置文件/etc/logrotate.conf。 另外在/etc/logrotate.d/目录下,有每个子系统的配置文件 5、日志的分析工具 hadoop logstash 1、分析syslog产生的日志: 把日志写入mysql数据库中 使用loganalyze工具分析 2、分析httpd日志: 1、webanalyzer工具 2、awstats工具 ================================================================================================================================================ 跨网络记录日志 1、打开日志监听端口(接收日志的主机) vim /etc/rsyslog.conf $ModLoad imudp $UDPServerRun 514 # 使用TCP协议 # $ModLoad imtcp # $InputTCPServerRun 514 2、重新启动服务 systemctl restart rsyslog Note:默认接收的日志保存在/var/log/messages文件中 3、配置发送方的主机 vim /etc/rsyslog.conf *.info;mail.none;authpriv.none;cron.none @172.18.26.3 systemctl restart rsyslog 4、测试日志发送日志 logger "xxxxxxxxxxxxxxx" ================================================================================================================================================ 日志管理工具 journalctl journalctl工具可以统一管理所有unit的启动日志。工具的配置文件是/etc/systemd/journalctl.conf 1、格式 journalctl [OPTIONS...] [MATCHES...] 2、选项 -k # 查看内核日志 -b -0|-1 # 查看系统本次启动日志 --since=" " # "2012-10-30 18:17:16",如果省略了时间部分,则假设为"00:00:00" --since " " # "yesterday", "today", "tomorrow","now","1 hour ago" -n N # N是一个数字,显示最近N行日志 -f # 实时滚动日志 -u NAME.sevice # 查看指定服务的日志信息 /path/to/prog # 查看指定程序的日志信息 _UID=NN # 查看指定UID用户的日志 --no-pager # 不分页输出 -p XXXX # 指定查看的日志级别(emerg、alert、crit、err、warning、notice、info、debug) -o json # 以JSON格式单行输出 -o json-pretty # 多行格式输出JSON格式 --disk-usage # 显示日志占据的磁盘空间 --vacuum-size=1G # 指定日志占据空间大小 --vacuum-time=1years # 指定日志文件保存时间 ================================================================================================================================================ 跨网络将rsyslog产生的日志记录到MySQL中并使用 1、打开日志监听端口(接收日志的主机) vim /etc/rsyslog.conf $ModLoad imudp $UDPServerRun 514 # 使用TCP协议 # $ModLoad imtcp # $InputTCPServerRun 514 2、重新启动服务 systemctl restart rsyslog Note:默认接收的日志保存在/var/log/messages文件中 3、配置发送方的主机 vim /etc/rsyslog.conf *.info;mail.none;authpriv.none;cron.none @172.18.26.3 systemctl restart rsyslog 4、测试日志发送日志 logger "xxxxxxxxxxxxxxx" 5、发送日志主机安装rsyslog-mysql yum install rsyslog-mysql 查看生成文件列表: rpm -ql rsyslog-mysql /usr/lib64/rsyslog/ommysql.so /usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql 将/usr/share/doc/rsyslog-7.4.7/mysql-createDB.sql脚本在数据库主机上执行 6、在数据库主机上执行MySQL脚本 mysql -uroot -hlocalhost -pxjw,./qwe < mysql-createDB.sql 授权用户写数据库 GRANT ALL ON Syslog.* TO 'loguser'@'172.18.26.4' IDENTIFIED BY 'log'; 7、配置日志发送方主机 #### MODULES #### $ModLoad ommysql *.info;mail.none;authpriv.none;cron.none :ommysql:172.18.26.3,Syslog,loguser,log 8、发送日志测试 logger "xuejinwei" 9、查看数据库是否写入数据 SELECT * FROM `SystemEvents`\G; 10、安装使用loganalyzer分析日志 ================================================================================================================================================ Logrotate日志存储 Logrotate借助于cron定时被执行进行日志滚动。 1、logrotate 程序是一个日志文件管理工具。用来把旧的日志文 件删除,并创建新的日志文件,称为日志转储或滚动。可以 根据日志文件的大小,也可以根 据其天数来转储,这个过程 一般通过 cron 程序来执行。 2、配置文件 /etc/logrotate.conf{man logrotate.conf} /etc/logrotate.d/ compress # 通过gzip 压缩转储以后的日志 nocompress # 不需要压缩时,用这个参数 dateext # 将滚动后的日志文件名称加上时间 copytruncate # 用于还在打开中的日志文件,把当前日志备份并截断 nocopytruncate # 备份日志文件但是不截断 create mode owner group # 转储文件 使用指定的文件权限模式0600 属主 属组 nocreate # 不建立新的日志文件 delaycompress # 和 compress 一起使用时,转储的日志文件 到下一次转储时才压缩 nodelaycompress # 覆盖 delaycompress 选项,转储并压缩 errors address # 专储时的错误信息发送到指定的Email 地址 ifempty # 即使是空文件也转储,是缺省选项 notifempty # 如果是空文件的话,不转储 mail address # 把转储的日志文件发送到指定的E-mail 地址 nomail # 转储时不发送日志文件 olddir directory # 转储后的日志文件放入指定的目录,必须和 当前日志文件在同一个文件系统 noolddir # 转储后的日志文件和当前日志文件放在同一个目录下 prerotate/endscript # 在转储以前需要执行的命令可以放入 这个对,这两个关键字必须单独成行 postrotate/endscript # 在转储以后需要执行的命令可以放入 这个对,这两个关键字必须单独成行 示例: postrotate echo haha endscript daily # 指定转储周期为每天 weekly # 指定转储周期为每周 monthly # 指定转储周期为每月 size # 大小指定日志超过多大时,就执行日志转储 rotate count # 指定日志文件删除之前转储的次数,0 指没有备份,5 指保留5个备份 Missingok # 如果日志不存在,提示错误 Nomissingok # 如果日志不存在,继续下一次日志,不提示错误 定义格式: /var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { missingok sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript } ================================================================================================================================================