Connect ke sumber data PostgreSQL - Amazon Managed Grafana

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Connect ke sumber data PostgreSQL

Anda dapat menggunakan sumber data PostgreSQL untuk menanyakan dan memvisualisasikan data dari database Amazon Aurora PostgreSQL Anda.

penting

Grafana versi 8 mengubah struktur data yang mendasari frame data untuk sumber data Postgres, MySQL, dan Microsoft SQL Server. Akibatnya, hasil kueri deret waktu dikembalikan dalam format lebar. Untuk informasi selengkapnya, lihat Format lebar dalam dokumentasi bingkai data Grafana. Untuk membuat visualisasi Anda berfungsi seperti sebelum versi 8, Anda mungkin harus melakukan beberapa migrasi manual. Salah satu solusi didokumentasikan di Github di Postgres/MySQL/MSSQL: Memecahkan perubahan di v8.0 terkait dengan kueri deret waktu dan urutan kolom data.

Di Grafana versi 9, sumber data PostgreSQL menyiapkan sertifikat root untuk menghubungkan ke database Anda secara berbeda dari versi sebelumnya. Jika Anda memperbarui ruang kerja Anda dari versi 8 ke 9, Anda mungkin perlu mengubah cara Anda terhubung. Untuk informasi selengkapnya, lihat Memecahkan masalah dengan ruang kerja yang diperbarui.

Menambahkan sumber data

  1. Buka menu samping dengan memilih ikon Grafana di header atas.

  2. Di menu samping di bawah ikon Konfigurasi, Anda harus menemukan tautan Sumber Data.

  3. Pilih tombol + Tambahkan sumber data di header atas.

  4. Pilih PostgreSQL dari daftar dropdown Type.

Opsi sumber data

Nama Penjelasan
Name Nama sumber data. Ini adalah bagaimana Anda melihat sumber data di panel dan kueri.
Default Sumber data default berarti bahwa itu akan dipilih sebelumnya untuk panel baru.
Host Alamat IP/nama host dan port opsional dari instance PostgreSQL Anda. Jangan sertakan nama database. String koneksi untuk menghubungkan ke Postgres tidak akan benar dan akan menyebabkan kesalahan.
Database Nama database PostgreSQL Anda.
User Login/nama pengguna database pengguna.
Password Kata sandi pengguna basis data
SSL Mode Opsi ini menentukan apakah atau dengan prioritas apa koneksi SSL TCP/IP aman akan dinegosiasikan dengan server.
Max open Jumlah maksimum koneksi terbuka ke database, default unlimited (Grafana v5.4+).
Max idle Jumlah maksimum koneksi di kolam koneksi idle, default 2 (Grafana v5.4+).
Max lifetime Jumlah maksimum waktu dalam hitungan detik koneksi dapat digunakan kembali, default 14400 /4 jam (Grafana v5.4+).
Version Opsi ini menentukan fungsi mana yang tersedia di pembuat kueri (hanya tersedia di Grafana 5.3+).
TimescaleDB TimescaleDB adalah database deret waktu yang dibangun sebagai ekstensi PostgreSQL. Jika diaktifkan, Grafana akan digunakan time_bucket di $__timeGroup makro dan menampilkan fungsi agregat spesifik TimescaleDB di pembuat kueri (hanya tersedia di Grafana 5.3+).

Interval waktu min

Batas bawah untuk $_interval $_interval_ms variabel. Disarankan untuk diatur untuk menulis frekuensi, misalnya 1m jika data Anda ditulis setiap menit. Opsi ini juga dapat diganti/dikonfigurasi di panel dasbor di bawah opsi sumber data. Nilai ini harus diformat sebagai angka diikuti oleh pengenal waktu yang valid; misalnya, 1m (1 menit) atau 30s (30 detik). Pengidentifikasi waktu berikut didukung.

Pengidentifikasi Deskripsi
y Tahun
M Bulan
w Minggu
d Hari
h Jam
m Menit
s Detik
ms Milidetik

Izin pengguna basis data

penting

Pengguna database yang Anda tentukan saat Anda menambahkan sumber data seharusnya hanya diberikan izin SELECT pada database dan tabel tertentu yang ingin Anda kueri. Grafana tidak memvalidasi bahwa kueri aman. Kueri dapat mencakup pernyataan SQL apa pun. Misalnya, pernyataan seperti DELETE FROM user; dan DROP TABLE user; akan dijalankan. Untuk melindungi dari hal ini, kami sangat menyarankan Anda membuat pengguna PostgreSQL tertentu dengan izin terbatas.

Kode contoh berikut menunjukkan pembuatan pengguna PostgreSQL specifice dengan izin terbatas.

CREATE USER grafanareader WITH PASSWORD 'password'; GRANT USAGE ON SCHEMA schema TO grafanareader; GRANT SELECT ON schema.table TO grafanareader;

Pastikan bahwa pengguna tidak mendapatkan izin yang tidak diinginkan dari peran publik.

Editor kueri

Anda menemukan editor kueri PostgreSQL di tab metrik di Graph atau mode edit panel Singlestat. Anda masuk ke mode edit dengan memilih judul panel, lalu edit.

Editor kueri memiliki tautan SQL yang dihasilkan yang muncul setelah kueri dijalankan, saat dalam mode edit panel. Pilih itu, dan itu akan memperluas dan menampilkan string SQL interpolasi mentah yang dijalankan.

Pilih tabel, kolom waktu, dan kolom metrik (DARI)

Saat Anda memasuki mode edit untuk pertama kalinya atau menambahkan kueri baru, Grafana akan mencoba mengisi ulang pembuat kueri dengan tabel pertama yang memiliki kolom stempel waktu dan kolom numerik.

Di bidang FROM, Grafana akan menyarankan tabel yang ada di search_path pengguna database. Untuk memilih tabel atau tampilan yang tidak ada di Anda, search_path Anda dapat memasukkan nama yang sepenuhnya memenuhi syarat (schema.table) secara manual seperti. public.metrics

Kolom kolom Waktu mengacu pada nama kolom yang memegang nilai waktu Anda. Memilih nilai untuk bidang kolom Metrik adalah opsional. Jika nilai dipilih, bidang kolom Metrik akan digunakan sebagai nama seri.

Saran kolom metrik hanya akan berisi kolom dengan tipe data teks (char, varchar, text). Untuk menggunakan kolom dengan tipe data yang berbeda sebagai kolom metrik, Anda dapat memasukkan nama kolom dengan pemeran:ip::text. Anda juga dapat memasukkan ekspresi SQL arbitrer di bidang kolom metrik yang mengevaluasi tipe data teks seperti. hostname || ' ' || container_name

Kolom, jendela, dan fungsi agregasi (SELECT)

Di SELECT baris, Anda dapat menentukan kolom dan fungsi apa yang ingin Anda gunakan. Di kolom kolom, Anda dapat menulis ekspresi arbitrer alih-alih nama kolom seperticolumn1 * column2 / column3.

Fungsi yang tersedia di editor kueri bergantung pada versi PostgreSQL yang Anda pilih saat mengonfigurasi sumber data. Jika Anda menggunakan fungsi agregat, Anda harus mengelompokkan set hasil Anda. Jika Anda menambahkan fungsi agregat, editor akan secara otomatis menambahkan file. GROUP BY time

Editor mencoba menyederhanakan dan menyatukan bagian kueri ini.

Anda dapat menambahkan kolom nilai lebih lanjut dengan memilih tombol plus dan memilih Kolom dari menu. Beberapa kolom nilai akan diplot sebagai seri terpisah di panel grafik.

Data penyaringan (WHERE)

Untuk menambahkan filter, pilih ikon plus di sebelah kanan WHERE kondisi. Anda dapat menghapus filter dengan memilih filter dan memilih Hapus. Filter untuk rentang waktu yang dipilih saat ini secara otomatis ditambahkan ke kueri baru.

Grup Oleh

Untuk mengelompokkan berdasarkan waktu atau kolom lainnya pilih ikon plus di akhir baris GROUP BY. Daftar tarik-turun saran hanya akan menampilkan kolom teks dari tabel yang Anda pilih saat ini tetapi Anda dapat memasukkan kolom apa pun secara manual. Anda dapat menghapus grup dengan memilih item dan kemudian memilih Hapus.

Jika Anda menambahkan pengelompokan apa pun, semua kolom yang dipilih harus memiliki fungsi agregat yang diterapkan. Pembuat kueri akan secara otomatis menambahkan fungsi agregat ke semua kolom tanpa fungsi agregat saat Anda menambahkan pengelompokan.

Pengisian celah

Grafana yang Dikelola Amazon dapat mengisi nilai yang hilang saat Anda mengelompokkan berdasarkan waktu. Fungsi waktu menerima dua argumen. Argumen pertama adalah jendela waktu yang ingin Anda kelompokkan, dan argumen kedua adalah nilai yang Anda inginkan Grafana untuk mengisi item yang hilang.

Mode editor teks (RAW)

Anda dapat beralih ke mode editor kueri mentah dengan memilih ikon hamburger dan memilih mode Switch editor atau dengan memilih Edit SQL di bawah kueri.

catatan

Jika Anda menggunakan editor kueri mentah, pastikan kueri Anda setidaknya memiliki ORDER BY time dan filter pada rentang waktu yang dikembalikan.

Makro

Makro dapat digunakan dalam kueri untuk menyederhanakan sintaks dan memungkinkan bagian dinamis.

Contoh makro Deskripsi
$__time(dateColumn) Akan diganti dengan ekspresi untuk mengkonversi ke stempel waktu UNIX dan mengganti nama kolom menjadi. time_sec Misalnya, UNIX_TIMESTAMP (DateColumn) sebagai time_sec.
$__timeEpoch(dateColumn) Akan diganti dengan ekspresi untuk mengkonversi ke stempel waktu UNIX dan mengganti nama kolom menjadi. time_sec Misalnya, UNIX_TIMESTAMP (DateColumn) sebagai time_sec.
$__timeFilter(dateColumn) Akan diganti dengan filter rentang waktu menggunakan nama kolom yang ditentukan. Misalnya, DateColumn BETWEEN FROM_UNIXTIME (1494410783) DAN FROM_UNIXTIME (1494410983).
$__timeFrom() Akan diganti dengan dimulainya pemilihan waktu yang sedang aktif. Misalnya, FROM_UNIXTIME (1494410783).
$__timeTo() Akan diganti pada akhir pemilihan waktu yang sedang aktif. Misalnya, FROM_UNIXTIME (1494410983).
$__timeGroup(dateColumn,'5m') Akan diganti dengan ekspresi yang dapat digunakan dalam klausa GROUP BY. Misalnya, cast (cast (UNIX_TIMESTAMP (DateColumn)/(300) sebagai ditandatangani) 300 sebagai ditandatangani), *
$__timeGroup(dateColumn,'5m', 0) Sama seperti baris preivious, tetapi dengan parameter fill sehingga titik yang hilang dalam seri itu akan ditambahkan oleh grafana dan 0 akan digunakan sebagai nilai.
$__timeGroup(dateColumn,'5m', NULL) Sama seperti di atas tetapi NULL akan digunakan sebagai nilai untuk poin yang hilang.
$__timeGroup(dateColumn,'5m', previous) Sama seperti di atas tetapi nilai sebelumnya dalam seri itu akan digunakan sebagai nilai isi jika tidak ada nilai yang terlihat namun NULL akan digunakan (hanya tersedia di Grafana 5.3+).
$__timeGroupAlias(dateColumn,'5m') Akan diganti identik dengan $__TimeGroup tetapi dengan alias kolom tambahan
$__unixEpochFilter(dateColumn)

Akan diganti dengan filter rentang waktu menggunakan nama kolom yang ditentukan dengan waktu yang direpresentasikan sebagai stempel waktu Unix. Misalnya, *DateColumn > 1494410783 DAN DateColumn < 1494497183*

$__unixEpochFrom()`

| Akan diganti dengan dimulainya pemilihan waktu yang sedang aktif sebagai stempel waktu Unix. Misalnya, *1494410783*

$__unixEpochTo()

Akan diganti dengan akhir pemilihan waktu aktif saat ini sebagai stempel waktu Unix. Misalnya, *1494497183*

$__unixEpochNanoFilter(dateColumn)

Akan diganti dengan filter rentang waktu menggunakan nama kolom yang ditentukan dengan waktu yang direpresentasikan sebagai stempel waktu nanodetik. Misalnya, *DateColumn > 1494410783152415214 DAN DateColumn < 1494497183142514872*

$__unixEpochNanoFrom()

Akan digantikan oleh dimulainya pemilihan waktu aktif saat ini sebagai stempel waktu nanodetik. Misalnya, *1494410783152415214*
$__unixEpochNanoTo()

Akan diganti pada akhir pemilihan waktu aktif saat ini sebagai stempel waktu nanodetik. Misalnya, *1494497183142514872*

$__unixEpochGroup(dateColumn,"5m", [fillmode])

Sama seperti $__TimeGroup tetapi untuk waktu yang disimpan sebagai stempel waktu Unix.

Kueri tabel

Jika opsi kueri diatur ke Format sebagai Tabel, pada dasarnya Anda dapat melakukan semua jenis kueri SQL. Panel tabel akan secara otomatis menampilkan hasil kolom dan baris apa pun yang dikembalikan kueri Anda.

Anda dapat mengontrol nama kolom panel Tabel dengan menggunakan sintaks pemilihan kolom as SQL biasa.

Pertanyaan deret waktu

Jika Anda menetapkan FormatTime series, untuk digunakan dalam panel grafik misalnya, kueri harus mengembalikan kolom bernama time yang mengembalikan datetime SQL atau tipe data numerik yang mewakili Unix epoch. Setiap kolom kecuali time dan metric diperlakukan sebagai kolom nilai. Anda dapat mengembalikan kolom bernama metric yang digunakan sebagai nama metrik untuk kolom nilai. Jika Anda mengembalikan beberapa kolom nilai dan kolom bernamametric, kolom ini digunakan sebagai awalan untuk nama seri.

Kumpulan hasil kueri deret waktu harus diurutkan berdasarkan waktu.

Kode contoh berikut menunjukkan metric kolom.

SELECT $__timeGroup("time_date_time",'5m'), min("value_double"), 'min' as metric FROM test_data WHERE $__timeFilter("time_date_time") GROUP BY time ORDER BY time

Contoh kode folowing menunjukkan menggunakan parameter fill di makro $__TimeGroup untuk mengonversi nilai null menjadi nol sebagai gantinya.

SELECT $__timeGroup("createdAt",'5m',0), sum(value) as value, measurement FROM test_data WHERE $__timeFilter("createdAt") GROUP BY time, measurement ORDER BY time

Kode contoh berikut menunjukkan beberapa kolom.

SELECT $__timeGroup("time_date_time",'5m'), min("value_double") as "min_value", max("value_double") as "max_value" FROM test_data WHERE $__timeFilter("time_date_time") GROUP BY time ORDER BY time

Templating

Alih-alih hardcoding hal-hal seperti server, aplikasi dan nama sensor dalam kueri metrik Anda, Anda dapat menggunakan variabel di tempatnya. Variabel ditampilkan sebagai kotak pilih dropdown di bagian atas dasbor. Anda dapat menggunakan kotak dropdown ini untuk mengubah data yang ditampilkan di dasbor Anda.

Untuk informasi selengkapnya tentang variabel template dan template, lihatTemplate.

Variabel kueri

Jika Anda menambahkan variabel template dari jenisnyaQuery, Anda dapat menulis kueri PostgreSQL yang dapat mengembalikan hal-hal seperti nama pengukuran, nama kunci, atau nilai kunci yang ditampilkan sebagai kotak pilih tarik-turun.

Misalnya, Anda dapat memiliki variabel yang berisi semua nilai untuk hostname kolom dalam tabel jika Anda menentukan kueri seperti ini dalam pengaturan kueri variabel template.

SELECT hostname FROM host

Kueri dapat mengembalikan beberapa kolom dan Grafana akan secara otomatis membuat daftar dari mereka. Misalnya, query berikut akan mengembalikan daftar dengan nilai-nilai dari hostname danhostname2.

SELECT host.hostname, other_host.hostname2 FROM host JOIN other_host ON host.city = other_host.city

Untuk menggunakan makro yang bergantung pada rentang waktu seperti $__timeFilter(column) dalam kueri Anda, mode penyegaran variabel template harus disetel ke On Time Range Change.

SELECT event_name FROM event_log WHERE $__timeFilter(time_column)

Pilihan lain adalah kueri yang dapat membuat variabel kunci/nilai. Query harus mengembalikan dua kolom yang diberi nama __text dan__value. Nilai __text kolom harus unik (jika tidak unik, nilai pertama digunakan). Opsi dalam daftar dropdown akan memiliki teks dan nilai yang memungkinkan Anda memiliki nama ramah sebagai teks dan id sebagai nilainya. Contoh query dengan hostname sebagai teks dan id sebagai nilai:

SELECT hostname AS __text, id AS __value FROM host

Anda juga dapat membuat variabel bersarang. Menggunakan variabel bernamaregion, Anda bisa memiliki variabel host hanya menampilkan host dari wilayah yang dipilih saat ini. Contoh kode berikut menunjukkan kueri seperti ini (jika region adalah variabel multi-nilai, gunakan operator IN perbandingan daripada = untuk mencocokkan dengan beberapa nilai).

SELECT hostname FROM host WHERE region IN($region)

Menggunakan __searchFilter untuk memfilter hasil dalam Variabel Kueri

Menggunakan __searchFilter di bidang kueri akan memfilter hasil kueri berdasarkan jenis pengguna di kotak pilih dropdown. Ketika tidak ada yang dimasukkan oleh pengguna, nilai default untuk __searchFilter adalah%.

catatan

Penting bahwa Anda mengelilingi __searchFilter ekspresi dengan tanda kutip karena Grafana tidak melakukan ini untuk Anda.

Contoh berikut menunjukkan cara menggunakan __searchFilter sebagai bagian dari bidang query untuk mengaktifkan pencarian hostname sementara pengguna mengetik di kotak pilih dropdown.

SELECT hostname FROM my_host WHERE hostname LIKE '$__searchFilter'

Menggunakan variabel dalam kueri

Nilai variabel template hanya dikutip ketika variabel template adalahmulti-value.

Jika variabel adalah variabel multi-nilai, gunakan operator IN perbandingan daripada = untuk mencocokkan dengan beberapa nilai.

Ada dua sintaks:

$<varname>Contoh dengan variabel template bernamahostname:

SELECT atimestamp as time, aint as value FROM table WHERE $__timeFilter(atimestamp) and hostname in($hostname) ORDER BY atimestamp ASC

[[varname]]Contoh dengan variabel template bernamahostname:

SELECT atimestamp as time, aint as value FROM table WHERE $__timeFilter(atimestamp) and hostname in([[hostname]]) ORDER BY atimestamp ASC

Mematikan kutipan untuk variabel multi-nilai

Grafana yang Dikelola Amazon secara otomatis membuat string yang dikutip dan dipisahkan koma untuk variabel multi-nilai. Misalnya: jika server01 dan server02 dipilih maka akan diformat sebagai:'server01', 'server02'. Untuk menonaktifkan kutipan, gunakan opsi pemformatan csv untuk variabel.

${servers:csv}

Untuk informasi selengkapnya tentang opsi pemformatan variabel, lihatTemplate dan variabel.

Anotasi

Gunakan anotasi untuk melapisi informasi peristiwa yang kaya di atas grafik. Anda menambahkan kueri anotasi melalui menu Dasbor/tampilan Anotasi. Untuk informasi selengkapnya, lihat Anotasi.

Contoh kode berikut menunjukkan query menggunakan kolom waktu dengan nilai-nilai epoch.

SELECT epoch_time as time, metric1 as text, concat_ws(', ', metric1::text, metric2::text) as tags FROM public.test_data WHERE $__unixEpochFilter(epoch_time)

Kode contoh berikut menunjukkan kueri wilayah menggunakan kolom waktu dan waktu akhir dengan nilai epoch.

catatan

Ini hanya tersedia di Grafana v6.6+.

SELECT epoch_time as time, epoch_time_end as timeend, metric1 as text, concat_ws(', ', metric1::text, metric2::text) as tags FROM public.test_data WHERE $__unixEpochFilter(epoch_time)

Kode contoh berikut menunjukkan query menggunakan kolom waktu tipe data tanggal/waktu SQL asli.

SELECT native_date_time as time, metric1 as text, concat_ws(', ', metric1::text, metric2::text) as tags FROM public.test_data WHERE $__timeFilter(native_date_time)
Nama Penjelasan
time Nama bidang tanggal/waktu. Bisa berupa kolom dengan tipe data tanggal/waktu SQL asli atau nilai epoch.
timeend Nama opsional bidang tanggal/waktu akhir. Bisa berupa kolom dengan tipe data tanggal/waktu SQL asli atau nilai epoch (Grafana v6.6+).
text Bidang deskripsi acara.
tags Nama bidang opsional yang akan digunakan untuk tag peristiwa sebagai string yang dipisahkan koma.

Peringatan

Kueri deret waktu harus berfungsi dalam kondisi peringatan. Kueri yang diformat tabel belum didukung dalam kondisi aturan peringatan.