ITPub博客

首页 > 数据库 > 数据库开发技术 > ?企业级多维度立体监控体系源码剖析

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

原创 数据库开发技术 作者:greencoatman 时间:2024-07-30 13:01:56 0 删除 编辑

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

  • 应用层:

    • 多个应用部署在容器中,每个应用都有一个客户端(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):

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

  • 解析配置 (cfg.go ParseConfig):

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

  • 启动监控 (sec.go StartMonitor):

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

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

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

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

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

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

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

  • 启动心跳线程 (heartbeat.go):

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

  • MonitorServer:

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

    数据流动

    • 数据收集:

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

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

    • 数据上报:

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

    • 心跳信号:

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

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

    • 与可视化平台:

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

    • 与服务端:

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

    关键流程和功能

    1. 数据采集:

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

  • 数据上报:

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

  • 系统监控:

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


    • 上报业务监控数据:

      • 首先,代码检查 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) 清理缓存中指定的条目。


    原文作者:二进制跳动;如有侵权,请联系管理员删除。

    下一篇: Docker容器技术
    请登录后发表评论 登录
    全部评论

    注册时间:2022-07-08

    • 博文量
      312
    • 访问量
      141104