当前位置: 首页 > 工具软件 > Weave Scope > 使用案例 >

Weave scope 源码解析(1)

袁弘化
2023-12-01

    小编之前没用过go,源码用JetBrains GoLand IDE 调试了三天,还没跑起来,go的编译真是复杂。只能硬着头皮直接看代码了。

    github:https://github.com/weaveworks/scope

    安装就不说了,很多博客都有提到,直接说下我对代码的理解。

   1、 在prog/main.go 中,socpe 其实启动了两个应用,一个是app.go,另外一个是probe.go. 分别对应了服务端程序app, 客户端程序探针probe。

    2、先说探针probe,probe 主要负责采集监控数据,生成report, 并将report 发送给app。

    3、weave scope 能够监控主机,容器,网络,镜像,dns,k8s 等等,这些数据采集就是由probe 来完成的,可以参考 probe/hosts,probe/process,probe/docker 等。每个包都会包含controls.go,reporter.go,tagger.go.   controls 对外提供web服务,比如容器启动,停止,主机shell 连接等,功能非常强大。reporter.go 负责生成各自的报告和拓扑关系,report是socpe的核心数据结构。tagger.go 这个没怎么研究。

    4、probe 需要将生成的数据发送给服务端app。此功能通过probe/appclient 包来完成。这个包中AppClient是应用程序的客户端,处理报表发布publish,控件control和管道pipe。 首先是将report  publish 到目标服务接口上,pipe 管道 主要将buffer 中的内容拷贝到websocket 或者将websocket 中的内容拷贝到buffer 中.

   5、服务端代码在包app 下面。

        router.go 用于接收请求之后的路由处理,例如探针publish report 会请求地址“/api/report”, 然后进行相应的处理

       collect.go 用于收集探针发送来的报告,并进行相关的合成。

        拓扑图生成这块需要研究一下,拓扑图也是根据report 来生成。

   6、探针每3秒(probe.publish.interval)发送一次报告。

 类似资料: