prometheus 零散整理(不定期更新)

prometheus httpapi

总结比较有用的一些查询
http://<url>/api/v1/label/__name__/values  //看全部的指标
http://<url>/api/v1/label/job/values   //看有哪些job
...等等很多类似的用法

http://<url>/api/v1/series?match[]=up{job="xxx"}  //查某个指标里的key/value,例如这个就是查up这个指标里面job=xxx的内容

http://<url>/api/v1/query?query=up{instance=~"xxx|yyy"}  //查多个,=~正则表达式匹配,例如这个就是查up指标里instance=xxx或yyy的内容
prometheus get query(算qps,go实现)
func getQps(data *types.Data) (*types.xxx, error) {
	diff := data.To - data.From
	var step int64
	switch {
	... //根据diff,自己设一下step
	}
	//项目中一般是写在config里面然后Replace的
	url := "http://xxx/api/v1/query_range?query=round(sum(irate(指标{key=\"<value>\"}[2m]))by(key),0.001)&start=<start>&end=<end>&step=<step>"

	data := struct {
		Status    string              `json:"status"`
		Data      types.DomainQpsList `json:"data"`
		ErrorType string              `json:"error_type"`
		Error     string              `json:"error"`
	}{}
	...  //发http请求
	return &xxx.Data, nil
}
func Qps(c *gin.Context) {
	domainData := &types.DomainData{}
	if err := c.ShouldBindJSON(domainData); err != nil {
		log.Warnf("xxx %s", err.Error())
		return
	}

	qps, err := getQps(domainData)
	if err != nil {
		xxx.ErrorResponse(c, err)
		return
	}
	
	xxx.SuccessResponse(c, qps.Result[0].Values)
}
prometheus post query(使用go调用)

要注意的是prometheus的这个post接口只接受form-data数据

package main

import (
  "fmt"
  "bytes"
  "mime/multipart"
  "net/http"
  "io/ioutil"
)

func main() {

  url := "http://xxx/api/v1/query"
  method := "POST"   //url和请求类型

  payload := &bytes.Buffer{}
  writer := multipart.NewWriter(payload)
  _ = writer.WriteField("query", "up{instance=~\"1.2.3.4:1234|4.3.2.1:4321\"}")   //form-data数据类型传参
  err := writer.Close()
  if err != nil {
    fmt.Println(err)
    return
  }


  client := &http.Client {
  }
  req, err := http.NewRequest(method, url, payload)

  if err != nil {
    fmt.Println(err)
    return
  }
  req.Header.Set("Content-Type", writer.FormDataContentType())  //申明一下传参类型
  res, err := client.Do(req)
  if err != nil {
    fmt.Println(err)
    return
  }
  defer res.Body.Close()

  body, err := ioutil.ReadAll(res.Body)
  if err != nil {
    fmt.Println(err)
    return
  }
  fmt.Println(string(body))
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于 Prometheus 的 YAML 文件热更新,你可以通过以下步骤进行操作: 1. 修改 YAML 文件:首先,你需要修改 Prometheus 的配置文件(一般是 prometheus.yml 文件),添加或修改需要更新的配置项。例如,你可以修改监控目标的标签、指标的采集频率等。 2. 验证配置文件:在应用修改之前,可以使用 Prometheus 的配置检查工具来验证配置文件的正确性。运行以下命令进行验证: ``` promtool check config <path-to-prometheus.yml> ``` 这将会检查配置文件的语法和语义错误,并给出相应的提示。 3. 重启 Prometheus:在修改了配置文件后,需要重启 Prometheus 进程使其加载新的配置。可以通过以下方式重启 Prometheus: - 如果 Prometheus 是以服务的形式运行,可以使用服务管理工具(如 systemctl、service)重启 Prometheus 服务。 - 如果 Prometheus 是以命令行形式运行,可以找到运行 Prometheus 的终端窗口,按下 Ctrl+C 停止当前进程,然后再次运行启动命令。 4. 监控变更效果:重启 Prometheus 后,它将会加载新的配置文件,并开始采集和存储新的指标数据。你可以通过 Prometheus 的 Web 界面或者 API 来查看指标数据是否正确采集,并根据需要进行进一步调整。 需要注意的是,热更新可能会导致 Prometheus更新期间短暂的不可用。因此,在生产环境中进行配置更新时,建议提前进行测试,并在合适的时间段进行操作,以最小化对监控系统的影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值