Todos os produtos
Search
Central de documentação

Simple Log Service:Detalhes da API HTTP do MetricStore

Última atualização: Jul 03, 2026

O Simple Log Service oferece diversas APIs para consultar métricas de séries temporais ou gravar dados de métricas em um MetricStore. Essas APIs são compatíveis com o protocolo Prometheus open source.

Visão geral

As APIs do Prometheus residem no diretório /api/v1/. As APIs do MetricStore seguem a mesma convenção. O formato completo da URL é https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/.

Parâmetro

Obrigatório

Descrição

{sls-endpoint}

Sim

O endpoint do Simple Log Service. Este endpoint corresponde ao nome de domínio usado para acessar o serviço e varia conforme a região onde o projeto está localizado. Para mais informações, consulte Endpoints.

{project}

Sim

Project Name: O projeto é a unidade de gerenciamento de recursos do Simple Log Service e atua como limite principal para isolamento multiusuário e controle de acesso. Para mais informações, consulte Gerencie Projects.

{metricstore}

Sim

Nome do MetricStore. Para mais informações, consulte Crie a MetricStore.

Importante

Essas APIs exigem autenticação BasicAuth. Defina Username como seu AccessKey ID e Password como seu AccessKey secret. Recomendamos usar o par de AccessKeys de um usuário do Resource Access Management (RAM) com permissões de consulta no projeto especificado. Para mais informações, consulte Configure a permission assistant.

Essas APIs também suportam autenticação via Security Token Service (STS). Nesse caso, defina o Password do BasicAuth no formato {AccessKey Secret}${STS Token}. Para mais informações, consulte What is STS?.

APIs de consulta de métricas de séries temporais

As APIs de consulta de métricas de séries temporais incluem a API Instant Queries e a API Range Queries.

API Instant Queries

A API Instant Queries consulta dados de métricas em um ponto específico no tempo.

GET https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query
POST https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query

A tabela a seguir descreve os parâmetros.

Parâmetro

Obrigatório

Descrição

query

Sim

Expressão da Prometheus Query Language (PromQL). Para mais informações, consulte PromQL syntax.

time

Não

Ponto no tempo para a consulta. O valor é um timestamp UNIX em segundos. Valor padrão: hora atual.

timeout

Não

Período de tempo limite da consulta em segundos.

Formatos de duração como 1s, 2m, 3h e 4d também são suportados. Exemplo: timeout=10s. Para mais informações, consulte Time Durations.

lookback_delta

Não

Substitui a flag query.lookback-delta do Prometheus apenas para esta consulta. O valor deve seguir o formato Time Durations. Exemplo: lookback_delta=1m. Para mais informações, consulte Time Durations. Este parâmetro especifica o intervalo máximo de retrocesso para localizar pontos de dados nos cálculos PromQL. Valor padrão em um SLS MetricStore: 3m.

  • Exemplo

    curl -X GET 'https://haoqi-sls-metric-test.pub-cn-hangzhou.log.aliyuncs.com/prometheus/haoqi-sls-metric-test/prometheus-metrics/api/v1/query?query=up&time=1676700699' \
    -u username:password \
    -H 'Content-Type: application/x-www-form-urlencoded'
    
    # Set username and password to your Alibaba Cloud AccessKey.
  • Resposta de exemplo

    {
        "status": "success",
        "data": {
            "resultType": "vector",
            "result": [
                {
                    "metric": {
                        "__name__": "up",
                        "instance": "demo.promlabs.com:10001",
                        "job": "demo"
                    },
                    "value": [
                        1676700550.696,
                        "1"
                    ]
                },
                {
                    "metric": {
                        "__name__": "up",
                        "instance": "demo.promlabs.com:10000",
                        "job": "demo"
                    },
                    "value": [
                        1676700550.696,
                        "1"
                    ]
                }
            ]
        }
    }

API Range Queries

A API Range Queries consulta dados de métricas em múltiplos pontos dentro de um intervalo de tempo especificado.

GET https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query_range
POST https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query_range

A tabela a seguir descreve os parâmetros.

Parâmetro

Obrigatório

Descrição

query

Sim

Expressão PromQL. Para mais informações, consulte PromQL syntax.

start

Não

Hora inicial do intervalo de consulta. O valor é um timestamp UNIX em segundos.

end

Não

Hora final do intervalo de consulta. O valor é um timestamp UNIX em segundos.

step

Não

Intervalo de passo da consulta em segundos.

Formatos de duração como 1s, 2m, 3h e 4d também são suportados. Exemplo: step=2m. Para mais informações, consulte Time Durations.

timeout

Não

Período de tempo limite da consulta em segundos.

Formatos de duração como 1s, 2m, 3h e 4d também são suportados. Exemplo: timeout=10s. Para mais informações, consulte Time Durations.

lookback_delta

Não

Substitui a flag query.lookback-delta do Prometheus apenas para esta consulta. O valor deve seguir o formato Time Durations. Exemplo: lookback_delta=1m. Para mais informações, consulte Time Durations. Este parâmetro especifica o intervalo máximo de retrocesso para localizar pontos de dados nos cálculos PromQL. Valor padrão em um SLS MetricStore: 3m.

  • Exemplo

    Este exemplo consulta dados de métricas das 14:09:59 às 14:16:39 em 2023-02-18 com um passo de 60s.

    curl -X GET 'https://haoqi-sls-metric-test.pub-cn-hangzhou.log.aliyuncs.com/prometheus/haoqi-sls-metric-test/prometheus-metrics/api/v1/query_range?query=up&start=1676700599&end=1676700999&step=60s' \
    -u username:password \
    -H 'Content-Type: application/x-www-form-urlencoded'
    
    # Set username and password to your Alibaba Cloud AccessKey.
  • Resposta de exemplo

    {
      "status": "success",
      "data": {
        "resultType": "matrix",
        "result": [
          {
            "metric": {
              "__name__": "up",
              "instance": "demo.promlabs.com:10000",
              "job": "demo"
            },
            "values": [
              [
                1676700599,
                "1"
              ],
              [
                1676700659,
                "1"
              ],
              [
                1676700719,
                "0"
              ],
              [
                1676700779,
                "0"
              ],
              [
                1676700839,
                "1"
              ],
              [
                1676700899,
                "0"
              ],
              [
                1676700959,
                "1"
              ]
            ]
          },
          {
            "metric": {
              "__name__": "up",
              "instance": "demo.promlabs.com:10001",
              "job": "demo"
            },
            "values": [
              [
                1676700599,
                "1"
              ],
              [
                1676700659,
                "1"
              ],
              [
                1676700719,
                "0"
              ],
              [
                1676700779,
                "0"
              ],
              [
                1676700839,
                "1"
              ],
              [
                1676700899,
                "1"
              ],
              [
                1676700959,
                "1"
              ]
            ]
          }
        ]
      }
    }

APIs de consulta de metadados

O Simple Log Service também suporta a consulta de metadados, como rótulos e valores de rótulos. As APIs de consulta de metadados do SLS são compatíveis com as APIs de Querying metadata do Prometheus. Use essas APIs para recuperar todas as métricas, rótulos e valores de rótulos dentro de um período específico. A resposta não inclui timestamps ou valores numéricos.

API Query Series

A API Query Series recupera todos os nomes de métricas e seus pares rótulo-valor correspondentes que atendem a condições específicas dentro de um período determinado.

GET https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/series
POST https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/series

Parâmetros

Parâmetro

Obrigatório

Descrição

match[]

Sim

Condição de filtro. Exemplo: match[]=up{instance="demo.*"}.

É possível especificar um ou mais valores.

start

Não

Hora inicial do intervalo de consulta. O valor é um timestamp UNIX em segundos.

Valor padrão: 5 minutos antes da hora atual.

end

Não

Hora final do intervalo de consulta. O valor é um timestamp UNIX em segundos.

Valor padrão: hora atual.

Importante

Mesmo que você especifique valores personalizados para start e end, esta API consulta apenas dados dentro dos 5 minutos anteriores à hora end. O intervalo real de consulta é (end - 5 minutes, end).

x-sls-disable-range-limit

Não

Defina este parâmetro como true para remover o limite de intervalo de consulta de 5 minutos e usar os valores de início e fim especificados.

forceMaxMetaTimeRangeSeconds

Não

Intervalo máximo de consulta em segundos. Quando (end - start) excede esse valor, o intervalo de consulta é ajustado para (end - forceMaxMetaTimeRangeSeconds, end).

Para obter desempenho ideal de consulta, recomendamos sempre incluir este parâmetro.

  • Exemplo

    curl -g -X GET 'https://haoqi-sls-metric-test.pub-cn-hangzhou.log.aliyuncs.com/prometheus/haoqi-sls-metric-test/prometheus-metrics/api/v1/series?match[]=up{instance="demo.promlabs.com:10000"}&match[]=go_sched_latencies_seconds_bucket&start=1676700599&end=1676700999' \
    -u username:password \
    -H 'Content-Type: application/x-www-form-urlencoded'
    
    # Set username and password to your Alibaba Cloud AccessKey.
  • Resposta de exemplo

    {
        "status": "success",
        "data": [
            {
                "__name__": "go_gc_duration_seconds_count",
                "instance": "demo.promlabs.com:10000",
                "job": "demo"
            },
            {
                "__name__": "go_gc_duration_seconds_count",
                "instance": "demo.promlabs.com:10001",
                "job": "demo"
            },
            {
                "__name__": "up",
                "instance": "demo.promlabs.com:10000",
                "job": "demo"
            }
        ]
    }

API Query Label Names

A API Query Label Names recupera todos os nomes de rótulos que correspondem a condições específicas dentro de um período determinado.

GET https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/labels
POST https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/labels

Parâmetros

Parâmetro

Obrigatório

Descrição

match[]

Sim

Condição de filtro. Exemplo: match[]=up{instance="demo.*"}.

É possível especificar zero, um ou mais valores.

start

Não

Hora inicial do intervalo de consulta. O valor é um timestamp UNIX em segundos.

Valor padrão: 5 minutos antes da hora atual.

end

Não

Hora final do intervalo de consulta. O valor é um timestamp UNIX em segundos.

Valor padrão: hora atual.

Importante

Mesmo que você especifique valores personalizados para start e end, esta API consulta apenas dados dentro dos 5 minutos anteriores à hora end. O intervalo real de consulta é (end - 5 minutes, end).

x-sls-disable-range-limit

Não

Defina este parâmetro como true para remover o limite de intervalo de consulta de 5 minutos e usar os valores de início e fim especificados.

forceMaxMetaTimeRangeSeconds

Não

Intervalo máximo de consulta em segundos. Quando (end - start) excede esse valor, o intervalo de consulta é ajustado para (end - forceMaxMetaTimeRangeSeconds, end).

Para obter desempenho ideal de consulta, recomendamos sempre incluir este parâmetro.

  • Exemplo

    Este exemplo consulta todos os nomes de rótulos de todas as métricas dentro de um período especificado.

    curl -X GET 'https://haoqi-sls-metric-test.pub-cn-hangzhou.log.aliyuncs.com/prometheus/haoqi-sls-metric-test/prometheus-metrics/api/v1/labels?start=1676700599&end=1676700999' \
    -u username:password \
    -H 'Content-Type: application/x-www-form-urlencoded'
    
    # Set username and password to your Alibaba Cloud AccessKey.
  • Resposta de exemplo

    {
        "status": "success",
        "data": [
            "code",
            "instance",
            "job",
            "le",
            "method",
            "mode",
            "path",
            "quantile",
            "status",
            "type",
            "version",
            "__name__"
        ]
    }

API Query Label Values

A API Query Label Values recupera todos os valores de um nome de rótulo específico que correspondem a condições determinadas dentro de um período definido.

Importante

Na URL da API, substitua <label_name> pelo nome real do rótulo.

GET https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/label/<label_name>/values

Parâmetros

Parâmetro

Obrigatório

Descrição

match[]

Sim

Condição de filtro. Exemplo: match[]=up{instance="demo.*"}.

É possível especificar um ou mais valores.

start

Não

Hora inicial do intervalo de consulta. O valor é um timestamp UNIX em segundos.

Valor padrão: 5 minutos antes da hora atual.

end

Não

Hora final do intervalo de consulta. O valor é um timestamp UNIX em segundos.

Valor padrão: hora atual.

Importante

Mesmo que você especifique valores personalizados para start e end, esta API consulta apenas dados dentro dos 5 minutos anteriores à hora end. O intervalo real de consulta é (end - 5 minutes, end).

x-sls-disable-range-limit

Não

Defina este parâmetro como true para remover o limite de intervalo de consulta de 5 minutos e usar os valores de início e fim especificados.

forceMaxMetaTimeRangeSeconds

Não

Intervalo máximo de consulta em segundos. Quando (end - start) excede esse valor, o intervalo de consulta é ajustado para (end - forceMaxMetaTimeRangeSeconds, end).

Para obter desempenho ideal de consulta, recomendamos sempre incluir este parâmetro.

  • Exemplo

    Este exemplo consulta todos os valores do rótulo instance da métrica up dentro de um período especificado.

    curl -X GET 'https://haoqi-sls-metric-test.pub-cn-hangzhou.log.aliyuncs.com/prometheus/haoqi-sls-metric-test/prometheus-metrics/api/v1/label/instance/values?match[]=up&start=1676700599&end=1676700999' \
    -u username:password \
    -H 'Content-Type: application/x-www-form-urlencoded'
    
    # Set username and password to your Alibaba Cloud AccessKey.
  • Resposta de exemplo

    {
        "status": "success",
        "data": [
            "demo.promlabs.com:10000",
            "demo.promlabs.com:10001",
            "demo.promlabs.com:10002"
        ]
    }

API de gravação de dados

Ingira dados de séries temporais em um MetricStore configurando o parâmetro remote_write no arquivo de configuração do Prometheus. Para mais informações, consulte Ingest Prometheus monitoring data using the remote write protocol. Como o MetricStore é compatível com o protocolo de remote write do Prometheus, você também pode gravar dados em um MetricStore chamando diretamente a API remote_write via HTTP, sem um processo do Prometheus.

O MetricStore fornece a seguinte API compatível com remote write que analisa dados de séries temporais e os grava no armazenamento de backend.

Importante

Quando dados de séries temporais são gravados em um SLS MetricStore usando o protocolo remote write, o SLS usa MetricName e Labels como chave de hash por padrão. Isso roteia dados de diferentes séries temporais para shards específicos, melhorando a localidade dos dados no armazenamento.

POST https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/write

O código a seguir mostra um exemplo.

import (
	"bytes"
	"flag"
	"fmt"
	"github.com/gogo/protobuf/proto"
	"github.com/golang/snappy"
	"github.com/prometheus/prometheus/prompb"
	"io/ioutil"
	"net/http"
	"time"
)

func MockRemoteWrite() {
	project := flag.String("project", "xxxx", "")
	metricStore := flag.String("metricstore", "xxxx", "")
	endpoint := flag.String("endpoint", "xxxx", "")
	akId := flag.String("akid", "xxxx", "") // AccessKey information.
	akKey := flag.String("aksecret", "xxxx", "")
	flag.Parse()

	Url := fmt.Sprintf("https://%s.%s/prometheus/%s/%s/api/v1/write", *project, *endpoint, *project, *metricStore)
	timestamp := time.Now().UnixNano()
	timeSeries := []prompb.TimeSeries{
		{
			Labels: []prompb.Label{
				{Name: "__name__", Value: "test_metric"},
				{Name: "app", Value: "HOST"},
				{Name: "device", Value: "vda"},
			},
			Samples: []prompb.Sample{
				{Timestamp: timestamp / 1000000, Value: 100},
				{Timestamp: timestamp/1000000 + 10000, Value: 200},
				{Timestamp: timestamp/1000000 + 20000, Value: 400},
				{Timestamp: timestamp/1000000 + 30000, Value: 300},
			},
		},
		{
			Labels: []prompb.Label{
				{Name: "__name__", Value: "test_metric"},
				{Name: "app", Value: "HOST"},
				{Name: "device", Value: "vda"},
				{Name: "uid", Value: "123456"},
			},
			Samples: []prompb.Sample{
				{Timestamp: timestamp / 1000000, Value: 100},
				{Timestamp: timestamp/1000000 + 10000, Value: 200},
				{Timestamp: timestamp/1000000 + 20000, Value: 400},
				{Timestamp: timestamp/1000000 + 30000, Value: 600},
			},
		},
	}
	data, _ := proto.Marshal(&prompb.WriteRequest{Timeseries: timeSeries})
	bufBody := snappy.Encode(nil, data)
	rwR, err := http.NewRequest("POST", Url, ioutil.NopCloser(bytes.NewReader(bufBody)))
	rwR.Header.Add("Content-Encoding", "snappy")
	rwR.Header.Set("Content-Type", "application/x-protobuf")
	rwR.SetBasicAuth(*akId, *akKey) // Set the basic auth information.
	if err != nil {
		fmt.Println(err.Error())
		return
	}

	start := time.Now().UnixNano() / 1000000 // ms
	do, err := client.Do(rwR)
	end := time.Now().UnixNano() / 1000000 // ms
	if err != nil {
		panic(err)
	}
	status, result := parseResp(do)

	fmt.Println("status:", status, "result:", result, "duration:", end-start)
}

func parseResp(resp *http.Response) (status, data string) {
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body) // The body content must be read completely.
	if err != nil {
		panic(err)
	}
	return resp.Status, string(body)
}

Exemplos de SDK

Acessar a API de consulta via HTTP

import (
	"flag"
	"fmt"
	"io/ioutil"
	"net/http"
	"net/url"
	"strconv"
	"strings"
	"time"
)

const separator = "#"

func http_main() {

	project := flag.String("project", "xxxx", "")
	metricStore := flag.String("metricstore", "xxxx", "")
	endpoint := flag.String("endpoint", "xxxx", "")
	akId := flag.String("akid", "xxxx", "")
	akKey := flag.String("aksecret", "xxxx", "")
	query := flag.String("query", "avg(up)", "")
	queryType := flag.String("type", "values", "range or query or labels or values or series")
	matches := flag.String("match", "up", "") // Use the # symbol to concatenate multiple match[] parameters.
	labelName := flag.String("label", "instance", "")
	step := flag.String("step", "1m", "")
	fromtime := flag.String("from", "2023-02-15T00:00:00Z", "time 2006-01-02T15:04:05Z07:00")
	totime := flag.String("to", "2023-02-15T00:15:00Z", "time 2006-01-02T15:04:05Z07:00")

	flag.Parse()

	timeFrom, err := time.Parse(time.RFC3339, *fromtime)
	if err != nil {
		panic(err)
	}
	timeTo, err := time.Parse(time.RFC3339, *totime)
	if err != nil {
		panic(err)
	}

	// URL: https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}
	prometheusEndpoint := fmt.Sprintf("https://%s/prometheus/%s/%s", *project+"."+*endpoint, *project, *metricStore)

	var uri string
	urlVal := url.Values{}
	urlVal.Add("start", strconv.FormatInt(timeFrom.Unix(), 10))
	urlVal.Add("end", strconv.FormatInt(timeTo.Unix(), 10))

	switch *queryType {
	case "range":
		urlVal.Add("query", *query)
		urlVal.Add("step", *step)
		uri = fmt.Sprintf("%s/api/v1/query_range?%v", prometheusEndpoint, urlVal.Encode())
	case "query":
		urlVal.Add("query", *query)
		urlVal.Add("time", strconv.FormatInt(timeTo.Unix(), 10))
		uri = fmt.Sprintf("%s/api/v1/query?%v", prometheusEndpoint, urlVal.Encode())
	case "labels":
		extractAddMatches(*matches, urlVal)
		uri = fmt.Sprintf("%s/api/v1/labels?%v", prometheusEndpoint, urlVal.Encode())
	case "values":
		extractAddMatches(*matches, urlVal)
		uri = fmt.Sprintf("%s/api/v1/label/%s/values?%v", prometheusEndpoint, *labelName, urlVal.Encode())
	case "series":
		extractAddMatches(*matches, urlVal)
		uri = fmt.Sprintf("%s/api/v1/series?%v", prometheusEndpoint, urlVal.Encode())
	}

	req, _ := http.NewRequest(http.MethodGet, uri, nil)
	req.SetBasicAuth(*akId, *akKey)

	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	buf, err := ioutil.ReadAll(resp.Body)
	resp.Body.Close()
	if err != nil {
		panic(err)
	}

	fmt.Println(string(buf))

}

func extractAddMatches(matches string, uVal url.Values) {
	splits := strings.Split(matches, separator)
	for _, match := range splits {
		uVal.Add("match[]", match)
	}
}

Acessar a API de consulta usando o SDK do Prometheus

Este exemplo usa o Prometheus client_golang v1.14.0.

import (
	"context"
	"flag"
	"fmt"
	"github.com/prometheus/client_golang/api"
	v1 "github.com/prometheus/client_golang/api/prometheus/v1"
	"net"
	"net/http"
	"net/url"
	"time"
)

func main() {
	project := flag.String("project", "xxxx", "")
	metricStore := flag.String("metricstore", "xxxx", "")
	endpoint := flag.String("endpoint", "xxxx", "")
	akId := flag.String("akid", "xxxx", "")
	akKey := flag.String("aksecret", "xxxx", "")
	flag.Parse()

	// URL: https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}
	prometheusEndpoint := fmt.Sprintf("https://%s.%s/prometheus/%s/%s", *project, *endpoint, *project, *metricStore)

	client, err := api.NewClient(api.Config{
		Address: prometheusEndpoint,
		RoundTripper: &http.Transport{
			// set basic auth
			Proxy: func(req *http.Request) (*url.URL, error) {
				req.SetBasicAuth(*akId, *akKey)
				return nil, nil
			},
			DialContext: (&net.Dialer{
				Timeout:   60 * time.Second,
				KeepAlive: 60 * time.Second,
			}).DialContext,
			TLSHandshakeTimeout: 10 * time.Second,
		},
	})
	if err != nil {
		panic(err)
	}

	v1api := v1.NewAPI(client)
	ctx, _ := context.WithTimeout(context.Background(), 60*time.Second)
	r := v1.Range{
		Start: time.Now().Add(-15 * time.Minute),
		End:   time.Now(),
		Step:  time.Minute,
	}
	// query range
	result, warnings, err := v1api.QueryRange(ctx, "avg(up)", r)
	if err != nil {
		panic(err)
	}
	if len(warnings) > 0 {
		fmt.Printf("Warnings: %v %v\n", warnings, result)
	}
	fmt.Println(result)

	// query
	result, warnings, err = v1api.Query(ctx, "avg(up)", time.Now())
	if err != nil {
		panic(err)
	}
	if len(warnings) > 0 {
		fmt.Printf("Warnings: %v %v\n", warnings, result)
	}
	fmt.Println(result)

	// series
	series, warnings, err := v1api.Series(ctx, []string{"up"}, time.Now().Add(-15*time.Minute), time.Now())
	if err != nil {
		panic(err)
	}
	if len(warnings) > 0 {
		fmt.Printf("Warnings: %v %v\n", warnings, result)
	}
	fmt.Println(series)

	// labels
	names, warnings, err := v1api.LabelNames(ctx, []string{"up"}, time.Now().Add(-15*time.Minute), time.Now())
	if err != nil {
		panic(err)
	}
	if len(warnings) > 0 {
		fmt.Printf("Warnings: %v %v\n", warnings, result)
	}
	fmt.Println(names)

	// labelValues
	values, warnings, err := v1api.LabelValues(ctx, "instance", []string{"up"}, time.Now().Add(-15*time.Minute), time.Now())
	if err != nil {
		panic(err)
	}
	if len(warnings) > 0 {
		fmt.Printf("Warnings: %v %v\n", warnings, result)
	}
	fmt.Println(values)
}

Estrutura da resposta

As APIs de consulta e gravação retornam respostas na seguinte estrutura:

{
  "status": "success" | "error",
  "data": <data>,

  // The following two items are returned when an error occurs during query analysis.
  "errorType": "<string>",
  "error": "<string>",
  
	// A warning message is returned, usually for an incomplete query.
  "warnings": ["<string>"]
}

Tratamento de erros

Veja a seguir os erros comuns e suas soluções.

Falha na autenticação

  • Se a resposta a seguir for retornada, a autenticação falhou. Verifique seu par de AccessKeys.

    {
        "status": "error",
        "code": "401",
        "errorType": "unauthorized",
        "error": "get query instance error: {\n    \"httpCode\": 401,\n    \"errorCode\": \"Unauthorized\",\n    \"errorMessage\": \"AccessKeyId not found: xxxx\",\n    \"requestID\": \"xxxx\"\n}"
    }
  • Se a resposta a seguir for retornada, o endereço IP de origem não está na lista de permissões do bloco CIDR da VPC. Adicione o endereço IP à lista de permissões.

    {
        "status": "error",
        "code": "401",
        "errorType": "unauthorized",
        "error": "get query instance error: {\n    \"httpCode\": 401,\n    \"errorCode\": \"Unauthorized\",\n    \"errorMessage\": \"AccessKeyId not found: xxxx\",\n    \"requestID\": \"xxxx\"\n}"
    }

Erro na expressão PromQL

Se a resposta a seguir for retornada, a expressão PromQL contém um erro. Corrija a expressão no parâmetro query.

--> /api/v1/query_range?query=up[2m]&start=1676700599&end=1676700999&step=60s
{
    "status": "error",
    "errorType": "bad_data",
    "error": "invalid expression type \"range vector\" for range query, must be Scalar or instant Vector"
}

Erro de tempo limite

Se a resposta a seguir for retornada, a consulta atingiu o tempo limite. Aumente o valor de timeout.

{
    "status": "error",
    "errorType": "timeout",
    "error": "query timed out in expression evaluation"
}

Resultados de consulta incompletos

Se a resposta a seguir for retornada, o resultado da consulta está incompleto. Reduza o intervalo de tempo da consulta e tente novamente.

{
    "status": "success",
    "data": {
        "resultType": "matrix",
        "result": [
            {
                "metric": {},
                "values": [
                    [
                        1673798460,
                        "11111111"
                    ],
                    [
                        1673799060,
                        "22222222"
                    ],
                    [
                        1673799660,
                        "33333333"
                    ]
                ]
            }
        ]
    },
    "warnings": [
        "Request to Sls partial incompleted, incomplete task count : 11, total : 108"
    ]
}