跳到主要内容
版本:Next

接口

Agent 注册

Agent 启动时,向 Server 端注册的接口

  • 请求

    Authorization: Token <custom-token>
  • Body 参数样例

    Authorization: Token <custom-token>
  • Body 参数说明

    参数名类型描述默认值是否必须
    namestringAgent 名字,规则:osName + \"-\" + hostname + \"-\" + 探针版本号 + \"-\" + 探针唯一ID必须
    languagestringAgent 对应的语言,可选值:(JAVA、PYTHON、PHP、GO)JAVA必须
    versionstringAgent 版本,Agent的版本号,如:v1.0.5必须
    projectNamestring配置 Agent 时指定的项目名称,各Agent测自己实现及添加对应的配置方法Demo Project非必需
    hostnamestringAgent 所在系统的主机名必须
    networkstring所在主机的网络情况(IP地址等)非必需
    containerNamestringAgent所在的容器名称(Java中的Tomcat、Python中的uwsgi、PHP中的php-fpm或Tomcat等)
    containerVersionstringAgent所在的容器版本非必须
    serverAddrstringAgent所在服务的访问地址,ip地址或域名必须
    serverPortstringAgent所在服务的端口必须
    serverPathstring服务所在的路径非必需
    serverEnvstring服务器中的环境变量信息,需要Base64编码必须
    pidstring当前服务对应的进程 ID非必需
  • 响应体样例

    {
    "status": 201,
    "msg": "success",
    "data":{
    "id": "1"
    }
    }
  • 响应体字段说明

    字段名类型描述
    statusint返回码
    msgstring错误信息
    data[]obj数据
  • obj 字段说明

    参数名类型描述
    idint注册之后的Agent ID

Agent 获取 HOOK 规则

Engine 运行时,从 OpenAPI 服务获取规则

  • 请求

    GET /api/v1/profiles?language=<language>
  • Query

    参数名类型描述默认值
    languagestringAgent 对应的语言,可选值:(JAVA、PYTHON、PHP、GO)JAVA
  • 响应体样例

    {
    "status": 201,
    "msg": "success",
    "data": [
    {
    "type": 1,
    "enable": 1,
    "value": "String",
    "details": [
    {
    "source": "P1",
    "track": "",
    "target": "O",
    "value": "java.lang.String.<init>(java.lang.String)",
    "inherit": "false"
    },
    {
    "source": "P1",
    "track": "",
    "target": "O",
    "value": "java.lang.String.<init>(java.lang.StringBuffer)",
    "inherit": "false"
    }
    ]
    }
    ]
    }
  • 响应体字段 - data说明

    字段名类型描述
    typeinthook规则类型,1 - 传播方法规则、2 - 不可信数据获取方法规则、3- 过滤方法规则、4 - 危险方法规则
    enableint规则是否启用,1 - 启用、0 - 禁用
    valuestring规则类型描述(如:Propagator:String、Sink:CMD-Injection等)
    details[]detail规则详情

Server 端启停 Agent

Agent 运行时,每秒向 Server 端查询一次,根据 Server 端的控制命令 启动暂停 Agent

  • 请求

    GET /api/v1/engine/startstop?agentName=<agentName>
  • Query

    参数名类型描述默认值是否必须
    agentNamestringAgent 名字,规则:osName + \"-\" + hostname + \"-\" + 探针版本号 + \"-\" + 探针唯一ID

Agent 上报数据

AgentServer 端发送报告数据,包括:Agent心跳依赖组件方法调用数据API 接口数据错误日志

  • 请求

    POST /api/v1/report/upload
  • Body 参数样例

    {
    "detail": {
    "disk": "{}",
    "memory": "{\"total\":\"2GB\",\"rate\":0,\"use\":\"80.605MB\"}",
    "agentId": 5848,
    "cpu": "{\"rate\":32}",
    "methodQueue": 0,
    "replayQueue": 0,
    "reqCount": 0,
    "reportQueue": 49
    },
    "type": 1
    }
  • Body 参数说明

    参数名类型描述默认值是否必须
    typeint数据类型,可选择:1 - Agent心跳数据、17 - 依赖组件数据、36 - 方法调用数据必须
    detail{}detail数据详情,随type不同,格式不同,将分别详细解释必须

Agent 心跳数据格式

  • detail 参数样例

    {
    "disk": "{}",
    "memory": "{\"total\":\"2GB\",\"rate\":0,\"use\":\"80.605MB\"}",
    "agentId": 5848,
    "cpu": "{\"rate\":32}",
    "methodQueue": 0,
    "replayQueue": 0,
    "reqCount": 0,
    "reportQueue": 49
    }
  • detail 参数说明

    参数名类型描述默认值是否必须
    diskstring安装Agent服务所在服务器的磁盘使用情况必须
    memorystring安装Agent服务所在服务器的内存使用情况必须
    agentIdintAgent ID必须
    cpustring安装Agent服务所在服务器的CPU使用情况必须
    methodQueueintAgent端待发送的方法调用图数量必须
    replayQueueintAgent端待重放的请求数量必须
    reqCountint安装探针的服务,接收到的API请求次数必须
    reportQueueintAgent端待发送的报告数量必须

依赖组件数据格式

  • detail 参数样例

    {
    "packagePath": "/Users/xxx/spring-boot/2.3.2.RELEASE/spring-boot-2.3.2.RELEASE.jar",
    "agentId": 5848,
    "packageSignature": "efd5812bc736735e71447a51701becd14c2bede0",
    "packageName": "spring-boot-2.3.2.RELEASE.jar",
    "packageAlgorithm": "SHA-1"
    }
  • detail 参数说明

    参数名类型描述默认值是否必须
    agentIdintAgent ID必须
    packagePathstring组件所在的物理路径必须
    packageNamestring组件的包名必须
    packageSignaturestring组件的方法签名必须
    packageAlgorithmstring组件的签名计算方法,统一使用 SHA-1必须

方法调用数据

  • detail 参数样例

    {
    "agentId": 5853,
    "uri": "/",
    "url": "http://localhost:8080/",
    "protocol": "HTTP/1.1",
    "contextPath": "",
    "pool": [
    {
    "invokeId": 1024,
    "interfaces": [],
    "targetHash": [1824828808],
    "targetValues": "{q=0.9}",
    "signature": "java.util.HashMap.put",
    "originClassName": "java.util.HashMap",
    "sourceValues": "q 0.9 ",
    "methodName": "put",
    "className": "java.util.Map",
    "source": false,
    "callerLineNumber": 252,
    "callerClass": "org.springframework.util.MimeTypeUtils",
    "args": "",
    "callerMethod": "parseMimeTypeInternal",
    "sourceHash": [
    1197294456,
    365502861
    ],
    "retClassName": ""
    }
    ],
    "language": "JAVA",
    "clientIp": "127.0.0.1",
    "secure": false,
    "replayRequest": false,
    "method": "GET",
    "reqHeader": "aG9zdDpsb2NhbGhvc3Q6ODA4MApj",
    "reqBody": "",
    "resBody": "<!DOCTYPE html>\n<html la",
    "scheme": "http",
    "resHeader": "SFRUUC8xLjEgMjAw"
    }
  • detail 参数说明

    参数名类型描述默认值是否必须
    agentIdintAgent ID必须
    protocolstringHTTP 协议必须,RPC请求中自行处理
    schemestringHTTP 协议必须,RPC请求中自行处理
    secureboolean是否为HTTPS必须,RPC请求中为空
    methodstringHTTP请求方法名称,GET、POST 等必须,RPC 请求中非必需
    uristringHTTP请求的uri必须
    urlstringHTTP请求的url必须
    queryStringstringHTTP请求对应的 URL 查询参数必须,可为空
    contextPathstringHTTP 请求的上下文路径必须,可为空
    reqHeaderstring请求头(HTTP/Dubbo RPC/gRPC等)必须
    reqBodystring请求体(HTTP/Dubbo RPC/gRPC等)必须,可为空
    resHeaderstring响应头(HTTP/Dubbo RPC/gRPC等)必须,可为空
    resBodystring响应体(HTTP/Dubbo RPC/gRPC等)必须,可为空
    clientIpstring客户端IP必须
    languagestringAgent 对应的语言必须
    replayRequestboolean是否为重放请求必须
    pool[]pool不可信参数的方法调用池数据必须,可为空
  • pool 参数说明

    参数名类型描述默认值是否必须
    invokeIdint方法调用ID,单次HTTP请求中,确保唯一性必须
    interfacesarray[string]hook点处命中的类对应的接口及父类必须,可为空
    targetHasharray[int]不可信数据经过该方法后,转换为的数据对应的hash值(确保唯一)必须,可为空
    targetValuesstring不可信数据经过该方法后,转换为的数据值必须,可为空
    signaturestring方法签名必须
    originClassNamestringhook点处命中的类名称必须
    vsourceValuesstring不可信数据进入该方法时,对应的数据值必须
    methodNamestringhook点处命中的方法名称必须
    classNamestringhook点处命中规则的类/接口名称必须
    sourceboolean是否为不可信数据来源方法必须
    callerLineNumberinthook方法的调用行必须
    callerClassstringhook方法对应的调用方法所在的类名称必须
    argsstringhook方法对应的方法参数值必须,可为空
    callerMethodstringhook方法的调用方法必须
    sourceHasharray[int]不可信数据进入该方法时,数据对应的hash值(确保唯一)必须
    retClassNamestring返回值数据类型的类名必须,可为空