开源应用日志收集系统

4,893 views
4,658 views

Published on

开源应用日志收集系统 by perl china

Published in: Technology
1 Comment
12 Likes
Statistics
Notes
No Downloads
Views
Total views
4,893
On SlideShare
0
From Embeds
0
Number of Embeds
462
Actions
Shares
0
Downloads
111
Comments
1
Likes
12
Embeds 0
No embeds

No notes for slide

开源应用日志收集系统

  1. 1. 开源应用日志收集系统<br />产品数据采集系统<br />[Sina应用开发]项目组<br />2009年9月15 <br />
  2. 2. 自我介绍<br />王春生<br />就职于SINA ,LAMP 平台高级架构师<br />喜欢mysql、storage、webservice等系统架构的设计和优化,目前比较关注分布式架构及OPENAPI相关<br />联系方式:<br />msn: vanilla_cn@hotmail.com<br />Mail: chunshengster@gmail.com<br />
  3. 3. 文档介绍<br />介绍本人今年的一个小项目<br />从项目的需求出发,经历需求分析、技术方向选择、开源软件选型、性能测试、应用层协议封装以及最后的系统可靠性跟踪验证等过程<br />
  4. 4. 需求陈述<br />应用项目存在大量接口使用情况,无法深入监控<br />将服务器上分散存在的各种日志数据(访问日志、错误日志、程序跟踪日志、用户行为日志等混杂的数据)集中收集汇聚<br />……………………<br />需要有一套能够深入到应用程序的系统快速收集各种日志<br />
  5. 5. 目标<br />本系统目标为对上述各种日志进行采集,传输,汇集<br />支持灵活的策略对日志进行过滤、分离<br />针对日志内容进行存储、通知、警报等响应<br />
  6. 6. 项目范围:<br />重点对数据传输层进行服务器选型、功能尝试、构想、架构设计、实现<br />对数据采集层需求、策略、实现等进行分析、尝试,实现简单demo<br />对数据存储做简单的策略,方便查询<br />
  7. 7. 项目进展<br />
  8. 8. 项目进展—选型任务<br />重点关注三款日志服务器<br /><ul><li>Syslog-ng
  9. 9. Rsyslog
  10. 10. Scribe server</li></li></ul><li>项目进展—选型任务<br />选型标准<br /><ul><li>对系统日志的支持(不改变原始系统日志的记录方式)
  11. 11. 对PHP及其他应用语言的接口
  12. 12. 对syslog标准的支持(对扩展要求提供保证)
  13. 13. 功能及其扩展性
  14. 14. 性能及其可靠性
  15. 15. 灵活架构</li></li></ul><li>项目进展—SYSLOG-NG<br />重点对syslog-ng进行评测<br /><ul><li>功能:
  16. 16. 数据接口支持:
  17. 17. unix-stream
  18. 18. TCP SSL-TLS (OSE支持TLS)
  19. 19. Fifo-buffer
  20. 20. 对过滤器,格式化数据,和数据重写的支持
  21. 21. Filter
  22. 22. Parse
  23. 23. Rewrite </li></li></ul><li>项目进展—SYSLOG-NG<br /><ul><li>性能
  24. 24. 日志采集层
  25. 25. 日志转发层
  26. 26. 日志存储层
  27. 27. 可靠性</li></li></ul><li>项目进展—SYSLOG-NG<br /><ul><li>扩展性(对分布式架构的支持)
  28. 28. FC 3164中的定义</li></li></ul><li>项目进展—SYSLOG-NG<br /><ul><li>扩展性(对分布式架构的支持)
  29. 29. SYSLOG-NG的扩展性支持</li></li></ul><li>项目进展—SYSLOG-NG<br /><ul><li>扩展性(对分布式架构的支持)
  30. 30. SYSLOG-NG的扩展性支持</li></li></ul><li>项目进展—SYSLOG-NG<br /><ul><li>扩展性(对分布式架构的支持)
  31. 31. SYSLOG-NG的扩展性支持</li></li></ul><li>项目进展—SYSLOG-NG<br />至此,结论:<br />Syslog-ng基本上能够满足我们对日志记录、汇总、过滤、触发等需求<br />
  32. 32. 项目进展—其他<br />RSYSLOG<br />SCRIBE SERVER<br />
  33. 33. 选型任务总结及架构设计<br />Syslog-ng是一个我们可以更加深入尝试的日志服务器,因为:<br /><ul><li>Rfc
  34. 34. Linux系统特性
  35. 35. 过滤器
  36. 36. 触发器
  37. 37. 存储</li></li></ul><li>选型任务总结及架构设计<br />结合syslog-ng自身特性及sina网络部署的状况,设计了如下结构-平面结构:<br />
  38. 38. 选型任务总结及架构设计<br />立体部署结构<br />
  39. 39. 选型任务总结及架构设计<br />该架构的优点<br />
  40. 40. 选型及架构设计存在的问题:<br />当前问题<br /><ul><li>转发层及中心存储节点数据收敛汇聚,解决重复数据大量发送的问题
  41. 41. 触发策略的进一步分析和明确
  42. 42. 跨网段可靠性保证 (TLS)
  43. 43. 严重依赖syslog-ng服务,其稳定性和监控措施</li></ul>其他问题<br /><ul><li>……</li></li></ul><li>项目进展—采集器分析及方案<br />
  44. 44. 采集器分析及方案<br />需求分析—日志分类<br />
  45. 45. 采集器分析及方案<br />针对上面各种日志,提取其关键属性:<br />级别 时间 产品[模块] 类别 细节描述<br />结合RFC3164及RFC5424,我们定义出如下日志格式,以满足记录需求:<br />
  46. 46. 采集器分析及方案-策略草案<br />结合前面设计的系统架构,设计了如下策略草案:<br />以级别来命名(七种级别和策略)<br />define(&quot;LOG_INFO_STORE&quot;,1); //信息日志,并转发到中心机<br />define(&quot;LOG_WARNGING_STORE&quot;,2); //警告日志,会发送邮件给相应工程师并转发到中心机<br />define(&quot;LOG_ERROR_STORE&quot;,3); //错误日志,发送邮件,短信给相应工程师并转发到中心机<br />
  47. 47. 采集器分析及方案-策略草案<br />define(&quot;LOG_CRITICAL_STORE&quot;,4); //严重错误日志,发送邮件,短信给相应工程师,还会抄送邮件,发送短信给相应的领导,同时转发到中心机<br />define(&quot;LOG_INFO_TEMP&quot;,5); //信息日志,只在中转机上存储一段时间<br />define(&quot;LOG_WARNGING_TEMP&quot;,6); //警告日志,发送邮件给相应工程师,在中转机上存储一段时间<br />define(&quot;LOG_ERROR_TEMP&quot;,7); //错误日志,发送邮件,短信给相应工程师,在中转机上存储一段时间<br />
  48. 48. 采集器分析及方案-How To<br />
  49. 49. 采集器分析及方案-How To<br />日志服务工作时序图<br />
  50. 50. 采集器分析及方案-DEMO<br />目前实现了两个php的lib库<br />Php4 实现<br />Php5-class实现<br />如何使用?<br />日志记录接口函数:<br />IntSinaLog::log(int $level , array $data)<br />
  51. 51. How To—配置<br />SinaLog.php文件放入某个产品项目下面的固定位置<br />&lt;?php<br />//必须!产品名称,每个项目使用日志接口文件时必须定义PRODUCT的值<br />define(&quot;PRODUCT&quot;, &quot;blog&quot;); <br />//可选!当前日志记录是那个模块<br />define(&quot;MODULE&quot;, &quot;default_module&quot;);<br />//可选!如果日志记录出错,发邮件通知给谁(相关运维人员)<br />define(&quot;MAIL_TO&quot;, &quot;dexin@staff.sina.com.cn&quot;);<br />?&gt;<br />
  52. 52. How To—代码模板<br />//step1:包含<br />require_once (&quot;../SinaLog.php&quot;);<br />....<br />//step2:准备数据<br />$data = array (<br /> &apos;module&apos; =&gt; &apos;test_module&apos;,<br /> &apos;summary&apos; =&gt; &apos;add data&apos;,<br /> &apos;detail&apos; =&gt; &apos;add some data: $msgstr : to database&apos;,<br /> &apos;filename&apos;=&gt;__FILE__,<br /> &apos;linenum&apos;=&gt;__LINE__<br />)<br />//step3:设置日志记录级别<br />$level = REALY;<br />//step4:调用<br />SinaLog::log($level,$data)<br />恭喜您,完成日志归档任务!<br />
  53. 53. How To—其他样例 1<br />只发送到中转机<br /> $level = RELAY; //或$level = LOG_INFO_TEMP<br /> $data = array(<br /> &apos;module&apos;=&gt;&apos;search&apos;, <br /> &apos;summary&apos;=&gt;&apos;user_serarch&apos;, <br /> &apos;detail&apos;=&gt;&apos;$username at time $time process a search using keyword:$kerword&apos;,<br /> );<br /> $result = SinaLog::log($level, $data);<br />
  54. 54. How To—其他样例 2<br />社区搜索产品,记录一些用户的行为日志,需要发送到中心服务器:<br /> $level = LOG_INFO_STORE; //或$level = RELAY<br /> $data = array(&apos;module&apos;=&gt;&apos;search&apos;, <br /> &apos;summary&apos;=&gt;&apos;user_serarch&apos;, <br /> &apos;detail&apos;=&gt;&apos;$username at time $time process a search using keyword:$kerword&apos;,<br /> );<br /> $result = SinaLog::log($level, $data);<br />
  55. 55. How To—其他样例 3<br />发送到中心机,并发送邮件,手机短信<br /> $level = CENTER_MAIL_SMS;//或$level = LOG_ERROR_STORE;<br /> $data = array(&apos;module&apos;=&gt;&apos;comment&apos;, <br /> &apos;summary&apos;=&gt;&apos;add_comment&apos;, <br /> &apos;detail&apos;=&gt;&apos;$username add_commnet to article:$articlename failed, could not connect to database&apos;,<br /> &apos;filename&apos;=&gt;__FILE__,<br /> &apos;linenum&apos;=&gt;__LINE__<br /> );<br /> $result = SinaLog::log($level, $data);<br />
  56. 56. 存储方案的简单设计<br />目前对存储的设计相对简单,只考虑文本的存储<br /><ul><li>数据转发层
  57. 57. 中心存储节点</li></ul>目录规则:<br />PROJMODULEDATELEVEL<br /> DATEPROJMODULELEVEL<br />转储策略<br /><ul><li>数据转发层服务器日志暂存7天,无特殊说明情况下删掉
  58. 58. 中心存储节点日志暂存30天,无特殊说明情况下删掉</li></li></ul><li>其他展示-记录后的消息和协议对应<br /><ul><li>log消息片段:</li></ul>Mar 31 13:59:01 hanyh-laptop blog[15029]: postmodule|this is sumarry| this is content :It&apos;s uidgid bid tidloveid|/home/hanyh/workspace/SuperMario/src/t.php|9<br />
  59. 59. 其他展示-性能问题<br />目前根据压力测试—1w/s<br />可靠性监控问题(丢数据):<br />
  60. 60. 其他展示-日志统计<br />
  61. 61. 回顾&总结:<br />对syslog协议的分析寻找技术方向,扩展标准协议<br />通过对syslog-ng、rsyslog的了解和测试选定开源产品<br />对扩展后的协议进行应用层封装,便于开发工程师使用<br />通过适当的系统调试和跟踪记录手段对技术的有效性进行验证<br />
  62. 62. Q&A<br />?<br />
  63. 63. 谢谢 <br />

×