pinpoint Agent-TCP连接分析
来源:互联网 发布:电脑装mac os 编辑:程序博客网 时间:2024/06/01 18:07
核心的代码入口都在DefaultAgent的构造方法中,所以从此方法入口。
主要是createTcpDataSender方法,在此方法中首先创建PinpointClientFactory。
而在createPinpointClientFactory方法中,就是创建netty的实现,注册监听的事件。
而在创建PinpointClientFactory的具体代码中,就是创建一个标准的netty实例,增加Handler
而在增加的Handler中核心的代码就是创建DefaultPinpointClientHandler
建立连接时,触发channelConnected事件。在channelConnected方法中连接collector写入数据。其中有一些定时任务,比如执行ping的等。在此方法中。创建handshakeJob和collector握手
Collector接收到数据保存AgentLifeCycle和AgentEvent两个表的数据,(web查询时(拓扑结构),会从AgentLifeCycle中过滤所有状态为Running的数据)。
TCP传输数据还有一部分是,这部分代码有意思,就是线程之间的调用,并非start,首先构建agentInfoSender,让后启动线程,调用Start(在defaultAgent的start方法中)
在agentInfoSender的start中有一个单线程定时执行sumbit函数。然后包装AgentInfoSendRunnable,最终调用的是AgentInfoSendRunnable的run方法(只是调用,并没有start线程),最终调用dataSender的request方法。
TCPDatasender中的executor也是比较有意思的一个线程。其初始化时在创建tcpDataSender时,而AgentInfoSendRunnable线程中的exector方法只是简单的把数据加到队列中。
具体实现可以看一下。
首先是创建一个,然后注册监听的事件。
其创建的代码如下,核心的this.createExecuteThread(executorName)就是此方法。此方法创建一个线程,并且启动线程。而此方法的实现就是调用监听事件的方法。而最终调用的是TCPDataSender的sendPacket方法。而参数对象就是AgentInfoSendRunnable 传递的两个参数构造的RequestMarker对象,然后请求collector。
Pinpoint
TCP 握手,第一次握手管理Agent的生命周期,写入AgentLifeCycle表和AgentEvent表。
request请求发送agentInfo信息 application_REQUEST包 写入AgentInfo表ApplicationIndex表
当调用具体插件类,进行二进制转换时,当缓存时会request到collector中。
- pinpoint Agent-TCP连接分析
- pinpoint Agent-启动加载插件分析
- pinpoint的Collector-TCP源码分析
- pinpoint
- pinpoint
- pinpoint
- 【经验记录】pinpoint-web显示不了agent的信息
- Pinpoint中agent各个端口数据发送的过程
- TCP连接状态分析
- tcp连接失败分析
- TCP连接分析
- pinpoint源码分析--第一节 安装与说明
- 抓包分析tcp连接
- 抓包分析tcp连接
- TCP连接异常终止分析
- agent TCP read
- 【zabbix-agent】--tcp
- Pinpoint中agent各个端口数据发送的过程, 持续更新
- Linux版本升级相关文章
- 使用IDA逆向Android的.so动态库文件
- 使用webpack小实例
- 文章标题
- 【Thinkphp】redirect重定向问题
- pinpoint Agent-TCP连接分析
- NSSA区域处于边界引入默认路由该怎么处理呢?
- Sql ,sqlserver根据一个字段分组查询
- openstack 管理二十二 - cinder 连接多个存储 backend
- Linux内核IP Queue机制的分析(二)——用户态处理并回传数据包
- 博览网C++课程 第二周
- Linux中的权限发布啦!
- python遇到UnicodeDecodeError错误的解决办法
- 自定义控件其实很简单 三