日志分割工具cronolog

 

  
  
  
  
  1. 1. 关于本文 
  2.     本文将以cronolog 1.6.2、apache 2.2.6为例,以CentOS 5为平台,讲述cronolog的安装和设置。 
  3.  
  4. 2. 关于cronolog 
  5.     cronolog是一个简单的过滤程序,它从标准输入设备读入日志记录,并把这些记录写入到输出文件集,输出文件的名字由一个文件名模板和当前的日期时间组成。cronolog通常与web服务器一起使用,例如apache,用来安全地对日志文件按日期、月或其它特定的区间进行分割。 
  6.  
  7. 3. 安装cronolog 
  8. 3.1 下载最新稳定发行版(GA)的cronolog 
  9.       访问cronolog网站http://cronolog.org/download/index.html下载最新稳定发行版的cronolog源码包。本文使用的是1.6.2版本,在linux系统下用下面的命令下载: 
  10.       wgethttp://cronolog.org/download/cronolog-1.6.2.tar.gz 
  11. 3.2 解压缩下载的源码包 
  12.       首先建立一个工作目录( 笔者建议的目录为/usr/local/src/cronolog ) : 
  13.       mkdir -p /usr/local/src/cronolog 
  14.       将下载的源码包移至工作目录: 
  15.       mv cronolog-1.6.2.tar.gz  /usr/local/src/cronolog 
  16.       进入工作目录并用tar命令解压源码包: 
  17.       cd  /usr/local/src/cronolog 
  18.       tar zxvf  cronolog-1.6.2.tar.gz  
  19.       命令执行结束后,当前工作目录下将生成一个新的子目录cronolog-1.6.2,此目录下即为cronolog的源码文件。 
  20. 3.3 配置Makefile文件 
  21.       进入cronolog源码目录: 
  22.       cd cronolog-1.6.2 
  23.       执行下面的命令可查看可配置选项: 
  24.   ./configure --help 
  25.       本文使用的配置命令如下: 
  26.       CC=gcc CFLAGS="-O3" ./configure --prefix=/usr/local/cronolog 
  27.       配置选项说明: 
  28.       CC:C编译器的名称(用于运行configure),本文示例为gcc 
  29.       CFLAGS:C编译器的标志(用于运行configure),本文示例为-O3,指定优化级别为3 
  30.       --prefix:指定安装目录,本文示例为/usr/local/cronolog 
  31. 3.4 编译源代码 
  32.       执行下面的命令编译源代码: 
  33.   make 
  34. 3.5 安装 
  35.   执行下面的命令安装cronolog 到目标路径: 
  36.   make install 
  37. 3.6 目录结构 
  38.       安装完毕后,将在先前指定的目标路径中生成下列目录: 
  39.   ./info      cronolog信息文件(.info)目录 
  40.       ./man    cronolog帮助文件(man)目录 
  41.       ./sbin     cronolog二进制文件目录 
  42.  
  43. 4. cronolog的使用 
  44.     cronolog通常以管道方式作为日志过滤程序在应用的配置文件中调用。 
  45.     直接用法是: 
  46.     /path/to/cronolog [OPTIONS] logfile-spec 
  47.     其中: 
  48.     OPTIONS:cronolog的选项,可通过下面示例中的-h 或 --help选项查看,此处不再介绍。 
  49.     本文获取帮助信息示例: 
  50.     /usr/local/cronolog/sbin/cronolog  -h  
  51.     或: 
  52.  /usr/local/cronolog/sbin/cronolog --help  
  53.     logfile-spec: 是描述输出的日志文件名的模板,每一个无前导%的字符都是文件名的组成部分,%后面跟一个字符为日期和时间格式串,将被下表列出的它们代表的实际字串所替换。 
  54.     特殊格式串:  
  55.     %% %字符 
  56.     %n 新行 
  57.     %t tab字符 
  58.     时间格式串: 
  59.     %H 24小时制小时(00..23) 
  60.     %I 12小时制小时(01..12) 
  61.     %p 本地AM/PM指示符 
  62.     %M 分钟(00..59) 
  63.     %S 秒(00..61) 
  64.     %X 本地时间(e.g.: "15:12:47") 
  65.     %Z 时区 (e.g. GMT),如果不能检测出时区,值为空 
  66.     日期格式串: 
  67.     %a 本地简短星期名(e.g.: Sun..Sat) 
  68.     %A 本地完整星期名(e.g.: Sunday .. Saturday) 
  69.     %b 本地简短月名(e.g.: Jan .. Dec) 
  70.     %B 本地完整月名(e.g.: January .. December) 
  71.     %c 本地日期与时间(e.g.: "Sun Dec 15 14:12:47 GMT 1996") 
  72.     %d 一月中的第几日(01 .. 31) 
  73.     %j 一年中的第几天 (001 .. 366) 
  74.     %m 月名的数字表示 (01 .. 12) 
  75.     %U 一年中以星期日为每周第一天计算的星期数(00..53, 第一周包括新年的第一个星期日) 
  76.     %W 一年中以星期一为每周第一天计算的星期数(00..53, 第一周包括新年的第一个星期一) 
  77.     %w 星期名的数字表示 (0 .. 6, 0为星期日) 
  78.     %x 本地日期 (e.g. 今天在北京是: "15/12/96") 
  79.     %y 不带世纪的年(00 .. 99) 
  80.     %Y 带世纪的年(1970 .. 2038) 
  81.   
  82.  下面是在apache中的用法: 
  83.  CustomLog "|/path/to/cronolog [OPTIONS] logfile-spec" [format] 
  84.  OPTIONS、logfile-spec同上面的直接用法,format为apache配置指令CustomLog的日志格式参数。  
  85.  
  86.  下面是本文的示例: 
  87.     修改apache配置文件,本文示例为/usr/local/apache-2.2.6/conf/httpd.conf: 
  88.     vi /usr/local/apache-2.2.6/conf/httpd.conf 
  89.     按下面的提示进行修改: 
  90.  将CustomLog指令,本文示例为 
  91.     CustomLog logs/access_log common 
  92.  更改为: 
  93.  CustomLog "|/usr/local/cronolog/sbin/cronolog /usr/local/apache-2.2.6/logs/access_log.%Y%m%d" combined   
  94.     指令解释: 
  95.  /usr/local/cronolog/sbin/cronolog 为cronolog二进制文件绝对路径 
  96.  /usr/local/apache-2.2.6/logs/access_log.%Y%m%d 为输出日志文件名模板,将按天生成类似下面文件名的日志文件/usr/local/apache-2.2.6/logs/access_log.20080301。 
  97.     combined 为apache日志的格式名。 
  98.     按你的实际情况修改完毕后重启apache即可。 
  99.  
  100. 5. 结束语 
  101.     至此,cronolog基本安装配置完毕。希望本文能对初学者有所帮助。 
  102.  
  103.  
  104.  
  105.  
  106.  
  107.     使用cronolog可以格式化日志文件的格式,比如按时间分割,易于管理和分析。 
  108. cronolog的安装配置非常简单,简要说明如下: 
  109. 1.下载软件 
  110. http://cronolog.org/download/index.html 
  111. 2.解压缩 
  112. gzip -d cronolog-1.6.2.tar.gz 
  113. tar xf cronolog-1.6.2.tar 
  114. 2.进入相应的目录./configure 
  115. 3.make 
  116. 4.make install 
  117. 5.修改apache配置文件 
  118. 以下是我的安装日志,供大家参考: 
  119. 考: 
  120. [root@eygle opt]# wget http://cronolog.org/download/cronolog-1.6.2.tar.gz 
  121. --08:05:12--  http://cronolog.org/download/cronolog-1.6.2.tar.gz 
  122. => `cronolog-1.6.2.tar.gz' 
  123. Resolving cronolog.org... done. 
  124. Connecting to cronolog.org[217.160.212.212]:80... connected. 
  125. HTTP request sent, awaiting response... 200 OK 
  126. Length: 133,591 [application/x-gzip] 
  127. 100%[==================================>] 133,591       26.23K/s    ETA 00:00 
  128. 08:05:19 (26.23 KB/s) - `cronolog-1.6.2.tar.gz' saved [133591/133591] 
  129. [root@eygle opt]# gzip -d cronolog-1.6.2.tar.gz  
  130. [root@eygle opt]# tar xf cronolog-1.6.2.tar  
  131. [root@eygle opt]# cd cronolog-1.6.2 
  132. [root@eygle cronolog-1.6.2]# ls 
  133. aclocal.m4  config.cache   configure     cronolog.spec  install-sh  Makefile.am  mkinstalldirs  src 
  134. AUTHORS     config.log     configure.in  doc            lib         Makefile.in  NEWS           testsuite 
  135. ChangeLog   config.status  COPYING       INSTALL        Makefile    missing      README         TODO 
  136. [root@eygle cronolog-1.6.2]# ./configure  
  137. loading cache ./config.cache 
  138. checking for a BSD compatible install... (cached) /usr/bin/install -c 
  139. checking whether build environment is sane... yes 
  140. checking whether make sets ${MAKE}... (cached) yes 
  141. checking for working aclocal... found 
  142. checking for working autoconf... found 
  143. checking for working automake... found 
  144. checking for working autoheader... found 
  145. checking for working makeinfo... found 
  146. checking for gcc... (cached) gcc 
  147. checking whether the C compiler (gcc  ) works... yes 
  148. checking whether the C compiler (gcc  ) is a cross-compiler... no 
  149. checking whether we are using GNU C... (cached) yes 
  150. checking whether gcc accepts -g... (cached) yes 
  151. checking for a BSD compatible install... /usr/bin/install -c 
  152. checking whether ln -s works... (cached) yes 
  153. checking for ranlib... (cached) ranlib 
  154. checking for perl... (cached) /usr/bin/perl 
  155. checking how to run the C preprocessor... (cached) gcc -E 
  156. checking for ANSI C header files... (cached) yes 
  157. checking whether stat file-mode macros are broken... (cached) no 
  158. checking whether time.h and sys/time.h may both be included... (cached) yes 
  159. checking whether struct tm is in sys/time.h or time.h... (cached) time.h 
  160. checking for tm_zone in struct tm... (cached) yes 
  161. checking for fcntl.h... (cached) yes 
  162. checking for limits.h... (cached) yes 
  163. checking for unistd.h... (cached) yes 
  164. checking for working const... (cached) yes 
  165. checking for size_t... (cached) yes 
  166. checking whether struct tm is in sys/time.h or time.h... (cached) time.h 
  167. checking for strftime... (cached) yes 
  168. checking for vprintf... (cached) yes 
  169. checking for mkdir... (cached) yes 
  170. checking for mktime... (cached) yes 
  171. checking for putenv... (cached) yes 
  172. checking for strptime... (cached) yes 
  173. checking for localtime_r... (cached) yes 
  174. creating ./config.status 
  175. creating Makefile 
  176. creating lib/Makefile 
  177. creating src/Makefile 
  178. creating doc/Makefile 
  179. creating testsuite/Makefile 
  180. creating src/cronosplit 
  181. [root@eygle cronolog-1.6.2]# make 
  182. Making all in lib 
  183. make[1]: Entering directory `/opt/cronolog-1.6.2/lib' 
  184. make[1]: Nothing to be done for `all'. 
  185. make[1]: Leaving directory `/opt/cronolog-1.6.2/lib' 
  186. Making all in src 
  187. make[1]: Entering directory `/opt/cronolog-1.6.2/src' 
  188. make[1]: Nothing to be done for `all'. 
  189. make[1]: Leaving directory `/opt/cronolog-1.6.2/src' 
  190. Making all in doc 
  191. make[1]: Entering directory `/opt/cronolog-1.6.2/doc' 
  192. make[1]: Nothing to be done for `all'. 
  193. make[1]: Leaving directory `/opt/cronolog-1.6.2/doc' 
  194. Making all in testsuite 
  195. make[1]: Entering directory `/opt/cronolog-1.6.2/testsuite' 
  196. make[1]: Nothing to be done for `all'. 
  197. make[1]: Leaving directory `/opt/cronolog-1.6.2/testsuite' 
  198. make[1]: Entering directory `/opt/cronolog-1.6.2' 
  199. make[1]: Nothing to be done for `all-am'. 
  200. make[1]: Leaving directory `/opt/cronolog-1.6.2' 
  201. [root@eygle cronolog-1.6.2]# make install 
  202. Making install in lib 
  203. make[1]: Entering directory `/opt/cronolog-1.6.2/lib' 
  204. make[2]: Entering directory `/opt/cronolog-1.6.2/lib' 
  205. make[2]: Nothing to be done for `install-exec-am'. 
  206. make[2]: Nothing to be done for `install-data-am'. 
  207. make[2]: Leaving directory `/opt/cronolog-1.6.2/lib' 
  208. make[1]: Leaving directory `/opt/cronolog-1.6.2/lib' 
  209. Making install in src 
  210. make[1]: Entering directory `/opt/cronolog-1.6.2/src' 
  211. make[2]: Entering directory `/opt/cronolog-1.6.2/src' 
  212. /bin/sh ../mkinstalldirs /usr/local/sbin 
  213. /usr/bin/install -c  cronolog /usr/local/sbin/cronolog 
  214. /bin/sh ../mkinstalldirs /usr/local/sbin 
  215. /usr/bin/install -c  cronosplit /usr/local/sbin/cronosplit 
  216. make[2]: Nothing to be done for `install-data-am'. 
  217. make[2]: Leaving directory `/opt/cronolog-1.6.2/src' 
  218. make[1]: Leaving directory `/opt/cronolog-1.6.2/src' 
  219. Making install in doc 
  220. make[1]: Entering directory `/opt/cronolog-1.6.2/doc' 
  221. make[2]: Entering directory `/opt/cronolog-1.6.2/doc' 
  222. make[2]: Nothing to be done for `install-exec-am'. 
  223. /bin/sh ../mkinstalldirs /usr/local/info 
  224. /usr/bin/install -c -m 644 ./cronolog.info /usr/local/info/cronolog.info 
  225. install-info --info-dir=/usr/local/info /usr/local/info/cronolog.info 
  226. make  install-man1 
  227. make[3]: Entering directory `/opt/cronolog-1.6.2/doc' 
  228. /bin/sh ../mkinstalldirs /usr/local/man/man1 
  229. /usr/bin/install -c -m 644 ./cronolog.1m /usr/local/man/man1/cronolog.1m 
  230. /usr/bin/install -c -m 644 ./cronosplit.1m /usr/local/man/man1/cronosplit.1m 
  231. make[3]: Leaving directory `/opt/cronolog-1.6.2/doc' 
  232. make[2]: Leaving directory `/opt/cronolog-1.6.2/doc' 
  233. make[1]: Leaving directory `/opt/cronolog-1.6.2/doc' 
  234. Making install in testsuite 
  235. make[1]: Entering directory `/opt/cronolog-1.6.2/testsuite' 
  236. make[2]: Entering directory `/opt/cronolog-1.6.2/testsuite' 
  237. make[2]: Nothing to be done for `install-exec-am'. 
  238. make[2]: Nothing to be done for `install-data-am'. 
  239. make[2]: Leaving directory `/opt/cronolog-1.6.2/testsuite' 
  240. make[1]: Leaving directory `/opt/cronolog-1.6.2/testsuite' 
  241. make[1]: Entering directory `/opt/cronolog-1.6.2' 
  242. make[2]: Entering directory `/opt/cronolog-1.6.2' 
  243. make[2]: Nothing to be done for `install-exec-am'. 
  244. make[2]: Nothing to be done for `install-data-am'. 
  245. make[2]: Leaving directory `/opt/cronolog-1.6.2' 
  246. make[1]: Leaving directory `/opt/cronolog-1.6.2' 
  247. [root@eygle cronolog-1.6.2]# which cronolog 
  248. /usr/local/sbin/cronolog 
  249. 安装完成以后需要对apache进行适当配置,修改httpd.conf文件,主要注意以下几点: 
  250. 1.自定义日志格式 
  251. CustomLog "|/usr/local/sbin/cronolog /opt/apache/logs/access_log.%Y%m%d" combined 
  252. 2.如果存在多个虚拟站点 
  253. 可以考虑在VirtualHost进行相应设置 
  254.     ServerAdmin [email protected] 
  255. DocumentRoot /www/docs/dummy-host.example.com 
  256. ServerName dummy-host.example.com 
  257. ErrorLog logs/dummy-host.example.com-error_log 
  258. CustomLog logs/dummy-host.example.com-access_log common 
  259. 我的www.eygle.com存在多个子站点,但是都使用了同一个日志文件配置后生成日志文件的效果: 
  260. [root@eygle logs]# ls -l access_log.20041226 
  261.  
  262. -rw-r--r--    1 root     root       110425 Dec 26 09:10 access_log.20041226 

 

你可能感兴趣的:(日志分割工具cronolog)