Grafana
resmiCari dasbor, selidiki insiden, dan kueri sumber data di instance Grafana Anda
Apa yang bisa Anda lakukan dengan Grafana MCP?
- Cari dan periksa dasbor — Gunakan
search_dashboardsdanget_dashboard_summaryuntuk menemukan dasbor dan mendapatkan ringkasan ringkas tanpa JSON lengkap. - Kueri Prometheus dan Loki — Jalankan kueri PromQL dan LogQL terhadap sumber data Anda, termasuk metadata dan persentil histogram.
- Kelola alerting — Daftarkan, buat, perbarui, dan hapus aturan alert, serta lihat kebijakan notifikasi dan titik kontak.
- Buat deeplink — Buat URL yang akurat ke dasbor, panel, dan Explore dengan rentang waktu melalui alat navigasi.
- Jalankan kueri panel — Jalankan kueri panel dasbor dengan rentang waktu dan variabel kustom menggunakan
run_panel_query.
Dokumentasi
Server MCP Grafana
Server Model Context Protocol (MCP) untuk Grafana.
Ini menyediakan akses ke instance Grafana Anda dan ekosistem di sekitarnya.
Memulai Cepat
Membutuhkan uv. Tambahkan berikut ini ke konfigurasi klien MCP Anda (misalnya Claude Desktop, Cursor):
{
"mcpServers": {
"grafana": {
"command": "uvx",
"args": ["mcp-grafana"],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>"
}
}
}
}
Untuk Grafana Cloud, ganti GRAFANA_URL dengan URL instance Anda (misalnya https://myinstance.grafana.net). Lihat Penggunaan untuk opsi instalasi lainnya termasuk Docker, biner, dan Helm.
Persyaratan
- Grafana versi 9.0 atau lebih baru diperlukan untuk fungsionalitas penuh. Beberapa fitur, terutama operasi terkait sumber data, mungkin tidak berfungsi dengan benar pada versi sebelumnya karena titik akhir API yang tidak tersedia.
Fitur
Fitur-fitur berikut saat ini tersedia di server MCP. Daftar ini hanya untuk tujuan informasi dan tidak mewakili peta jalan atau komitmen terhadap fitur-fitur di masa mendatang.
Dasbor
- Cari dasbor: Temukan dasbor berdasarkan judul atau metadata lainnya
- Dapatkan dasbor berdasarkan UID: Ambil detail dasbor lengkap menggunakan pengidentifikasi uniknya. Peringatan: Dasbor besar dapat menghabiskan ruang jendela konteks yang signifikan.
- Dapatkan ringkasan dasbor: Dapatkan gambaran ringkas tentang dasbor termasuk judul, jumlah panel, jenis panel, variabel, dan metadata tanpa JSON lengkap untuk meminimalkan penggunaan jendela konteks
- Dapatkan properti dasbor: Ekstrak bagian-bagian tertentu dari dasbor menggunakan ekspresi JSONPath (misalnya,
$.title,$.panels[*].title) untuk mengambil hanya data yang diperlukan dan mengurangi konsumsi jendela konteks - Perbarui atau buat dasbor: Ubah dasbor yang ada atau buat yang baru. Peringatan: Membutuhkan JSON dasbor lengkap yang dapat menghabiskan banyak ruang jendela konteks.
- Tambal dasbor: Terapkan perubahan spesifik pada dasbor tanpa memerlukan JSON lengkap, secara signifikan mengurangi penggunaan jendela konteks untuk modifikasi yang ditargetkan
- Dapatkan kueri panel dan info sumber data: Dapatkan judul, string kueri, dan informasi sumber data (termasuk UID dan tipe, jika tersedia) dari setiap panel dalam dasbor
Jalankan Kueri Panel
Catatan: Alat kueri panel berjalan dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan
runpanelqueryke flag--enabled-toolsAnda.
- Jalankan kueri panel: Jalankan kueri panel dasbor dengan rentang waktu kustom dan pengesampingan variabel.
Manajemen Jendela Konteks
Alat dasbor kini menyertakan beberapa strategi untuk mengelola penggunaan jendela konteks secara efektif (masalah #101):
- Gunakan
get_dashboard_summaryuntuk ringkasan dasbor dan perencanaan modifikasi - Gunakan
get_dashboard_propertydengan JSONPath ketika Anda hanya memerlukan bagian dasbor tertentu - Hindari
get_dashboard_by_uidkecuali Anda benar-benar memerlukan JSON dasbor lengkap
Sumber Data
- Daftar dan ambil informasi sumber data: Lihat semua sumber data yang dikonfigurasi dan ambil informasi terperinci tentang masing-masing.
- Jenis sumber data yang didukung: Prometheus, Loki, ClickHouse, CloudWatch, Elasticsearch, OpenSearch, Snowflake, Athena.
Contoh Kueri
Catatan: Alat contoh kueri dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan
exampleske flag--enabled-toolsAnda.
- Dapatkan contoh kueri: Ambil contoh kueri untuk berbagai jenis sumber data untuk mempelajari sintaks kueri.
Kueri Prometheus
- Kueri Prometheus: Jalankan kueri PromQL (mendukung kueri metrik instan dan rentang) terhadap sumber data Prometheus.
- Kueri metadata Prometheus: Ambil metadata metrik, nama metrik, nama label, dan nilai label dari sumber data Prometheus.
- Kueri persentil histogram: Hitung nilai persentil histogram (p50, p90, p95, p99) menggunakan histogram_quantile.
Kueri Loki
- Kueri log dan metrik Loki: Jalankan kueri log dan kueri metrik menggunakan LogQL terhadap sumber data Loki.
- Kueri metadata Loki: Ambil nama label, nilai label, dan statistik aliran dari sumber data Loki.
- Kueri pola Loki: Ambil pola log yang terdeteksi oleh Loki untuk mengidentifikasi struktur log umum dan anomali.
Kueri InfluxDB
Catatan: Alat InfluxDB dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan
influxdbke flag--enabled-toolsAnda.
- Kueri InfluxDB: Jalankan kueri terhadap sumber data InfluxDB menggunakan InfluxQL (v1.x) atau Flux (v2.x). Dialek disimpulkan dari konfigurasi sumber data, atau dapat diatur secara eksplisit melalui parameter
dialect.
Kueri ClickHouse
Catatan: Alat ClickHouse dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan
clickhouseke flag--enabled-toolsAnda.
- Daftar tabel ClickHouse: Daftar semua tabel dalam database ClickHouse dengan jumlah baris dan ukuran.
- Jelaskan skema tabel: Dapatkan nama kolom, tipe, dan metadata untuk tabel ClickHouse.
- Kueri ClickHouse: Jalankan kueri SQL dengan dukungan substitusi makro dan variabel Grafana.
Kueri CloudWatch
Catatan: Alat CloudWatch dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan
cloudwatchke flag--enabled-toolsAnda.
- Daftar namespace CloudWatch: Temukan namespace AWS CloudWatch yang tersedia.
- Daftar metrik CloudWatch: Daftar metrik yang tersedia dalam namespace tertentu.
- Daftar dimensi CloudWatch: Dapatkan dimensi untuk memfilter kueri metrik.
- Kueri CloudWatch: Jalankan kueri metrik CloudWatch dengan dukungan rentang waktu.
Kueri Graphite
Catatan: Alat Graphite dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan
graphiteke flag--enabled-toolsAnda.
- Kueri Graphite: Jalankan kueri API render Graphite terhadap sumber data Graphite.
- Daftar metrik Graphite: Jelajahi dan temukan jalur metrik Graphite.
- Daftar tag Graphite: Daftar tag Graphite yang tersedia dan nilai tag.
- Kueri kepadatan Graphite: Kueri kepadatan metrik Graphite untuk pola tertentu.
Kueri Athena
Catatan: Alat Athena dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan
athenake flag--enabled-toolsAnda.
- Daftar katalog Athena: Temukan katalog data yang tersedia (misalnya AwsDataCatalog, konektor Iceberg).
- Daftar database Athena: Daftar database dalam katalog Athena.
- Daftar tabel Athena: Daftar tabel dalam database Athena.
- Jelaskan tabel Athena: Dapatkan nama kolom untuk tabel Athena.
- Kueri Athena: Jalankan kueri SQL terhadap Amazon Athena melalui Grafana dengan substitusi makro, penegakan batas, dan dukungan variabel templat.
Kueri Snowflake
Catatan: Alat Snowflake dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan
snowflakeke flag--enabled-toolsAnda.
Kueri berjalan melalui sumber data Snowflake Grafana (plugin Grafana Enterprise grafana-snowflake-datasource), sehingga autentikasi ditangani oleh konfigurasi sumber data di Grafana — kredensial tidak pernah terlihat oleh server MCP. Ini adalah model yang sama yang digunakan untuk alat ClickHouse.
- Daftar tabel Snowflake: Temukan tabel (dengan database, skema, jenis, jumlah baris, dan ukuran) melalui
INFORMATION_SCHEMA.TABLES. Filter database/skema opsional. - Jelaskan skema tabel: Dapatkan nama kolom, tipe data, kemampuan null, nilai default, dan komentar untuk tabel Snowflake.
- Kueri Snowflake: Jalankan kueri SQL dengan dukungan substitusi makro dan variabel. Berguna untuk mengkueri tabel peristiwa Snowflake (misalnya
SNOWFLAKE.TELEMETRY.EVENTS) untuk log dan jejak, atau tabel pengguna apa pun.- Makro yang didukung:
$__timeFilter(column),$__timeFrom,$__timeTo,$__from,$__to(ms Unix),$__interval(detik),$__interval_ms, dan${varname}untuk substitusi variabel templat.
- Makro yang didukung:
Kueri Elasticsearch/OpenSearch
Catatan: Alat Elasticsearch/OpenSearch dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan
elasticsearchke flag--enabled-toolsAnda.
- Kueri Elasticsearch/OpenSearch: Jalankan kueri pencarian terhadap sumber data Elasticsearch atau OpenSearch menggunakan sintaks kueri Lucene atau Elasticsearch Query DSL. Mendukung pemfilteran berdasarkan rentang waktu dan pengambilan log, metrik, atau data terindeks apa pun. Mengembalikan dokumen dengan indeks, ID, bidang sumber, dan skor relevansi opsional.
Kueri Quickwit
Catatan: Alat Quickwit dinonaktifkan secara default. Untuk mengaktifkannya, tambahkan
quickwitke flag--enabled-toolsAnda.
- Kueri Quickwit: Jalankan kueri pencarian terhadap sumber data Quickwit menggunakan sintaks kueri Lucene atau sebagian Query DSL yang kompatibel dengan Elasticsearch. Mendukung pemfilteran berdasarkan rentang waktu dan pengambilan log atau dokumen terindeks lainnya. Mengembalikan dokumen dengan indeks, ID, bidang sumber, dan skor relevansi opsional.
Observabilitas Agen
Catatan: Alat Observabilitas Agen dinonaktifkan secara default dan hanya berfungsi di Grafana Cloud. Untuk mengaktifkannya, tambahkan
agento11yke flag--enabled-toolsAnda.
- Daftar dan cari percakapan: Daftar percakapan LLM terbaru atau cari dengan ekspresi filter (model, penyedia, agen, status, jenis kesalahan, hasil evaluasi, dan lainnya) dalam rentang waktu. Hasil pencarian mencakup jumlah kesalahan, ringkasan peringkat, ringkasan evaluasi, dan ID jejak.
- Dapatkan detail percakapan: Ambil satu percakapan dengan semua generasinya, termasuk prompt dan keluaran.
- Dapatkan detail dan skor generasi: Ambil satu generasi berdasarkan ID, dan skor evaluasinya (evaluator, kunci skor, nilai, lulus, penjelasan).
- Baca katalog agen: Daftar agen yang mengirim telemetri, ambil satu versi agen secara lengkap (prompt sistem lengkap, setiap alat dengan skema JSON-nya, dan model yang dijalankannya), telusuri riwayat versi agen, dan bandingkan agregat skor evaluasi per versi. Versi efektif adalah hash
sha256:yang tidak pernah terpengaruh oleh perubahan alat; untuk agen yang tidak melaporkan versinya sendiri, hash tersebut menggunakan prompt sistem, sehingga pengeditan prompt menghasilkan versi baru. Baris katalog dan versi membawatoken_estimate, yang layak diperiksa sebelum mengambil prompt lengkap. - Periksa evaluator dan templat: Baca evaluator asal skor, templat asal evaluator tersebut, serta penyedia dan model juri yang tersedia untuk evaluator juri LLM. Dengan alat tulis diaktifkan, juga buat, fork, uji, dan hapus evaluator.
- Periksa aturan eval dan penjaga: Baca aturan eval asinkron yang mengikat evaluator ke lalu lintas produksi, dan penjaga (aturan hook) yang berjalan inline dan dapat memperingatkan atau menolak. Dengan alat tulis diaktifkan, juga buat, perbarui, pratinjau, dan hapus. Operasi tulis serta operasi
preview_ruledantest_evaluatoryang tidak persisten memerlukan izingrafana-agento11y-app.eval:write, yang diberikan oleh peran Agento11y Admin. - Kurasi percakapan dan koleksi tersimpan: Baca percakapan tersimpan (penanda yang memberikan ID, nama, dan tag yang stabil pada percakapan) dan koleksi yang mengelompokkannya, termasuk jumlah anggota setiap koleksi dan koleksi yang tertanam di setiap baris percakapan tersimpan. Dengan alat tulis diaktifkan, juga tandai percakapan, buat dan edit koleksi, serta tambah atau hapus anggota. Operasi tulis ini memerlukan izin
grafana-agento11y-app.eval:writeyang sama. - Baca dan edit rangkaian pengujian: Daftar rangkaian pengujian berversi yang digunakan untuk eksperimen offline, baca satu dengan riwayat versi lengkapnya, dan telusuri kasus pengujian dari sebuah versi. Dengan alat tulis diaktifkan, juga buat rangkaian, ganti nama atau beri tag ulang, buka versi draf, publikasikan, dan tulis atau hapus kasus pengujiannya. Versi yang dipublikasikan dibekukan, sehingga pengeditan berarti membuka draf baru. Operasi tulis ini memerlukan
grafana-agento11y-app.eval:write. - Baca eksperimen offline: Daftar proses evaluasi pada rangkaian pengujian dan baca satu dengan tingkat kelulusan utama, biaya, dan total token. Telusuri laporan per kasus pengujian hingga percobaan, skornya dengan penjelasan setiap juri, dan metadata artefaknya. Dengan alat tulis diaktifkan, juga ganti nama atau beri tag ulang eksperimen dan batalkan eksperimen yang sedang berjalan, yang memerlukan
grafana-agento11y-app.eval:write. Eksperimen dibuat oleh runner SDK, bukan oleh alat ini.
Asisten Grafana
Catatan: Alat asisten dinonaktifkan secara bawaan dan memerlukan plugin Grafana Assistant (
grafana-assistant-app) yang terinstal pada instance Grafana target. Alat-alat ini juga merupakan alat tulis (asisten dapat mengubah status stack), sehingga dilewati saat--disable-writedisetel. Untuk mengaktifkannya, tambahkanassistantke flag--enabled-toolsAnda.
- Tanyakan pada asisten: Kirim prompt bahasa alami ke Grafana Assistant dan tunggu balasan teks lengkap. Asisten dapat menggunakan alat, metrik, log, dan konteks stack lainnya—lebih luas daripada sekadar menjalankan satu kueri sumber data yang terisolasi. Teruskan
contextIdyang dikembalikan dalam panggilan lanjutan untuk melanjutkan percakapan yang sama. Tugas yang kompleks dapat memakan waktu beberapa menit; panggilan akan memblokir hingga balasan selesai atau permintaan habis waktu (5 menit).
Insiden
- Cari, buat, dan perbarui insiden: Kelola insiden di Grafana Incident, termasuk mencari, membuat, dan menambahkan aktivitas ke insiden.
Investigasi Sift
- Daftar investigasi Sift: Ambil daftar investigasi Sift, dengan dukungan parameter limit.
- Dapatkan investigasi Sift: Ambil detail investigasi Sift tertentu berdasarkan UUID-nya.
- Dapatkan analisis Sift: Ambil analisis tertentu dari investigasi Sift.
- Temukan pola kesalahan di log: Deteksi pola kesalahan yang meningkat di log Loki menggunakan Sift.
- Temukan permintaan lambat: Deteksi permintaan lambat menggunakan Sift (Tempo).
Alerting
- Daftar dan ambil informasi aturan alert: Lihat aturan alert dan statusnya (firing/normal/error/dll.) di Grafana. Mendukung aturan yang dikelola Grafana dan aturan yang dikelola sumber data dari sumber data Prometheus atau Loki.
- Buat dan perbarui aturan alert: Buat aturan alert baru atau ubah aturan yang sudah ada.
- Hapus aturan alert: Hapus aturan alert berdasarkan UID.
- Kelola perutean alerting: Lihat kebijakan notifikasi, contact point, dan interval waktu. Mendukung contact point yang dikelola Grafana dan receiver dari sumber data Alertmanager eksternal (Prometheus Alertmanager, Mimir, Cortex).
Grafana OnCall
- Daftar dan kelola jadwal: Lihat dan kelola jadwal on-call di Grafana OnCall.
- Dapatkan detail shift: Ambil informasi terperinci tentang shift on-call tertentu.
- Dapatkan pengguna on-call saat ini: Lihat pengguna mana yang sedang on-call untuk suatu jadwal.
- Daftar tim dan pengguna: Lihat semua tim dan pengguna OnCall.
- Daftar grup alert: Lihat dan filter grup alert dari Grafana OnCall berdasarkan berbagai kriteria termasuk status, integrasi, label, dan rentang waktu.
- Dapatkan detail grup alert: Ambil informasi terperinci tentang grup alert tertentu berdasarkan ID-nya.
Admin
Catatan: Alat admin dinonaktifkan secara bawaan. Untuk mengaktifkannya, sertakan
admindi flag--enabled-toolsAnda.
- Daftar tim: Lihat semua tim yang dikonfigurasi di Grafana.
- Daftar pengguna: Lihat semua pengguna dalam organisasi di Grafana.
- Daftar semua peran: Daftar semua peran Grafana, dengan filter opsional untuk peran yang dapat didelegasikan.
- Dapatkan detail peran: Dapatkan detail untuk peran Grafana tertentu berdasarkan UID.
- Daftar penugasan untuk suatu peran: Daftar semua pengguna, tim, dan akun layanan yang ditugaskan ke suatu peran.
- Daftar peran untuk pengguna: Daftar semua peran yang ditugaskan ke satu atau lebih pengguna.
- Daftar peran untuk tim: Daftar semua peran yang ditugaskan ke satu atau lebih tim.
- Daftar izin untuk suatu sumber daya: Daftar semua izin yang ditentukan untuk sumber daya tertentu (dashboard, sumber data, folder, dll.).
- Jelaskan sumber daya Grafana: Daftar izin yang tersedia dan kemampuan penugasan untuk suatu jenis sumber daya.
Navigasi
- Buat deeplink: Buat URL deeplink yang akurat untuk sumber daya Grafana alih-alih mengandalkan tebakan URL LLM.
- Tautan dashboard: Buat tautan langsung ke dashboard menggunakan UID-nya (mis.,
http://localhost:3000/d/dashboard-uid) - Tautan panel: Buat tautan ke panel tertentu di dalam dashboard dengan parameter viewPanel (mis.,
http://localhost:3000/d/dashboard-uid?viewPanel=5) - Tautan Explore: Buat tautan ke Grafana Explore dengan sumber data yang telah dikonfigurasi (mis.,
http://localhost:3000/explore?left={"datasource":"prometheus-uid"}) - Dukungan rentang waktu: Tambahkan parameter rentang waktu ke tautan (
from=now-1h&to=now) - Parameter kustom: Sertakan parameter kueri tambahan seperti variabel dashboard atau interval penyegaran
- Tautan dashboard: Buat tautan langsung ke dashboard menggunakan UID-nya (mis.,
Anotasi
- Dapatkan Anotasi: Kueri anotasi dengan filter. Mendukung rentang waktu, UID dashboard, tag, dan mode pencocokan.
- Buat Anotasi: Buat anotasi baru di dashboard atau panel.
- Buat Anotasi Graphite: Buat anotasi menggunakan format Graphite (
what,when,tags,data). - Perbarui Anotasi: Ganti semua bidang anotasi yang ada (pembaruan penuh).
- Patch Anotasi: Perbarui hanya bidang tertentu dari anotasi (pembaruan parsial).
- Dapatkan Tag Anotasi: Daftar tag anotasi yang tersedia dengan pemfilteran opsional.
Snapshot
- Daftar snapshot: Daftar snapshot dashboard dengan filter kueri dan limit opsional.
- Dapatkan snapshot: Ambil metadata snapshot dan payload dashboard berdasarkan kunci snapshot.
- Buat snapshot: Buat snapshot dashboard dari payload dashboard lengkap, dengan opsi kedaluwarsa dan snapshot eksternal opsional.
- Hapus snapshot: Hapus snapshot berdasarkan kunci snapshot.
Rendering
- Dapatkan gambar panel atau dashboard: Render panel dashboard Grafana atau dashboard lengkap sebagai gambar PNG. Mengembalikan gambar sebagai data berenkode base64 untuk digunakan dalam laporan, alert, atau presentasi. Mendukung penyesuaian dimensi, rentang waktu, tema, skala, dan variabel dashboard. Juga mendukung rendering dashboard yang belum diterapkan dari cabang repositori provisioning (mis., pratinjau PR git-sync) melalui parameter
provisioningPreviewopsional.- Catatan: Memerlukan layanan Grafana Image Renderer untuk diinstal dan dikonfigurasi.
Provisioning
- Daftar repositori provisioning: Daftar repositori provisioning yang dikonfigurasi untuk instance Grafana ini (mis., sumber git-sync), mengembalikan slug setiap repositori beserta URL sumber, cabang, jalur, status sinkronisasi, dan kesehatannya.
- Validasi file provisioning: Terapkan dry-run file dari repositori provisioning pada cabang atau commit tertentu. Mengembalikan apakah file tersebut akan diterima, tindakan sumber daya (buat/perbarui), jenis sumber daya target, dan kesalahan validasi terstruktur—permukaan penerimaan yang sama yang digunakan oleh komentator PR Grafana.
Daftar alat dapat dikonfigurasi, sehingga Anda dapat memilih alat mana yang ingin Anda sediakan untuk klien MCP.
Ini berguna jika Anda tidak menggunakan fungsionalitas tertentu atau jika Anda tidak ingin menghabiskan terlalu banyak ruang di jendela konteks.
Untuk menonaktifkan kategori alat, gunakan flag --disable-<category> saat memulai server. Misalnya, untuk menonaktifkan
alat OnCall, gunakan --disable-oncall, atau untuk menonaktifkan pembuatan deeplink navigasi, gunakan --disable-navigation.
Izin RBAC
Setiap alat memerlukan izin RBAC tertentu agar berfungsi dengan benar. Saat membuat akun layanan untuk server MCP, pastikan akun tersebut memiliki izin yang diperlukan berdasarkan alat yang ingin Anda gunakan. Izin yang tercantum adalah tindakan minimum yang diperlukan—Anda mungkin juga memerlukan cakupan yang sesuai (mis., datasources:*, dashboards:*, folders:*) tergantung pada kasus penggunaan Anda.
Tips: Jika Anda tidak terbiasa dengan RBAC Grafana atau Anda menginginkan pengaturan yang lebih cepat dan sederhana daripada mengonfigurasi banyak cakupan granular, Anda dapat menetapkan peran bawaan seperti Editor ke akun layanan. Peran Editor memberikan akses baca/tulis yang luas yang akan memungkinkan sebagian besar operasi server MCP; peran ini kurang granular (dan karenanya kurang restriktif) daripada cakupan yang diterapkan secara manual, jadi gunakan hanya ketika kenyamanan lebih penting daripada akses hak-istimewa-minimum yang ketat.
Catatan: Alat Grafana Incident dan Sift menggunakan peran Grafana dasar alih-alih izin RBAC yang terperinci:
- Peran Viewer: Diperlukan untuk operasi baca-saja (daftar insiden, dapatkan investigasi)
- Peran Editor: Diperlukan untuk operasi tulis (buat insiden, ubah investigasi)
Untuk informasi lebih lanjut tentang RBAC Grafana, lihat dokumentasi resmi.
Cakupan RBAC
Cakupan menentukan sumber daya spesifik yang berlaku untuk izin. Setiap tindakan memerlukan kombinasi izin dan cakupan yang sesuai.
Pola Cakupan Umum:
-
Akses luas: Gunakan wildcard
*untuk akses tingkat organisasidatasources:*- Akses ke semua sumber datadashboards:*- Akses ke semua dashboardfolders:*- Akses ke semua folderteams:*- Akses ke semua tim
-
Akses terbatas: Gunakan UID atau ID spesifik untuk membatasi akses ke sumber daya individual
datasources:uid:prometheus-uid- Akses hanya ke sumber data Prometheus tertentudashboards:uid:abc123- Akses hanya ke dashboard dengan UIDabc123folders:uid:xyz789- Akses hanya ke folder dengan UIDxyz789teams:id:5- Akses hanya ke tim dengan ID5global.users:id:123- Akses hanya ke pengguna dengan ID123
Contoh:
-
Akses server MCP penuh: Berikan izin luas untuk semua alat
datasources:* (datasources:read, datasources:query) dashboards:* (dashboards:read, dashboards:create, dashboards:write) folders:* (for dashboard creation and alert rules) teams:* (teams:read) global.users:* (users:read) -
Akses sumber data terbatas: Hanya kueri instance Prometheus dan Loki tertentu
datasources:uid:prometheus-prod (datasources:query) datasources:uid:loki-prod (datasources:query) -
Akses khusus dashboard: Hanya baca dashboard tertentu
dashboards:uid:monitoring-dashboard (dashboards:read) dashboards:uid:alerts-dashboard (dashboards:read)
Alat
| Tool | Category | Description | Required RBAC Permissions | Required Scopes |
|---|---|---|---|---|
list_teams | Admin | Daftar semua tim | teams:read | teams:* or teams:id:1 |
list_users_by_org | Admin | Daftar semua pengguna dalam organisasi | users:read | global.users:* or global.users:id:123 |
list_all_roles | Admin | Daftar semua peran Grafana | roles:read | roles:* |
get_role_details | Admin | Dapatkan detail untuk peran Grafana | roles:read | roles:uid:editor |
get_role_assignments | Admin | Daftar penugasan untuk peran | roles:read | roles:uid:editor |
list_user_roles | Admin | Daftar peran untuk pengguna | roles:read | global.users:id:123 |
list_team_roles | Admin | Daftar peran untuk tim | roles:read | teams:id:7 |
get_resource_permissions | Admin | Daftar izin untuk sumber daya | permissions:read | dashboards:uid:abcd1234 |
get_resource_description | Admin | Jelaskan tipe sumber daya Grafana | permissions:read | dashboards:* |
search_dashboards | Search | Cari dashboard | dashboards:read | dashboards:* or dashboards:uid:abc123 |
get_dashboard_by_uid | Dashboard | Dapatkan dashboard berdasarkan uid | dashboards:read | dashboards:uid:abc123 |
update_dashboard | Dashboard | Perbarui atau buat dashboard baru | dashboards:create, dashboards:write | dashboards:*, folders:* or folders:uid:xyz789 |
get_dashboard_panel_queries | Dashboard | Dapatkan judul panel, kueri, UID sumber data, dan tipe dari dashboard | dashboards:read | dashboards:uid:abc123 |
run_panel_query | RunPanelQuery* | Jalankan satu atau lebih kueri panel dashboard | dashboards:read, datasources:query | dashboards:uid:*, datasources:uid:* |
get_dashboard_property | Dashboard | Ekstrak bagian tertentu dari dashboard menggunakan ekspresi JSONPath | dashboards:read | dashboards:uid:abc123 |
get_dashboard_summary | Dashboard | Dapatkan ringkasan ringkas dari dashboard tanpa JSON lengkap | dashboards:read | dashboards:uid:abc123 |
list_datasources | Datasources | Daftar sumber data | datasources:read | datasources:* |
get_datasource | Datasources | Dapatkan sumber data berdasarkan UID atau nama | datasources:read | datasources:uid:prometheus-uid |
get_query_examples | Examples* | Dapatkan contoh kueri untuk tipe sumber data | datasources:read | datasources:* |
query_prometheus | Prometheus | Jalankan kueri terhadap sumber data Prometheus | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_metric_metadata | Prometheus | Daftar metadata metrik | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_metric_names | Prometheus | Daftar nama metrik yang tersedia | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_label_names | Prometheus | Daftar nama label yang cocok dengan pemilih | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_label_values | Prometheus | Daftar nilai untuk label tertentu | datasources:query | datasources:uid:prometheus-uid |
query_prometheus_histogram | Prometheus | Hitung nilai persentil histogram | datasources:query | datasources:uid:prometheus-uid |
list_incidents | Incident | Daftar insiden di Grafana Incident | Viewer role | N/A |
create_incident | Incident | Buat insiden di Grafana Incident | Editor role | N/A |
add_activity_to_incident | Incident | Tambahkan item aktivitas ke insiden di Grafana Incident | Editor role | N/A |
get_incident | Incident | Dapatkan satu insiden berdasarkan ID | Viewer role | N/A |
query_loki_logs | Loki | Kueri dan ambil log menggunakan LogQL (kueri log atau metrik) | datasources:query | datasources:uid:loki-uid |
list_loki_label_names | Loki | Daftar semua nama label yang tersedia dalam log | datasources:query | datasources:uid:loki-uid |
list_loki_label_values | Loki | Daftar nilai untuk label log tertentu | datasources:query | datasources:uid:loki-uid |
query_loki_stats | Loki | Dapatkan statistik tentang aliran log | datasources:query | datasources:uid:loki-uid |
query_loki_patterns | Loki | Kueri pola log yang terdeteksi untuk mengidentifikasi struktur umum | datasources:query | datasources:uid:loki-uid |
analyze_loki_labels | Loki | Audit strategi label Loki (live atau statis) dan secara opsional diagnosis kinerja kueri | datasources:query | datasources:uid:loki-uid |
suggest_loki_alloy_label_config | Config | Hasilkan cuplikan Alloy loki.process yang menerapkan label yang disetujui | N/A | N/A |
query_influxdb | InfluxDB | Kueri InfluxDB menggunakan InfluxQL (v1) atau Flux (v2) | datasources:query | datasources:uid:influxdb-uid |
list_clickhouse_tables | ClickHouse* | Daftar tabel dalam basis data ClickHouse | datasources:query | datasources:uid:* |
describe_clickhouse_table | ClickHouse* | Dapatkan skema tabel dengan tipe kolom | datasources:query | datasources:uid:* |
query_clickhouse | ClickHouse* | Jalankan kueri SQL dengan substitusi makro | datasources:query | datasources:uid:* |
list_cloudwatch_namespaces | CloudWatch* | Daftar namespace AWS CloudWatch yang tersedia | datasources:query | datasources:uid:* |
list_cloudwatch_metrics | CloudWatch* | Daftar metrik dalam namespace | datasources:query | datasources:uid:* |
list_cloudwatch_dimensions | CloudWatch* | Daftar dimensi untuk metrik | datasources:query | datasources:uid:* |
query_cloudwatch | CloudWatch* | Jalankan kueri metrik CloudWatch | datasources:query | datasources:uid:* |
list_athena_catalogs | Athena* | Daftar katalog data Athena yang tersedia | datasources:query | datasources:uid:* |
list_athena_databases | Athena* | Daftar database dalam katalog Athena | datasources:query | datasources:uid:* |
list_athena_tables | Athena* | Daftar tabel dalam database Athena | datasources:query | datasources:uid:* |
describe_athena_table | Athena* | Ambil nama kolom untuk tabel Athena | datasources:query | datasources:uid:* |
query_athena | Athena* | Jalankan kueri SQL dengan substitusi makro | datasources:query | datasources:uid:* |
query_elasticsearch | Elasticsearch/OpenSearch* | Kueri Elasticsearch atau OpenSearch menggunakan sintaks Lucene atau Query DSL | datasources:query | datasources:uid:datasource-uid |
query_quickwit | Quickwit* | Kueri Quickwit menggunakan sintaks Lucene atau Query DSL | datasources:query | datasources:uid:quickwit-uid |
list_snowflake_tables | Snowflake* | Daftar tabel dalam database/skema Snowflake melalui INFORMATION_SCHEMA | datasources:query | datasources:uid:* |
describe_snowflake_table | Snowflake* | Ambil skema tabel (tipe kolom, nullable, default, komentar) | datasources:query | datasources:uid:* |
query_snowflake | Snowflake* | Jalankan kueri SQL dengan substitusi makro/variabel | datasources:query | datasources:uid:* |
alerting_manage_rules | Alerting | Kelola aturan alert (daftar, dapatkan, versi, buat, perbarui, hapus) | alert.rules:read + alert.rules:write untuk mutasi | folders:* atau folders:uid:alerts-folder |
alerting_manage_routing | Alerting | Kelola kebijakan notifikasi, titik kontak, dan interval waktu | alert.notifications:read | Lingkup global |
list_oncall_schedules | OnCall | Daftar jadwal dari Grafana OnCall | grafana-oncall-app.schedules:read | Lingkup khusus plugin |
get_oncall_shift | OnCall | Dapatkan detail untuk shift OnCall tertentu | grafana-oncall-app.schedules:read | Lingkup khusus plugin |
get_current_oncall_users | OnCall | Dapatkan pengguna yang sedang on-call untuk jadwal tertentu | grafana-oncall-app.schedules:read | Lingkup khusus plugin |
list_oncall_teams | OnCall | Daftar tim dari Grafana OnCall | grafana-oncall-app.user-settings:read | Lingkup khusus plugin |
list_oncall_users | OnCall | Daftar pengguna dari Grafana OnCall | grafana-oncall-app.user-settings:read | Lingkup khusus plugin |
list_alert_groups | OnCall | Daftar grup alert dari Grafana OnCall dengan opsi filter | grafana-oncall-app.alert-groups:read | Lingkup khusus plugin |
get_alert_group | OnCall | Dapatkan grup alert tertentu dari Grafana OnCall berdasarkan ID-nya | grafana-oncall-app.alert-groups:read | Lingkup khusus plugin |
get_sift_investigation | Sift | Ambil investigasi Sift yang ada berdasarkan UUID-nya | Peran Penonton | N/A |
get_sift_analysis | Sift | Ambil analisis tertentu dari investigasi Sift | Peran Penonton | N/A |
list_sift_investigations | Sift | Ambil daftar investigasi Sift dengan batas opsional | Peran Penonton | N/A |
find_error_pattern_logs | Sift | Menemukan pola error yang meningkat pada log Loki. | Peran Editor | N/A |
find_slow_requests | Sift | Menemukan permintaan lambat dari datasource tempo yang relevan. | Peran Editor | N/A |
list_pyroscope_label_names | Pyroscope | Daftar nama label yang cocok dengan selektor | datasources:query | datasources:uid:pyroscope-uid |
list_pyroscope_label_values | Pyroscope | Daftar nilai label yang cocok dengan selektor untuk nama label | datasources:query | datasources:uid:pyroscope-uid |
list_pyroscope_profile_types | Pyroscope | Daftar tipe profil yang tersedia | datasources:query | datasources:uid:pyroscope-uid |
query_pyroscope | Pyroscope | Kueri profil, metrik, atau keduanya dari Pyroscope | datasources:query | datasources:uid:pyroscope-uid |
get_assertions | Asserts | Dapatkan ringkasan asersi untuk entitas tertentu | Izin khusus plugin | Lingkup khusus plugin |
agento11y_manage_conversations | Agent Observability* | Daftar, cari, dan ambil percakapan LLM dari Grafana Agent Observability | grafana-agento11y-app.conversations:read | N/A |
agento11y_manage_generations | Agent Observability* | Ambil detail generasi LLM dan skor evaluasi dari Grafana Agent Observability | grafana-agento11y-app.data:read | N/A |
agento11y_manage_agents | Agent Observability* | Baca katalog agen: daftar agen, dapatkan satu versi agen secara lengkap, daftar riwayat versi, dan agregat skor per versi | grafana-agento11y-app.data:read | N/A |
agento11y_manage_evaluators | Agent Observability* | Kelola evaluator, template evaluator, dan katalog juri (daftar, dapatkan, upsert, fork, uji, hapus) | grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write untuk mutasi dan pengujian | N/A |
agento11y_manage_eval_rules | Agent Observability* | Kelola aturan eval dan guard (daftar, dapatkan, buat, perbarui, pratinjau, hapus) | grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write untuk mutasi dan pratinjau | N/A |
agento11y_manage_eval_collections | Agent Observability* | Kelola percakapan tersimpan dan koleksi yang mengelompokkannya (daftar, dapatkan, simpan, buat, perbarui, hapus, tambah dan hapus anggota) | grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write untuk mutasi | N/A |
agento11y_manage_experiments | Agent Observability* | Baca eksperimen offline, uji coba, skor, metadata artefak, dan facet filter; perbarui dan batalkan eksperimen | grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write untuk mutasi | N/A |
agento11y_manage_test_suites | Agent Observability* | Kelola suite pengujian yang digunakan eksperimen offline, versi mereka, dan kasus uji mereka (daftar, dapatkan, buat, perbarui, draf, terbitkan, upsert, hapus) | grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write untuk mutasi | N/A |
ask_assistant | Assistant* | Kirim prompt ke Grafana Assistant dan kembalikan jawaban teks lengkap (multi-putaran melalui contextId) | Izin khusus plugin | Lingkup khusus plugin |
generate_deeplink | Navigation | Hasilkan URL deeplink yang akurat untuk sumber daya Grafana | Tidak ada (generasi URL hanya-baca) | N/A |
get_annotations | Annotations | Ambil anotasi dengan filter | annotations:read | annotations:* atau annotations:id:123 |
create_annotation | Annotations | Buat anotasi baru (format standar atau Graphite) | annotations:write | annotations:* |
update_annotation | Annotations | Perbarui bidang tertentu dari suatu anotasi (pembaruan parsial) | annotations:write | annotations:* |
get_annotation_tags | Annotations | Daftarkan tag anotasi dengan filter opsional | annotations:read | annotations:* |
list_snapshots | Snapshot | Daftarkan tangkapan layar dashboard dengan filter kueri dan batas opsional | dashboards:read | dashboards:* atau dashboards:uid:abc123 |
get_snapshot | Snapshot | Ambil metadata tangkapan layar dan muatan dashboard berdasarkan kunci tangkapan layar | dashboards:read | dashboards:* atau dashboards:uid:abc123 |
create_snapshot | Snapshot | Buat tangkapan layar dashboard dari muatan dashboard lengkap | dashboards:write | dashboards:* atau dashboards:uid:abc123 |
delete_snapshot | Snapshot | Hapus tangkapan layar dashboard berdasarkan kunci tangkapan layar | dashboards:write | dashboards:* atau dashboards:uid:abc123 |
get_panel_image | Rendering | Render dashboard atau panel yang tersimpan — atau pratinjau provisioning dari cabang repositori — sebagai gambar PNG | dashboards:read | dashboards:uid:abc123 |
list_provisioning_repositories | Provisioning | Daftarkan repositori provisioning (mis. sumber git-sync) beserta URL sumber, cabang, status sinkronisasi, dan kesehatannya | provisioning.repositories:read | N/A |
validate_provisioning_file | Provisioning | Terapkan uji-kering (dry-run) suatu file dari repositori provisioning dan laporkan kesalahan validasi penerimaan | provisioning.repositories:read | N/A |
* Nonaktif secara bawaan. Tambahkan kategori ke --enabled-tools untuk mengaktifkannya. |
Referensi Flag CLI
Biner mcp-grafana mendukung berbagai flag baris perintah untuk konfigurasi:
Opsi Transport:
-t, --transport: Tipe transport (stdio,sse, ataustreamable-http) - bawaan:stdio--address: Host dan port untuk server SSE/streamable-http - bawaan:localhost:8000--base-path: Jalur basis untuk server SSE/streamable-http--endpoint-path: Jalur endpoint untuk server streamable-http - bawaan:/mcp--server-name: Nama server yang digunakan dalam jabat tangan MCP dan OTelservice.name- bawaan:mcp-grafana. Menimpa variabel envGRAFANA_MCP_SERVER_NAME
Keamanan Transport HTTP (khusus SSE / streamable-http):
Validasi Host/Origin diterapkan pada setiap rute di listener — /sse, /mcp, /healthz, dan /metrics — sehingga browser yang melakukan DNS-rebinding tidak dapat menjangkau salah satu dari rute tersebut. Transport stdio tidak terpengaruh.
--allowed-hosts: Daftar izin nilai headerHostyang dipisahkan koma. Bawaan ke varian loopback dari--address(misalnyalocalhost:8000,127.0.0.1:8000,[::1]:8000). Nilai yang terurai menjadi kosong (tidak disetel,,,,, dst.) juga kembali ke bawaan sehingga salah ketik tidak dapat secara diam-diam menonaktifkan pemeriksaan. Permintaan dengan headerHostdi luar daftar izin ditolak dengan403. Berikan*untuk menonaktifkan pemeriksaan — hanya aman saat berjalan di belakang reverse proxy tepercaya yang menulis ulangHost, atau di jaringan terisolasi. Probe K8shttpGetdan pengikisan/metricseksternal akan memerlukan nama host eksplisit dalam daftar ini,*, atau probetcpSocket/ port metrik terpisah (--metrics-address).--allowed-origins: Daftar izin nilai headerOriginyang dipisahkan koma. Kosong secara bawaan — permintaan apa pun yang membawa headerOriginditolak (browser selalu mengirimkannya untuk permintaan lintas-origin, dan tidak ada browser yang seharusnya memanggil server ini secara langsung). Setel ke daftar eksplisit untuk mengizinkan klien berbasis browser, atau*untuk menonaktifkan pemeriksaan.
Autentikasi Pemanggil (khusus SSE / streamable-http):
Secara opsional mewajibkan klien MCP untuk melakukan autentikasi ke server. Ini terpisah dari kredensial yang digunakan server untuk menjangkau Grafana. Stdio tidak terpengaruh.
--server-auth-token: Token bearer yang harus dikirim pemanggil sebagaiAuthorization: Bearer <token>. Kembali ke variabel lingkunganMCP_GRAFANA_SERVER_TOKEN. Saat disetel, permintaan tanpa token valid ditolak dengan401sebelum alat apa pun dijalankan. Utamakan variabel env agar rahasia tidak terlihat dalam argumen proses.
Autentikasi pemanggil hanya diterapkan saat --server-auth-token disetel. Jika tidak disetel dan server mengikat alamat non-loopback, server mulai tetapi mencatat kesalahan keamanan — dikeluarkan pada level log error sehingga tidak disembunyikan oleh --log-level (loopback dan stdio tidak terpengaruh); rilis mayor mendatang akan menjadikannya kesalahan startup. Gunakan TLS (atau terminasi TLS) setiap kali autentikasi pemanggil diaktifkan pada alamat non-loopback. Saat autentikasi pemanggil diaktifkan, header Authorization yang tervalidasi dihilangkan sebelum permintaan mencapai Grafana; menggabungkan --server-auth-token dengan GRAFANA_FORWARD_HEADERS=Authorization ditolak saat startup.
Debug dan Pencatatan Log:
--debug: Aktifkan mode debug untuk pencatatan log permintaan/respons HTTP yang terperinci--log-level: Level log (debug,info,warn,error) - bawaan:info
Opsi Klien Grafana:
--grafana-timeout: Batas waktu untuk permintaan yang dibuat oleh klien Grafana. Menerima string durasi Go (misalnya,10s,500ms) - bawaan:10s--include-args-in-spans: Sertakan argumen pemanggilan alat dalam span OpenTelemetry. Hanya aktifkan di lingkungan non-produksi atau saat argumen diketahui tidak mengandung PII - bawaan:false
Observabilitas:
--metrics: Aktifkan endpoint metrik Prometheus di/metrics--metrics-address: Alamat terpisah untuk server metrik (misalnya,:9090). Jika kosong, metrik dilayani di server utama--slow-request-threshold: Catat peristiwa saat permintaan MCP apa pun (invokasi alat, daftar, pembacaan sumber daya, dst.) memakan waktu lebih lama dari durasi ini. Menerima string durasi Go (misalnya,500ms,5s). Bawaan0menonaktifkan pencatatan permintaan lambat. Lihat bagian Pencatatan permintaan lambat.--slow-request-log-level: Level log untuk peristiwa permintaan lambat (infoatauwarn) - bawaan:warn.
Manajemen Sesi:
--session-idle-timeout-minutes: Batas waktu idle sesi dalam menit. Sesi tanpa aktivitas selama durasi ini secara otomatis dibersihkan - bawaan:30. Setel ke0untuk menonaktifkan pembersihan sesi. Hanya relevan untuk transport SSE dan streamable-http.
Konfigurasi Alat:
--enabled-tools: Daftar kategori yang diaktifkan, dipisahkan koma - bawaan: semua kategori kecualiadmin,agento11y,assistant,athena,clickhouse,cloudwatch,elasticsearch,examples,graphite,quickwit,runpanelquery, dansnowflake. Untuk mengaktifkan kategori yang dinonaktifkan, tambahkan ke daftar (misalnya,"search,datasource,...,snowflake")--max-loki-log-limit: Jumlah maksimum baris log yang dikembalikan per panggilanquery_loki_logs- bawaan:100. Catatan: Setel ini setidaknya 1 di bawahmax_entries_limit_per_querysisi server Loki untuk memungkinkan deteksi pemotongan (alat memintalimit+1secara internal untuk mendeteksi apakah masih ada data).--disable-search: Nonaktifkan alat pencarian--disable-datasource: Nonaktifkan alat datasource--disable-incident: Nonaktifkan alat insiden--disable-prometheus: Nonaktifkan alat prometheus--disable-write: Nonaktifkan alat tulis (operasi buat/perbarui)--disable-loki: Nonaktifkan alat loki--disable-elasticsearch: Nonaktifkan alat elasticsearch dan opensearch--disable-quickwit: Nonaktifkan alat quickwit--disable-influxdb: Nonaktifkan alat InfluxDB--disable-alerting: Nonaktifkan alat alerting--disable-dashboard: Nonaktifkan alat dashboard--disable-oncall: Nonaktifkan alat oncall--disable-asserts: Nonaktifkan alat asserts--disable-sift: Nonaktifkan alat sift--disable-admin: Nonaktifkan alat admin--disable-pyroscope: Nonaktifkan alat pyroscope--disable-navigation: Nonaktifkan alat navigasi--disable-rendering: Nonaktifkan alat rendering (ekspor gambar panel/dashboard)--disable-snapshot: Nonaktifkan alat snapshot--disable-cloudwatch: Nonaktifkan alat CloudWatch--disable-examples: Nonaktifkan alat contoh kueri--disable-clickhouse: Nonaktifkan alat ClickHouse--disable-snowflake: Nonaktifkan alat Snowflake--disable-runpanelquery: Nonaktifkan alat kueri panel berjalan--disable-graphite: Nonaktifkan alat Graphite--disable-athena: Nonaktifkan alat Athena--disable-provisioning: Nonaktifkan alat provisioning--disable-agento11y: Nonaktifkan alat Agent Observability--disable-assistant: Nonaktifkan alat Grafana Assistant
Mode Hanya-Baca
Flag --disable-write menyediakan cara untuk menjalankan server MCP dalam mode hanya-baca, mencegah operasi tulis apa pun ke instance Grafana Anda. Ini berguna untuk skenario di mana Anda ingin menyediakan akses hanya-baca yang aman seperti:
- Menggunakan akun layanan dengan izin hanya-baca terbatas
- Memberikan asisten AI data observabilitas tanpa kemampuan modifikasi
- Berjalan di lingkungan produksi di mana akses tulis harus dibatasi
- Skenario pengujian dan pengembangan di mana Anda ingin mencegah modifikasi yang tidak disengaja
Saat --disable-write diaktifkan, operasi tulis berikut dinonaktifkan:
Alat Dashboard:
update_dashboard
Alat Folder:
create_folder
Alat Insiden:
create_incidentadd_activity_to_incident
Alat Alerting:
alerting_manage_rules(operasi buat, perbarui, hapus)
Alat Anotasi:
create_annotationupdate_annotation
Alat Sift:
find_error_pattern_logs(membuat investigasi)find_slow_requests(membuat investigasi)
Alat Snapshot:
create_snapshotdelete_snapshot
Alat Agent Observability:
agento11y_manage_evaluators(operasi upsert, hapus, fork, uji evaluator)agento11y_manage_eval_rules(operasi buat, perbarui, hapus, pratinjau aturan dan guard)agento11y_manage_eval_collections(simpan dan hapus percakapan tersimpan; buat, perbarui, hapus koleksi; tambah dan hapus anggota koleksi)agento11y_manage_experiments(perbarui dan batalkan operasi eksperimen)agento11y_manage_test_suites(buat dan perbarui rangkaian uji; buat dan terbitkan versi; upsert dan hapus kasus uji)
Semua operasi baca tetap tersedia, memungkinkan Anda untuk mengkueri dashboard, menjalankan kueri PromQL/LogQL, membuat daftar sumber daya, dan mengambil data.
Konfigurasi TLS Klien (untuk koneksi Grafana):
--tls-cert-file: Jalur ke file sertifikat TLS untuk autentikasi klien--tls-key-file: Jalur ke file kunci privat TLS untuk autentikasi klien--tls-ca-file: Jalur ke file sertifikat CA TLS untuk verifikasi server--tls-skip-verify: Lewati verifikasi sertifikat TLS (tidak aman)
Konfigurasi TLS Server (khusus transport streamable-http):
--server.tls-cert-file: Jalur ke file sertifikat TLS untuk HTTPS server--server.tls-key-file: Jalur ke file kunci privat TLS untuk HTTPS server
Penggunaan
Server MCP ini bekerja dengan instance Grafana lokal dan Grafana Cloud. Untuk Grafana Cloud, gunakan URL instance Anda (misalnya, https://myinstance.grafana.net) alih-alih http://localhost:3000 dalam contoh konfigurasi di bawah.
-
Jika menggunakan autentikasi token akun layanan, buat akun layanan di Grafana dengan izin yang cukup untuk menggunakan alat yang ingin Anda gunakan, buat token akun layanan, dan salin ke clipboard untuk digunakan dalam file konfigurasi. Ikuti dokumentasi akun layanan Grafana untuk detail pembuatan token akun layanan. Tip: Jika Anda tidak nyaman mengonfigurasi cakupan RBAC berbutir halus, opsi yang lebih sederhana (tetapi kurang restriktif) adalah menetapkan peran bawaan
Editorke akun layanan. Ini memberikan akses baca/tulis luas yang mencakup sebagian besar operasi server MCP — gunakan saat kenyamanan lebih diutamakan daripada persyaratan hak-akses-minimum yang ketat.Catatan: Variabel lingkungan
GRAFANA_API_KEYtidak digunakan lagi dan akan dihapus di versi mendatang. Harap migrasikan untuk menggunakanGRAFANA_SERVICE_ACCOUNT_TOKENsebagai gantinya. Nama variabel lama akan terus berfungsi untuk kompatibilitas mundur tetapi akan menampilkan peringatan deprecation.
Membaca token akun layanan dari file
Alih-alih meneruskan token secara inline melalui GRAFANA_SERVICE_ACCOUNT_TOKEN, Anda dapat mengarahkan GRAFANA_SERVICE_ACCOUNT_TOKEN_FILE ke jalur file yang berisi token tersebut. File dibaca ulang pada setiap permintaan, sehingga token yang dirotasi diambil secara otomatis tanpa memulai ulang server.
Ini sangat berguna di Kubernetes, di mana Secret yang dipasang sebagai volume diperbarui di tempat ketika Secret yang mendasarinya berubah (biasanya dalam ~1 menit). Digabungkan dengan cache klien per-permintaan — yang dikunci berdasarkan nilai token — token yang dirotasi secara transparan menghasilkan klien baru tanpa restart pod dan tanpa waktu henti:
env:
- name: GRAFANA_SERVICE_ACCOUNT_TOKEN_FILE
value: /var/run/secrets/grafana/token
volumeMounts:
- name: grafana-token
mountPath: /var/run/secrets/grafana
readOnly: true
volumes:
- name: grafana-token
secret:
secretName: grafana-mcp-token
Spasi di sekitarnya (termasuk baris baru di akhir) dipangkas dari isi file. Jika GRAFANA_SERVICE_ACCOUNT_TOKEN dan GRAFANA_SERVICE_ACCOUNT_TOKEN_FILE keduanya disetel, token inline lebih diutamakan.
Dukungan Multi-Organisasi
Anda dapat menentukan organisasi mana yang akan diinteraksikan menggunakan salah satu dari:
- Variabel lingkungan: Setel
GRAFANA_ORG_IDke ID organisasi numerik - Header HTTP: Setel
X-Grafana-Org-Idsaat menggunakan transport SSE atau streamable HTTP (header lebih diutamakan daripada variabel lingkungan — artinya Anda juga dapat menyetel org bawaan).
Saat ID organisasi diberikan, server MCP akan menyetel header X-Grafana-Org-Id pada semua permintaan ke Grafana, memastikan bahwa operasi dilakukan dalam konteks organisasi yang ditentukan.
Contoh dengan ID organisasi:
{
"mcpServers": {
"grafana": {
"command": "mcp-grafana",
"args": [],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_USERNAME": "<your username>",
"GRAFANA_PASSWORD": "<your password>",
"GRAFANA_ORG_ID": "2"
}
}
}
}
Header HTTP Kustom
Anda dapat menambahkan header HTTP arbitrer ke semua permintaan API Grafana menggunakan variabel lingkungan GRAFANA_EXTRA_HEADERS. Nilainya harus berupa objek JSON yang memetakan nama header ke nilai.
Contoh dengan header kustom:
{
"mcpServers": {
"grafana": {
"command": "mcp-grafana",
"args": [],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your token>",
"GRAFANA_EXTRA_HEADERS": "{\"X-Custom-Header\": \"custom-value\", \"X-Tenant-ID\": \"tenant-123\"}"
}
}
}
}
Meneruskan Header dari Klien (Hanya SSE/Streamable-HTTP)
Ketika server MCP berjalan di belakang gateway atau proxy terbalik yang menangani SSO (misalnya AWS ALB dengan OIDC), cookie sesi setiap pengguna harus mencapai Grafana sehingga dapat mengaitkan permintaan dengan pengguna yang terautentikasi. Variabel lingkungan GRAFANA_FORWARD_HEADERS memungkinkan ini dengan menentukan daftar izin yang dipisahkan koma dari nama header untuk disalin dari permintaan HTTP masuk ke setiap permintaan API Grafana keluar.
Ini hanya berlaku saat menggunakan transport SSE (-t sse) atau streamable-http (-t streamable-http). Ini tidak berpengaruh dalam mode stdio.
Contoh: meneruskan cookie sesi
{
"env": {
"GRAFANA_URL": "https://grafana.internal",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your token>",
"GRAFANA_FORWARD_HEADERS": "Cookie"
}
}
Anda dapat meneruskan beberapa header dengan memisahkannya dengan koma:
GRAFANA_FORWARD_HEADERS=Cookie,X-Session-Id
Header yang diteruskan digabungkan dengan header apa pun yang didefinisikan dalam GRAFANA_EXTRA_HEADERS. Jika nama header muncul di keduanya, nilai dari permintaan masuk lebih diutamakan untuk permintaan tersebut.
-
Anda memiliki beberapa opsi untuk menginstal
mcp-grafana:-
uvx (disarankan): Jika Anda memiliki uv terinstal, tidak diperlukan pengaturan tambahan —
uvxakan secara otomatis mengunduh dan menjalankan server:uvx mcp-grafana -
Citra Docker: Gunakan citra Docker yang sudah dibuat dari Docker Hub.
Penting: Entrypoint citra Docker dikonfigurasi untuk menjalankan server MCP dalam mode SSE secara default, tetapi sebagian besar pengguna akan ingin menggunakan mode STDIO untuk integrasi langsung dengan asisten AI seperti Claude Desktop:
- Mode STDIO: Untuk mode stdio, Anda harus secara eksplisit menimpa default dengan
-t stdiodan menyertakan flag-iuntuk menjaga stdin tetap terbuka:
docker pull grafana/mcp-grafana # For local Grafana: docker run --rm -i -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> grafana/mcp-grafana -t stdio # For Grafana Cloud: docker run --rm -i -e GRAFANA_URL=https://myinstance.grafana.net -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> grafana/mcp-grafana -t stdioCatatan — amankan mode jaringan: Dalam mode SSE dan streamable-http, kontainer mengikat alamat non-loopback (
0.0.0.0:8000). Tanpa token pemanggil, server mulai tetapi mencatat kesalahan keamanan (pada tingkat logerror, sehingga tidak disembunyikan oleh--log-level; dan akan menolak untuk mulai dalam rilis utama mendatang). SetelMCP_GRAFANA_SERVER_TOKENuntuk memerlukanAuthorization: Bearer <token>dari klien (disarankan). Mode STDIO tidak terpengaruh. Lihat Autentikasi Pemanggil.- Mode SSE: Dalam mode ini, server berjalan sebagai server HTTP yang terhubung oleh klien. Anda harus mengekspos port 8000 menggunakan flag
-p:
docker pull grafana/mcp-grafana docker run --rm -p 8000:8000 -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> -e MCP_GRAFANA_SERVER_TOKEN=<caller auth token> grafana/mcp-grafana- Mode HTTP Streamable: Dalam mode ini, server beroperasi sebagai proses independen yang dapat menangani beberapa koneksi klien. Anda harus mengekspos port 8000 menggunakan flag
-p: Untuk mode ini, Anda harus secara eksplisit menimpa default dengan-t streamable-http
docker pull grafana/mcp-grafana docker run --rm -p 8000:8000 -e GRAFANA_URL=http://localhost:3000 -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> -e MCP_GRAFANA_SERVER_TOKEN=<caller auth token> grafana/mcp-grafana -t streamable-httpUntuk mode HTTP streamable HTTPS dengan sertifikat TLS server:
docker pull grafana/mcp-grafana docker run --rm -p 8443:8443 \ -v /path/to/certs:/certs:ro \ -e GRAFANA_URL=http://localhost:3000 \ -e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> \ -e MCP_GRAFANA_SERVER_TOKEN=<caller auth token> \ grafana/mcp-grafana \ -t streamable-http \ -addr :8443 \ --server.tls-cert-file /certs/server.crt \ --server.tls-key-file /certs/server.key - Mode STDIO: Untuk mode stdio, Anda harus secara eksplisit menimpa default dengan
-
Unduh biner: Unduh rilis terbaru dari
mcp-grafanadari halaman rilis dan letakkan di$PATHAnda. -
Bangun dari sumber: Jika Anda memiliki rantai alat Go terinstal, Anda juga dapat membangun dan menginstalnya dari sumber, menggunakan variabel lingkungan
GOBINuntuk menentukan direktori tempat biner harus diinstal. Ini juga harus ada di$PATHAnda.GOBIN="$HOME/go/bin" go install github.com/grafana/mcp-grafana/cmd/mcp-grafana@latest -
Terapkan ke Kubernetes menggunakan Helm: gunakan bagan Helm dari repositori helm-charts Grafana
helm repo add grafana https://grafana.github.io/helm-charts helm install --set grafana.apiKey=<Grafana_ApiKey> --set grafana.url=<GrafanaUrl> my-release grafana/grafana-mcp
-
-
Tambahkan konfigurasi server ke file konfigurasi klien Anda. Misalnya, untuk Claude Desktop:
Jika menggunakan uvx:
{ "mcpServers": { "grafana": { "command": "uvx", "args": ["mcp-grafana"], "env": { "GRAFANA_URL": "http://localhost:3000", "GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>" } } } }Jika menggunakan biner:
{ "mcpServers": { "grafana": { "command": "mcp-grafana", "args": [], "env": { "GRAFANA_URL": "http://localhost:3000", // Or "https://myinstance.grafana.net" for Grafana Cloud "GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>", // If using username/password authentication "GRAFANA_USERNAME": "<your username>", "GRAFANA_PASSWORD": "<your password>", // Optional: specify organization ID for multi-org support "GRAFANA_ORG_ID": "1" } } } }
Catatan: jika Anda melihat
Error: spawn mcp-grafana ENOENTdi Claude Desktop, Anda perlu menentukan jalur lengkap kemcp-grafana.
Jika menggunakan Docker:
{
"mcpServers": {
"grafana": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"GRAFANA_URL",
"-e",
"GRAFANA_SERVICE_ACCOUNT_TOKEN",
"grafana/mcp-grafana",
"-t",
"stdio"
],
"env": {
"GRAFANA_URL": "http://localhost:3000", // Or "https://myinstance.grafana.net" for Grafana Cloud
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>",
// If using username/password authentication
"GRAFANA_USERNAME": "<your username>",
"GRAFANA_PASSWORD": "<your password>",
// Optional: specify organization ID for multi-org support
"GRAFANA_ORG_ID": "1"
}
}
}
}
Catatan: Argumen
-t stdiosangat penting di sini karena menimpa mode SSE default dalam citra Docker.
Menggunakan VSCode dengan server MCP jarak jauh
Jika Anda menggunakan VSCode dan menjalankan server MCP dalam mode SSE (yang merupakan default saat menggunakan citra Docker tanpa menimpa transport), pastikan .vscode/settings.json Anda menyertakan yang berikut:
"mcp": {
"servers": {
"grafana": {
"type": "sse",
"url": "http://localhost:8000/sse"
}
}
}
Untuk mode HTTP streamable HTTPS dengan sertifikat TLS server:
"mcp": {
"servers": {
"grafana": {
"type": "sse",
"url": "https://localhost:8443/sse"
}
}
}
Mode Debug
Anda dapat mengaktifkan mode debug untuk transport Grafana dengan menambahkan flag -debug ke perintah. Ini akan memberikan pencatatan terperinci dari permintaan dan respons HTTP antara server MCP dan API Grafana, yang dapat membantu untuk pemecahan masalah.
Untuk menggunakan mode debug dengan konfigurasi Claude Desktop, perbarui konfigurasi Anda sebagai berikut:
Jika menggunakan biner:
{
"mcpServers": {
"grafana": {
"command": "mcp-grafana",
"args": ["-debug"],
"env": {
"GRAFANA_URL": "http://localhost:3000", // Or "https://myinstance.grafana.net" for Grafana Cloud
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>"
}
}
}
}
Jika menggunakan Docker:
{
"mcpServers": {
"grafana": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-e",
"GRAFANA_URL",
"-e",
"GRAFANA_SERVICE_ACCOUNT_TOKEN",
"grafana/mcp-grafana",
"-t",
"stdio",
"-debug"
],
"env": {
"GRAFANA_URL": "http://localhost:3000", // Or "https://myinstance.grafana.net" for Grafana Cloud
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>"
}
}
}
}
Catatan: Seperti dengan konfigurasi standar, argumen
-t stdiodiperlukan untuk menimpa mode SSE default dalam citra Docker.
Konfigurasi TLS
Jika instance Grafana Anda berada di belakang mTLS atau memerlukan sertifikat TLS kustom, Anda dapat mengonfigurasi server MCP untuk menggunakan sertifikat kustom. Server mendukung opsi konfigurasi TLS berikut:
--tls-cert-file: Jalur ke file sertifikat TLS untuk autentikasi klien--tls-key-file: Jalur ke file kunci privat TLS untuk autentikasi klien--tls-ca-file: Jalur ke file sertifikat CA TLS untuk verifikasi server--tls-skip-verify: Lewati verifikasi sertifikat TLS (tidak aman, gunakan hanya untuk pengujian)
Contoh dengan autentikasi sertifikat klien:
{
"mcpServers": {
"grafana": {
"command": "mcp-grafana",
"args": [
"--tls-cert-file",
"/path/to/client.crt",
"--tls-key-file",
"/path/to/client.key",
"--tls-ca-file",
"/path/to/ca.crt"
],
"env": {
"GRAFANA_URL": "https://secure-grafana.example.com",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>"
}
}
}
}
Contoh dengan Docker:
{
"mcpServers": {
"grafana": {
"command": "docker",
"args": [
"run",
"--rm",
"-i",
"-v",
"/path/to/certs:/certs:ro",
"-e",
"GRAFANA_URL",
"-e",
"GRAFANA_SERVICE_ACCOUNT_TOKEN",
"grafana/mcp-grafana",
"-t",
"stdio",
"--tls-cert-file",
"/certs/client.crt",
"--tls-key-file",
"/certs/client.key",
"--tls-ca-file",
"/certs/ca.crt"
],
"env": {
"GRAFANA_URL": "https://secure-grafana.example.com",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>"
}
}
}
}
Konfigurasi TLS diterapkan ke semua klien HTTP yang digunakan oleh server MCP, termasuk:
- Klien OpenAPI Grafana utama
- Klien sumber data Prometheus
- Klien sumber data Loki
- Klien manajemen insiden
- Klien investigasi Sift
- Klien alerting
- Klien Asserts
Contoh Penggunaan CLI Langsung:
Untuk pengujian dengan sertifikat yang ditandatangani sendiri:
./mcp-grafana --tls-skip-verify -debug
Dengan autentikasi sertifikat klien:
./mcp-grafana \
--tls-cert-file /path/to/client.crt \
--tls-key-file /path/to/client.key \
--tls-ca-file /path/to/ca.crt \
-debug
Dengan sertifikat CA kustom saja:
./mcp-grafana --tls-ca-file /path/to/ca.crt
Penggunaan Programatik:
Jika Anda menggunakan pustaka ini secara programatik, Anda juga dapat membuat fungsi konteks yang mendukung TLS:
// Using struct literals
tlsConfig := &mcpgrafana.TLSConfig{
CertFile: "/path/to/client.crt",
KeyFile: "/path/to/client.key",
CAFile: "/path/to/ca.crt",
}
grafanaConfig := mcpgrafana.GrafanaConfig{
Debug: true,
TLSConfig: tlsConfig,
}
contextFunc := mcpgrafana.ComposedStdioContextFunc(grafanaConfig)
// Or inline
grafanaConfig := mcpgrafana.GrafanaConfig{
Debug: true,
TLSConfig: &mcpgrafana.TLSConfig{
CertFile: "/path/to/client.crt",
KeyFile: "/path/to/client.key",
CAFile: "/path/to/ca.crt",
},
}
contextFunc := mcpgrafana.ComposedStdioContextFunc(grafanaConfig)
Validasi URL:
Saat memanggil NewGrafanaClient secara langsung (stdio atau konstruksi programatik), validasi URL terlebih dahulu untuk menghindari panic yang dapat dijangkau:
if err := mcpgrafana.ValidateGrafanaURL(urlFromHeader); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
client := mcpgrafana.NewGrafanaClient(ctx, urlFromHeader, apiKey, nil)
Konfigurasi TLS Server (Hanya Transport HTTP Streamable)
Saat menggunakan transport HTTP streamable (-t streamable-http), Anda dapat mengonfigurasi server MCP untuk menyajikan HTTPS alih-alih HTTP. Ini berguna ketika Anda perlu mengamankan koneksi antara klien MCP dan server itu sendiri.
Server mendukung opsi konfigurasi TLS berikut untuk transport HTTP streamable:
--server.tls-cert-file: Jalur ke file sertifikat TLS untuk HTTPS server (diperlukan untuk TLS)--server.tls-key-file: Jalur ke file kunci privat TLS untuk HTTPS server (diperlukan untuk TLS)
Catatan: Flag ini sepenuhnya terpisah dari flag TLS klien yang didokumentasikan di atas. Flag TLS klien mengonfigurasi bagaimana server MCP terhubung ke Grafana, sementara flag TLS server ini mengonfigurasi bagaimana klien terhubung ke server MCP saat menggunakan transport HTTP streamable.
Contoh dengan server HTTP streamable HTTPS:
./mcp-grafana \
-t streamable-http \
--server.tls-cert-file /path/to/server.crt \
--server.tls-key-file /path/to/server.key \
-addr :8443
Ini akan memulai server MCP pada port HTTPS 8443. Klien kemudian akan terhubung ke https://localhost:8443/ alih-alih http://localhost:8000/.
Contoh Docker dengan TLS server:
docker run --rm -p 8443:8443 \
-v /path/to/certs:/certs:ro \
-e GRAFANA_URL=http://localhost:3000 \
-e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your service account token> \
grafana/mcp-grafana \
-t streamable-http \
-addr :8443 \
--server.tls-cert-file /certs/server.crt \
--server.tls-key-file /certs/server.key
Titik Akhir Pemeriksaan Kesehatan
Saat menggunakan transport SSE (-t sse) atau HTTP streamable (-t streamable-http), server MCP mengekspos titik akhir pemeriksaan kesehatan di /healthz. Titik akhir ini dapat digunakan oleh penyeimbang beban, sistem pemantauan, atau platform orkestrasi untuk memverifikasi bahwa server berjalan dan menerima koneksi.
Titik Akhir: GET /healthz
Respons:
- Kode Status:
200 OK - Badan:
ok
Contoh penggunaan:
# For streamable HTTP or SSE transport on default port
curl http://localhost:8000/healthz
# With custom address
curl http://localhost:9090/healthz
Catatan: Titik akhir pemeriksaan kesehatan hanya tersedia saat menggunakan transport SSE atau HTTP streamable. Ini tidak tersedia saat menggunakan transport stdio (-t stdio), karena stdio tidak mengekspos server HTTP.
Observabilitas
Server MCP mendukung metrik Prometheus, pelacakan terdistribusi OpenTelemetry, dan ekspor log OpenTelemetry, mengikuti konvensi semantik OTel MCP. Pelacakan dan ekspor log dikonfigurasi melalui variabel lingkungan standar OTEL_* dan bekerja dengan transport apa pun.
Catatan: mcp-grafana saat ini hanya mendukung transport OTLP/gRPC untuk jejak dan log. OTEL_EXPORTER_OTLP_PROTOCOL (dan varian _TRACES_PROTOCOL / _LOGS_PROTOCOL) tidak dihormati — gRPC digunakan apa pun.
Metrik
Saat menggunakan transport SSE atau HTTP streamable, aktifkan metrik Prometheus dengan flag --metrics:
# Metrics served on the main server at /metrics
./mcp-grafana -t streamable-http --metrics
# Metrics served on a separate address
./mcp-grafana -t streamable-http --metrics --metrics-address :9090
Metrik yang Tersedia:
| Metrik | Tipe | Deskripsi |
|---|---|---|
mcp_server_operation_duration_seconds | Histogram | Durasi operasi MCP (label: mcp_method_name, gen_ai_tool_name, error_type, network_transport, mcp_protocol_version) |
mcp_server_session_duration_seconds | Histogram | Durasi sesi klien MCP (label: network_transport, mcp_protocol_version) |
http_server_request_duration_seconds | Histogram | Durasi permintaan server HTTP (dari otelhttp) |
Catatan: Metrik hanya tersedia saat menggunakan transport SSE atau HTTP streamable. Metrik tidak tersedia dengan transport stdio.
Pencatatan permintaan lambat
Flag --slow-request-threshold mengeluarkan peristiwa log terstruktur setiap kali permintaan MCP (pemanggilan alat, daftar, pembacaan sumber daya, dll.) melebihi durasi yang diberikan. Ini berguna untuk mendiagnosis kueri dan panggilan alat yang lambat tanpa tenggelam dalam log debug penuh.
# Warn on any request slower than 500ms (works on all transports)
./mcp-grafana -t streamable-http --slow-request-threshold 500ms
# Same thing on stdio (the feature is transport-agnostic, unlike --metrics)
./mcp-grafana -t stdio --slow-request-threshold 500ms
# Log at INFO level instead of WARN (useful during investigation)
./mcp-grafana -t streamable-http --slow-request-threshold 500ms --slow-request-log-level info
Peristiwa log membawa atribut terstruktur ini:
| Atribut | Deskripsi |
|---|---|
mcp.method | Metode MCP (misalnya, tools/call, tools/list, resources/read) |
duration | Durasi permintaan yang diamati |
threshold | Ambang batas yang dikonfigurasi |
tool | Nama alat (hanya ada untuk metode tools/call) |
error | Nilai kesalahan, saat permintaan gagal (konteks upaya terbaik; konten dikendalikan oleh pembungkusan kesalahan hulu) |
error.type | Klasifikasi kesalahan dengan kardinalitas terbatas (_OTHER untuk kesalahan tanpa tipe) |
Pencatatan permintaan lambat bekerja pada semua transport (termasuk stdio) dan tidak memerlukan --metrics. Ambang batas default dari 0 menonaktifkannya sepenuhnya. Alat yang diproksi mengalir melalui tools/call dan tercakup secara otomatis.
Pelacakan
Pelacakan terdistribusi dikonfigurasi melalui variabel lingkungan standar OTEL_* dan bekerja secara independen dari flag --metrics. Ketika OTEL_EXPORTER_OTLP_ENDPOINT (atau OTEL_EXPORTER_OTLP_TRACES_ENDPOINT khusus sinyal) diatur, server mengekspor jejak melalui OTLP/gRPC:
# Send traces to a local Tempo instance
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 \
OTEL_EXPORTER_OTLP_INSECURE=true \
./mcp-grafana -t streamable-http
# Send traces to Grafana Cloud with authentication
OTEL_EXPORTER_OTLP_ENDPOINT=https://tempo-us-central1.grafana.net:443 \
OTEL_EXPORTER_OTLP_HEADERS="Authorization=Basic ..." \
./mcp-grafana -t streamable-http
Rentang panggilan alat mengikuti penamaan semconv (tools/call <tool_name>) dan menyertakan atribut seperti gen_ai.tool.name, mcp.method.name, dan mcp.session.id. Server juga mendukung propagasi konteks jejak W3C dari bidang _meta dari permintaan panggilan alat.
Log
Ketika OTEL_EXPORTER_OTLP_ENDPOINT (atau OTEL_EXPORTER_OTLP_LOGS_ENDPOINT khusus sinyal) diatur, server juga mengekspor log terstruktur melalui OTLP/gRPC selain output stderr teks biasa yang ada. Jembatan otelslog secara otomatis melampirkan trace_id dan span_id dari rentang aktif, sehingga catatan log berkorelasi dengan jejak yang sudah dipancarkan server.
Jejak dan log menyelesaikan titik akhirnya secara independen, sehingga kedua sinyal dapat diaktifkan secara terpisah: mengatur hanya OTEL_EXPORTER_OTLP_TRACES_ENDPOINT mengaktifkan pelacakan tanpa ekspor log, mengatur hanya OTEL_EXPORTER_OTLP_LOGS_ENDPOINT mengaktifkan ekspor log tanpa pelacakan, dan OTEL_EXPORTER_OTLP_ENDPOINT generik mengaktifkan keduanya.
Jika Anda menggunakan OTEL_EXPORTER_OTLP_ENDPOINT generik tetapi ingin menonaktifkan ekspor log (misalnya backend Anda tidak mendukung LogsService), atur:
OTEL_LOGS_EXPORTER=none
This prevents the server from creating an OTLP logs exporter regardless of the endpoint configuration, avoiding errors like unknown service opentelemetry.proto.collector.logs.v1.LogsService.
Stderr logging is unchanged when OTLP logging is enabled; you can continue to rely on container logs or pipe stderr to /dev/null if you prefer.
# Send both logs and traces to a local OTel collector
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4317 \
OTEL_EXPORTER_OTLP_INSECURE=true \
./mcp-grafana -t streamable-http
The transport is OTLP/gRPC (default port 4317). Logs can be sent directly to any managed backend that accepts OTLP/gRPC — for example, Grafana Cloud — by pointing OTEL_EXPORTER_OTLP_LOGS_ENDPOINT (or the generic OTEL_EXPORTER_OTLP_ENDPOINT) at the remote gRPC endpoint and supplying auth via OTEL_EXPORTER_OTLP_LOGS_HEADERS (or OTEL_EXPORTER_OTLP_HEADERS), mirroring the tracing example above. A local OTel collector is optional — useful for fan-out, batching, or multi-backend routing, but not required.
The signal-specific variants OTEL_EXPORTER_OTLP_LOGS_ENDPOINT, OTEL_EXPORTER_OTLP_LOGS_HEADERS, OTEL_EXPORTER_OTLP_LOGS_INSECURE, OTEL_EXPORTER_OTLP_LOGS_CERTIFICATE, OTEL_EXPORTER_OTLP_LOGS_TIMEOUT, and OTEL_EXPORTER_OTLP_LOGS_COMPRESSION are honored and override their generic OTEL_EXPORTER_OTLP_* counterparts — see the OTel exporter spec for the full list and precedence rules.
If the configured collector is unreachable, log records are buffered in memory (default queue: 2048) and the oldest records are dropped once the queue fills. The process continues without blocking the service. Configure a local OTel collector if you need lossless buffering during outages.
Logs are also exported under the stdio transport, which makes it easy to centralize logs from local mcp-grafana instances invoked by IDE clients.
Docker example with metrics, tracing, and logs:
docker run --rm -p 8000:8000 \
-e GRAFANA_URL=http://localhost:3000 \
-e GRAFANA_SERVICE_ACCOUNT_TOKEN=<your token> \
-e OTEL_EXPORTER_OTLP_ENDPOINT=http://tempo:4317 \
-e OTEL_EXPORTER_OTLP_INSECURE=true \
grafana/mcp-grafana \
-t streamable-http --metrics
Troubleshooting
Grafana Version Compatibility
If you encounter the following error when using datasource-related tools:
get datasource by uid : [GET /datasources/uid/{uid}][400] getDataSourceByUidBadRequest {"message":"id is invalid"}
This typically indicates that you are using a Grafana version earlier than 9.0. The /datasources/uid/{uid} API endpoint was introduced in Grafana 9.0, and datasource operations will fail on earlier versions.
Solution: Upgrade your Grafana instance to version 9.0 or later to resolve this issue.
Development
Contributions are welcome! Please open an issue or submit a pull request if you have any suggestions or improvements.
This project is written in Go. Install Go following the instructions for your platform.
To run the server locally in STDIO mode (which is the default for local development), use:
make run
To run the server locally in SSE mode, use:
go run ./cmd/mcp-grafana --transport sse
You can also run the server using the SSE transport inside a custom built Docker image. Just like the published Docker image, this custom image's entrypoint defaults to SSE mode. To build the image, use:
make build-image
And to run the image in SSE mode (the default), use:
docker run -it --rm -p 8000:8000 mcp-grafana:latest
If you need to run it in STDIO mode instead, override the transport setting:
docker run -it --rm mcp-grafana:latest -t stdio
Testing
There are three types of tests available:
- Unit Tests (no external dependencies required):
make test-unit
You can also run unit tests with:
make test
- Integration Tests (requires docker containers to be up and running):
make test-integration
- Cloud Tests (requires cloud Grafana instance and credentials):
make test-cloud
Note: Cloud tests are automatically configured in CI. For local development, you'll need to set up your own Grafana Cloud instance and credentials.
More comprehensive integration tests will require a Grafana instance to be running locally on port 3000; you can start one with Docker Compose:
docker-compose up -d
The integration tests can be run with:
make test-all
If you're adding more tools, please add integration tests for them. The existing tests should be a good starting point.
Linting
To lint the code, run:
make lint
This includes a custom linter that checks for unescaped commas in jsonschema struct tags. The commas in description fields must be escaped with \\, to prevent silent truncation. You can run just this linter with:
make lint-jsonschema
See the JSONSchema Linter documentation for more details.
License
This project is licensed under the Apache License, Version 2.0.