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. |
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 |
|
lookback_delta |
No |
Anula el indicador |
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 |
|
timeout |
No |
El tiempo de espera de la consulta en segundos. También admite formatos de duración como |
|
lookback_delta |
No |
Anula el indicador |
-
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
stepde 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, Admite uno o más parámetros |
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 [ |
x-sls-disable-range-limit | No | Establézcalo en |
forceMaxMetaTimeRangeSeconds | No | El rango de tiempo máximo de consulta en segundos. Si la duración entre 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, Admite cero, uno o más parámetros |
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 [ |
x-sls-disable-range-limit | No | Establézcalo en |
forceMaxMetaTimeRangeSeconds | No | El rango de tiempo máximo de consulta en segundos. Si la duración entre 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.
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, Admite uno o más parámetros |
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 [ |
x-sls-disable-range-limit | No | Establézcalo en |
forceMaxMetaTimeRangeSeconds | No | El rango de tiempo máximo de consulta en segundos. Si la duración entre 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.
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"
]
}