# go-logger **Repository Path**: tao-xiaoxin/go-logger ## Basic Information - **Project Name**: go-logger - **Description**: 本项目是一个日志收集解决系统,可以动态收集日志 更多功能,持续更新…… - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2021-07-20 - **Last Updated**: 2025-06-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 分布式日志收集系统项目概述 ### 项目背景 每个业务系统都有⽇志,当系统出现问题时,需要通过日志信息定位和解决问题。 当系统机器比较少时,登陆到服务器器上查看即可满⾜。 当系统机器规模巨⼤大,登陆到机器器上查看几乎不可能现实(分布式的系统,一个系统部署在十几台机器器上) ### 解决方案 把机器上的⽇志实时收集,统⼀的存储到中心系统。 在对这些⽇志建⽴索引,通过搜索即可快速找到对应的⽇志记录 通过提供⼀个界⾯友好的web页⾯实现⽇志检索与展示。 ### 面临的问题 + 实时日志量量⾮常⼤大,每天处理理几⼗亿条。 + 日志准实时收集,延迟控制在分钟级别。 + 能够支持水平扩展。 ### 业界方案: #### ELK ![elk.jpg](img/elk.jpg) #### ELK⽅案的问题 运维成本高,每增加⼀个日志收集项,都需要手动修改配置。 监控缺失,无法准确获取logstash的状态。 无法做到定制化开发与维护 ### 项目整体架构图 ![架构设计.jpg](img/架构设计.jpg) ### 日志收集系统设计 ![架构设计.jpg](img/img_1.png) ### 组件介绍 LogAgent: 日志收集客户端,用来收集服务器上的日志。 Kafka:高吞吐量的分布式队列(Linkin开发,apache顶级开源项目) ElasticSearch:开源的搜索引擎,提供基于HTTP RESTful的web接口。 Kibaa:开源的ES数据分析和可视化工具。 Hadoop:分布式计算框架,能够对大量数据进行分布式处理的平台。 Storm:一个免费并开源的分布式实时计算系统。 ### 项目技术栈 + 服务端基于agent开发 + 后端服务组件化开发 + Kafka和zookeeper + ES和Kibana + etcd的使⽤ ### 关于Kakfa的介绍 Kafka是一个分布式发布 - 订阅消息系统和一个强大的队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点。 Kafka适合离线和在线消息消费。 Kafka消息保留在磁盘上,并在群集内复制以防止数据丢失。 Kafka构建在ZooKeeper同步服务之上。 它与Flink和Spark非常好的集成,用于实时流式数据分析。 #### Kafka中有几个基本的消息术语: Kafka将消息以topic为单位进行归纳。 将向Kafka topic发布消息的程序成为producers. 将预订topics并消费消息的程序成为consumer. Kafka以集群的方式运行,可以由一个或多个服务组成,每个服务叫做一个broker #### Kafka的优点: 可靠性 - Kafka是分布式,分区,复制和容错的。 可扩展性 - Kafka消息传递系统轻松缩放,无需停机。 耐用性 - Kafka使用分布式提交日志,这意味着消息会尽可能快地保留在磁盘上,因此它是持久的。 性能 - Kafka对于发布和订阅消息都具有高吞吐量。 即使存储了许多TB的消息,它也保持稳定的性能。 Kafka非常快,并保证零停机和零数据丢失。 ### ZooKeeper介绍 ZooKeeper是一种分布式协调服务,用于管理大型主机。在分布式环境中协调和管理服务是一个复杂的过程。ZooKeeper通过其简单的架构和API解决了这个问题。ZooKeeper允许开发人员专注于核心应用程序逻辑,而不必担心应用程序的分布式特性。 Apache ZooKeeper是由集群(节点组)使用的一种服务,用于在自身之间协调,并通过稳健的同步技术维护共享数据。ZooKeeper本身是一个分布式应用程序,为写入分布式应用程序提供服务。 ### ZooKeeper主要包含几下几个组件: Client(客户端):我们的分布式应用集群中的一个节点,从服务器访问信息。对于特定的时间间隔,每个客户端向服务器发送消息以使服务器知道客户端是活跃的。类似地,当客户端连接时,服务器发送确认码。如果连接的服务器没有响应,客户端会自动将消息重定向到另一个服务器。 Server(服务器):服务器,我们的ZooKeeper总体中的一个节点,为客户端提供所有的服务。向客户端发送确认码以告知服务器是活跃的。 Ensemble:ZooKeeper服务器组。形成ensemble所需的最小节点数为3。 Leader: 服务器节点,如果任何连接的节点失败,则执行自动恢复。Leader在服务启动时被选举。 Follower:跟随leader指令的服务器节点。 ### 关于Log Agent 主要实现的功能是: 类似于我们在linux下通过tail的方法读日志文件,将读取的内容发给Kafka 我们这里的tailf是可以动态变化的,当配置文件发生变化时,可以通知我们程序自动增加需要增加的配置文件 tailf去获取相应的日志并发给kafka producer ![agent.jpg](img/agent.jpg) ### 运行环境 该项目需Zookeeper与Kafka 可以安装在Liunx环境中使用远程连接 也可以在Windows本地安装连接使用 ### log agent开发 下载安装 ```bash go get github.com/Shopify/sarama ``` sarama v1.20之后的版本加⼊了zstd 压缩算法,需要⽤用到cgo,在Windows平台编译时会提示类似如下错误: ```bash # github.com/DataDog/zstd exec: "gcc":executable file not found in %PATH% ``` 所以在Windows平台请使⽤用v1.19版本的sarama ### 后续计划 资源监控数据采集 资源监控数据处理和存储 资源监控指标体系 资源监控告警和事件处理 资源监控事件分析和故障定位 # 更多功能尽情期待,后面会持续完善本项目…… ### 开源不易,如果觉得本项目不错亲点个Star