linux日志
Posted 夜半歌声断
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux日志相关的知识,希望对你有一定的参考价值。
linux日志管理
一、日志文件位置
二、日志服务rsysogd
日志格式等级: 日志服务 [连接符号] 日志等级 日志记录位置
日志记录位置:
(1)绝对路径
(2)系统设备文件
(3)远程主机:可以选择TCP协议和UDP协议传输日志信息。
UDP : “@192.168.0.210:514”
TCP : “@@192.168.0.210:514”
(4)用户名,mail.* * 把所有级别的日志发送给所有在线用户,如果发送给多个用户,用户名之间用 “,”分割。
· 日志等级为“none”,或者日志记录位置为“~”,代表不会记录。
主配置文件 :/etc/rsyslog.conf 配置文件的内容
[root@localhost ~]# vi /etc/rsyslog.conf #查看配置文件的内容 # rsyslog v5 configuration file # For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html # If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html #### MODULES #### #加载模块 $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) #加载 imuxsock 模块,为本地系统登录提供支持 $ModLoad imklog # provides kernel logging support (previously done by rklogd) #加载 imklog 模块,为内核登录提供支持 #$ModLoad immark # provides --MARK-- message capability #加载 immark 模块,提供标记信息的能力 # Provides UDP syslog reception #$ModLoad imudp #$UDPServerRun 514 #加载 UPD 模块,允许使用 UDP 的 514 端口接收采用 UDP 协议转发的日志 # Provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514 #加载 TCP 模块,允许使用 TCP 的 514 端口接收采用 TCP 协议转发的日志 #### GLOBAL DIRECTIVES #### #定义全局设置 # Use default timestamp format $ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat #定义日志的时间使用默认的时间戳格式 # File syncing capability is disabled by default. This feature is usually not required, # not useful and an extreme performance hit #$ActionFileEnableSync on #文件同步功能。默认没有开启,是注释的。 # Include all config files in /etc/rsyslog.d/ $IncludeConfig /etc/rsyslog.d/*.conf #包含/etc/rsyslog.d/目录中所有的“.conf”子配置文件。也就是说这个目录中的所有 #子配置文件也同时生效。 #### RULES #### #日志文件保存规则 # Log all kernel messages to the console. # Logging much else clutters up the screen. #kern.* /dev/console #kern 服务.所有日志级别 保存在/dev/console #这个日志默认没有开启,如果需要,则取消注释 # Log anything (except mail) of level info or higher. # Don\'t log private authentication messages! *.info;mail.none;authpriv.none;cron.none /var/log/messages #所有服务.info 以上级别的日志保存在/var/log/messages 日志中。 #mail,authpriv,cron 的日志不记录在/var/log/messages 日志文件中,因为它们都有自己的日志文件。 #所以/var/log/messages 日志是最重要的系统日志文件,需要经常查看! # The authpriv file has restricted access. authpriv.* /var/log/secure #用户认证服务所有级别的日志保存在/var/log/secure 日志中 # Log all the mail messages in one place. mail.* -/var/log/maillog #mail 服务的所有级别的日志保存在/var/log/maillog 日志中。 #“-”号的含义是日志先在内存之中保存,当日志够多之后,再向文件中保存。 # Log cron stuff cron.* /var/log/cron #计划任务的所有日志保存在/var/log/cron 日志中 # Everybody gets emergency messages *.emerg * #所有日志服务的疼痛等级日志对所有在线用户广播。 # Save news errors of level crit and higher in a special file. uucp,news.crit /var/log/spooler #uucp 和 news 日志服务的 crit 以上的日志保存在/var/log/sppoler 日志文件中。 # Save boot messages also to boot.log local7.* /var/log/boot.log #loacl7 日志服务的所有日志写入/var/log/boot.log 日志中。 #会把开机时的检测信息在显示到屏幕的同时,写入/var/log/boot.log 日志中 # ### begin forwarding rule ### #定义转发规则 # The statement between the begin ... end define a SINGLE forwarding # rule. They belong together, do NOT split them. If you create multiple # forwarding rules, duplicate the whole block! # Remote Logging (we use TCP for reliable delivery) # # An on-disk queue is created for this action. If the remote host is # down, messages are spooled to disk and sent when it is up again. #$WorkDirectory /var/lib/rsyslog # where to place spool files #$ActionQueueFileName fwdRule1 # unique name prefix for spool files #$ActionQueueMaxDiskSpace 1g # 1gb space limit (use as much as possible) #$ActionQueueSaveOnShutdown on # save messages to disk on shutdown #$ActionQueueType LinkedList # run asynchronously #$ActionResumeRetryCount -1 # infinite retries if host is down # remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional #*.* @@remote-host:514 # ### end of the forwarding rule ##
定义自己的日志
[root@localhost ~]# vi /etc/rsyslog.conf #写入一下一句话 *.crit /var/log/alert.log #把所有服务的“临界点”以上的错误都保存在/var/log/alert.log 日志中 [root@localhost ~]# service rsyslog restart 关闭系统日志记录器: [确定] 启动系统日志记录器: [确定] #重启 rsyslog 服务 [root@localhost ~]# ll /var/log/alert.log
三、日志轮替
1、日志文件的命名规则
主要依靠 /etc/logrotate.conf 配置文件中“dateext”参数:
2、logrotate 配置文件
# no packages own wtmp and btmp -- we\'ll rotate them here #以下两个轮替日志有自己的独立参数,如果和默认的参数冲突,则独立参数生效。 /var/log/wtmp { #以下参数仅对此目录有效 monthly #每月对日志文件进行一次轮替 create 0664 root utmp #建立的新日志文件,权限是 0664,所有者是 root,所属组是 utmp 组 minsize 1M #日志文件最小轮替大小是 1MB。也就是日志一定要超过 1MB 才会轮替,否则就算 #时间达到一个月,也不进行日志转储 rotate 1 #仅保留一个日志备份。也就是只有 wtmp 和 wtmp.1 日志保留而已 }
/var/log/btmp { #以下参数只对/var/log/btmp 生效 missingok #如果日志不存在,则忽略该日志的警告信息 monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here.
配置文件主要参数:
prerotate 和 postrotate 主要用于在日志轮替的同时,执行指定的脚本,一般用于日志轮替之后重启服务。这里强调,如果你的日志是写入 rsyslog 服务的配置文件的,那么把新日志加入 logrotate后,一定要重启 rsyslog 服务,否则你会发现虽然新日志建立了,但是数据还是写入了旧的日志当中。那是因为虽然 logrotate 知道日志轮替了,但是 rsyslog 服务却并不知道。同理,如果你的日志不是被 rsyslog 管理,如源码包安装的 Apache、nginx 等服务,则需要重启 Apache 或 Nginx 服务,否则日志也不能正常轮替。
3、把自己的日志加入日志轮替
(1)直接在 /etc/logrotate.conf 配置文件中写入该日志的轮替策略
(2)在/etc/logrotate.d 目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被“include”到主配置文件中。
例子:
[root@localhost ~]# chattr +a /var/log/alert.log #先给日志文件赋予 chattr 的 a 属性,保证日志的安全 [root@localhost ~]# vi /etc/logrotate.d/alter #创建 alter 轮替文件,把/var/log/alert.log 加入轮替 /var/log/alert.log { weekly 每周轮替一次 rotate 6 保留 6 个轮替日志 sharedscripts 以下命令只执行一次 prerotate 在日志轮替之前执行 /usr/bin/chattr -a /var/log/alert.log #在日志轮替之前取消 a 属性,以便让日志可以轮替 endscript 脚本结束 sharedscripts postrotate 在日志轮替之后执行 /usr/bin/chattr +a /var/log/alert.log #日志轮替之后,重新加入 a 属性 endscript sharedscripts postrotate /bin/kill -HUP $(/bin/cat /var/run/syslogd.pid 2>/dev/null) &>/dev/null endscript #重启 rsyslog 服务,保证日志轮替正常 }
4、logrotate 命令
我们日志轮替之所以可以在指定的时间备份日志,其实也要依赖系统定时任务。如果大家还记得/etc/cron.daily/目录,就会发现这个目录中是有 logrotate 文件,logrotate 通过这个文件依赖定时任务执行的。
[root@localhost ~]# logrotate [选项] 配置文件名 选项: 如果此命令没有选项,则会按照配置文件中的条件进行日志轮替 -v: 显示日志轮替过程。加了-v 选项,会显示日志的轮替的过程 -f: 强制进行日志轮替。不管日志轮替的条件是否已经符合,强制配置文件中所有 的日志进行轮替
以上是关于linux日志的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情