大数跨境
0
0

​企业级多维度立体监控体系源码剖析

​企业级多维度立体监控体系源码剖析 二进制跳动
2024-07-30
5
导读:​企业级多维度立体监控体系源码剖析

企业级多维度立体监控体系源码剖析

  • 应用层

    • 多个应用部署在容器中,每个应用都有一个客户端(Client)。

    • 客户端通过 Monitor Agent 和 Open-Falcon Agent 收集监控数据。

  • Monitor Agent 和 Open-Falcon Agent

    • 负责收集虚拟机(vm)的监控项汇总数据,并上报到服务端。

  • 服务端

    • 接收 Monitor Agent 和 Open-Falcon Agent 上报的数据。

    • 拉起服务器信息,将数据传递给 Codis 和可视化平台。

  • Codis

    • 负责接收和归集服务端传递的数据。

  • 可视化平台

    • 处理和显示监控数据,提供图形化界面供观察者和管理者使用。

    • 数据来源包括服务端和 MySQL、InfluxDB。

  • 数据库

    • MySQL:处理计算落地的相关数据。

    • InfluxDB:存储时序数据,供监控系统查询。

  • 告警通知

    • 当 Codis 收到异常数据或阈值被触发时,会发送报警通知给相关干系人。

  • 干系人

    • 包括观察者和管理者,通过可视化平台查看系统状态和监控数据。

  • 数据流程

    • 应用客户端收集监控数据(步骤1)。

    • Monitor Agent 和 Open-Falcon Agent 上报数据到服务端(步骤2)。

    • 服务端将数据传递到 Codis 和可视化平台,同时进行数据计算落地到 MySQL 和 InfluxDB(步骤3、4)。

    • Codis 负责数据接收和归集,并在必要时发送报警通知(步骤5)。

    • 可视化平台显示监控数据,供观察者和管理者使用。

  1. 启动 (main.go)

    • 启动收集端程序的入口。

  2. 解析配置 (cfg.go ParseConfig)

    • 读取和解析配置文件,配置收集端的各种参数。

  3. 启动监控 (sec.go StartMonitor)

    • 初始化监控功能,开始对系统进行监控。

  4. 初始化启动收包线程 (receiver.go)

    • 启动一个线程用于接收来自客户端或其他监控源的数据包。

  5. 初始化启动上报线程 (reporter.go)

    • 启动一个线程负责将收集到的数据上报到服务端。

  6. 启动服务器同步线程 (reporter.go)

    • 启动一个线程用于与服务器进行数据同步,确保收集到的数据能够及时传输。

  7. 启动心跳线程 (heartbeat.go)

    • 启动一个心跳线程,每分钟发送一个心跳信号,以确保收集端和服务端的连接正常。

  8. MonitorServer

    • 一个核心组件,负责监控和管理收集端的各个线程和数据流转。

数据流动

  • 数据收集

    • 收集端通过 Local 35001端口 循环监控并接收数据。

    • 数据通过 cache.go 进行接收计数和合并缓存处理。

  • 数据上报

    • 每10秒通过 reportItemData 将数据上报到 MonitorServer

  • 心跳信号

    • 每分钟通过 UdpMessageHandler 发送一个心跳信号,以确保系统正常运行。

与可视化平台和服务端的交互

  • 与可视化平台

    • 收集的数据会发送到可视化平台,进行实时展示和分析。

  • 与服务端

    • 收集端通过上报线程将数据发送到服务端,并通过心跳线程保持连接稳定。

关键流程和功能

  1. 数据采集

    • 主要通过本地端口监控和接收数据,并进行缓存处理。

  2. 数据上报

    • 通过定时上报机制,将数据传输到服务端,确保数据的实时性和准确性。

  3. 系统监控

    • 通过心跳信号和监控服务端,保证收集端和服务端的正常通信和数据传输。


  • 上报业务监控数据:

    • 首先,代码检查 itemProtocol 是否为空。

    • 如果不为空,调用 MonitorServers() 函数获取监控服务器列表。如果 MonitorServers() 返回的服务器列表为空,则使用一个默认的服务器列表(IP: 10.9.193.93, 端口: 35002)。

    • 随机选择一个服务器。

    • itemProtocol 中的数据转换为字节数组(ToBytes())。

    • 通过 UDP 将数据包发送到选择的服务器。

    • 记录发送日志。

  • 上报业务监控统计数据:

    • 代码检查 mixProtocol 是否为空。

    • 如果不为空,调用 MonitorServers() 函数获取监控服务器列表。如果 MonitorServers() 返回的服务器列表为空,则使用一个默认的服务器列表(IP: 10.9.193.93, 端口: 35002)。

    • 随机选择一个服务器。

    • mixProtocol 中的数据转换为字节数组(ToBytes())。

    • 通过 UDP 将数据包发送到选择的服务器。

    • 记录发送日志。

  • 清理缓存:

    • 代码调用 cache.RemoveItemCache(lastMinute) 清理缓存中指定的条目。


【声明】内容源于网络
0
0
二进制跳动
15 年 + 技术老兵 架构师|技术总监|科技创业技术合伙人 曾任职苏宁科技、电讯盈科、联想云 专注架构设计与技术落地
内容 739
粉丝 0
二进制跳动 15 年 + 技术老兵 架构师|技术总监|科技创业技术合伙人 曾任职苏宁科技、电讯盈科、联想云 专注架构设计与技术落地
总阅读629
粉丝0
内容739