MasterofProject

Analysis of the realization of syslog_aggregator in Foundry Cloud

label Foundry CloudSyslog_aggregatorLog
1594 people read comment(1) Collection report
Classification:

In Foundry Cloud, used to collect Foundry Cloud components of each component of the log information, called syslog_aggregator.

Syslog aggregator can achieve convenient collection of cloud foundry all components of the log information, and these information for initial processing. For example, will produce a different months of logs, classifying and storing; also in the same month of log, through the different dates are classified. In this case, when the Foundry Cloud platform developers, in the operation of the platform when you need to view the log generated by a component in Foundry Cloud, you can easily find the corresponding date of the log. Syslog aggregator in addition to the log of subassembly, month, date storage, it also provides some of the log function of packing or pruning, such as: syslog aggregator will log in a certain period of time, compression, in order to save storage space; also the syslog aggregator will regularly to the log removal, such as save only a certain period of time the length of the log. When the log exceeds the time limit, the syslog aggregator will be removed.

The following is a simple analysis of the implementation of syslog_aggregator:

The syslog_aggregator module mainly includes the monit module, the log management module.


Monit module

Monit module mainly realizes: monitoring the syslog aggregator component running state, once the monitoring over the syslog aggregator component in the process does not survive, immediately restart the process; in addition, syslog aggregator component will also own information through cloud agent sent to NATs, the information including syslog aggregator component is located in the host's survival state and resource use.

The following code through the monit monitoring process:

Process syslog_aggregator check
Pidfile /var/vcap/sys/run/syslog_aggregator/syslog_aggregator.pid with
Program /var/vcap/jobs/syslog_aggregator/bin/syslog_aggregator_ctl "start start"
Program /var/vcap/jobs/syslog_aggregator/bin/syslog_aggregator_ctl "stop stop"
Vcap group
This section of the code clearly marked the process of the start, the process of the PID command and the stop command.

Cloud agent as auxiliary tool for bosh monitoring cloud foundry component level information, responsible for collect syslog aggregator component where the host's running state and resource usage, and send to the health monitor, unified management by the health monitor. Because the cloud_agent is not the key, so this article will not repeat them.


Log management module

Implementation log management, syslog_aggregator is achieved through the launch of the syslog_aggregator_ctl script. The monit module mentioned above, it is also the process of monitoring the start of this script command. To come down to analyze the code implementation of the script:

# /bin/bash!

RUN_DIR=/var/vcap/sys/run/syslog_aggregator
LOG_DIR=/var/vcap/store/log
JOB_DIR=/var/vcap/jobs/syslog_aggregator
PACKAGE_DIR=/var/vcap/packages/syslog_aggregator

BIN_DIR=$JOB_DIR/bin
PIDFILE=$RUN_DIR/syslog_aggregator.pid

/var/vcap/packages/common/utils.sh source

$1 in case

Start)

-y install rsyslog-relp apt-get

$PIDFILE Syslog "aggregator pid_guard"

-p $RUN_DIR MKDIR
-p $LOG_DIR MKDIR
-R vcap:vcap $LOG_DIR chown

-f /etc/cron.daily/bzip_old_logs RM
-a $BIN_DIR/gzip_old_logs /etc/cron.daily CP
-a $BIN_DIR/reap_old_logs /etc/cron.hourly CP
-a $BIN_DIR/symlink_logs /etc/cron.hourly CP
-a $PACKAGE_DIR/send_error_mail /etc/cron.daily CP

exec /usr/sbin rsyslogd美元/ F /配置/你的工作_ rsyslogd.conf pidfile C 4 I $ \
你_>美元/ rsyslogd.stdout.log \日志
2>_美元/ rsyslogd.stderr.log你日志
;;;;;;;;;;;;;;

停止)
杀死_和_等pidfile美元
RM / cron.daily / gzip _老_日志
cron.hourly RM / /天_老_日志
;;;;;;;;;;;;;;

*)
回声”:_聚合使用syslog _ CTL启动停止| { }”
;;;;;;;;;;;;;;

ESAC
在通过该脚本来实现启动syslog _ aggregator进程的时候,使用的是start命令.进入start命令,可以看到,安装了rsyslog RFLP;然后通过/ var / vcap /包/普通/ utils.sh中定义的pid _方法来实现对该进程pid的保护后卫(),当系统中已经由相应的进程以该pid在运行时,删除该进程,以保证syslog _ aggregator可以按预先设置的pid进行运行;随后创建几个定义好的目录_运行日志,你,你_,还对log _ dir进行拥有用户修改。

脚本中随后的5行代码,涉及到的是linux操作系统中cron定期任务删除与添加的实现:

RM / F / cron.daily bZIP _老_日志
我给你一美元的_ CP / gzip _老_日志/ cron.daily
你是_ CP a美元/天/ _老_ cron.hourly日志
我给你一美元的_ CP/symlink/etc/cron.hourly _日志
你_ CP A包邮件发送错误_ _ /的/ etc / cron.daily
首先在每日的执行任务中删除掉bzip _老_ logs任务,如果该任务存在的话;随后将4个任务分别加入到了指定的目录位置分别是:gzip,_老_日志,日志的最老_ _,_链接发送错误日志,_ _ mail.也就是让linux操作系统每天一次执行gzip _老_ logs脚本,每小时执行一次reap _老_ logs脚本,每小时执行一次symlink _ logs脚本,每周一次执行一次send _ _ mail脚本错误。

添加完这些定义任务之后,_ aggregator随后启动了rsyslog实现日志服务器的启动syslog服务器:

exec /usr/sbin rsyslogd美元/ F /配置/你的工作_ rsyslogd.conf pidfile C 4 I $ \
你_>美元/ rsyslogd.stdout.log \日志
2>_美元/ rsyslogd.stderr.log你日志
启动rsyslog server的具体配置可以参看rsyslogd.conf的各参数:

maxmessagesize 4K美元

“这是#认识到所有接口(否则无法指定)。
modload imtcp美元
inputtcpmaxsessions美元1024
inputtcpserverrun 54321美元
privdroptouser vcap美元
privdroptogroup vcap美元

每个组件的#写消息到一个单独的日志
# programname是认为是“vcap > <组件。
#是自动创建目录
模板vcapcomponentlogfile $“/ var / vcap /商店/日志/ % programname:6:$,% % % %元/年/月/日元% % $ % % / %。日志:programname:6美元”
模板vcapcomponentlogformat美元,“IP fromhost % % %味精\n”

《首次公开发行# '告诉rsyslogd遇险后同步到每个写入文件
startswith programname,:“vcap。”?vcapcomponentlogfile;vcapcomponentlogformat

防止他们从别的地方#深远
startswith:“vcap programname,~。”

当然有server的话,自然会accept来自client的请求,所以在cloud foundry中每个组件都会安装一个resyslog的client端,然后启动该client,连接rsyslog并发送日志请求,以此来实现日志的传输,又通过刚才涉及到的那些脚本实现对日志的管理服务器。

以下分析添加到周期性任务中的脚本功能。


1.gzip _老_日志

该脚本的实现很简单,如下:

#!/bin/bash
#压缩日志文件是没有改变的,在最后的一天
find / var / vcap /商店/日志型F + 1440 min。日志名称*’’’exec gzip { };
功能为找到/ var / vcap /商店/ log目录下,1440分钟(24小时内没有被修改的文件,然后进行压缩操作)。


2.symlink _日志

该脚本实现的是:为每一个当天的创建出来的文件创建符号链接约会`,`执行结果为执行时的年份Y + %,依此类推.代码如下:

#!/bin/bash
#创建符号链接到今天的vcap /在/ var /日志/日志商店
的X / var / vcap /商店/日志/ * / %“+ Y /约会约会` ` ` `约会/ M + % + * % D“do if /;[ F ] X美元”;然后在“X”的SF / var / vcap /商店/日志FI;完成;
     

3.reap _老_日志

该脚本实现的是:清除保存已超过7天的日志.代码如下:

#!/bin/bash

设置-美国

log_dir = /变量/参数/商店/日志
#收获日志,超过7天
days_to_keep = 7
让“min_to_keep = $ { days_to_keep }×24×60”

#获得最后days_to_keep美元的日期排除rmdir

days_to_exclude = $(
我在$(SEQ 0美元{ days_to_keep });做
日期-“现在- $我天”+ % / % / %
完成
)
#输出的例子:“2012 / 09 / 2012 / 09 / 20 21 | | ..... | 2012 / 09 / 15 / 09 / 14 | 2012”
egrep_format_days_to_exclude = $(echo $ days_to_exclude | TR”|”)

美元log_dir } - {分+ $ { min_to_keep }名称*。日志。广州的-exec rm -f“{ }”;

#收获空目录3通过,清空'天'目录,然后'月'
#最后‘年’
我在' / [0-9] { 4 } / [ 1 ] [0-9] / [0-9] { 2 } $ \
“/ [0-9] { 4 } / [ 1 ] [0-9] $ \
“/ [0-9] { 4 } $;做
/usr/bin/vi美元{ log_dir }型D空|
egrep V”egrep_format_days_to_exclude美元{ }”|
{我} |较美元
xargs·R·N 200删除
完成
其中,egrep_format_days_to_exclude是为了获取一个通过”|”字符串联起来的字符串,随后实现对指定路径进行清除。

以上便是对云中syslog_aggregator的简单分析。


关于作者:

孙宏亮,daocloud软件工程师。两年来在云计算方面主要研究PaaS领域的相关知识与技术。坚信轻量级虚拟化容器的技术,会给PaaS领域带来深度影响,甚至决定未来PaaS技术的走向。

 


转载请注明出处。

这篇文档更多出于我本人的理解,肯定在一些地方存在不足和错误。希望本文能够对接触云中syslog_aggregator的人有些帮助,如果你对这方面感兴趣,并有更好的想法和建议,也请联系我。

我的邮箱:allen.sun@daocloud.io

新浪微博:“莲子弗如清






猜你在找
查看评论
*以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:86269次
    • 积分:一千三百七十三
    • 等级:
    • 排名:18305名第
    • 原创:47篇
    • 转载:0篇
    • 译文:1篇
    • 评论:51条
    博客专栏
    联系方式
    文章分类
    Latest comments