Go日志实时收集系统

Go日志实时收集系统

架构图设计:

在这里插入图片描述

背景

数据库希望结合深度学习,将数据进行训练,然后给用户提供数据优化建议。数据库本身的日志已经很多了,在业务更加复杂,模块更多的时候,日志的收集已经易读性显得更加的重要。这种情况我们应该将各个模块和业务线的日志进行实时的收集,然后提供展示和搜索。

问题

1.日志量可能会非常的大

2.日志需要实时收集,但可以是弱一致性,保证最终一致性

3.可以灵活的不停机添加或删除模块和业务线的日志

4.日志需要设计好结构体,方便映射和存储到es,例如需要包括模块名,日志消息内容,日志级别等

架构分析

配置文件

首先架构用到了kafka,etcd,es,influxDB等组件,这些组件的配置可以写在一个ini配置文件里,通过go-ini映射获取。

日志收集项配置

1.我们将需要收集哪些日志文件的路径,kafka-topic以json的形式注册在etcd

2.同时我们起一个goroutine放置一个etcd-watcher监控这个日志配置项,如果日志配置项发生改变(新增,删除),通知系统

tail

1.我们使用tail包进行日志文件的监控,每当日志文件有新的日志追加,就可以通过tail读取到,然后发送到msg channel1,进行一个异步的处理

2.每个需要收集的日志文件,都会起一个对应的goroutine去监控

3.当收到etcd-watcher的通知,日志收集项配置发生变化时候,根据具体的变化,对应的去停止或启动tail goroutine

kafka

1.kafka去msg channel2读取tail生产的消息

2.kafka会持久化收到的消息

3.kafka将消息发送到msg channel2给es消费

es

1.消费kafka发送到msg channel2的消息

2.将受到的日志存储到es

kibana

可视化的去展示和搜索各个模块的日志消息

gopsutil

1.作为一个后台展示的系统,可以添加一个系统信息监控的模块。gopsutil是psutil的go版本,可以方便的获取系统的cpu,内存,磁盘,网络等信息。

2.获取到系统信息后,发送到influxDB

influxDB

influxDB作为时序数据库非常适合作为监控数据的存储

granfana

granfana可以选择influxDB作为Data Source,使用可视化的图标,去方便的展示系统信息

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值