暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【小工具时间】领略cronolog的风采

恒生DBA公社 2021-04-21
669


写在前言

  

本文文介绍一款日志分割软件cronolog。日志对于每位从事IT技术领域工作的人员来说都是相当重要的,对于系统管理员来说,系统日志、系统服务的日志以及应用软件的日志是他们每天都需要关注的,从日志中可以发现系统存在的问题以及一些危险的征兆等等;对于开发人员来说,应用软件日志、debug日志对于了解系统当时的环境、重演或模拟故障以及分析软件bug都是十分有用的。
  然而一些软件本身的日志维护功能却很薄弱。其中最主要的表现就是将所有的信息都写到了同一文件中,而且又没有对其归档。这样给查看和分析日志文件带来很大不便。还有一些软件本身就没有日志功能,仅仅将信息输出到标准输出设备。为了解决这些软件先天上日志功能的不足,我们需要对日志做进一步的处理,具体来说就是分割,将其按我们需要的规格进行分割,以便日后的查看、分析、备份以及归档等。cronolog就是一款在这方面值得推崇的开源软件,本文将介绍该软件的安装以及使用,并列举几个实例。


cronolog简介

  

Welcome to cronolog.org, the home of the cronolog web log rotation program.cronolog isa simple filter program that reads log file entries from standard input andwrites each entry to the output file specified by a filename template and thecurrent date and time. When the expanded filename changes, the current file isclosed and a new one opened. cronolog is intended to be used in conjunctionwith a Web server, such as Apache,to split the access log into daily or monthly logs.

 

cronolog 是一个简单的过滤程序,读取日志文件条目从标准输入和输出的每个条目并写入指定的日志文件的文件名模板和当前的日期和时间。当扩展文件名的变化,目前的文件是关闭,新开辟的。cronolog 旨在和一个Web服务器一起使用,如Apache,分割访问日志为每天或每月的日志。


cronolog特点

  

cronolog主要和Web服务器配置使用,特别是Apache服务器,Apache 默认日志文件是不分割的,一个整文件既不易于管理,也不易于分析统计。安装cronolog后,可以将日志文件按时间分割,易于管理和分析。下面配置的一些指令:

TransferLog  "|/usr/sbin/cronolog web/logs/%Y/%m/%d/access.log"

ErrorLog    "|/usr/sbin/cronolog  /web/logs/%Y/%m/%d/errors.log"

具体如下:

/web/logs/2018/8/12/access.log/web/logs/2018/8/12/errors.log

/web/logs/2018/8/12/access.log/web/logs/2018/8/12/errors.log


cronolog安装

  

#wget http://cronolog.org/download/cronolog-1.6.2.tar.gz

#tar zxvf cronolog-1.6.2.tar.gz

#cd cronolog-1.6.2

#mkdir -p usr/local/cronolog

#./configure --prefix=/usr/local/cronolog

#Make && make install

#which cronolog

#  /usr/local/sbin/cronolog

cronolog使用

  

基本使用

# cronolog -h

usage: cronolog [OPTIONS] logfile-spec

   -H NAME,   --hardlink=NAME maintain a hard  link from NAME to current log

   -S NAME,   --symlink=NAME  maintain a  symbolic link from NAME to current log

   -P NAME,   --prev-symlink=NAME   maintain a symbolic link from NAME to previous log

   -l NAME,   --link=NAME      same as -S/--symlink

   -h,         --help          print this  help,thenexit

   -p PERIOD, --period=PERIODsetthe rotation period  explicitly

   -d DELAY,  --delay=DELAY  setthe  rotation period delay

   -o,         --once-only     create single output log from template  (not rotated)

   -x FILE,   --debug=FILE     write debug messages to FILE

                              (  or to standard errorifFILE is "-")

   -a,         --american          Americandateformats

   -e,         --european         Europeandateformats  (default)

   -s,    --start-time=TIME    startingtime

   -z TZ, --time-zone=TZ       use TZfortimezone

   -V,       --version         print version  number,thenexit

 

当然也可以通过man cronolog查看帮助手册,说明很详细,而且有举例说明。不过需要将/usr/local/cronolog/man添加到MANPATH中。


# export MANPATH=$MANPATH:/usr/local/cronolog/man
 # man cronolog


cronolog 通常是采取管道的方式来工作的,采用如下的形式:


# loggenerator | cronolog log_file_pattern


loggenerator为产生log的程序,而log_file_pattern是日志文件的路径,可以在其中加入cronolog所支持的时间相关的pattern字符,如/www/log/%y/%m/%d/access.log。其pattern为%字符后跟一特殊字符,简述如下:

转移符:

%    %字符

n    换行

t    水平制表符

时间域:

H    小时(00..23)

I    小时(01..12)

p    该locale下的AM或PM标识

M    分钟(00..59)

S    秒 (00..61, which allows  for leap seconds)

X    该locale下时间表示符(e.g.:"15:12:47")

Z    时区。若时区不能确定,则无意义

日期域:


a    该locale下的工作日简名(e.g.: Sun..Sat)

A    该locale下的工作日全名(e.g.: Sunday ..  Satur-ay)

b    该locale下的月份简称(e.g.: Jan .. Dec)

B    该locale下的月份全称(e.g.:  January .. December)

c    该locale下的日期和时间(e.g.:"Sun Dec 15  14:12:47 GMT 1996")

d    当月中的天数 (01 .. 31)

j    当年中的天数 (001 .. 366)

m    月数 (01 .. 12)

U    当年中的星期数,以周日作为一周开始,其中第一周为首个含星期天的星期(00..53)

W    当年中的星期数,以星期一作为一周的开始,其中第一周为首个含星期天的星期(00..53)

w    工作日数(0 .. 6, 0表示星期天)

x    该locale下的日期表示(e.g."13/04/97")

y    两位数的年份(00 .. 99)

Y    四位数的年份(1970 .. 2038)




cronolog生产使用实例

 

我们通过两个实例来具体了解一下其使用方法。
A、定义到启动文件参数

如配置的apache访问日志
修改apache的httpd.conf文件。
修改访问日志参数,设置日志格式定义

#vi httpd.conf

#CustomLog"|/usr/local/sbin/cronolog/data/logs/apache.access.log.%Y%m%d"  combined

/usr/local/sbin/cronolog 为cronolog   安装后的路径。
/data/logs/                           为日志分割时候日志保存位置。
access_log.%Y%m%d            为日志文件的名称格式,每天一个文件。
B、定义创建启动脚本

将某一简单应用软件的输出重定向为特定日志文件,对于一个简单的应用程序,一个shell脚本deploy.sh,该脚本需24小时不间断的在后台运行。具体执行命令如下,
# nohup ./deploy.sh >> ./log/deploy.log &
将标准输出重定向到文件。/log/deploy.log中。
日志文件只有一个,随着运行时间的推移,该文件会越来越大。
现使用cronolog工具处理一下日志,修改后的命令如下, 

# nohup ./deploy.sh | /usr/local/sbin/cronolog"./log/deploy.logdeploy_%Y%m%d.log"  &

日志文件将按天分割,每天产生一个新的日志文件。

 

文章转载自恒生DBA公社,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论