全部产品

写入数据

更新时间:2017-09-19 11:45:15   分享:   

请求路径 请求方法 说明
/api/put POST 一次写入多个数据点

请求参数

注意:所有“无类型”的参数,只要提供,都被视为 true,比如 summary=false 以及 summary=true 都被当做 summary=true。

参数名 数据类型 是否必须 描述 默认值 举例
summary 无类型 可选 是否返回摘要信息 false /api/put?summary
details 无类型 可选 是否返回详细信息 false /api/put?details
sync_timeout Integer 可选 超时时间,单位毫秒,0为永不超时 0 /api/put/?sync&sync_timeout=60000

如果 details 和 summary 都设置,API 将返回 details 信息。

请求内容

数据点格式为 JSON 格式,各属性描述如下:

属性名 数据类型 是否必须 是否有使用限制 描述 举例
metric String 必选 1、可以包含大小写英文字母,数字,“-”,“_”,“.”,“/”以及Unicode字符。
2、不允许包含空格及其它字符。
存储的指标名 sys.cpu
timestamp Integer 必选 时间戳,秒为单位 1499158925
value Long,Double 必选 数据点值 42.5
tags Map 必选 1、可以包含大小写英文字母、数字,”-“,”_”,”.”,”/“以及 Unicode 字符。
2、不允许包含空格及其它字符。
Tagk 和 Tagv 键值对,至少一个键值对 {“host”:”web01”}

写入数据样例

  1. [
  2. {
  3. "metric": "sys.cpu.nice",
  4. "timestamp": 1346846400,
  5. "value": 18,
  6. "tags": {
  7. "host": "web01",
  8. "dc": "lga"
  9. }
  10. },
  11. {
  12. "metric": "sys.cpu.nice",
  13. "timestamp": 1346846400,
  14. "value": 9,
  15. "tags": {
  16. "host": "web02",
  17. "dc": "lga"
  18. }
  19. }
  20. ]

响应说明

如果所有数据点写入成功,返回码为204,如果有部分写入失败,返回码400,响应内容为具体错误信息。

如果请求参数包含 summary 或者 details,返回信息包括如下属性:

名称 数据类型 描述
success Integer 写入成功的数据点数
failed Integer 未写入的数据点数
errors Array 一个描述哪些数据点未写入以及其原因的数组,仅在指定 details 有效。
  • 指定 summary 的返回举例:

    1. {
    2. "failed": 1,
    3. "success": 0
    4. }
  • 指定details的返回举例:

    1. {
    2. "errors": [
    3. {
    4. "datapoint": {
    5. "metric": "sys.cpu.nice",
    6. "timestamp": 1365465600,
    7. "value": "NaN",
    8. "tags": {
    9. "host": "web01"
    10. }
    11. },
    12. "error": "Unable to parse value to a number"
    13. }
    14. ],
    15. "failed": 1,
    16. "success": 0
    17. }

开发代码示例 Demo

依赖包

需要先下载依赖包:HTTP ClientFastJSON

  1. <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
  2. <dependency>
  3. <groupId>org.apache.httpcomponents</groupId>
  4. <artifactId>httpclient</artifactId>
  5. <version>4.5.2</version>
  6. </dependency>
  7. <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
  8. <dependency>
  9. <groupId>com.alibaba</groupId>
  10. <artifactId>fastjson</artifactId>
  11. <version>1.2.34</version>
  12. </dependency>

Demo 代码

  1. package org.hitsdb.client;
  2. import java.io.IOException;
  3. import java.util.ArrayList;
  4. import java.util.HashMap;
  5. import java.util.List;
  6. import java.util.Map;
  7. import org.apache.http.HttpResponse;
  8. import org.apache.http.client.ClientProtocolException;
  9. import org.apache.http.client.methods.HttpPost;
  10. import org.apache.http.entity.StringEntity;
  11. import org.apache.http.impl.client.CloseableHttpClient;
  12. import org.apache.http.impl.client.HttpClients;
  13. import org.junit.Test;
  14. import com.taobao.vipserver.fastjson.JSON;
  15. public class HttpWrite {
  16. private final static String HITSDB_IP = "192.168.11.17"; //实例地址
  17. private final static int HITSDB_PORT = 8242; //实例端口
  18. private final static int SYNC_TIMEOUT_MS = 60 * 1000;
  19. private Long startTime = System.currentTimeMillis();
  20. static String putUrl = "http://" + HITSDB_IP + ":" + HITSDB_PORT +
  21. "/api/put?sync_timeout=" + SYNC_TIMEOUT_MS;
  22. static String queryUrl = "http://" + HITSDB_IP + ":" + HITSDB_PORT +
  23. "/api/query";
  24. static class DataPoint {
  25. public String metric;
  26. public Long timestamp;
  27. public Double value;
  28. public Map<String, String> tags;
  29. }
  30. String buildData() {
  31. // 构造写入数据实体
  32. List<DataPoint> dataPoints = new ArrayList<DataPoint>();
  33. for (int i = 0; i < 3600; ++i) {
  34. DataPoint dataPoint = new DataPoint();
  35. dataPoint.metric = "sys.cpu";
  36. dataPoint.timestamp = startTime + i * 1000;
  37. dataPoint.value = 32.4;
  38. dataPoint.tags = new HashMap<String, String>();
  39. dataPoint.tags.put("host", "host1");
  40. dataPoint.tags.put("appName", "test1");
  41. dataPoints.add(dataPoint);
  42. }
  43. return JSON.toJSONString(dataPoints);
  44. }
  45. @Test
  46. public void putDemo() throws ClientProtocolException, IOException {
  47. CloseableHttpClient httpClient = HttpClients.createDefault();
  48. HttpPost httpPost = new HttpPost(putUrl);
  49. StringEntity eStringEntity = new StringEntity(buildData(), "utf-8");
  50. eStringEntity.setContentType("application/json");
  51. httpPost.setEntity(eStringEntity);
  52. HttpResponse response = httpClient.execute(httpPost);
  53. int statusCode = response.getStatusLine().getStatusCode();
  54. if (statusCode == 200 || statusCode == 204) {
  55. System.out.println("write OK");
  56. }
  57. httpClient.close();
  58. }
  59. }
本文导读目录
本文导读目录
以上内容是否对您有帮助?