日志系统在服务器编程开发中是非常重要的一个组成部分。而今天我们就通过案例分析来了解一下,关于日志系统的开发都有哪些组成部分。
1、日志接入
日志接入目前分为两种方式,SDK接入和调用HttpWeb服务接入
SDK接入:日志系统提供了不同语言的SDK,SDK会自动将日志的内容按照统一的协议格式封装成终的消息体,并后终通过TCP的方式发送到日志转发层(rsyslog-hub)
HttpWeb服务接入:有些无法使用SDk接入日志的业务,可以通过Http请求直接发送到日志系统部署的Web服务,统一由webprotal转发到日志缓冲层的kafka集群
2、日志采集
现在有rsyslog-hub和webportal做为日志传输系统,rsyslog是一个快速处理收集系统日志的程序,提供了高性能、安全功能和模块化设计。之前系统演进过程中使用过直接在宿主机上部署flume的方式,由于flume本身是java开发的,会比较占用机器资源而统一升级为使用rsyslog服务。为了防止本地部署与kafka客户端连接数过多,本机上的rsyslog接收到数据后,不做过多的处理就直接将数据转发到rsyslog-hub集群,通过LVS做负载均衡,后端的rsyslog-hub会通过解析日志的内容,提取出需要发往后端的kafkatopic。
3、日志缓冲
Kafka是一个高性能、高可用、易扩展的分布式日志系统,可以将整个数据处理流程解耦,将kafka集群作为日志平台的缓冲层,可以为后面的分布式日志消费服务提供异步解耦、削峰填谷的能力,也同时具备了海量数据堆积、高吞吐读写的特性。
4、日志切分
日志分析是重中之重,为了能够更加快速、简单、精确地处理数据。日志平台使用sparkstreaming流计算框架消费写入kafka的业务日志,Yarn作为计算资源分配管理的容器,会跟不同业务的日志量级,分配不同的资源处理不同日志模型。
整个spark任务正式运行起来后,单个批次的任务会将拉取的到所有的日志分别异步的写入到ES集群。业务接入之前可以在管理台对不同的日志模型设置任意的过滤匹配的告警规则,spark任务每个excutor会在本地内存里保存一份这样的规则,在规则设定的时间内,计数达到告警规则所配置的阈值后,通过指定的渠道给指定用户发送告警,以便及时发现问题。当流量突然增加,es会有bulkrequestrejected的日志会重新写入kakfa,等待补偿。
5、日志存储
-原先所有的日志都会写到SSD盘的ES集群,logIndex直接对应ES里面的索引结构,随着业务增长,为了解决Es磁盘使用率单机高达到70%~80%的问题,现有系统采用Hbase存储原始日志数据和ElasticSearch索引内容相结合的方式,完成存储和索引。
Index按天的维度创建,提前创建index会根据历史数据量,决定创建明日index对应的shard数量,也防止集中创建导致数据无法写入。现在日志系统只存近7天的业务日志,如果配置更久的保存时间的,会存到归档日志中。
对于存储来说,Hbase、Es都是分布式系统,可以做到线性扩展。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!