All Products
Search
Document Center

Application Real-Time Monitoring Service:Bagikan Dasbor Grafana dengan API key

Last Updated:Oct 23, 2026

Hasilkan tautan dasbor yang dapat dibagikan dan bebas login melalui autentikasi API key.

Latar Belakang

  • Pada Grafana native, akses langsung ke dasbor memerlukan penggunaan Snapshot atau pengaktifan akses anonim. Snapshot bersifat statis dan tidak menampilkan pembaruan data secara real-time, sementara akses anonim tanpa daftar putih IP dapat menimbulkan risiko keamanan. Sebaliknya, Managed Service for Grafana memungkinkan Anda menghasilkan tautan dasbor yang dapat dibagikan dan bebas login menggunakan autentikasi API key.

    • Anda dapat membagikan tautan ini kepada pengguna lain.

    • Pengguna yang memiliki tautan dapat mengakses dasbor tanpa harus login karena API key menyediakan autentikasi.

  • Pada Grafana 10.0.x, fitur API key digantikan oleh token service account, namun API key masih tetap tersedia. Pada Grafana 11.x, API key telah dihapus sepenuhnya, dan halaman pengelolaan API key akan mengembalikan error 404. Dalam versi ini, hanya token service account yang menyediakan autentikasi. Untuk informasi selengkapnya, lihat Service accounts.

Langkah 1: Konfigurasikan parameter Grafana

  1. Login ke Konsol ARMS. Di panel navigasi kiri, pilih Managed Service for Grafana > Workspace Management.

  2. Pada halaman Workspace Management, klik ID ruang kerja yang ingin Anda kelola.

  3. Di panel navigasi kiri, klik Parameter Settings.

  4. Dalam daftar parameter di sebelah kiri, pilih aliyun, lalu klik Modify Parameters.

  5. Atur parameter api_key_share menjadi true, lalu klik Save and Apply.

    Dalam kategori konfigurasi aliyun, temukan parameter api_key_share dalam daftar parameter.

  6. Opsional: Untuk mengaktifkan penyematan iframe, konfigurasikan parameter berikut.

    • Untuk penyematan lintas domain

      Domain Anda harus menggunakan HTTPS. Kemudian, atur tiga parameter security berikut.

      allow_embedding=true
      cookie_samesite=none
      cookie_secure=true
    • Untuk penyematan domain yang sama

      Di bagian security, atur parameter allow_embedding menjadi true untuk mengaktifkan penyematan iframe.

    • Jika Anda menyematkan iframe di instans Grafana lain, sesuaikan parameter panels pada instans tersebut.

      enable_alpha = true
      disable_sanitize_html = true

Langkah 2: Buat API key

Langkah pembuatan API key berbeda untuk Grafana 9.0.x dan 10.0.x. Periksa versi Grafana Anda dan ikuti prosedur yang sesuai.

Fitur API key telah dihapus pada Grafana 11.x. Sebagai gantinya, buat token service account dengan mengikuti prosedur untuk Grafana 10.0.x.

Jika Anda melakukan upgrade dari 9.0.x ke 10.0.x, API key yang dibuat di Grafana 9.0.x masih terlihat di halaman Administration > api keys. Anda dapat mengklik migrate to service account untuk memigrasikannya ke service account. Setelah migrasi, halaman api keys akan disembunyikan. API key yang ada akan terus berfungsi.

Grafana 9.0.x

  1. Login ke Konsol ARMS. Di panel navigasi kiri, pilih Managed Service for Grafana > Workspace Management.

  2. Pada halaman Workspace Management, temukan ruang kerja yang ingin Anda kelola dan klik URL di kolom URL untuk membuka Grafana.

    Catatan

    Anda dapat login ke Grafana menggunakan akun administrator Grafana dan password yang dikonfigurasikan saat membuat ruang kerja. Anda juga dapat mengklik Sign in with Alibaba Cloud untuk login ke Grafana menggunakan Akun Alibaba Cloud saat ini.

  3. Di sudut kiri atas beranda Grafana, klik ikon image.

  4. Di panel navigasi kiri Grafana, pilih Configuration > API keys.

    Catatan

    Izin Admin diperlukan untuk mengakses halaman ini.

  5. Klik New API key atau Add API key dan konfigurasikan parameternya.

    Parameter

    Deskripsi

    Key name

    Nama unik untuk API key.

    Role

    Atur ke Viewer.

    Time to live

    Periode validitas. Contoh: 60s (60 detik), 10m (10 menit), atau 1d (1 hari).

  6. Klik Add. Dalam kotak dialog yang muncul, salin dan simpan API key.

    Penting

    API key tidak dapat dilihat lagi setelah kotak dialog ditutup.

    Dalam kotak dialog API key created, klik tombol Copy di sebelah bidang Key untuk menyalin API key. Kotak dialog ini juga menyediakan contoh perintah cURL untuk mengautentikasi permintaan menggunakan Header HTTP Authorization: curl -H "Authorization: Bearer eyJrIjoi..." https://grafana-xxx.grafana.aliyuncs.com/api/dashboards/home.

Grafana 10.0.x

  1. Login ke Konsol ARMS. Di panel navigasi kiri, pilih Managed Service for Grafana > Workspace Management.

  2. Pada halaman Workspace Management, temukan ruang kerja yang ingin Anda kelola dan klik URL di kolom URL untuk membuka Grafana.

    Catatan

    Anda dapat login ke Grafana menggunakan akun administrator Grafana dan password yang dikonfigurasikan saat membuat ruang kerja. Anda juga dapat mengklik Sign in with Alibaba Cloud untuk login ke Grafana menggunakan Akun Alibaba Cloud saat ini.

  3. Di sudut kiri atas beranda Grafana, klik ikon image.

  4. Di panel navigasi kiri Grafana, pilih Manage > Service Accounts.

    Penting
    • Anda memerlukan izin administrator untuk mengakses menu ini.

    • Sebuah service account menggunakan satu akun pengguna.

  5. Klik Add service account, masukkan parameternya, lalu klik Create.

    Parameter

    Deskripsi

    Display name

    Nama unik untuk service account.

    Role

    Atur ke Viewer.

  6. Di sisi kanan halaman, klik Add service account token dan masukkan parameternya.

    Parameter

    Deskripsi

    Display name

    Nama unik untuk token.

    Expiration

    Periode validitas token.

    • No Expiration: Token tidak kedaluwarsa.

    • Set Expiration date: Tentukan tanggal kedaluwarsa.

    Expiration date

    Wajib diisi jika Anda memilih Set Expiration date.

  1. Klik Generate token. Dalam kotak dialog yang muncul, klik Copy to clipboard and close.

Penting

Token tidak dapat dilihat lagi setelah kotak dialog ditutup.

Langkah 3: Hasilkan tautan yang dapat dibagikan

Grafana 9.0.x

  1. Di UI Grafana, buka dasbor yang ingin Anda bagikan.

  2. Klik ikon 分享图标 dan dapatkan tautan yang dapat dibagikan dari tab Link.

  3. Tambahkan &aliyun_api_key=<Nilai API key> di akhir tautan. Ganti <Nilai API key> dengan API key yang diperoleh di Langkah 2.

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key=eyJr****WkIwNnN2c0RTSD******
  4. Gunakan tautan yang dapat dibagikan untuk mengakses Dasbor Grafana tanpa login.

Grafana 10.0.x

  1. Di UI Grafana, buka dasbor yang ingin Anda bagikan.

  2. Klik ikon 分享图标 dan dapatkan tautan yang dapat dibagikan dari tab Link.

    Dalam kotak dialog, Anda dapat mengatur opsi seperti lock time range (yang mengubah rentang waktu relatif menjadi absolut), theme (saat ini, gelap, atau terang), dan shorten URL. Di bagian Link URL di bawah, klik tombol Copy.

  3. Tambahkan &aliyun_api_key=<Nilai API key> di akhir tautan. Biarkan nama parameter URL aliyun_api_key tidak berubah, dan ganti nilainya dengan token service account yang diperoleh di Langkah 2.

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key=eyJrIjoiWkIwNnN2c0RTSD******
  4. Gunakan tautan yang dapat dibagikan untuk mengakses Dasbor Grafana tanpa login.

Langkah 4: Hasilkan tautan yang dapat dibagikan dengan keamanan tinggi (opsional)

Tautan yang dapat dibagikan yang dihasilkan di Langkah 3: Hasilkan tautan yang dapat dibagikan memerlukan rotasi kunci secara berkala untuk mencegah risiko keamanan akibat paparan kunci. Bagian ini menjelaskan cara menghasilkan tautan yang dapat dibagikan dengan keamanan tinggi untuk API key di Grafana 9.0.x dan untuk token service account di Grafana 10.0.x.

Sebelum memulai, Anda harus mengatur parameter runtime api_key_share_version menjadi v2.

  1. Login ke Konsol ARMS. Di panel navigasi kiri, pilih Managed Service for Grafana > Workspace Management.

  2. Pada halaman Workspace Management, klik ID ruang kerja target. Di panel navigasi kiri, klik Parameter Settings.

  3. Atur parameter runtime untuk api_key_share_version menjadi v2, lalu klik Save and Apply.

API key (Grafana 9.0.x)

  1. Lakukan decode Base64 pada API key yang diperoleh di Langkah 2: Buat API key.

    Base64 adalah metode encoding umum yang digunakan untuk mentransmisikan bytecode 8-bit melalui jaringan. Metode ini menggunakan 64 karakter yang dapat dicetak untuk merepresentasikan data biner.

    • Anda dapat mencari website tool umum untuk dekripsi, seperti base64.

    • Decode di Java.

      package main;
      import java.util.Base64;
      public class Base64Example{
          public static void main(String[] args) {
              String apiKey = "eyJr****REpzZGYzd2JIa0N3ekgyWjlWWmhrSTM5bWdGT2hGSmwiLCJuIjoidGVzdDEiLCJpZCI6MX0=";
              String decodeKey = new String(Base64.getDecoder().decode(apiKey));
              System.out.println(decodeKey);
          }
      }

      Output:

      {"k":"DJsd****HkCwzH2Z9VZhkI39mgFOhFJl","n":"test1","id":1}
    • Decode di Go.

      package main;
      import "fmt"
      import "encoding/base64"
      func main() {
      	apiKey := "eyJr****REpzZGYzd2JIa0N3ekgyWjlWWmhrSTM5bWdGT2hGSmwiLCJuIjoidGVzdDEiLCJpZCI6MX0="
      	decodeKey, err := base64.StdEncoding.DecodeString(apiKey)
      	if err != nil {
      		fmt.Println(err.Error())
      		return
      	}
      	fmt.Println(string(decodeKey))
      }

      Output:

      {"k":"DJsd****HkCwzH2Z9VZhkI39mgFOhFJl","n":"test1","id":1}
  2. Turunkan hash PBKDF2 dari nilai k dalam objek JSON yang telah di-decode.

    PBKDF2 (Password-Based Key Derivation Function 2) adalah fungsi derivasi kunci yang digunakan untuk menurunkan kunci kriptografi secara aman dari password dan parameter lainnya, seperti salt dan jumlah iterasi. Fungsi ini umumnya digunakan untuk penyimpanan password dan dirancang untuk mempersulit penyerang dalam memulihkan password teks biasa atau memecahkan kunci yang diturunkan meskipun database berhasil dibobol.

    Anda dapat menurunkan hash dengan berbagai cara. Tabel berikut menjelaskan parameter yang diperlukan.

    Parameter

    Deskripsi

    salt

    Atur ini ke nama API key, yaitu nilai n dari objek JSON yang telah di-decode. Dalam contoh ini, nilainya adalah test1.

    iterations

    Atur nilainya menjadi 10000.

    output length

    Atur nilainya menjadi 50 byte.

    key size

    Atur nilainya menjadi 256 bit.

    Output type

    Atur tipenya menjadi Hex.

    • Anda dapat mencari tool enkripsi online umum, seperti PBKDF2.

    • Turunkan hash di Java.

      package main;
      import javax.crypto.SecretKeyFactory;
      import java.security.GeneralSecurityException;
      import javax.crypto.spec.PBEKeySpec;
      import java.security.spec.KeySpec;
      public class PBKDFExapmle {
          public static void main(String[] args) {
              String password = "DJsd****HkCwzH2Z9VZhkI39mgFOhFJl";
              String salt = "test1";
              int iterationCount = 10000;
              int outputLength = 50 * 8;
              try {
                  KeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), iterationCount, outputLength);
                  SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
                  byte[] keyBytes = skf.generateSecret(spec).getEncoded();
                  System.out.println(bytesToHex(keyBytes));
              } catch (GeneralSecurityException e) {
                  e.printStackTrace();
              }
          }
          private static String bytesToHex(byte[] bytes) {
              StringBuilder hexString = new StringBuilder();
              for (byte b : bytes) {
                  String hex = Integer.toHexString(0xff & b);
                  if (hex.length() == 1) {
                      hexString.append('0');
                  }
                  hexString.append(hex);
              }
              return hexString.toString();
          }
      }
      

      Output:

      1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**
    • Turunkan hash di Go.

      package main;
      import "fmt"
      import "encoding/hex"
      import "crypto/sha256"
      import "golang.org/x/crypto/pbkdf2"
      func main() {
          password:="DJsd****HkCwzH2Z9VZhkI39mgFOhFJl"
          salt:="test1"
          newPasswd := pbkdf2.Key([]byte(password), []byte(salt), 10000, 50, sha256.New)
      	encodePassword:= hex.EncodeToString(newPasswd)
      	fmt.Println(encodePassword)
      }

      Output:

      1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**
  3. Hitung signature MD5 dari output PBKDF2.

    Algoritma digest pesan MD5 adalah fungsi hash kriptografi yang banyak digunakan dan menghasilkan nilai hash 128-bit (16-byte) untuk memastikan integritas transmisi informasi.

    Buat string yang akan ditandatangani sebagai berikut: <Password PBKDF2> + "_" + <timestamp Unix saat ini dalam detik>

    Password PBKDF2: 1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**

    Jika waktu sistem saat ini adalah 2024-09-20 17:12:13, maka timestamp Unix dalam detik adalah 1726823533.

    String yang akan ditandatangani: 1e5b**80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882**_1726823533

    Anda dapat menghitung signature MD5 dengan berbagai cara:

    • Anda dapat mencari tool enkripsi online umum, seperti MD5.

    • Hitung signature MD5 di Java.

      package main;
      import java.security.MessageDigest;
      public class MD5 {
          public static void main(String[] args) {
              String pbkdfPassword = "1e5b****80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882****";
              long timeSeconds=System.currentTimeMillis()/1000;
              String key=pbkdfPassword+"_"+timeSeconds;
              System.out.println(MD5.getMD5String(key,"UTF-8"));
          }
          public static String getMD5String(String str, String charset) {
              try {
                  MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                  messageDigest.reset();
                  messageDigest.update(str.getBytes(charset));
                  byte[] byteArray = messageDigest.digest();
                  StringBuffer md5StrBuff = new StringBuffer();
                  for (int i = 0; i < byteArray.length; i++) {
                      if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
                          md5StrBuff.append("0").append(
                              Integer.toHexString(0xFF & byteArray[i]));
                      } else {
                          md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
                      }
                  }
                  return md5StrBuff.toString().toLowerCase();
              } catch (Exception e) {
                  e.printStackTrace();
                  throw new RuntimeException("MD5 error:"+e.getMessage());
              }
          }
      }
      
    • Hitung signature MD5 di Go.

      package main;
      import (
          "crypto/md5"
          "encoding/hex"
          "fmt"
          "io"
          "time"
          "strconv"
      )
      func main() {
          // String yang ingin Anda hitung hash MD5-nya.
          pbkdfPassword := "1e5b****80184e78832544aae4d2e031a3539c10b575b75d7c1d44af49fcf5a7de9c58a5f0035ce35fff0e5b0476e882****"
          timeSeconds:= time.Now().Unix()
          key:=pbkdfPassword+"_"+strconv.FormatInt(timeSeconds, 10)
          // Gunakan paket MD5 untuk menghitung hash MD5 dari string.
          hash := md5.New()
          io.WriteString(hash, key)
          md5Str := hash.Sum(nil)
          // Konversi hash MD5 biner menjadi string heksadesimal.
          md5StrHex := hex.EncodeToString(md5Str)
          fmt.Println("MD5 of", key, "is", md5StrHex)
      }
  4. Tambahkan informasi signature MD5 yang dihasilkan sebagai parameter ke tautan.

    Parameter:

    Parameter

    Deskripsi

    Contoh

    aliyun_api_key_sign

    Signature MD5, yang berubah seiring waktu.

    c3bf89b867cc88df72d507edc4d1****

    aliyun_api_key_timestamp

    Timestamp penandatanganan. Signature akan kedaluwarsa jika selisih antara timestamp ini dan waktu server melebihi satu menit.

    1726823533

    aliyun_api_key_name

    Nama API key.

    test1

    aliyun_api_key_org_id

    ID organisasi tempat API key berada.

    1

    aliyun_api_key_expire_seconds

    Durasi, dalam detik, session tetap valid setelah login dengan URL yang ditandatangani.

    Default: 3600

    Contoh:

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key_sign=c3bf89b867cc88df72d507edc4d1****&aliyun_api_key_timestamp=1726823533&aliyun_api_key_name=test1&aliyun_api_key_org_id=1

    Kini Anda dapat menghasilkan tautan bebas login ke Grafana yang lebih aman secara terprogram, yang juga mencegah paparan API key.

Token service account (Grafana 10.0.x)

  1. Pisahkan token service account dari Langkah 2: Buat token service account lalu turunkan hash PBKDF2 dari komponen-komponennya.

    PBKDF2 (Password-Based Key Derivation Function 2) adalah fungsi derivasi kunci yang digunakan untuk menurunkan kunci kriptografi secara aman dari password dan parameter lainnya, seperti salt dan jumlah iterasi. Fungsi ini umumnya digunakan untuk penyimpanan password dan dirancang untuk mempersulit penyerang dalam memulihkan password teks biasa atau memecahkan kunci yang diturunkan meskipun database berhasil dibobol.

    Pisahkan token service account berdasarkan karakter underscore (_).

    # Contoh token service account:
    Token: glsa_yV9HAOVCjNKkvKoLMiypOc5T0Oov****_4f5ff3ce
    # Setelah dipisahkan:
    Prefix: glsa
    Secret: yV9HAOVCjNKkvKoLMiypOc5T0Oov****
    Salt:   4f5ff3ce

    Anda dapat menurunkan hash dengan berbagai cara. Tabel berikut menjelaskan parameter yang diperlukan.

    Parameter

    Deskripsi

    salt

    Atur ini ke sufiks token. Dalam contoh ini, nilainya adalah 4f5ff3ce.

    iterations

    Atur nilainya menjadi 10000.

    output length

    Atur nilainya menjadi 50 byte.

    key size

    Atur nilainya menjadi 256 bit.

    Output type

    Atur tipenya menjadi Hex.

    • Anda dapat mencari website tool umum untuk dekripsi, seperti charsetpbkdf2.

    • Turunkan hash di Java.

      package main;
      import javax.crypto.SecretKeyFactory;
      import java.security.GeneralSecurityException;
      import javax.crypto.spec.PBEKeySpec;
      import java.security.spec.KeySpec;
      public class PBKDFExapmle {
          public static void main(String[] args) {
              String password = "yV9H****jNKkvKoLMiypOc5T0OovHXPV";
              String salt = "4f5ff3ce";
              int iterationCount = 10000;
              int outputLength = 50 * 8;
              try {
                  KeySpec spec = new PBEKeySpec(password.toCharArray(), salt.getBytes(), iterationCount, outputLength);
                  SecretKeyFactory skf = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
                  byte[] keyBytes = skf.generateSecret(spec).getEncoded();
                  System.out.println(bytesToHex(keyBytes));
              } catch (GeneralSecurityException e) {
                  e.printStackTrace();
              }
          }
          private static String bytesToHex(byte[] bytes) {
              StringBuilder hexString = new StringBuilder();
              for (byte b : bytes) {
                  String hex = Integer.toHexString(0xff & b);
                  if (hex.length() == 1) {
                      hexString.append('0');
                  }
                  hexString.append(hex);
              }
              return hexString.toString();
          }
      }
      

      Output:

      c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****
    • Turunkan hash di Go.

      package main;
      import "fmt"
      import "encoding/hex"
      import "crypto/sha256"
      import "golang.org/x/crypto/pbkdf2"
      func main() {
          password:="yV9H****jNKkvKoLMiypOc5T0OovHXPV"
          salt:="4f5ff3ce"
          newPasswd := pbkdf2.Key([]byte(password), []byte(salt), 10000, 50, sha256.New)
      	encodePassword:= hex.EncodeToString(newPasswd)
      	fmt.Println(encodePassword)
      }

      Output:

      c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****
  2. Hitung signature MD5 dari output PBKDF2.

    Algoritma Digest Pesan MD5 adalah fungsi hash kriptografi yang banyak digunakan dan dapat menghasilkan nilai hash 128-bit (16-byte) yang digunakan untuk memastikan integritas dan konsistensi transmisi informasi.

    Buat string yang akan ditandatangani sebagai berikut: <Password PBKDF2> + "_" + <timestamp Unix saat ini dalam detik>

    Password PBKDF2: c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****

    Jika waktu sistem saat ini adalah 2024-09-20 17:12:13, maka timestamp Unix dalam detik adalah 1726823533.

    String yang akan ditandatangani: c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****_1726823533

    Anda dapat menghitung signature MD5 dengan berbagai cara:

    • Anda dapat mencari tool enkripsi online yang umum digunakan, seperti MD5.

    • Hitung signature MD5 di Java.

      package main;
      import java.security.MessageDigest;
      public class MD5 {
          public static void main(String[] args) {
              String pbkdfPassword = "c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****";
              long timeSeconds=System.currentTimeMillis()/1000;
              String key=pbkdfPassword+"_"+timeSeconds;
              System.out.println(MD5.getMD5String(key,"UTF-8"));
          }
          public static String getMD5String(String str, String charset) {
              try {
                  MessageDigest messageDigest = MessageDigest.getInstance("MD5");
                  messageDigest.reset();
                  messageDigest.update(str.getBytes(charset));
                  byte[] byteArray = messageDigest.digest();
                  StringBuffer md5StrBuff = new StringBuffer();
                  for (int i = 0; i < byteArray.length; i++) {
                      if (Integer.toHexString(0xFF & byteArray[i]).length() == 1) {
                          md5StrBuff.append("0").append(
                              Integer.toHexString(0xFF & byteArray[i]));
                      } else {
                          md5StrBuff.append(Integer.toHexString(0xFF & byteArray[i]));
                      }
                  }
                  return md5StrBuff.toString().toLowerCase();
              } catch (Exception e) {
                  e.printStackTrace();
                  throw new RuntimeException("MD5 error:"+e.getMessage());
              }
          }
      }
      
    • Hitung signature MD5 di Go.

      package main;
      import (
          "crypto/md5"
          "encoding/hex"
          "fmt"
          "io"
          "time"
          "strconv"
      )
      func main() {
          // String yang ingin Anda hitung hash MD5-nya.
          pbkdfPassword := "c3cd****971bab928e4ecd6e7a00c74657696ea07d38c43f3bb5dc3190f2285cb80695cf7bf2f25c9b1f34fe1e0f9549****"
          timeSeconds:= time.Now().Unix()
          key:=pbkdfPassword+"_"+strconv.FormatInt(timeSeconds, 10)
          // Gunakan paket MD5 untuk menghitung hash MD5 dari string.
          hash := md5.New()
          io.WriteString(hash, key)
          md5Str := hash.Sum(nil)
          // Konversi hash MD5 biner menjadi string heksadesimal.
          md5StrHex := hex.EncodeToString(md5Str)
          fmt.Println("MD5 of", key, "is", md5StrHex)
      }
  3. Tambahkan informasi signature MD5 yang dihasilkan sebagai parameter ke tautan.

    Parameter:

    Parameter

    Deskripsi

    Contoh

    aliyun_api_key_sign

    Signature MD5, yang berubah seiring waktu.

    c3bf89b867cc88df72d507edc4d1****

    aliyun_api_key_timestamp

    Timestamp penandatanganan. Signature akan kedaluwarsa jika selisih antara timestamp ini dan waktu server melebihi satu menit.

    1726823533

    aliyun_api_key_name

    Nama token service account.

    sa-1-******-*****-75c7-41ae-94da-*******

    aliyun_api_key_org_id

    ID organisasi tempat token service account berada.

    1

    aliyun_api_key_expire_seconds

    Durasi, dalam detik, session tetap valid setelah login dengan URL yang ditandatangani.

    Default: 3600

    Contoh:

    https://grafana-example.grafana.aliyuncs.com/d/TZWea****/test?orgId=1&from=167081684****&to=167083844****&aliyun_api_key_sign=c3bf89b867cc88df72d507edc4d1****&aliyun_api_key_timestamp=1726823533&aliyun_api_key_name=sa-1-******-*****-75c7-41ae-94da-*******&aliyun_api_key_org_id=1

    Kini Anda dapat menghasilkan tautan bebas login ke Grafana yang lebih aman secara terprogram, sehingga mencegah paparan token service account.

FAQ

  • Saat mengakses dasbor yang disematkan, halaman gagal dimuat dan browser menampilkan error refused to connect.

    Kemungkinan penyebab: Parameter allow_embedding tidak diatur untuk dasbor yang disematkan. Untuk mengonfigurasi parameter allow_embedding, lihat Langkah 1.

  • Dasbor tidak menampilkan data apa pun. Halaman menunjukkan pesan Not found dan notifikasi peringatan Unauthorized berwarna kuning, serta area dasbor kosong.

    Untuk dasbor yang disematkan, masalah ini dapat terjadi jika browser tidak dapat menulis cookie. Kemungkinan penyebabnya meliputi:

    • Permintaan lintas domain: Jika domain root berbeda, konfigurasi default mencegah penulisan cookie.

    • Parameter cookie_samesite diatur ke none, tetapi parameter cookie_secure diatur ke false.

    • Domain menggunakan HTTP. Karena parameter cookie_secure tidak efektif melalui HTTP, Anda harus melayani domain Anda melalui HTTPS.

    Solusi: Konfigurasikan ulang parameter Grafana seperti yang dijelaskan di Langkah 1.

  • Ketika saya mengakses dasbor melalui tautan bersama, Grafana menampilkan error If you're seeing this Grafana has failed to load its application files. Halaman menyarankan langkah troubleshooting untuk konfigurasi reverse proxy, deployment sub-path (periksa root_url atau atur serve_from_sub_path = true), build pengembangan lokal, restart grafana-server, dan kompatibilitas browser.

    Kemungkinan penyebab:

    • Versi browser Anda sudah usang.

    • Pengaturan browser Anda memblokir dasbor yang disematkan.

      Solusi:

      1. Periksa pengaturan browser Anda untuk mengizinkan cookie.

      2. Jika Anda menggunakan Chrome dalam mode penyamaran (incognito), izinkan semua cookie.

  • Untuk penyematan dasbor, apakah saya harus mengatur periode validitas singkat untuk API key dan memutarnya secara sering, atau haruskah saya mengonfigurasi kunci berumur panjang?

    Anda dapat mengonfigurasi periode validitas berdasarkan kebutuhan keamanan Anda. Kami menyarankan untuk melakukan rotasi kunci setiap tiga bulan. Jika API key bocor, segera hapus kunci tersebut.

  • Apakah ada batasan jumlah API key yang dapat saya buat?

    Kode sumber Grafana tidak memberlakukan batasan keras. Namun, UI hanya dapat menampilkan maksimal 100 kunci di halaman pengelolaan. Untuk kemudahan manajemen, kami menyarankan untuk menggunakan 100 kunci atau kurang.

  • Apakah sistem secara otomatis menghapus API key ketika periode validitasnya berakhir?

    Tidak, API key yang kedaluwarsa tidak dihapus secara otomatis. Kunci tersebut tetap ada di sistem tetapi disembunyikan secara default. Pada halaman API keys di Grafana, Anda dapat mengklik Include expired keys untuk menampilkannya. Mengaktifkan toggle Include expired keys akan menampilkan catatan untuk API key yang kedaluwarsa, termasuk nama, role, dan waktu kedaluwarsanya. Untuk menghapus kunci, klik tombol hapus di baris yang sesuai.