一套日志管理系统实现
written by Alex Stocks on 2018/11/25,版权所有,无授权不得转载
0 前述
前一篇博文 一套实时监控告警系统实现 中提到 一个摆脱了手工作坊时代的可称之为近代化的互联网公司,如果想对自己的后台服务以及各个用户的客户端的运行情况了如指掌,大概也需要自己的 “听诊器”:分布式实时监控告警系统、分布式日志收集系统和分布式链路追踪系统 。
实时监控告警系统基于固定的数据抽象模式能够很快对服务端线上服务质量进行监控,而链路追踪系统则主要用于分析服务质量和各个服务之间的调用关系,日志收集系统主要用于大数据处理分析场景,为安全审计、客户端产品开发以及服务端治理质量提高以及链路追踪提供必要的支持。目前也有很多中小公司直接基于日志收集系统进行服务的监控和告警,但是由于日志收集系统一般处理的日质量比较大,几乎不可能做到实时,个人强烈反对把日志系统直接用于服务监控。
本文将详细记述愚人 2018 年 Q2 实现的一套日志收集系统以及其附属的存储和检索系统的详细工作流程,可认作是前一篇博文 一套实时监控告警系统实现 的续貂之作。
1 日志系统
互联网公司的日志数据可以区分为客户端日志和服务端日志,两种日志来源、内容形态、收集方式、处理方法均不一样,下面先给出愚人实现的系统的总体架构,然后再分章节详细介绍各个子模块的工作流程。
1.1 总体架构
日志管理系统分为日志收集、数据清洗、日志存储、数据检索和数据分析等众多子模块,囿于本人大数据系统经验不足,此日志系统不涉及与之相关的部分。
本系统考虑到公司服务端业务跨 IDC 特点,其总体架构如下:
1.2 各模块解释
总架构图中给出了日志收集的详细数据流向以及控制流程,本章对各个模块的功用进行详细地解释。
1 Log Agent
Log Agent 是服务端日志收集的源头,在每个服务节点(物理机或者虚机)都有部署,通过监听 UDS(Unix Domain Socket)被动收集各个服务的日志数据,而后根据 Service Name 发送给每个服务对应的 Log Kafka 群集。
2 Log Kafka
Log Kafka 是系统最关键的节点,从 Log Agent 和客户端 APP 接收日志数据,而后根据 Service Name(客户端相应字段称之为 BizType)写入不同的 Kafka 通道(Topic)。
3 Registry
Registry 是系统的注册中心,用于 Log Kafka 服务注册和服务发现,并传递服务端日志收集参数。
4 Kafka Connector
Kafka Connector 是系统的数据迁移节点,从 Kafka 不同通道读取日志数据 (Log Data)然后存入不同的 Elasticsearch Index。当然也会根据线上需要把数据存入 HDFS 以供大数据系统分析使用。
5 Console
Console 是系统的控制中心,用于设定客户端的日志收集方式以及服务端日志的传输通道。
6 Es Log Server
Es Log Server 是系统的数据过滤和汇聚模块,用于日志查询。
7 Log View
Log View 是日志数据的展示模块,根据用户设定的参数向 Es Log Server 发出日志查询请求,并展示查询结果。</