Golang作为21世纪的C语言,凭借其简单和高效,如今已经被越来越多的人当成主力编程语言,并发是Golang最大的优势。本项目是实现了一个可在生产环境使用的高性能的日志监控系统。

Golang是一门简单高效的编程语言,我在编写学习的过程中也被其特性所吸引,日志监控系统是生产环境中必备的功能系统,它的作用可以说仅次于核心系统 而Golang的协程实现可以很好的帮我们完成这一核心功能,通过模拟读取nginx输出的日志文件,使用log_proccess.go进行实时读取解析写入到influxdb存储, 再由grafana进行实时展现。mock_data.go是我用于模拟日志输出的一个应用程序。

Golang的并发实现可以通过goroutine执行,而多个goroutine间的数据同步与通信则是channel,且多个channel可以选择数据的读取与写入。 这里需要认真理解下并发与并行。并发:指同一时刻,系统通过调度,来回切换交替的运行多个任务,“看起来”是同时进行;并行:指同一时刻, 两个任务“真正的”同时进行;

以下是我们的开发流程图。

日志分析系统实战

1、系统架构设计

2、读取模块的实现

——打开文件

——从文件末尾开始逐行读取

——写入Read Channel

3、解析模块的实现

——从Read Channel中读取每行日志数据

——正则提取所需的监控数据(path、status、method等)

——写入Write Channel

4、写入模块的实现

——初始化influxdb client

——从Write Channel中读取监控数据

——构造数据并写入influxdb

5、绘制监控图

——用grafana

6、监控模块的实现

——总处理日志行数

——系统吞出量

——read channel长度

——write channel长度

——运行总时间

——错误数

本项目以上传github,点击阅读原文即可跳转

Influxdb简介:

Influxdb是一个开源的时序性的数据库,使用Go语言编写,被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。有以下特性:

——部署简单,无外部依赖

——内置http支持,使用http读写

——类sql的灵活查询(max,min,sum等)

以下是项目运行的相关工作图

项目做,做了日志的模拟输出,然后实时写入到influxdb,grafana则实时的进行数据展示。