智能日志管理平台

  • 工作流 API

    最近更新时间:2018-07-13 10:03:48

    API 接收地址

    https://nb-pipeline.qiniuapi.com  
    

    API 返回内容

    响应报文

    • 如果请求成功,返回HTTP状态码200:
    HTTP/1.1 200 OK
    
    • 如果请求失败,返回包含如下内容的JSON字符串(已格式化,便于阅读):
    {
        "error":   "<errMsg    string>"
    }
    
    • 如果请求包含数据获取,则返回相应数据的JSON字符串;

    创建消息队列(数据源)

    请求语法

    POST /v2/repos/<RepoName>
    Content-Type: application/json
    Authorization: Pandora <auth>
    {
        "region": <Region>,
        "schema": [
          {
            "key": <Key>,
            "valtype": <ValueType>,
            "elemtype": <ElemType>,
            "required": <Required>,
            "schema": [
                ...
            ]
          },
          ...
        ],
        "options":{
          "withIP":<ipkeyname>
        }
    }
    

    请求内容

    参数 类型 必填 说明
    RepoName string 消息队列名称
    命名规则: ^[a-zA-Z_][a-zA-Z0-9_]{0,127}$
    region string 计算与存储所使用的物理资源所在区域
    目前仅支持“nb”(华东区域)
    schema array 数据的字段信息
    由‘字段名称’、‘字段类型’、‘数组类型’、‘是否必填’组成
    schema.key string 字段名称
    命名规则: ^[a-zA-Z_][a-zA-Z0-9_]{0,127}$
    schema.valtype string 字段类型
    目前仅支持:
    boolean:布尔类型
    long:整型
    date:RFC3339日期格式
    float:64位精度浮点型
    string:字符串
    array:数组
    map:嵌套类型,可嵌套,最多5层,类似于json object
    jsonstring:符合json格式的字符串
    schema.elemtype string 数组类型
    schema.valtype:"array"时必填
    目前仅支持longfloatstring
    schema.required bool 是否必填
    用户在传输数据时key字段是否必填
    options map 表达一些repo的可选项
    options.withIP string 在写入的数据中加入用户的来源IP信息,并命名为字段,加入到schema中,类型为string;若命名为空则不加入。

    示例

    curl -X POST https://nb-pipeline.qiniuapi.com/v2/repos/Test_Repo \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y='  \
    -d '{
        "region": "nb", 
        "schema": [
            {
                "key": "userName",
                "valtype": "string",
                "required": true
            },
            {
                "key": "age",
                "valtype": "float",
                "required": true
            },
            {
                "key": "addresses",
                "valtype": "array",
                "elemtype": "long",
                "required": true
            },
            {
                "key": "profile",
                "valtype": "map",
                "required": true,
                "schema": [
                  {
                      "key": "position",
                      "valtype": "string",
                      "required": true
                  },
                  {
                      "key": "salary",
                      "valtype": "float",
                      "required": true
                  },
                  {
                      "key": "education",
                      "valtype": "array",
                      "elemtype": "string",
                      "required": false
                  }
                ]
            }
        ]
    }'
    

    查看所有消息队列

    请求语法

    GET /v2/repos
    Authorization: Pandora <auth>
    

    响应报文

    Content-Type: application/json
    {
        "repos": [
          {
            "name": <RepoName>,
            "region": <Region>,
            "derivedFrom": <TransformName>
          },
          ...
        ]
    }
    

    响应内容

    参数 类型 必填 说明
    derivedFrom string - 表示这个消息队列是由哪个transform生成的
    如果此项为空,说明该消息队列是由用户自行创建的

    根据名称查询消息队列

    请求语法

    GET /v2/repos/<RepoName>
    Authorization: Pandora <auth>
    

    响应报文

    Content-Type: application/json
    {
        "region": <Region>,
        "derivedFrom": <TransformName>,
        "schema": [
          {
            "key": <Key>,
            "valtype": <ValueType>,
            "elemtype": <ElemType>,
            "required": <Required>,
            "schema": [
                ...
            ]
          },
          ...
        ]
    }
    

    根据名称删除消息队列

    请求语法

    DELETE /v2/repos/<RepoName>
    Authorization: Pandora <auth>
    

    根据名称更新消息队列

    请求语法

    PUT /v2/repos/<RepoName>
    Content-Type: application/json
    Authorization: Pandora <auth>
    
    {
        "schema": [
          {
            "key": <Key>,
            "valtype": <ValueType>,
            "elemtype": <ElemType>,
            "required": <Required>,
            "schema": [
                ...
            ]
          },
          ...
        ]
    }
    

    !> 注意: 更新字段信息时,如果需要保留已有的字段信息,也需要填写上去,这是一次全量更新。

    创建流式计算任务

    请求语法

    POST /v2/repos/<RepoName>/transforms/<TransformName>/to/<DestinationRepoName>
    Content-Type: application/json
    Authorization: Pandora <auth>
    {
      "plugin": {
        "name": <PluginName>,
        "output": [
          {
            "name": <FieldName1>,
            "type": <FieldType>
          },
          {
            "name": <FieldName2>
          },
          ......
        ],
      },
      "mode": <Mode>,
      "code": <Code>,
      "interval": <Interval>,
      "container": {
           "type": <ContainerType>,
           "count": <ContainerCount>
      },
      "whence": <TransformWhence>,
      "destrepo": [
          {
            "key": <Key>,
            "valtype": <ValueType>,
            "elemtype": <ElemType>,
            "required": <Required>,
            "schema": [
                ...
            ]
          },
          ...
      ]
    
    }
    

    请求内容

    参数 类型 必填 说明
    RepoName string 指定一个消息队列的名称
    TransformName string 计算任务名称
    用来标识该消息队列的唯一性
    命名规则: ^[a-zA-Z_][a-zA-Z0-9_]{0,127}$
    DestinationRepoName string 计算结果输出消息队列
    如果该消息队列不存在
    将自动创建一个
    plugin json 自定义计算
    name string 自定义计算名称
    output json 输出数组
    即这个plugin计算完成后,输出的数据结果的结构和类型
    也可以理解为一张表,包含字段名称和字段类型
    output.name string 输出字段名称
    命名规则: ^[a-zA-Z_][a-zA-Z0-9_]{0,127}$
    output.type string 输出字段类型
    支持stringlongfloat三种
    时间类型使用long类型
    默认为string类型
    mode string 该计算任务使用的语言类型
    目前仅支持sql
    code string sql语句代码
    interval string 计算任务的运行时间间隔
    目前支持5s10s20s30s
    1m5m10m的粒度
    如果不指定,系统默认使用1m
    container map 计算资源的数量及类型
    type string 目前支持1U2G1U4G2U4G4U8G4U16G8U16G
    分别代表
    1核(CPU)2G(内存)1核(CPU)4G(内存)2核(CPU)4G(内存)4核(CPU)8G(内存)4核(CPU)16G(内存)8核(CPU)16G(内存)
    count int 指资源type的数量,最小为1,没有上限
    whence string 计算数据的起始位置, 目前支持oldest、newest, 分别表示从指定仓库的最早、最新数据开始计算, 默认值为newest

    !> 注意:modecode是基础的数据计算方式,自定义计算(plugin)是更为高级的数据计算方式,要注意mode/code和自定义计算两种计算方式可以共存,但不可以一种都不指定。当自定义计算和mode/code共存时,系统优先执行自定义计算,后执行mode/code。

    示例

    curl -X POST https://nb-pipeline.qiniuapi.com/v2/repos/test_repo/transforms/transform_job/to/compute_repo \
         -H 'Content-Type: application/json' \
         -H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \
         -d {
              "mode": "sql",
              "code": "select count(*) from test_repo",
              "interval": "1m",
              "container": {
                   "type": "M16C4",
                   "count": 5
                  }
            }
    

    上传 jar 包(自定义计算使用)

    请求语法

    POST /v2/plugins/<PluginName>
    Content-Type: application/java-archive
    Content-MD5: <ContentMD5>
    Authorization: Pandora <auth>
    

    请求内容

    参数 类型 必填 说明
    PluginName string plugin名称
    命名规则: ^[a-zA-Z][a-zA-Z0-9_\\.]{0,127}[a-zA-Z0-9_]$
    ContentMD5 string jar包的MD5码

    Plugin说明:

    • Jar包的命名必须和包含代码方法的类名一致
    • 上传的Plugin Jar包最大为100MB。
    • Content-MD5头部是可选的。如果上传plugin的时候带上该头部服务器会校验上传数据的校验和,如果两者不一致服务器将拒绝上传。如果不带该头部,服务器不做任何校验和的检查。
    • 是先计算plugin内容的MD5,再对MD5做一次base64编码转化为字符串。例如qiniu这个字符串的Content-MD5是gLL29S04bTCxYd2kCqsEIQ==而不是7b9d6b4d89f6825a196d4cc50fdbedc5
    • PluginName必须与用户所编写的Parser类的全限定名保持一致,否则transform执行plugin会失败。 例如NginxLogParser位于com.qiniu包,PluginName须写为com.qiniu.NginxLogParser。

    示例

    curl -X POST https://nb-pipeline.qiniuapi.com/v2/plugins/ComputeSumDataParser \
    -H 'Content-Type: application/java-archive'  \
    -H 'Content-MD5: 900150983cd24fb0d6963f7d28e17f72'  \
    -H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \
    -T ./TestPlugin.jar \  
    

    查看所有流式计算任务

    请求语法

    GET /v2/repos/<RepoName>/transforms
    Authorization: Pandora <auth>
    

    查看指定流式计算任务的信息

    请求语法

    GET /v2/repos/<RepoName>/transforms/<TransformName>
    Authorization: Pandora <auth>
    

    响应报文

    200 OK
    Transform-Type: application/<TransformType>
    {
        "name": "<TransformName1>",
        "to": "<DestRepo1>",
        "spec": {
          "plugin": {
            "name": <PluginName>,
            "output": [
              {
                "name": <FieldName1>,
                "type": <FieldType>
              },
              {
                "name": <FieldName2>
              },
              ...
            ],
          },
          "mode": <Mode>,
          "code": <Code>,
          "interval": <Interval>
        }
    }
    

    修改流式计算任务

    请求语法

    PUT /v2/repos/<RepoName>/transforms/<TransformName>
    Content-Type: application/json
    Authorization: Pandora <auth>
    {
        "plugin": {
          "name": <PluginName>,
          "output": [
            {
              "name": <FieldName1>,
              "type": <FieldType>
            },
            {
              "name": <FieldName2>
            },
            ...
          ],
        },
        "code": <Code>,
        "interval": <Interval>,
        "container": {
          "type":  <ContainerType>,
          "count": <ContainerCount>
        }
    }
    

    注意:

    1.更新计算任务,可以同时更新pluginsql代码运行时间间隔配额,也可以只更新其中一种,但不能一种都不指定。

    2.在更新sqlplugin的输出字段时,只能添加新的字段,不能删除和更改已经存在的字段。

    删除流式计算任务

    请求语法

    DELETE /v2/repos/<RepoName>/transforms/<TransformName>
    Authorization: Pandora <auth>
    

    流式导出数据至日志检索服务

    请求语法

    POST /v2/repos/<RepoName>/exports/<ExportName>
    Content-Type: application/json
    Authorization: Pandora <auth>
    {
      "type": <logdb>,
      "whence": <ExportWhence>,
      "spec": {
            "destRepoName": <DestRepoName>,
            "omitInvalid": <OmitInvalid>,
            "omitEmpty": <OmitEmpty>,
            "doc": {
                "toRepoSchema1": <#fromRepoSchema1>,
                "toRepoSchema2": {
                    "toRepoSchema3": <#fromRepoSchema3>,
                }
                ......
            }
    }
    

    请求内容

    参数 类型 必填 说明
    destRepoName string 日志仓库名称
    omitInvalid bool 是否忽略无效数据,默认值为false
    omitEmpty bool 当某条数据的字段取值全部为null时是否忽略该条数据,默认值为false,设置为true时可避免导出没有意义的数据
    doc map 字段关系说明
    fromRepoSchema表示源消息队列字段名称
    toRepoSchema表示目标日志仓库字段名称

    消息队列中,字段的类型与日志检索服务中的字段类型需要作出如下对应:

    消息队列类型:string 对应 日志检索服务:string / date

    消息队列类型:long 对应 日志检索服务:long / date

    消息队列类型:float 对应 日志检索服务:float

    消息队列类型:array[string] 对应 日志检索服务:string

    消息队列类型:array[long] 对应 日志检索服务:long

    消息队列类型:array[float] 对应 日志检索服务:float

    消息队列类型:map 对应 日志检索服务:object

    消息队列类型:date 对应 日志检索服务:date

    消息队列类型:jsonstring 对应 日志检索服务:object

    !> 注意: 对于消息队列的jsonstring类型,导出至日志检索服务的object类型时,会将内嵌字段名称中所有圆点(.)替换为下划线(由于日志检索服务的object类型的内嵌字段名称不支持圆点(.))。例如,消息队列中某一个字段f1的类型为jsonstring,取值为{"education.level": "university"},最终导出至日志检索服务为{"education_level": "university"},内嵌字段education.level中的圆点(,)被替换为下划线(_)。

    示例

    curl -X POST https://nb-pipeline.qiniuapi.com/v2/repos/test_Repo/exports/export_job2 \
    -H 'Content-Type: application/json' \
    -H 'Authorization: Pandora 2J1e7iG13J66GA8vWBzZdF-UR_d1MF-kacOdUUS4:NTi3wH_WlGxYOnXsvgUrO4XMD6Y=' \
    -d '{
      "type": "logdb",
      "spec": {
          "destRepoName": "logdb_testRepo", 
          "doc":{
                "user":"userName",
                "profile":{
                    "age":"age"
                }
          }
        }
    }'
    

    更新流式导出任务

    请求语法

    PUT /v2/repos/<RepoName>/exports/<ExportName>
    Content-Type: application/json
    Authorization: Pandora <auth>
    {
        "spec": <Spec>
    }
    

    !> 注意:仅支持对 spec 的修改(不允许修改typewhence

    查看所有流式导出任务

    请求语法

    GET /v2/repos/<RepoName>/exports
    Authorization: Pandora <auth>
    

    响应报文

    Content-Type: application/json
    {
        "name": <ExportName>,
        "type": <ExportSchema>,
        "spec": <Spec>,
        "whence": <ExportWhence>
    }
    

    根据名称查看流式导出任务

    请求语法

    GET /v2/repos/<RepoName>/exports/<ExportName>
    Authorization: Pandora <auth>
    

    根据名称删除流式导出任务

    请求语法

    DELETE /v2/repos/<RepoName>/exports/<ExportName>
    Authorization: Pandora <auth>
    

    错误代码及相关说明

    错误码 错误描述
    500 服务器内部错误
    411 E18003: 缺少内容长度
    400 E18004: 无效的内容长度
    413 E18005: 请求实体过大
    400 E18006: 请求实体为空
    400 E18007: 请求实体格式非法
    400 E18008: 字段长度超过限制
    409 E18101: 仓库已经存在
    404 E18102: 仓库不存在
    400 E18103: 无效的仓库名称
    400 E18104: 无效的日期格式
    400 E18105: 仓库Schema为空
    400 E18106: 无效的字段名称
    400 E18107: 不支持的字段类型
    400 E18108: 源仓库数量超过限制
    400 E18109: 无效的仓库模式
    400 E18110: 无效的字段格式
    404 E18111: 字段不存在
    400 E18112: 仓库上存在着级联的转换任务或者导出任务
    409 E18113: 仓库处于删除状态中
    400 E18117: Plugin名称不合法
    404 E18120: 共享资源池不存在
    404 E18122: 导出的仓库在logd中不存在
    202 E18124: 仓库处于创建中
    400 E18125: 读取gzip的打点请求体出错
    409 E18201: 计算任务已经存在
    404 E18202: 计算任务不存在
    415 E18203: 计算任务类型不支持
    409 E18204: 计算任务的源仓库与目的仓库相同
    409 E18205: 目的仓库已经被其他转换任务占用
    400 E18206: 目的仓库必须通过删除计算任务的方式删除
    400 E18207: 计算任务描述格式非法
    400 E18208: 计算任务interval非法
    400 E18209: 计算任务中的SQL语句非法
    400 E18211: 计算任务中plugin输出字段类型非法
    400 E18212: 仓库的区域信息和数据中心不相符
    400 E18213: 计算任务中容器类型非法
    400 E18214: 计算任务中容器数量非法
    409 E18215: 共享资源池处于使用中
    404 E18216: Plugin不存在
    409 E18217: Plugin已存在
    409 E18218: 共享资源池已存在
    400 E18219: Plugin上传内容长度不一致
    400 E18220: Plugin上传内容的MD5不一致
    400 E18221: 共享资源池名称非法
    400 E18222: 共享资源池的区域信息不一致
    400 E18223: 不能向计算任务的目标仓库中打点
    409 E18301: 导出任务已经存在
    404 E18302: 导出任务不存在
    400 E18303: 提交导出任务失败
    400 E18304: 删除导出任务失败
    400 E18305: 导出任务出现错误
    401 bad token:鉴权不通过 、token已过期、机器时间未同步
    以上内容是否对您有帮助?
  • Close