Simple Log Service (SLS) propose des API compatibles avec Prometheus pour interroger les métriques de séries temporelles et écrire des données dans un MetricStore. Cette rubrique détaille les endpoints, les paramètres de requête, les méthodes d'authentification ainsi que la gestion des erreurs.
Présentation
Les API Prometheus sont exposées via le chemin /api/v1. Les API de MetricStore suivent cette même convention. Le format complet de l'URL est : https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/.
|
Paramètre |
Obligatoire |
Description |
|
{sls-endpoint} |
Oui |
Un endpoint de service correspond au nom de domaine utilisé pour accéder à SLS. L'endpoint dépend de la région où réside le projet. Pour en savoir plus, consultez la page Endpoints de service. |
|
{project} |
Oui |
Project name : un projet constitue l'unité de gestion des ressources dans SLS et définit la limite principale pour l'isolation multi-utilisateurs et le contrôle d'accès. Pour plus d'informations, reportez-vous à la section Gérer des projets. |
|
{metricstore} |
Oui |
Nom de votre MetricStore. Pour connaître la procédure de création, consultez la page Créer un MetricStore. |
Ces API nécessitent une authentification Basic. Définissez le champ Username avec votre AccessKey ID et le champ Password avec votre AccessKey Secret. Par mesure de sécurité, utilisez la paire de clés d'un utilisateur RAM. Accordez à cet utilisateur les autorisations nécessaires sur le projet cible. Pour plus de détails, consultez la page Configurer l'Assistant d'autorisation.
L'authentification STS est également prise en charge. Lorsque vous utilisez STS, définissez le champ Password dans l'en-tête BasicAuth selon le format {AccessKey Secret}${STS token}. Pour en savoir plus, reportez-vous à la documentation Présentation de STS.
API d'interrogation des métriques de séries temporelles
Les API d'interrogation des métriques de séries temporelles comprennent l'API d'interrogation instantanée et l'API d'interrogation par plage.
API d'interrogation instantanée
L'API d'interrogation instantanée permet de récupérer les données de métriques à un instant précis.
GET https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query
POST https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query
Paramètres :
|
Paramètre |
Obligatoire |
Description |
|
query |
Oui |
Expression PromQL. Pour plus d'informations, consultez la section Syntaxe PromQL. |
|
time |
Non |
Horodatage d'évaluation exprimé en secondes (format Unix). Valeur par défaut : heure actuelle. |
|
timeout |
Non |
Délai d'expiration de la requête, en secondes. Prend également en charge les formats de durée tels que |
|
lookback_delta |
Non |
Remplace l'indicateur Prometheus |
Cette API renvoie les quatre types de résultats suivants :
-
vector
-
Exemple de code
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. -
Résultat
{ "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
-
Exemple de code
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. -
Résultat
{ "status": "success", "data": { "resultType": "scalar", "result": [ 1676700699, "0" ] } }
-
-
string
-
Exemple de code
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. -
Résultat
{ "status": "success", "data": { "resultType": "string", "result": [ 1676700699, "test_string" ] } }
-
-
matrix
-
Exemple de code
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. -
Résultat
{ "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 d'interrogation par plage
L'API d'interrogation par plage permet de récupérer les données de métriques à plusieurs instants au sein d'une plage temporelle donnée.
GET https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query_range
POST https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/query_range
Paramètres :
|
Paramètre |
Obligatoire |
Description |
|
query |
Oui |
Expression PromQL. Pour plus d'informations, consultez la section Syntaxe PromQL. |
|
start |
Non |
Début de la plage d'interrogation, exprimé en secondes (horodatage Unix). |
|
end |
Non |
Fin de la plage d'interrogation, exprimée en secondes (horodatage Unix). |
|
step |
Non |
Pas de résolution de la requête, en secondes. Prend également en charge les formats de durée tels que |
|
timeout |
Non |
Délai d'expiration de la requête, en secondes. Prend également en charge les formats de durée tels que |
|
lookback_delta |
Non |
Remplace l'indicateur Prometheus |
-
Exemple de code
Interrogez les données de métriques du 18 février 2023 à 14:09:59 jusqu'au 18 février 2023 à 14:16:39, avec 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. -
Résultat
{ "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 d'interrogation des métadonnées
SLS prend également en charge les API d'interrogation des métadonnées compatibles avec les endpoints Prometheus dédiés à l'interrogation des métadonnées. Ces API permettent de récupérer les noms de métriques, les libellés et les valeurs de libellés sur une plage temporelle donnée, à l'exclusion des horodatages et des valeurs d'échantillons.
API d'interrogation des séries
L'API d'interrogation des séries récupère tous les noms de métriques ainsi que leurs paires clé-valeur de libellés correspondant à des sélecteurs spécifiques sur une plage temporelle donnée.
GET https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/series
POST https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/series
Paramètres :
Paramètre | Obligatoire | Description |
match[] | Oui | Sélecteurs de séries à faire correspondre. Par exemple, Prend en charge un ou plusieurs paramètres |
start | Non | Début de la plage d'interrogation, exprimé en secondes (horodatage Unix). Valeur par défaut : 5 minutes avant l'heure actuelle. |
end | Non | Fin de la plage d'interrogation, exprimée en secondes (horodatage Unix). Valeur par défaut : heure actuelle. Important Si vous spécifiez des valeurs personnalisées pour les paramètres start et end, l'API limite la requête à l'intervalle de 5 minutes précédant l'heure end. La plage effective de la requête est [ |
x-sls-disable-range-limit | Non | Définissez ce paramètre sur |
forceMaxMetaTimeRangeSeconds | Non | Plage temporelle maximale de la requête, en secondes. Si la durée entre Définissez ce paramètre pour améliorer l'efficacité des requêtes. |
-
Exemple de requête
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. -
Résultat
{ "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 d'interrogation des noms de libellés
L'API d'interrogation des noms de libellés récupère tous les noms de libellés issus des séries correspondant aux sélecteurs spécifiés sur une plage temporelle donnée.
GET https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/labels
POST https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/labels
Paramètres :
Paramètre | Obligatoire | Description |
match[] | Oui | Sélecteurs de séries à faire correspondre. Par exemple, Prend en charge zéro, un ou plusieurs paramètres |
start | Non | Début de la plage d'interrogation, exprimé en secondes (horodatage Unix). Valeur par défaut : 5 minutes avant l'heure actuelle. |
end | Non | Fin de la plage d'interrogation, exprimée en secondes (horodatage Unix). Valeur par défaut : heure actuelle. Important Si vous spécifiez des valeurs personnalisées pour les paramètres start et end, l'API limite la requête à l'intervalle de 5 minutes précédant l'heure end. La plage effective de la requête est [ |
x-sls-disable-range-limit | Non | Définissez ce paramètre sur |
forceMaxMetaTimeRangeSeconds | Non | Plage temporelle maximale de la requête, en secondes. Si la durée entre Définissez ce paramètre pour améliorer l'efficacité des requêtes. |
-
Exemple de requête
Récupérez tous les noms de libellés pour toutes les métriques sur la plage temporelle spécifiée.
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. -
Résultat
{ "status": "success", "data": [ "code", "instance", "job", "le", "method", "mode", "path", "quantile", "status", "type", "version", "__name__" ] }
API d'interrogation des valeurs de libellés
L'API d'interrogation des valeurs de libellés récupère toutes les valeurs associées à un nom de libellé spécifique, issues des séries correspondant aux sélecteurs spécifiés sur une plage temporelle donnée.
Remplacez <label_name> dans l'URL de l'API par un nom de libellé spécifique.
GET https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/label/<label_name>/values
Paramètres :
Paramètre | Obligatoire | Description |
match[] | Oui | Sélecteurs de séries à faire correspondre. Par exemple, Prend en charge un ou plusieurs paramètres |
start | Non | Début de la plage d'interrogation, exprimé en secondes (horodatage Unix). Valeur par défaut : 5 minutes avant l'heure actuelle. |
end | Non | Fin de la plage d'interrogation, exprimée en secondes (horodatage Unix). Valeur par défaut : heure actuelle. Important Si vous spécifiez des valeurs personnalisées pour les paramètres start et end, l'API limite la requête à l'intervalle de 5 minutes précédant l'heure end. La plage effective de la requête est [ |
x-sls-disable-range-limit | Non | Définissez ce paramètre sur |
forceMaxMetaTimeRangeSeconds | Non | Plage temporelle maximale de la requête, en secondes. Si la durée entre Définissez ce paramètre pour améliorer l'efficacité des requêtes. |
-
Exemple de requête
Récupérez toutes les valeurs du libellé instance pour la métrique up sur la plage temporelle spécifiée.
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. -
Résultat
{ "status": "success", "data": [ "demo.promlabs.com:10000", "demo.promlabs.com:10001", "demo.promlabs.com:10002" ] }
API d'écriture de données
Pour ingérer des données de séries temporelles dans un MetricStore, configurez le paramètre remote_write dans votre fichier de configuration Prometheus. Pour plus de détails, consultez la page Utiliser le protocole remote write pour ingérer les données de surveillance Prometheus. MetricStore est compatible avec le protocole remote write de Prometheus. Il est également possible d'envoyer des requêtes HTTP directement vers l'endpoint remote write, sans avoir besoin d'exécuter un processus Prometheus.
MetricStore met à disposition l'endpoint remote write suivant pour analyser et stocker les données de séries temporelles.
Lors de l'écriture de données de séries temporelles dans la base de données de séries temporelles SLS via le protocole remote write, SLS utilise par défaut le nom de la métrique et les libellés comme clé de hachage. Cette approche achemine les données provenant de différentes séries temporelles vers des shards spécifiques, améliorant ainsi la localité des données dans le stockage backend.
POST https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/write
Exemple d'implémentation Go pour l'API remote write :
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)
}
Exemples 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)
}
}
SDK Prometheus
L'exemple suivant utilise la bibliothèque 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)
}
Structure de réponse
Les API d'interrogation et d'écriture renvoient des réponses structurées comme suit :
{
"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>"]
}
Gestion des erreurs
Les sections suivantes décrivent les erreurs courantes et leurs résolutions.
Échec d'authentification
-
La réponse suivante indique un échec d'authentification. Vérifiez que vos identifiants AccessKey sont corrects.
{ "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}" } -
Cette erreur peut également survenir si l'adresse IP source ne figure pas dans la liste blanche des blocs CIDR VPC. Ajoutez l'adresse IP à la liste blanche des blocs CIDR VPC.
{ "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}" }
Erreur de syntaxe PromQL
La réponse suivante indique une expression PromQL invalide. Corrigez l'expression dans le paramètre 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"
}
Erreur de délai d'expiration
La réponse suivante indique un dépassement du délai d'attente de la requête. Augmentez la valeur du paramètre timeout.
{
"status": "error",
"errorType": "timeout",
"error": "query timed out in expression evaluation"
}
Requête incomplète
Une réponse accompagnée d'avertissements signale un résultat incomplet. Réduisez la plage temporelle et relancez la requête.
{
"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"
]
}