Todos los productos
Search
Centro de documentos

Simple Log Service:API HTTP de MetricStore

Última actualización: Oct 10, 2026

Simple Log Service (SLS) proporciona API compatibles con Prometheus para consultar métricas de series de tiempo y escribir datos en un MetricStore. Estas incluyen detalles del endpoint, parámetros de solicitud, métodos de autenticación y manejo de errores.

Descripción general

Las Prometheus se sirven bajo la ruta /api/v1. Las API de MetricStore siguen la misma convención. El formato completo de la URL es https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/.

Parámetro

Obligatorio

Descripción

{sls-endpoint}

Sí

Un endpoint de servicio es el nombre de dominio que se usa para acceder a SLS. Este endpoint es específico de la región donde se encuentra el proyecto. Para obtener más información, consulte Service Endpoints.

{project}

Sí

Project name: Un proyecto es la unidad de gestión de recursos de SLS y el límite principal para el aislamiento multiusuario y el control de acceso. Para obtener más información, consulte Manage Projects.

{metricstore}

Sí

El nombre de su MetricStore. Para ver las instrucciones de creación, consulte Create a MetricStore.

Importante

Estas API requieren autenticación Basic. Establezca Username con su AccessKey ID y Password con su AccessKey Secret. Por motivos de seguridad, utilice el par de AccessKey de un usuario RAM. Otorgue al usuario RAM los permisos obligatorios sobre el proyecto de destino. Para obtener más información, consulte Configure Permission Assistant.

También se admite la autenticación STS. Cuando use STS, establezca Password en BasicAuth como {AccessKey Secret}${STS token}. Para obtener más información, consulte What is STS.

API de consulta de métricas de series de tiempo

Las API de consulta de métricas de series de tiempo incluyen la API de consulta instantánea y la API de consulta por rango.

API de consulta instantánea

La API de consulta instantánea obtiene datos de métricas en un momento específico.

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

Parámetros:

Parámetro

Obligatorio

Descripción

query

Sí

La expresión PromQL. Para obtener más información, consulte PromQL syntax.

time

No

La marca de tiempo de evaluación como una marca de tiempo Unix en segundos. Valor predeterminado: la hora actual.

timeout

No

El tiempo de espera de la consulta en segundos.

También admite formatos de duración como 1s, 2m o 3h. Ejemplo: timeout=10s.

lookback_delta

No

Anula el indicador query.lookback-delta de Prometheus para esta consulta. Este indicador establece el período máximo de búsqueda retrospectiva para encontrar puntos de datos durante la evaluación de PromQL. Especifique un valor de duración; por ejemplo, lookback_delta=1m. Valor predeterminado: 3m.

Esta API devuelve los cuatro tipos de resultados siguientes:

  • vector

    • Código de ejemplo

      curl -X GET 'http://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query?query=up&time=1676700699' \
      -u username:password \
      -H 'Content-Type: application/x-www-form-urlencoded'
      
      # Set username to your AccessKey ID and password to your AccessKey Secret.
    • Resultado

      {
          "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"
                      ]
                  }
              ]
          }
      }
  • scalar

    • Código de ejemplo

      curl -X GET 'http://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query?query=2-1&time=1676700699' \
      -u username:password \
      -H 'Content-Type: application/x-www-form-urlencoded'
      
      # Set username to your AccessKey ID and password to your AccessKey Secret.
    • Resultado

      {
          "status": "success",
          "data": {
              "resultType": "scalar",
              "result": [
                  1676700699,
                  "0"
              ]
          }
      }
  • string

    • Código de ejemplo

      curl -X GET 'http://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query?query="test_string"&time=1676700699' \
      -u username:password \
      -H 'Content-Type: application/x-www-form-urlencoded'
      
      # Set username to your AccessKey ID and password to your AccessKey Secret.
    • Resultado

      {
          "status": "success",
          "data": {
              "resultType": "string",
              "result": [
                  1676700699,
                  "test_string"
              ]
          }
      }
  • matrix

    • Código de ejemplo

      curl -X GET 'http://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query?query=up[1m]&time=1743414624' \
      -u username:password \
      -H 'Content-Type: application/x-www-form-urlencoded'
      
      # Set username to your AccessKey ID and password to your AccessKey Secret.
    • Resultado

      {
          "status": "success",
          "data": {
              "resultType": "matrix",
              "result": [
                  {
                      "metric": {
                          "__name__": "up",
                          "instance": "demo.promlabs.com:10000",
                          "job": "demo"
                      },
                      "values": [
                          [
                              1743414609.803,
                              "1"
                          ],
                          [
                              1743414614.803,
                              "1"
                          ],
                          [
                              1743414619.803,
                              "1"
                          ]
                      ]
                  },
                  {
                      "metric": {
                          "__name__": "up",
                          "instance": "demo.promlabs.com:10001",
                          "job": "demo"
                      },
                      "values": [
                          [
                              1743414611.078,
                              "1"
                          ],
                          [
                              1743414616.078,
                              "1"
                          ],
                          [
                              1743414621.078,
                              "1"
                          ]
                      ]
                  }
              ]
          }
      }

API de consulta por rango

La API de consulta por rango obtiene datos de métricas en varios puntos de tiempo dentro de un intervalo 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

Parámetros:

Parámetro

Obligatorio

Descripción

query

Sí

La expresión PromQL. Para obtener más información, consulte PromQL syntax.

start

No

El inicio del rango de consulta como una marca de tiempo Unix en segundos.

end

No

El final del rango de consulta como una marca de tiempo Unix en segundos.

step

No

El paso de resolución de la consulta en segundos.

También admite formatos de duración como 1s, 2m o 3h. Ejemplo: step=2m.

timeout

No

El tiempo de espera de la consulta en segundos.

También admite formatos de duración como 1s, 2m y 3h. Ejemplo: timeout=10s.

lookback_delta

No

Anula el indicador query.lookback-delta de Prometheus para esta consulta. Este indicador establece el período máximo de búsqueda retrospectiva para encontrar puntos de datos durante la evaluación de PromQL. Especifique un valor de duración; por ejemplo, lookback_delta=1m. Valor predeterminado: 3m.

  • Código de ejemplo

    Consulte los datos de métricas desde las 14:09:59 del 18 de febrero de 2023 hasta las 14:16:39 del mismo día, con un step de 60 s.

    curl -X GET 'https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/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 to your AccessKey ID and password to your AccessKey Secret.
  • Resultado

    {
      "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"
              ]
            ]
          }
        ]
      }
    }

API de consulta de metadatos

SLS también admite API de consulta de metadatos compatibles con los endpoints Querying metadata de Prometheus. Estas API recuperan nombres de métricas, etiquetas y valores de etiqueta dentro de un rango de tiempo, sin incluir marcas de tiempo ni valores de muestra.

API de consulta de series

La API de consulta de series recupera todos los nombres de métricas y sus pares clave-valor de etiqueta que coinciden con selectores específicos dentro de un rango de tiempo.

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

Obligatorio

Descripción

match[]

Sí

Los selectores de serie que deben coincidir. Por ejemplo, match[]=up{instance="demo.*"}.

Admite uno o más parámetros match[].

start

No

El inicio del rango de consulta, como una marca de tiempo Unix en segundos.

Valor predeterminado: 5 minutos antes de la hora actual.

end

No

El final del rango de consulta, como una marca de tiempo Unix en segundos.

Valor predeterminado: la hora actual.

Importante

Si especifica valores personalizados tanto para el parámetro start como para end, la API limita la consulta al intervalo de 5 minutos anterior a la hora de end. El rango de consulta efectivo es [end - 5 minutos, end].

x-sls-disable-range-limit

No

Establézcalo en true para omitir el límite de consulta de 5 minutos y usar el rango completo especificado por start y end.

forceMaxMetaTimeRangeSeconds

No

El rango de tiempo máximo de consulta en segundos. Si la duración entre end y start supera este valor, el rango de consulta se ajusta a (end - forceMaxMetaTimeRangeSeconds, end).

Configure este parámetro para mejorar la eficiencia de la consulta.

  • Solicitud de ejemplo

    curl -g -X GET 'https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/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 to your AccessKey ID and password to your AccessKey Secret.
  • Resultado

    {
        "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 de consulta de nombres de etiqueta

La API de consulta de nombres de etiqueta recupera todos los nombres de etiqueta de las series que coinciden con los selectores especificados dentro de un rango de tiempo.

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

Obligatorio

Descripción

match[]

Sí

Los selectores de serie que deben coincidir. Por ejemplo, match[]=up{instance="demo.*"}.

Admite cero, uno o más parámetros match[].

start

No

El inicio del rango de consulta, como una marca de tiempo Unix en segundos.

Valor predeterminado: 5 minutos antes de la hora actual.

end

No

El final del rango de consulta, como una marca de tiempo Unix en segundos.

Valor predeterminado: la hora actual.

Importante

Si especifica valores personalizados tanto para el parámetro start como para end, la API limita la consulta al intervalo de 5 minutos anterior a la hora de end. El rango de consulta efectivo es [end - 5 minutos, end].

x-sls-disable-range-limit

No

Establézcalo en true para omitir el límite de consulta de 5 minutos y usar el rango completo especificado por start y end.

forceMaxMetaTimeRangeSeconds

No

El rango de tiempo máximo de consulta en segundos. Si la duración entre end y start supera este valor, el rango de consulta se ajusta a (end - forceMaxMetaTimeRangeSeconds, end).

Configure este parámetro para mejorar la eficiencia de la consulta.

  • Solicitud de ejemplo

    Recupere todos los nombres de etiqueta de todas las métricas dentro del rango de tiempo especificado.

    curl -X GET 'https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/labels?start=1676700599&end=1676700999' \
    -u username:password \
    -H 'Content-Type: application/x-www-form-urlencoded'
    
    # Set username to your AccessKey ID and password to your AccessKey Secret.
  • Resultado

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

API de consulta de valores de etiqueta

La API de consulta de valores de etiqueta recupera todos los valores de un nombre de etiqueta específico a partir de las series que coinciden con los selectores indicados dentro de un rango de tiempo.

Importante

Reemplace <label_name> en la URL de la API por un nombre de etiqueta específico.

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

Parámetros:

Parámetro

Obligatorio

Descripción

match[]

Sí

Los selectores de serie que deben coincidir. Por ejemplo, match[]=up{instance="demo.*"}.

Admite uno o más parámetros match[].

start

No

El inicio del rango de consulta, como una marca de tiempo Unix en segundos.

Valor predeterminado: 5 minutos antes de la hora actual.

end

No

El final del rango de consulta, como una marca de tiempo Unix en segundos.

Valor predeterminado: la hora actual.

Importante

Si especifica valores personalizados tanto para el parámetro start como para end, la API limita la consulta al intervalo de 5 minutos anterior a la hora de end. El rango de consulta efectivo es [end - 5 minutos, end].

x-sls-disable-range-limit

No

Establézcalo en true para omitir el límite de consulta de 5 minutos y usar el rango completo especificado por start y end.

forceMaxMetaTimeRangeSeconds

No

El rango de tiempo máximo de consulta en segundos. Si la duración entre end y start supera este valor, el rango de consulta se ajusta a (end - forceMaxMetaTimeRangeSeconds, end).

Configure este parámetro para mejorar la eficiencia de la consulta.

  • Solicitud de ejemplo

    Recupere todos los valores de la etiqueta instance correspondientes a la métrica up dentro del rango de tiempo especificado.

    curl -X GET 'https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/label/instance/values?match[]=up&start=1676700599&end=1676700999' \
    -u username:password \
    -H 'Content-Type: application/x-www-form-urlencoded'
    
    # Set username to your AccessKey ID and password to your AccessKey Secret.
  • Resultado

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

API de escritura de datos

Ingeste datos de series de tiempo en un MetricStore mediante la configuración del parámetro remote_write en su archivo de configuración de Prometheus. Para obtener más información, consulte Use the remote write protocol to ingest Prometheus monitoring data. MetricStore es compatible con el protocolo remote write de Prometheus. También se admiten solicitudes HTTP directas al endpoint de escritura remota, sin necesidad de tener un proceso de Prometheus en ejecución.

MetricStore proporciona el siguiente endpoint de escritura remota para analizar sintácticamente y almacenar datos de series de tiempo.

Importante

Cuando escribe datos de series de tiempo en la base de datos de series de tiempo de SLS mediante el protocolo de escritura remota, SLS utiliza el nombre de la métrica y las etiquetas como clave de hash de forma predeterminada. Esto enruta los datos de distintas series de tiempo hacia shards específicos, lo que mejora la localidad de los datos en el almacenamiento del backend.

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

Implementación de ejemplo en Go para la API de escritura remota:

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", "") // Your AccessKey ID.
	akKey := flag.String("aksecret", "xxxx", "") // Your AccessKey Secret.
	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 Basic Authentication.
	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 response body must be fully read.
	if err != nil {
		panic(err)
	}
	return resp.Status, string(body)
}

Ejemplos de SDK

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 a number sign (#) to separate 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)
	}
}

Prometheus SDK

En el siguiente ejemplo se utiliza 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)
}

Estructura de respuesta

Las API de consulta y escritura devuelven respuestas con la siguiente estructura:

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

  // Returned when a query evaluation error occurs.
  "errorType": "<string>",
  "error": "<string>",
  
  // Returned to indicate a potentially incomplete query.
  "warnings": ["<string>"]
}

Manejo de errores

En las siguientes secciones se describen los errores comunes y sus soluciones.

Error de autenticación

  • La siguiente respuesta indica un error de autenticación. Compruebe que sus credenciales de AccessKey sean correctas.

    {
        "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}"
    }
  • Este error también ocurre si la dirección IP de origen no está en la lista de permitidos de bloques CIDR de VPC. Agregue la dirección IP a dicha lista de permitidos.

    {
        "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}"
    }

Error de sintaxis de PromQL

La siguiente respuesta indica que la expresión PromQL no es válida. Corrija la expresión en el 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"
}

Error de tiempo de espera

La siguiente respuesta indica que la consulta superó el tiempo de espera. Aumente el valor de timeout.

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

Consulta incompleta

Una respuesta con advertencias indica que el resultado está incompleto. Reduzca el rango de tiempo y vuelva a intentar la consulta.

{
    "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"
    ]
}