全部产品
Search
文档中心

Simple Log Service:Detail API HTTP MetricStore

更新时间:Dec 07, 2025

Simple Log Service menyediakan beberapa API untuk mengkueri metrik deret waktu atau menulis data metrik ke MetricStore. API tersebut kompatibel dengan protokol Prometheus open source. Topik ini menjelaskan API-API tersebut secara detail.

Ikhtisar

API yang disediakan oleh Prometheus berada di direktori /api/v1/. API MetricStore mengikuti konvensi yang sama. URL lengkapnya adalah https://{project}.{sls-endpoint}/prometheus/{project}/{metricstore}/api/v1/.

Variabel

Diperlukan

Deskripsi

{sls-endpoint}

Ya

Titik akhir Simple Log Service. Titik akhir ini merupakan nama domain yang digunakan untuk mengakses layanan. Titik akhir bervariasi tergantung wilayah tempat proyek berada. Untuk informasi selengkapnya, lihat Endpoints.

{project}

Ya

Project Name: Project adalah unit manajemen sumber daya Simple Log Service. Ini merupakan batas utama untuk isolasi multi-pengguna dan kontrol akses. Untuk informasi selengkapnya, lihat Manage Projects.

{metricstore}

Ya

MetricStore yang telah Anda buat. Untuk informasi selengkapnya, lihat Create a MetricStore.

Penting

Saat memanggil API, Anda harus menggunakan autentikasi BasicAuth. Atur Username ke ID AccessKey Anda dan Password ke rahasia AccessKey Anda. Kami merekomendasikan penggunaan AccessKey dari pengguna Resource Access Management (RAM). Anda harus memberikan izin kepada pengguna RAM tersebut untuk mengkueri proyek yang ditentukan. Untuk informasi selengkapnya, lihat Configure a permission assistant.

API juga mendukung autentikasi Security Token Service (STS). Dalam kasus ini, Password untuk BasicAuth memiliki format {AccessKey Secret}${STS Token}. Untuk informasi selengkapnya, lihat What is STS?.

API kueri metrik deret waktu

API kueri metrik deret waktu mencakup API Instant Queries dan API Range Queries.

API Kueri Instan

Gunakan API Kueri Instan untuk menanyakan data metrik pada titik waktu tertentu.

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

Tabel berikut menjelaskan parameter-parameter tersebut.

Variable

Diperlukan

Deskripsi

query

Ya

Pernyataan Prometheus Query Language (PromQL). Untuk informasi lebih lanjut, lihat Sintaks PromQL.

time

Tidak

Titik waktu untuk mengeksekusi kueri. Nilainya berupa stempel waktu UNIX, akurat hingga detik. Nilai default adalah waktu saat ini.

timeout

Tidak

Periode timeout eksekusi kueri, dalam satuan detik.

Format seperti 1s, 2m, 3h, dan 4d juga didukung. Contohnya, timeout=10s. Untuk informasi selengkapnya, lihat Time Durations.

lookback_delta

Tidak

Menyesuaikan flag `query.lookback-delta` di Prometheus hanya untuk kueri saat ini. Nilainya harus mengikuti format Time Durations. Contohnya, `lookback_delta=1m`. Untuk informasi selengkapnya, lihat Time Durations. Parameter ini menentukan interval lookback maksimum untuk menemukan titik data dalam perhitungan PromQL. Nilai default di SLS Metricstore adalah `3m`.

  • Contoh

    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'
    
    # Setel username dan password ke AccessKey Alibaba Cloud Anda.
  • Hasil Kueri

    {
        "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 Kueri Rentang

Gunakan API Kueri Rentang untuk menanyakan data metrik pada beberapa titik waktu dalam rentang waktu tertentu.

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

Tabel berikut menjelaskan parameter-parameter tersebut.

Variabel

Diperlukan

Deskripsi

query

Ya

Pernyataan PromQL. Untuk informasi lebih lanjut, lihat Sintaks PromQL.

start

Tidak

Waktu mulai kueri. Nilainya berupa stempel waktu UNIX, akurat hingga detik.

end

Tidak

Waktu akhir kueri. Nilainya berupa stempel waktu UNIX, akurat hingga detik.

step

Tidak

Interval antara eksekusi kueri, dalam satuan detik.

Format seperti 1s, 2m, 3h, dan 4d juga didukung. Contohnya, `step=2m`. Untuk informasi selengkapnya, lihat Time Durations.

timeout

Tidak

Periode timeout eksekusi kueri, dalam satuan detik.

Format seperti 1s, 2m, 3h, dan 4d juga didukung. Contohnya, timeout=10s. Untuk informasi selengkapnya, lihat Time Durations.

lookback_delta

Tidak

Menyesuaikan flag `query.lookback-delta` di Prometheus hanya untuk kueri saat ini. Nilainya harus mengikuti format Time Durations. Contohnya, `lookback_delta=1m`. Untuk informasi selengkapnya, lihat Time Durations. Parameter ini menentukan interval lookback maksimum untuk menemukan titik data dalam perhitungan PromQL. Nilai default di SLS Metricstore adalah `3m`.

  • Contoh

    Contoh ini mengkueri data metrik dari pukul 14:09:59 tanggal 2023-02-18 hingga pukul 14:16:39 tanggal 2023-02-18 dengan step 60 detik.

    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'
    
    # Setel username dan password ke AccessKey Alibaba Cloud Anda.
  • Hasil kueri

    {
      "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 Kueri Metadata

Simple Log Service juga mendukung pengkuerian metadata, seperti label dan nilai label. API kueri metadata SLS kompatibel dengan API Querying metadata di Prometheus. Anda dapat menggunakan API ini untuk mengambil semua metrik, label, dan nilai label dalam periode waktu tertentu. Respons tidak mencakup stempel waktu atau nilai numerik.

API Query Series

Anda dapat menggunakan Query Series API untuk mengkueri semua nama metrik dan pasangan nilai-label yang sesuai dengan kondisi tertentu dalam periode waktu yang ditentukan.

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

Tabel berikut menjelaskan parameter-parameter tersebut.

Variabel

Diperlukan

Deskripsi

match[]

Ya

Kondisi filter. Contoh: match[]=up{instance="demo.*"}.

Anda dapat menetapkan satu atau lebih nilai.

start

Tidak

Waktu mulai kueri. Nilainya berupa stempel waktu UNIX, akurat hingga detik.

Nilai defaultnya adalah 5 menit sebelum waktu saat ini.

end

Tidak

Waktu akhir kueri. Nilainya berupa stempel waktu UNIX, akurat hingga detik.

Nilai defaultnya adalah waktu saat ini.

Penting

Jika Anda menentukan nilai kustom untuk parameter start dan end, API hanya mendukung pengkuerian data dalam 5 menit sebelum waktu end. Rentang kueri adalah `(end - 5 minutes, end)`.

  • Contoh

    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'
    
    # Setel username dan password ke AccessKey Alibaba Cloud Anda.
  • Hasil

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

Anda dapat menggunakan API ini untuk mengkueri semua nama label yang sesuai dengan kondisi tertentu dalam periode waktu yang ditentukan.

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

Tabel berikut menjelaskan parameter-parameter tersebut.

Variable

Diperlukan

Deskripsi

match[]

Ya

Kondisi filter. Contohnya, `match[]=up{instance="demo.*"}`.

Anda dapat menentukan nol, satu, atau beberapa nilai.

start

Tidak

Waktu mulai rentang kueri. Nilainya berupa stempel waktu UNIX, akurat hingga detik.

Nilai defaultnya adalah 5 menit sebelum waktu saat ini.

end

Tidak

Waktu akhir rentang kueri. Nilainya berupa stempel waktu UNIX, akurat hingga detik.

Nilai defaultnya adalah waktu saat ini.

Penting

Jika Anda menentukan nilai kustom untuk parameter start dan end, API hanya mendukung pengkuerian data dalam 5 menit sebelum waktu end. Rentang kueri adalah `(end - 5 minutes, end)`.

  • Contoh

    Contoh ini mengkueri nama label dari semua metrik dalam periode waktu tertentu.

    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'
    
    # Setel username dan password ke AccessKey Alibaba Cloud Anda.
  • Hasil kueri

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

API Query Label Values

Anda dapat menggunakan Query Label Values API untuk mengkueri semua nilai label untuk nama label tertentu yang sesuai dengan kondisi tertentu dalam periode waktu yang ditentukan.

Penting

Dalam URL API, ganti <label_name> dengan nama label tertentu.

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

Tabel berikut menjelaskan parameter-parameter tersebut.

Variable

Diperlukan

Deskripsi

match[]

Ya

Kondisi filter. Contohnya, `match[]=up{instance="demo.*"}`.

Anda dapat menentukan satu atau beberapa nilai.

start

Tidak

Waktu mulai kueri. Nilainya berupa stempel waktu UNIX, akurat hingga detik.

Nilai defaultnya adalah 5 menit sebelum waktu saat ini.

end

Tidak

Waktu akhir rentang kueri. Nilainya berupa stempel waktu UNIX, akurat hingga detik.

Nilai defaultnya adalah waktu saat ini.

Penting

Jika Anda menentukan nilai kustom untuk parameter start dan end, API hanya mendukung pengkuerian data dalam 5 menit sebelum waktu end. Rentang kueri adalah `(end - 5 minutes, end)`.

  • Contoh

    Contoh ini mengkueri semua nilai label untuk label instance dari metrik up dalam periode waktu tertentu.

    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'
    
    # Setel username dan password ke AccessKey Alibaba Cloud Anda.
  • Hasil kueri

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

Data write API

Anda dapat mengirimkan data deret waktu ke MetricStore dengan mengonfigurasi parameter `remote_write` dalam file konfigurasi proses Prometheus. Untuk informasi selengkapnya, lihat Ingest Prometheus monitoring data using the remote write protocol. Karena MetricStore kompatibel dengan protokol remote write Prometheus, Anda juga dapat menulis data ke MetricStore dengan langsung memanggil API `remote_write` melalui HTTP tanpa menggunakan proses Prometheus.

MetricStore menyediakan API berikut, yang kompatibel dengan protokol remote write. API ini mengurai data deret waktu dan menulis data tersebut ke penyimpanan backend.

Penting

Jika data deret waktu ditulis ke SLS MetricStore menggunakan protokol remote write, SLS menggunakan `MetricName` dan `Labels` sebagai kunci hash secara default. Hal ini mengarahkan data deret waktu dari deret waktu berbeda ke shard tertentu untuk meningkatkan lokalitas data dalam penyimpanan.

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

Kode berikut memberikan contoh.

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", "") // Informasi AccessKey.
	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) // Mengatur informasi autentikasi dasar.
	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) // Konten body harus dibaca sepenuhnya.
	if err != nil {
		panic(err)
	}
	return resp.Status, string(body)
}

Contoh SDK

Akses API kueri melalui 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", "") // Gunakan simbol # untuk menggabungkan beberapa parameter match[].
	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)
	}
}

Akses API kueri menggunakan SDK Prometheus

Contoh ini berdasarkan 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)
}

Struktur tanggapan

Struktur respons untuk API kueri dan penulisan adalah sebagai berikut:

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

  // Dua item berikut dikembalikan ketika terjadi kesalahan selama analisis kueri.
  "errorType": "<string>",
  "error": "<string>",
  
	// Pesan peringatan dikembalikan, biasanya untuk kueri yang tidak lengkap.
  "warnings": ["<string>"]
}

Penanganan Kesalahan

Bagian ini menjelaskan kesalahan umum dan solusinya.

Otentikasi gagal

  • Jika informasi berikut dikembalikan, autentikasi gagal. Periksa dan perbarui AccessKey Anda.

    {
        "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}"
    }
  • Jika informasi berikut dikembalikan, alamat IP sumber tidak berada dalam daftar putih blok CIDR VPC. Tambahkan alamat IP tersebut ke daftar putih blok 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}"
    }

Kesalahan dalam pernyataan PromQL

Jika informasi berikut dikembalikan, pernyataan PromQL mengandung kesalahan. Perbaiki pernyataan kueri pada parameter 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"
}

Kesalahan waktu habis

Jika informasi berikut dikembalikan, terjadi kesalahan timeout. Tingkatkan nilai parameter timeout.

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

Kueri tidak lengkap

Jika informasi berikut dikembalikan, kueri tidak lengkap. Kami merekomendasikan agar Anda mempersempit rentang waktu kueri dan mencoba lagi.

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