More Related Content Similar to 开源应用日志收集系统 (20) 开源应用日志收集系统2. 自我介绍
王春生
就职于SINA ,LAMP 平台高级架构师
喜欢mysql、storage、web service等系统架
构的设计和优化,目前比较关注分布式架构及
OPENAPI相关
联系方式:
msn: vanilla_cn@hotmail.com
Mail: chunshengster@gmail.com
3. 文档介绍
介绍本人今年的一个小项目
从项目的需求出发,经历需求分析、技术
方向选择、开源软件选型、性能测试、应
用层协议封装以及最后的系统可靠性跟踪
验证等过程
4. 需求陈述
应用项目存在大量接口使用情况,无法深
入监控
将服务器上分散存在的各种日志数据(访
问日志、错误日志、程序跟踪日志、用户
行为日志等混杂的数据)集中收集汇聚
……………………
需要有一套能够深入到应用程序的系统快
速收集各种日志
5. 目标
本系统目标为对上述各种日志进行采集,
传输,汇集
支持灵活的策略对日志进行过滤、分离
针对日志内容进行存储、通知、警报等响
应
6. 项目范围:
重点对数据传输层进行服务器选型、功能
尝试、构想、架构设计、实现
对数据采集层需求、策略、实现等进行分
析、尝试,实现简单demo
对数据存储做简单的策略,方便查询
8. 项目进展—选型任务
重点关注三款日志服务器
Syslog-ng
Rsyslog
Scribe server
9. 项目进展—选型任务
选型标准
对系统日志的支持(不改变原始系统日志的记
录方式)
对PHP及其他应用语言的接口
对syslog标准的支持(对扩展要求提供保证)
功能及其扩展性
性能及其可靠性
灵活架构
10. 项目进展—SYSLOG-NG
重点对syslog-ng进行评测
功能:
数据接口支持:
unix-stream
TCP SSL-TLS (OSE支持TLS)
Fifo-buffer
对过滤器,格式化数据,和数据重写的支持
Filter
Parse
Rewrite
18. 选型任务总结及架构设计
Syslog-ng是一个我们可以更加深入尝试
的日志服务器,因为:
Rfc
Linux系统特性
过滤器
触发器
存储
21. 选型任务总结及架构设计
该架构的优点
数据采集层
层层控制 角色
数据转发层
清晰
中心存储节点
响应策略
日志格式统一
任务明确 稳定
快速
过滤器快速触发
22. 选型及架构设计存在的问题:
当前问题
转发层及中心存储节点数据收敛汇聚,解决重
复数据大量发送的问题
触发策略的进一步分析和明确
跨网段可靠性保证 (TLS)
严重依赖syslog-ng服务,其稳定性和监控措
施
其他问题
……
24. • PV日志 • 调试日志
• 登录日志 • 队列日志
采集器分析及方案
• 激活日志 • 删squid日志
• 上传插件日志 • 成功日志
统计
需求分析—日志分类程序跟踪
日志
日志
用户行为 错误
日志 日志
• 也可算作 • 数据库(包括
memecache服务器
统计日志 )错误
• HTTP接口错误
一种
• 应用程序错误
25. 采集器分析及方案
针对上面各种日志,提取其关键属性:
级别 时间 产品[模块] 类别 细节描述
结合RFC3164及RFC5424,我们定义
出如下日志格式,以满足记录需求:
PRI TIMESTAMP HOSTNAME PRODUC PROCID
T
Header部份
MODULE SUMMAR DETAIL FILENAME LINENO
Y
Body部分
26. 采集器分析及方案-策略草案
结合前面设计的系统架构,设计了如下策
略草案:
以级别来命名(七种级别和策略)
define("LOG_INFO_STORE",1); //
信息日志,并转发到中心机
define("LOG_WARNGING_STORE",2); //
警告日志,会发送邮件给相应工程师并转发到中心机
define("LOG_ERROR_STORE",3); //错误日志
,发送邮件,短信给相应工程师并转发到中心机
27. 采集器分析及方案-策略草案
define("LOG_CRITICAL_STORE",4); //
严重错误日志,发送邮件,短信给相应工程师,还会
抄送邮件,发送短信给相应的领导,同时转发到中心
机
define("LOG_INFO_TEMP",5); //
信息日志,只在中转机上存储一段时间
define("LOG_WARNGING_TEMP",6); //
警告日志,发送邮件给相应工程师,在中转机上存储
一段时间
define("LOG_ERROR_TEMP",7); //
错误日志,发送邮件,短信给相应工程师,在中转机
上存储一段时间
30. 采集器分析及方案-DEMO
目前实现了两个php的lib库
Php4 实现
Php5-class实现
如何使用?
日志记录接口函数:
Int SinaLog::log(int $level , array $data)
31. How To—配置
SinaLog.php文件放入某个产品项目下面
的固定位置
<?php
//必须!产品名称,每个项目使用日志接口文件时必须定义PRODUCT的值
define("PRODUCT", "blog");
//可选!当前日志记录是那个模块
define("MODULE", "default_module");
//可选!如果日志记录出错,发邮件通知给谁(相关运维人员)
define("MAIL_TO", "dexin@staff.sina.com.cn");
?>
33. How To—其他样例 1
只发送到中转机
$level = RELAY; //或$level = LOG_INFO_TEMP
$data = array(
'module'=>'search',
'summary'=>'user_serarch',
'detail'=>'$username at time $time
process a search using keyword:$kerword',
);
$result = SinaLog::log($level, $data);
34. How To—其他样例 2
社区搜索产品,记录一些用户的行为日志,
需要发送到中心服务器:
$level = LOG_INFO_STORE; //或$level = RELAY
$data = array('module'=>'search',
'summary'=>'user_serarch',
'detail'=>'$username at time $time process
a search using keyword:$kerword',
);
$result = SinaLog::log($level, $data);
35. How To—其他样例 3
发送到中心机,并发送邮件,手机短信
$level = CENTER_MAIL_SMS;//或$level =
LOG_ERROR_STORE;
$data = array('module'=>'comment',
'summary'=>'add_comment',
'detail'=>'$username add_commnet to
article:$articlename failed, could not connect to
database',
'filename'=>__FILE__,
'linenum'=>__LINE__
);
$result = SinaLog::log($level, $data);
36. 存储方案的简单设计
目前对存储的设计相对简单,只考虑文本
的存储
数据转发层
中心存储节点
目录规则:
PROJMODULEDATELEVEL
DATEPROJMODULELEVEL
转储策略
数据转发层服务器日志暂存7天,无特殊说明情况下删
掉
中心存储节点日志暂存30天,无特殊说明情况下删掉
37. 其他展示-记录后的消息和协议对应
log消息片段:
Mar 31 13:59:01 hanyh-laptop
blog[15029]: postmodule|this is sumarry|
this is content :It's uid gid bid tid
loveid|/home/hanyh/workspace/SuperMar
io/src/t.php|9
40. 回顾&总结:
对syslog协议的分析寻找技术方向,扩展
标准协议
通过对syslog-ng、rsyslog的了解和测试
选定开源产品
对扩展后的协议进行应用层封装,便于开
发工程师使用
通过适当的系统调试和跟踪记录手段对技
术的有效性进行验证