golang LogAgent 项目实战(一)
本文主要记录了学习golang时做的一个项目:日志收集项目。
关键词:日志收集项目
项目背景
每个业务系统都有日志,当系统出现问题时, 需要通过日志信息来定位和解决问题。当系统机器比较少时,登录到服务器上查看即可满足;当系统机器规模巨大,登录到服务器上查看几乎不现实(分布式系统,一个系统部署在是十几台服务器上)
解决方案
把机器上的日志实时收集,统一存储到中心系统。再对这些日志建立索引,通过搜索即可快速找到对应的日志记录。
通过提供一个界面友好的web页面实现日志的展示和检索。
面临的问题
实时日志量非常大,每条处理几十亿条,日志准实时收集,延迟控制在分钟级别。
系统的架构设计能够支持水平扩展。
业界方案
ELK


ELK方案的问题
- 运维成本高,每增加一个日志收集项,都需要手动配置;
- 监控(Beats,现在有了)缺失,无法准确获取logstash的状态;
- 无法做到定制化开发和维护。
日志收集系统架构设计

优势
- 基于etcd实现了配置的自动发现
组件介绍
- LogAgent:日志收集客户端,用来收集服务器上的日志
- Kafka:高吞吐量的分布式队列(Linkin开源,Apache顶级开源项目)
- ElasticSearch:开源的搜索引擎,提供基于HTTP RESTful的web接口
- Kibaa:开源的ES数据引起分析和可视化工具
- Hadoop:分布式计算框架,能够对大量数据进行分布式处理的平台
- Storm:一个免费并开源的分布式实时计算系统
将学到的技能
- 服务端Agent开发
- 后端服务组件开发
- ES和Kibana的使用
- Kafka和zookeeper的使用
- etcd的使用