为让透视宝采集的数据得到更好的使用,目前我们为透视宝用户提供后端数据共享API,用于获取透视宝采集到的应用、移动、浏览器、主机及各服务的数据,您可以采用更丰富的方式来处理和分析这些数据。

要使用数据共享接口,必须具有管理员或高级用户权限,在透视宝云端的“管理→API配置”页面中获取相关配置信息。

1468555204394820.png

  • API:由透视宝提供,使用该API和对应的请求参数就可以获取数据。

  • 密钥:透视宝自动生成,用来验证用户身份的合法性和安全性,用于获取签名。点击<换一个>按钮可以生成一个新的密钥。

  • 数据类型:透视宝提供的数据类型,选择并保存后,透视宝会将对应类型的数据存放到RabbitMQ中供用户读取。选择数据类型1分钟后,可从API取得数据,数据流保存20分钟。

通过数据共享接口获取数据共分为两步:首先通过接口获取accessToken,然后再通过accessToken获取数据,下面进行详细说明。

通过接口获取accessToken

第一步:使用账户密钥、账户信息来生成签名。

签名生成步骤如下:

1、获取密钥:登录透视宝云端,在“管理→API配置”页面中获取密钥。

2、构建请求信息:请求信息包含邮箱(userEmail)、密码(password)、当前时间戳(timestamp)。

3、排序请求信息:将请求信息按键进行升序排序。

4、生成签名:将密钥与转化为JSON格式的请求信息拼接起来,并进行md5加密,即可生成签名字符串。

以PHP代码为例,生成签名的方式如下:

$secret_code = 'secret_code';
$data = array(
    'password'  => 'password',
    'userEmail' => 'user_email',
    'timestamp' => time(),
);
ksort($data);
$sign = md5($secret_code . json_encode($data));

以Java代码为例,生成签名的方式如下:

String secret = "secret_code";
//构建请求信息,请求信息按键升序排序
Map<String,Object> map = new TreeMap<String,Object>();
//透视宝平台的帐号、密码
map.put("userEmail", "userEmail");
map.put("password", "password");
//当前时间
map.put("timestamp", System.currentTimeMillis());
//MD5方法请自行编写 验证:MD5('1') = 'c4ca4238a0b923820dcc509a6f75849b';
String sign = MD5(secret + mapper.writeValueAsString(resultMap)).toLowerCase();

以Python代码为例,生成签名的方式如下:

import time
import json
import hashlib
secret_code = 'secret_code'
request_params ={}
request_params['password'] = 'password'
request_params['userEmail'] = 'userEmail'
request_params['timestamp'] = int(time.time())
json_format = json.dumps(request_params, sort_keys=True, separators=(',', ':'))
hash = hashlib.md5()
hash.update(secret_code)
hash.update(json_format)
sign = hash.hexdigest()

第二步:在请求信息中添加签名信息。

以PHP代码为例,添加方式如下:

$data['sign'] = $sign;

以Java代码为例,生成方式如下:

map.put("sign", sign);

第三步:将请求信息转化为JSON格式。

以PHP代码为例,转化方式如下:

json_encode($data);

以Java代码为例,转化方式如下:

com.fasterxml.jackson.databind.ObjectMapper mapper = new com.fasterxml.jackson.databind.ObjectMapper();
mapper.writeValueAsString(map);

第四步:发起请求,获取accessToken。

请求URL

ucloud机房:http://portal.toushibao.com/api/v1/getToken

seagull机房:http://seagull-data.toushibao.com/api/v1/getToken

请求方式

post

请求参数

  • password:账户密码。

  • userEmail:登录邮箱即账户名称。

  • timestamp:时间戳,请求时间。

  • sign:生成的签名,用于获取accessToken。

以ucloud机房为例,请求示例如下:

curl -XPOST 'http://portal.toushibao.com/api/v1/getToken' -d '{"password":"123456","timestamp":1464085267,"userEmail":"bear@yunzhihui.com","sign":"13f27d79979a8520d13e9b5594355561"}'

以seagull机房为例,请求示例如下:

curl -XPOST 'http://seagull-data.toushibao.com/api/v1/getToken' -d '{"password":"123456","timestamp":1464085267,"userEmail":"bear@yunzhihui.com","sign":"13f27d79979a8520d13e9b5594355561"}'

请求成功返回值示例:

{"code":1000,"msg":"success","data":{"accessToken":"df874b839ab8980fbb970507679b45b5"}}

请求失败返回值示例:

{"code":900,"msg":"Signature Error","data":[]}

通过accessToken获取数据

获取accessToken后,需要再次生成签名sign,然后再获取数据。签名验证方式与上面的方式相同,只是data不同,说明如下:

$data = array(
        'accessToken'=>'df874b839ab8980fbb970507679b45b5',
        'dataType'=>'103',
        'dataCount'=>10,
        'timestamp'=>time()
);
$secret = '0edb55ce24419bd19f9ebe43127a3fb7';
按键升序排序
ksort($data);
$data['sign'] = md5($secret.json_encode($data)) = '2674d79979a8520d13e9b5594353321';

则参数为:

json_encode($data) = '{"accessToken":"df874b839ab8980fbb970507679b45b5","dataType":"103","dataCount":10,"timestamp":1464085267,
"sign":"2674d79979a8520d13e9b5594353321"}';

后面需要使用这里的参数获取数据。

获取数据

请求URL

页面api?params=(页面api即“管理→API配置”页面中的API)

请求方式

get

请求参数

  • accessToken:上一步获取的accessToken。

  • dataType:要获取的数据类型,详细说明见“数据类型说明”。

  • dataCount:一次请求返回的数据条数。

  • Timestamp:时间戳,请求时间。

  • sign:生成的签名。

以ucloud机房为例,请求示例如下:

curl 'http://data.toushibao.com/api/getData?params={"accessToken":"df874b839ab8980fbb970507679b45b5","dataType":"103","dataCount":10,"timestamp":1464085267,"sign":"2674d79979a8520d13e
9b5594353321"}'

以seagull机房为例,请求示例如下:

curl 'http://seagull-data.toushibao.com/api/getData?params={"accessToken":"df874b839ab8980fbb970507679b45b5","dataType":"103","dataCount":10,"timestamp":1464085267,"sign":"2674d79979a8520d13e
9b5594353321"}'

请求成功返回值示例:

{"code":1000,"msg":"success","data":[{xxxxx},{yyyyy},{zzzzzzzz}]}

请求失败返回值示例:

{"code":900,"msg":"Signature Error","data":[]}

数据类型说明

透视宝通过共享数据接口能够提供应用、移动、浏览器、主机及各服务的数据,每个数据类型都对应一个特定的值,需要在请求数据时通过dataType参数提供,详细说明如下。

数据类型

说明

应用

PHP                = 1001;   //PHP代码监控

JAVA               = 1002;   //Java代码监控

PYTHON             = 1003;   //Python代码监控

.NET               = 1004;   //.NET代码监控

移动

MOBILE_SDK         = 402;    //Mobile SDK

浏览器

BROWSER            = 11;     //浏览器

主机

HOST               = 100;    //主机信息

BURDEN             = 101;    //CPU负载

CPU_USE_RATE       = 102;    //CPU使用率

RAM_USE_RATE       = 103;    //内存使用率

LAN_TRAFFIC        = 104;    //网卡流量

DISK_USE_RATE      = 105;    //磁盘空间

DISK_IO            = 106;    //磁盘IO

SYSTEM_PROCESS     = 107;    //系统进程数

SYSTEM_TCP         = 108;    //系统Socket链接数

服务

APACHE             = 201;    //Apache

APACHE_BASIC       = 2011;   //Apache的基础插件

LIGHTTPD           = 202;    //Lighttpd

NGINX              = 203;    //Nginx

NGINX_BASIC        = 2031;   //Nginx的基础插件

MYSQL              = 204;    //MySQL

MONGODB            = 205;    //MongoDB

REDIS              = 206;    //Redis

MEMCACHE           = 207;    //Memcache

TOMCAT             = 208;    //Tomcat

IIS                = 209;    //IIS

SQLSERVER          = 210;    //SQLServer 

ORACLE             = 211;    //Oracle

WEBLOGIC           = 212;    //Weblogic

POSTGRESQL         = 213;    //PostgreSQL

JVM                = 214;    //JVM

RABBIT_MQ          = 215;    //RabbitMQ

DOCKER             = 216;    //Docker

JVM_STACK          = 217;    //JVM堆栈

APP_ADMIN          = 218;    //后台任务