跳到主要内容
版本:1.9.3

接口

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 上报数据​

Agent 向 Server 端发送报告数据,包括: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返回值数据类型的类名无必须,可为空