文章采集接口(【每日一题】json监控接口获取监控数据的方案 )

优采云 发布时间: 2022-04-13 20:01

  文章采集接口(【每日一题】json监控接口获取监控数据的方案

)

  【文本】

  一个应用场景:

  对于自带监控的业务系统或组件,可以直接通过其外部监控接口获取监控数据,避免重复造轮子,缩短开发周期。本文主要记录本次采集器开发中通过golang调用第三方api的方法。

  两个具体案例

  由于项目需求,蓝鲸监控需要监控腾讯云Tstack。经过一番沟通,已经确定了通过Tstack监控接口获取相应监控数据的方案。

  这个采集器开发对我来说的难点在于golang实现了http请求,构造了json请求体,解析了json字符串。在python中,我们可以很容易地构造字典类型的json字符串或者将json字符串解析成字典。Golang 的 map 类型(类似于 golang 中的字典类型的数据类型)可以用来解析 json 字符串。但是,如果 json 数据有多层嵌套,使用 map 解析 json 字符串会很痛苦。在golang中,我们也可以使用struct类型来解析json字符串,通过struct的多层嵌套声明实现json数据的多层嵌套。

  下面是一个调用登录界面的例子。示例代码如下:

  type DomainStruct struct {

   Id string  <b>`json:"id"`  // struct变量首字母需要是大写,后面加``,json化时可变成小写

   Name   string <b>`json:"name"`

}

<b>type UserStrcut struct {

   Id string     <b>`json:"id"`

   Name string       `json:"name"`

   Domain DomainStruct    `json:"domain"`

   Password_expires_at string `json:"password_expires_at"`

}

<b>type TokenStruct struct {

   Issued_at  string        <b>`json:"issued_at"`

   User      UserStrcut    `json:"user"`

   Methods       []string   `json:"methods"`

   Expires_at string    `json:"expires_at"`

   Audit_ids  []string   `json:"audit_ids"`

}

<b>type Auth struct {

   Token  TokenStruct       <b>`json:"token"`

}

  url := *tstackAuthHost + "/v3/auth/tokens"

authStr := fmt.Sprintf(`{"auth": {

       "identity": {

           "methods": ["password"],

           "password": {

               "user": {

                   "name": "%s",

                   "domain": {"id": "default"},

                   "password": "%s"

               }

           }

       }

   }

   }`, *tstackUser, tstackPassword)

bodyType := <b>"application/json;charset=utf-8"

payload := strings.NewReader(string(authStr))

resp, err := http.Post(url, bodyType, payload)

<b>if err != nil {

   log.Fatal(err.Error())

}

body, err := ioutil.ReadAll(resp.Body)

<b>if err != nil {

   log.Fatal(err.Error())

}

<b>var result Auth

json.Unmarshal([]byte(body), &result)

<b>if result.Token.Audit_ids == nil {

   err = errors.New(fmt.Sprintf(<b>"get auth error, status:%s", resp.Status))

   <b>return

}

sessionId = result.Token.Audit_ids[0]

userId = result.Token.User.Id

fmt.Println(sessionId, userId)

   

  <b>示例代码说明:

<p>l

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线