基于Rotated Log的日志统计

Rotated
Log 简介

Rotated
log是linux支持日志文件自动转储和重命名的机制。当需要限制每个日志文件大小,或者需要周期地统计并记录日志的时候,就是rotated
log机制大显身手的好时机。

Rotated
Log的使用和配置

Rotated
log的配置文件都是在/etc/logrotate.d里面,它本身依赖于logrotate命令的执行。logrotate自身作为一个日常的cron
job,正常情况下它一天只会执行一次,通过下面的命令可以看到它是如何作为一个cron
job的:

[[email protected]
cron.daily]# pwd

/etc/cron.daily

[[email protected]
cron.daily]# cat logrotate

#!/bin/sh

/usr/sbin/logrotate
/etc/logrotate.conf

EXITVALUE=$?

if
[ $EXITVALUE != 0 ]; then

/usr/bin/logger
-t logrotate "ALERT exited abnormally with [$EXITVALUE]"

fi

exit
0

除非rotate是根据日志文件大小进行,或者强制执行转储命令logrotate -f。配置文件里指定了需要rotate的日志文件的名字,以及rotate触发的机制、处理的策略,以/etc/logrotate.d/syslogd为例:

[[email protected]
logrotate.d]# cat syslog

/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

}

从第一到第五行指定了有待rotate的日志文件的名字,这里列出了五个日志文件需要保存。sharedscripts表示postrotate脚本命令/bin/kill
-HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null ||
true只会执行一次,而不是在每个上述的日志文件rotate之后都执行一次。

Rotated
Log相关的程序设计

根据本人最近使用logrotate的经验和教训,重点需要考虑和引起注意的要素有:

1.考虑到保证每一条记录的完整性,建议根据时间而非容量进行自动回转。

2.考虑到查询的方便和log
rotated的命名规则,需要设计好合适的数据结构来统计每一个日志文件的记录。还是以上面的mailog日志文件为例,如果某个时刻系统只有一个mailog,第一次rotate之后之前的mailog会重新命名为mailog.1,而mailog里面的内容会被清空;第二次rotate之后,之前的maillog.1会被重命名为mailog.2,而之前的maillog会重新命名为mailog.1,而mailog里面的内容会被情况,后续的rotate以此类推。因此,需要一个设计良好的数据结构和方法来表示文件名称和真实文件。

3.如果存在多个用户同时访问日志文件的情况,为了保证日志总数和记录的完整和一致,需要在访问文件前加锁。

4.进阶:Rotated
log本身和其他模块和代码没有联系,其他应用往往需要从rotated
log里存取数据,为此可以开发出和具体业务无关的且便于扩展的rotated
log API,以静态库或者动态库的形式支持二次开发。

时间: 2025-01-01 03:46:51

基于Rotated Log的日志统计的相关文章

Shell 中常见的日志统计方法

前面我发布过"Hadoop兮,杀鸡别用牛刀,python+shell实现一般日志文件的查询.统计", 需要结合python, 可能还是有一定的门槛, 现将shell部分剥离出来. 举例一些最基本的日志统计方法. (1)查看文件 more crawler.log 查看crawler.log日志 tail -n 100 crawler.log 查看crawler.log的最后100行 (2)匹配统计 cat *.log | grep "ERROR" |wc -l 统计在

Apache日志统计

Apache日志统计举例 加些来了解一下如何统计Apache的访问日志,一般可以用tail命令来实时查看日志文件变化,但是各种的应用系统中的日志会非常复杂,一堆长度超过你浏览极限的日志出现在你眼前时,你会觉得非常无奈,怎么办呢?这时可以用grep.sed.awk和sort等筛选工具帮助你解决这个问题.下面总结了几个常见分析方法. (1)查看IP($1代表IP) #cataccess_log | awk '{print $1}' (2)对IP排序 #cataccess_log | awk '{pr

打造基于hadoop的网站日志分析系统(5)之spark在日志分析系统里的简单应用

1.下载spark和运行 wget http://apache.fayea.com/apache-mirror/spark/spark-1.0.0/spark-1.0.0-bin-hadoop2.tgz 我这里下载的是1.0.0版,由于我们只是测试spark的用法所以不需要配置spark集群,只需把下好的文件解压,进入bin/文件夹. spark支持scala,java和python. scala和java输入命令:./spark-shell python 输入命令 ./pyspark 进入控制

shell 截取日志 统计链接数 统计日志ip

按时间段获取日志 sed -n '/22\/Dec\/2015:00/,/22\/Dec\/2015:50/p' localhost_access_log.2015-11-10.txt > /tmp/acc.www.log  sed -n '/22\/Dec\/2015:00/,/22\/Dec\/2015:50/p' localhost_access_log.2015-11-10.txt |head -3  sed -n '/22\/Dec\/2015:00/,/22\/Dec\/2015:5

MySQL学习笔记06基于Binary Log的复制

1.1.1. 相关概念 (1)Binary Log 当变量log_bin的值为ON时,MySQL将启用Binary Log,这将在data目录下产生类似mysql-bin.00001, mysql-bin.00002的二进制日志文件,这些文件记录了数据库中执行的各种操作. binlog_format变量指定了MySQL的二进制日志的格式,支持三种类型的格式: ROW       使用数据表的行记录来记录日志.优点是避免了STATEMENT格式时SQL语句中自增字段的不良影响.缺点时一条更新大量记

[转]SVN的可视化日志统计工具StatSVN

StatSVN很好的统计工具,能帮你统计团队成员各自的编写量,代码总数,提交情况,文件数量等情况,并且以html网页图表的方式发布统计结果. 以前写过一个叫NOVA的小程序,并用StatSVN管理,通过这个例子介绍StatSVN的一些功能 上面是发布报表的主页,这主要描述统计内容的起止时间,和代码行的统计情况等(据说代码行的数量包括空代码行,没有考证过) 然后可以看各个程序员的一些情况 统计了每月的编写情况,提交情况,代码修改占代码总数的百分比 一天中哪几小时比较活跃 每周那几天比较活跃 提交日

Nginx日志统计方案全过程

本文主要记录下给予python的nginx日志统计过程,主要原因是最近系统经常遭到未知程序的疯狂爬数据,虽然做了防爬机制,但是还是必须要找出是哪些IP访问次数比较多.想到的办法就是通过分析ngxin日志,从而找出这些IP排行即可.具体方案的操作步骤包括: ngxin日志每日切割功能: 设置ngxin的日志格式: 编写python代码在每日切割之前统计下access.log中的IP访问次数并将统计结果录入MongoDB: 编写web查询MongoDB进行统计. 一.nginx日志每日切割功能 该功

对于Android系统Log输出日志的封装LogUtils

MainActivity如下: package cc.cn.logutil; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * 对于Android系统Log输出日志的封装LogUtils * 1 可修改LogUtils中的LEVEL值觉得哪些级别的日志可以输出. * 所以方便选择性输出日志或者屏蔽日志输出 * 2 输出的日志除了本想输出的信息外还包含了该日志输出时所属 * 的线程,类,方法名,已经在该方法

SharePoint ULS Log Viewer 日志查看器

SharePoint ULS Log Viewer 日志查看器 项目描述 这是一个Windows应用程序,更加轻松方便查看SharePoint ULS日志文件.支持筛选和简单的视图. 信息 这是一个WPF应用程序,LINQ支持. 目前版本有以下特点: 1. 转换和打开多个SharePoint ULS日志(如果选择多个或合并). 2. 记录并改变列大小,在任何列排序. 3. 支持Severity.Category和Process或自定义文本过滤.搜索. 4. 将多行单个日志跟踪记录分组更容易查看.