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的使用