Grafana
ทางการค้นหาแดชบอร์ด ตรวจสอบเหตุการณ์ และสอบถามแหล่งข้อมูลในอินสแตนซ์ Grafana ของคุณ
คุณทำอะไรได้บ้างด้วย Grafana MCP?
- ค้นหาและตรวจสอบแดชบอร์ด — สอบถามแดชบอร์ดตามชื่อ โฟลเดอร์ แท็ก หรือสถานะดาว จากนั้นดึงข้อมูลสรุป เวอร์ชัน หรือคุณสมบัติ JSONPath เฉพาะ เช่น
$.titleผ่านsearch_dashboards,get_dashboard_summaryหรือget_dashboard_property - สอบถาม Prometheus และ Loki — รันคำสั่ง PromQL หรือ LogQL ดึงข้อมูลเมตริก/เมตาดาต้าของป้ายกำกับ และคำนวณเปอร์เซ็นไทล์ของฮิสโตแกรม (p50–p99) โดยตรงจากแหล่งข้อมูลของคุณ
- จัดการการแจ้งเตือนและเหตุการณ์ — แสดงรายการหรือสร้างกฎการแจ้งเตือน ตรวจสอบสถานะการทำงาน และค้นหาหรืออัปเดตบันทึก Grafana Incident ด้วยฟิลด์ที่กำหนดเอง
- สำรวจข้อมูล SQL และ CloudWatch — แสดงรายการตาราง อธิบายสคีมา และรัน SQL พร้อมมาโครใน ClickHouse, Snowflake, Athena, MySQL, PostgreSQL หรือ MSSQL; รวมถึงสอบถามเมตริก CloudWatch ตามเนมสเปซและมิติ
- เรนเดอร์แดชบอร์ดและสร้างลิงก์ — รับแผงหรือแดชบอร์ดเป็นภาพ PNG หรือสร้างดีพลิงก์ที่แม่นยำไปยังแดชบอร์ด แผง และ Explore พร้อมช่วงเวลาและตัวแปร
เอกสาร
เซิร์ฟเวอร์ Grafana MCP
เซิร์ฟเวอร์ Model Context Protocol (MCP) สำหรับ Grafana
สิ่งนี้ให้การเข้าถึงอินสแตนซ์ Grafana ของคุณและระบบนิเวศโดยรอบ
เริ่มต้นอย่างรวดเร็ว
ต้องใช้ uv เพิ่มสิ่งต่อไปนี้ลงในการกำหนดค่าไคลเอนต์ MCP ของคุณ (เช่น Claude Desktop, Cursor):
{
"mcpServers": {
"grafana": {
"command": "uvx",
"args": ["mcp-grafana"],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>"
}
}
}
}
สำหรับ Grafana Cloud ให้แทนที่ GRAFANA_URL ด้วย URL ของอินสแตนซ์ของคุณ (เช่น https://myinstance.grafana.net) ดู การใช้งาน สำหรับตัวเลือกการติดตั้งเพิ่มเติม รวมถึง Docker, ไบนารี และ Helm
ข้อกำหนด
- ต้องใช้ Grafana เวอร์ชัน 9.0 หรือใหม่กว่า สำหรับฟังก์ชันการทำงานที่สมบูรณ์ คุณสมบัติบางอย่าง โดยเฉพาะการดำเนินการที่เกี่ยวข้องกับแหล่งข้อมูล อาจทำงานไม่ถูกต้องกับเวอร์ชันก่อนหน้าเนื่องจากไม่มี API endpoints
คุณสมบัติ
คุณสมบัติต่อไปนี้พร้อมใช้งานในเซิร์ฟเวอร์ MCP ในปัจจุบัน รายการนี้มีไว้เพื่อวัตถุประสงค์ในการให้ข้อมูลเท่านั้น และไม่ได้แสดงถึงแผนงานหรือข้อผูกพันต่อคุณสมบัติในอนาคต
แดชบอร์ด
- ค้นหาแดชบอร์ด: ค้นหาแดชบอร์ดตามชื่อ, โฟลเดอร์ UID, แท็ก หรือสถานะดาว
- รับแดชบอร์ดตาม UID: ดึงรายละเอียดแดชบอร์ดทั้งหมดโดยใช้ตัวระบุเฉพาะของมัน ส่ง
versionที่ไม่บังคับเพื่อโหลดสแนปชอตที่บันทึกไว้แทนแดชบอร์ดปัจจุบัน คำเตือน: แดชบอร์ดขนาดใหญ่สามารถใช้พื้นที่หน้าต่างบริบทได้มาก - รายการเวอร์ชันแดชบอร์ด: แสดงรายการเวอร์ชันที่บันทึกของแดชบอร์ดเป็นข้อมูลเมตาแบบกระชับ (หมายเลขเวอร์ชัน, ผู้เขียน, การประทับเวลา, ข้อความบันทึก)
- รับสรุปแดชบอร์ด: รับภาพรวมแบบกระชับของแดชบอร์ด รวมถึงชื่อ, จำนวนแผง, ประเภทแผง, ตัวแปร และข้อมูลเมตาโดยไม่ต้องใช้ JSON เต็มรูปแบบเพื่อลดการใช้หน้าต่างบริบท
- รับคุณสมบัติแดชบอร์ด: แยกส่วนเฉพาะของแดชบอร์ดโดยใช้นิพจน์ JSONPath (เช่น
$.title,$.panels[*].title) เพื่อดึงข้อมูลที่จำเป็นเท่านั้นและลดการใช้หน้าต่างบริบท - อัปเดตหรือสร้างแดชบอร์ด: แก้ไขแดชบอร์ดที่มีอยู่หรือสร้างใหม่ คำเตือน: ต้องใช้ JSON แดชบอร์ดเต็มรูปแบบซึ่งสามารถใช้พื้นที่หน้าต่างบริบทได้มาก
- แพตช์แดชบอร์ด: ใช้การเปลี่ยนแปลงเฉพาะกับแดชบอร์ดโดยไม่ต้องใช้ JSON เต็มรูปแบบ ซึ่งลดการใช้หน้าต่างบริบทอย่างมากสำหรับการแก้ไขตามเป้าหมาย
- รับข้อมูลคำสั่งค้นหาและแหล่งข้อมูลของแผง: รับชื่อ, สตริงคำสั่งค้นหา และข้อมูลแหล่งข้อมูล (รวมถึง UID และประเภท หากมี) จากทุกแผงในแดชบอร์ด
รันคำสั่งค้นหาแผง
หมายเหตุ: เครื่องมือรันคำสั่งค้นหาแผง ถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งาน ให้เพิ่ม
runpanelqueryในแฟล็ก--enabled-toolsของคุณ
- รันคำสั่งค้นหาแผง: ดำเนินการคำสั่งค้นหาของแผงแดชบอร์ดด้วยช่วงเวลาและตัวแปรที่กำหนดเอง
การจัดการหน้าต่างบริบท
เครื่องมือแดชบอร์ดตอนนี้มีกลยุทธ์หลายอย่างเพื่อจัดการการใช้หน้าต่างบริบทอย่างมีประสิทธิภาพ (issue #101):
- ใช้
get_dashboard_summaryสำหรับภาพรวมแดชบอร์ดและการวางแผนการแก้ไข - ใช้
get_dashboard_propertyกับ JSONPath เมื่อคุณต้องการเฉพาะส่วนของแดชบอร์ด - หลีกเลี่ยง
get_dashboard_by_uidเว้นแต่คุณต้องการ JSON แดชบอร์ดที่สมบูรณ์โดยเฉพาะ
แหล่งข้อมูล
- รายการและดึงข้อมูลแหล่งข้อมูล: ดูแหล่งข้อมูลที่กำหนดค่าทั้งหมดและดึงข้อมูลโดยละเอียดเกี่ยวกับแต่ละแหล่งข้อมูล
- ประเภทแหล่งข้อมูลที่รองรับ: Prometheus, Loki, ClickHouse, CloudWatch, Elasticsearch, OpenSearch, Snowflake, Athena
ตัวอย่างคำสั่งค้นหา
หมายเหตุ: เครื่องมือตัวอย่างคำสั่งค้นหา ถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งาน ให้เพิ่ม
examplesในแฟล็ก--enabled-toolsของคุณ
- รับตัวอย่างคำสั่งค้นหา: ดึงตัวอย่างคำสั่งค้นหาสำหรับประเภทแหล่งข้อมูลต่างๆ เพื่อเรียนรู้ไวยากรณ์คำสั่งค้นหา
การค้นหา Prometheus
- ค้นหา Prometheus: ดำเนินการคำสั่งค้นหา PromQL (รองรับทั้งคำสั่งค้นหาเมตริกแบบทันทีและช่วงเวลา) กับแหล่งข้อมูล Prometheus
- ค้นหาข้อมูลเมตา Prometheus: ดึงข้อมูลเมตาของเมตริก, ชื่อเมตริก, ชื่อป้ายกำกับ และค่าป้ายกำกับจากแหล่งข้อมูล Prometheus
- ค้นหาเปอร์เซ็นไทล์ฮิสโตแกรม: คำนวณค่าเปอร์เซ็นไทล์ฮิสโตแกรม (p50, p90, p95, p99) โดยใช้ histogram_quantile
การค้นหา Loki
- ค้นหาล็อกและเมตริก Loki: รันทั้งคำสั่งค้นหาล็อกและคำสั่งค้นหาเมตริกโดยใช้ LogQL กับแหล่งข้อมูล Loki
- ค้นหาข้อมูลเมตา Loki: ดึงชื่อป้ายกำกับ, ค่าป้ายกำกับ และสถิติสตรีมจากแหล่งข้อมูล Loki
- ค้นหารูปแบบ Loki: ดึงรูปแบบล็อกที่ตรวจพบโดย Loki เพื่อระบุโครงสร้างล็อกทั่วไปและความผิดปกติ
การค้นหา InfluxDB
หมายเหตุ: เครื่องมือ InfluxDB ถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งาน ให้เพิ่ม
influxdbในแฟล็ก--enabled-toolsของคุณ
- ค้นหา InfluxDB: ดำเนินการคำสั่งค้นหากับแหล่งข้อมูล InfluxDB โดยใช้ InfluxQL (v1.x) หรือ Flux (v2.x) ภาษาถูกอนุมานจากการกำหนดค่าแหล่งข้อมูล หรือสามารถตั้งค่าได้อย่างชัดเจนผ่านพารามิเตอร์
dialect
การค้นหาแหล่งข้อมูล SQL
หมายเหตุ: เครื่องมือ SQL ถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งาน ให้เพิ่ม
sqlในแฟล็ก--enabled-toolsของคุณ นามแฝงที่เข้ากันได้ย้อนหลังclickhouse,snowflakeและathenaก็ใช้งานได้เช่นกัน
เครื่องมือ SQL แบบรวมรองรับ ClickHouse, Snowflake, Athena, MySQL, PostgreSQL และ MSSQL ผ่านชุดเครื่องมือเดียว คำสั่งค้นหาผ่านปลั๊กอินแหล่งข้อมูลของ Grafana ดังนั้นการรับรองความถูกต้องจึงจัดการโดยการกำหนดค่าแหล่งข้อมูล — ข้อมูลประจำตัวจะไม่ถูกมองเห็นโดยเซิร์ฟเวอร์ MCP
- รายการฐานข้อมูล/สคีมา/แคตตาล็อก: ค้นพบหน่วยองค์กรสำหรับแหล่งข้อมูล SQL สำหรับ Athena ให้ละเว้นแคตตาล็อกเพื่อแสดงรายการแคตตาล็อก หรือส่งแคตตาล็อกเพื่อแสดงรายการฐานข้อมูล
- รายการตาราง: แสดงรายการตารางในฐานข้อมูลหรือสคีมาพร้อมข้อมูลเมตา (จำนวนแถว, ขนาดหากมี)
- อธิบายสคีมาตาราง: รับชื่อคอลัมน์, ประเภท, ความเป็นโมฆะ, ค่าเริ่มต้น และความคิดเห็น
- ค้นหา SQL: ดำเนินการคำสั่งค้นหา SQL พร้อมการแทนที่มาโครเฉพาะแหล่งข้อมูล (
$__timeFilter(col),$__from/$__to,$__interval,${varname}), การบังคับใช้ขีดจำกัดอัตโนมัติ และการสนับสนุนตัวแปรเทมเพลต
การค้นหา CloudWatch
หมายเหตุ: เครื่องมือ CloudWatch ถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งาน ให้เพิ่ม
cloudwatchในแฟล็ก--enabled-toolsของคุณ
- รายการเนมสเปซ CloudWatch: ค้นพบเนมสเปซ AWS CloudWatch ที่พร้อมใช้งาน
- รายการเมตริก CloudWatch: แสดงรายการเมตริกที่พร้อมใช้งานในเนมสเปซเฉพาะ
- รายการมิติ CloudWatch: รับมิติสำหรับการกรองคำสั่งค้นหาเมตริก
- ค้นหา CloudWatch: ดำเนินการคำสั่งค้นหาเมตริก CloudWatch พร้อมการสนับสนุนช่วงเวลา
การค้นหา Google Cloud Logging
หมายเหตุ: เครื่องมือ Google Cloud Logging ถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งาน ให้เพิ่ม
cloudloggingในแฟล็ก--enabled-toolsของคุณ ต้องใช้ ปลั๊กอินแหล่งข้อมูล Google Cloud Logging (googlecloud-logging-datasource) เวอร์ชัน 1.8.0 หรือใหม่กว่า ซึ่งต้องใช้ Grafana 11.2+ ปลั๊กอินเวอร์ชันเก่ากลับรูปแบบเลย์เอาต์การตอบสนองที่แตกต่างและquery_cloud_loggingรายงานข้อผิดพลาดที่ขอให้อัปเกรด
- รายการโปรเจกต์ Cloud Logging: ค้นพบ ID โปรเจกต์ GCP ที่แหล่งข้อมูลสามารถอ่านล็อกจาก
- รายการบัคเก็ตและมุมมอง Cloud Logging: ค้นพบบัคเก็ตล็อกและมุมมองล็อกเพื่อกำหนดขอบเขตคำสั่งค้นหา
- ค้นหา Cloud Logging: รันตัวกรองภาษาคำสั่งค้นหา Cloud Logging (เช่น
resource.type="k8s_container" AND severity>=ERROR) พร้อมช่วงเวลาและขีดจำกัด; ส่งคืนรายการใหม่ที่สุดก่อนพร้อมระดับความรุนแรง, เนื้อหา, ป้ายกำกับ และ ID การติดตาม การรับรองความถูกต้อง GCP จัดการโดยการกำหนดค่าแหล่งข้อมูล
การค้นหา Graphite
หมายเหตุ: เครื่องมือ Graphite ถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งาน ให้เพิ่ม
graphiteในแฟล็ก--enabled-toolsของคุณ
- ค้นหา Graphite: ดำเนินการคำสั่งค้นหา Graphite render API กับแหล่งข้อมูล Graphite
- รายการเมตริก Graphite: เรียกดูและค้นพบเส้นทางเมตริก Graphite
- รายการแท็ก Graphite: แสดงรายการแท็กและค่าแท็ก Graphite ที่พร้อมใช้งาน
- ค้นหาความหนาแน่น Graphite: ค้นหาความหนาแน่นของเมตริก Graphite สำหรับรูปแบบที่กำหนด
การค้นหา Elasticsearch/OpenSearch
หมายเหตุ: เครื่องมือ Elasticsearch/OpenSearch ถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งาน ให้เพิ่ม
elasticsearchในแฟล็ก--enabled-toolsของคุณ
- ค้นหา Elasticsearch/OpenSearch: ดำเนินการคำสั่งค้นหาการค้นหากับแหล่งข้อมูล Elasticsearch หรือ OpenSearch โดยใช้ไวยากรณ์คำสั่งค้นหา Lucene หรือ Elasticsearch Query DSL รองรับการกรองตามช่วงเวลาและการดึงล็อก, เมตริก หรือข้อมูลที่จัดทำดัชนีใดๆ ส่งคืนเอกสารพร้อมดัชนี, ID, ฟิลด์ต้นทาง และคะแนนความเกี่ยวข้องที่ไม่บังคับ
การค้นหา Quickwit
หมายเหตุ: เครื่องมือ Quickwit ถูกปิดใช้งานโดยค่าเริ่มต้น หากต้องการเปิดใช้งาน ให้เพิ่ม
quickwitในแฟล็ก--enabled-toolsของคุณ
- ค้นหา Quickwit: ดำเนินการคำสั่งค้นหาการค้นหากับแหล่งข้อมูล Quickwit โดยใช้ไวยากรณ์คำสั่งค้นหา Lucene หรือ Query DSL ที่เข้ากันได้กับ Elasticsearch บางส่วน รองรับการกรองตามช่วงเวลาและการดึงล็อกหรือเอกสารที่จัดทำดัชนีอื่นๆ ส่งคืนเอกสารพร้อมดัชนี, ID, ฟิลด์ต้นทาง และคะแนนความเกี่ยวข้องที่ไม่บังคับ
การสังเกตการณ์เอเจนต์
หมายเหตุ: เครื่องมือการสังเกตการณ์เอเจนต์ ถูกปิดใช้งานโดยค่าเริ่มต้น และทำงานเฉพาะใน Grafana Cloud หากต้องการเปิดใช้งาน ให้เพิ่ม
agento11yในแฟล็ก--enabled-toolsของคุณ
- รายการและค้นหาบทสนทนา: แสดงรายการบทสนทนา LLM ล่าสุดหรือค้นหาด้วยนิพจน์ตัวกรอง (โมเดล ผู้ให้บริการ เอเจนต์ สถานะ ประเภทข้อผิดพลาด ผลการประเมิน และอื่นๆ) ตามช่วงเวลา ผลการค้นหาประกอบด้วยจำนวนข้อผิดพลาด สรุปคะแนน สรุปการประเมิน และ ID การติดตาม
- รับรายละเอียดบทสนทนา: ดึงบทสนทนาเดียวพร้อมรุ่นทั้งหมด รวมถึงพรอมต์และเอาต์พุต
- รับรายละเอียดรุ่นและคะแนน: ดึงรุ่นเดียวตาม ID และคะแนนการประเมิน (ผู้ประเมิน คีย์คะแนน ค่า ผ่าน คำอธิบาย)
- อ่านแคตตาล็อกเอเจนต์: แสดงรายการเอเจนต์ที่ส่งข้อมูลเทเลเมทรี ดึงเวอร์ชันเอเจนต์หนึ่งแบบเต็ม (พรอมต์ระบบทั้งหมด ทุกเครื่องมือพร้อม JSON schema และโมเดลที่รัน) ดูประวัติเวอร์ชันของเอเจนต์ และเปรียบเทียบผลรวมคะแนนการประเมินต่อเวอร์ชัน เวอร์ชันที่มีผลคือแฮช
sha256:ซึ่งการเปลี่ยนแปลงเครื่องมือไม่เคยส่งผลกระทบ สำหรับเอเจนต์ที่ไม่รายงานเวอร์ชันของตัวเอง พวกมันจะแฮชพรอมต์ระบบ ดังนั้นการแก้ไขพรอมต์จะสร้างเวอร์ชันใหม่ แถวแคตตาล็อกและเวอร์ชันมีtoken_estimateซึ่งควรตรวจสอบก่อนดึงพรอมต์เต็ม - ตรวจสอบผู้ประเมินและเทมเพลต: อ่านผู้ประเมินที่คะแนนมาจาก เทมเพลตที่ได้มา และผู้ให้บริการผู้ตัดสินและโมเดลที่พร้อมใช้งานสำหรับผู้ประเมิน LLM-judge ด้วยเครื่องมือเขียนที่เปิดใช้งาน ยังสร้าง แยก ทดสอบ และลบผู้ประเมินได้
- ตรวจสอบกฎการประเมินและการ์ด: อ่านกฎการประเมินแบบอะซิงโครนัสที่ผูกผู้ประเมินกับการรับส่งข้อมูลการผลิต และการ์ด (กฎฮุก) ที่รันแบบอินไลน์และสามารถเตือนหรือปฏิเสธได้ ด้วยเครื่องมือเขียนที่เปิดใช้งาน ยังสร้าง อัปเดต ดูตัวอย่าง และลบได้ การเขียนและการดำเนินการ
preview_ruleและtest_evaluatorที่ไม่คงอยู่ต้องได้รับสิทธิ์grafana-agento11y-app.eval:writeซึ่งมอบโดยบทบาท Agento11y Admin - ดูแลบทสนทนาและคอลเลกชันที่บันทึกไว้: อ่านบทสนทนาที่บันทึกไว้ (บุ๊กมาร์กที่ให้ ID ชื่อ และแท็กที่เสถียรแก่บทสนทนา) และคอลเลกชันที่จัดกลุ่ม รวมถึงจำนวนสมาชิกของแต่ละคอลเลกชันและคอลเลกชันที่ฝังในทุกแถวบทสนทนาที่บันทึกไว้ ด้วยเครื่องมือเขียนที่เปิดใช้งาน ยังบุ๊กมาร์กบทสนทนา สร้างและแก้ไขคอลเลกชัน และเพิ่มหรือลบสมาชิกได้ การเขียนเหล่านี้ต้องใช้สิทธิ์
grafana-agento11y-app.eval:writeเดียวกัน - อ่านและแก้ไขชุดทดสอบ: แสดงรายการชุดทดสอบที่มีเวอร์ชันซึ่งการทดลองออฟไลน์รันกับ อ่านหนึ่งชุดพร้อมประวัติเวอร์ชันเต็ม และแบ่งหน้าผ่านกรณีทดสอบของเวอร์ชัน ด้วยเครื่องมือเขียนที่เปิดใช้งาน ยังสร้างชุด เปลี่ยนชื่อหรือติดแท็กใหม่ เปิดเวอร์ชันร่าง เผยแพร่ และเขียนหรือลบกรณีทดสอบได้ เวอร์ชันที่เผยแพร่ถูกแช่แข็ง ดังนั้นการแก้ไขหมายถึงการเปิดร่างใหม่ การเขียนเหล่านี้ต้องใช้
grafana-agento11y-app.eval:write - อ่านการทดลองออฟไลน์: แสดงรายการการรันการประเมินบนชุดทดสอบและอ่านหนึ่งรายการพร้อมอัตราการผ่านหลัก ต้นทุน และยอดรวมโทเค็น เจาะลึกผ่านรายงานต่อกรณีทดสอบไปยังการทดลอง คะแนนพร้อมคำอธิบายของผู้ตัดสินแต่ละคน และข้อมูลเมตาของอาร์ติแฟกต์ ด้วยเครื่องมือเขียนที่เปิดใช้งาน ยังเปลี่ยนชื่อหรือติดแท็กใหม่การทดลองและยกเลิกการรันที่กำลังดำเนินการ ซึ่งต้องใช้
grafana-agento11y-app.eval:writeการทดลองถูกสร้างโดยตัวรัน SDK ไม่ใช่โดยเครื่องมือนี้
Grafana Assistant
หมายเหตุ: เครื่องมือ Assistant ถูกปิดใช้งานโดยค่าเริ่มต้น และต้องติดตั้งปลั๊กอิน Grafana Assistant (
grafana-assistant-app) บนอินสแตนซ์ Grafana เป้าหมาย พวกมันยังเป็น เครื่องมือเขียน (ผู้ช่วยอาจเปลี่ยนแปลงสถานะสแตก) ดังนั้นจึงถูกข้ามเมื่อตั้งค่า--disable-writeเพื่อเปิดใช้งาน เพิ่มassistantในแฟล็ก--enabled-toolsของคุณ
- ถามผู้ช่วย: ส่งพรอมต์ภาษาธรรมชาติไปยัง Grafana Assistant และรอคำตอบข้อความเต็ม ผู้ช่วยอาจใช้เครื่องมือ เมตริก ล็อก และบริบทสแตกอื่นๆ—กว้างกว่าการยิงคิวรีแหล่งข้อมูลเดียวที่แยกออกมา ส่ง
contextIdที่ส่งคืนกลับในการเรียกติดตามผลเพื่อดำเนินการสนทนาเดียวกันต่อ งานที่ซับซ้อนอาจใช้เวลาหลายนาที การเรียกจะบล็อกจนกว่าคำตอบจะเสร็จหรือคำขอหมดเวลา (5 นาที)
Incidents
- ค้นหา สร้าง และอัปเดต incidents: จัดการ incidents ใน Grafana Incident รวมถึงการค้นหา การสร้าง การเพิ่มกิจกรรม และการอ่านหรือตั้งค่าฟิลด์ที่กำหนดเอง
Sift Investigations
- รายการ Sift investigations: ดึงรายการ Sift investigations พร้อมการสนับสนุนพารามิเตอร์ limit
- รับ Sift investigation: ดึงรายละเอียดของ Sift investigation เฉพาะตาม UUID
- รับ Sift analyses: ดึงการวิเคราะห์เฉพาะจาก Sift investigation
- ค้นหารูปแบบข้อผิดพลาดในล็อก: ตรวจจับรูปแบบข้อผิดพลาดที่สูงขึ้นในล็อก Loki โดยใช้ Sift
- ค้นหาคำขอช้า: ตรวจจับคำขอช้าโดยใช้ Sift (Tempo)
Alerting
- รายการและดึงข้อมูลกฎการแจ้งเตือน: ดูกฎการแจ้งเตือนและสถานะ (firing/normal/error/etc.) ใน Grafana รองรับทั้งกฎที่จัดการโดย Grafana และกฎที่จัดการโดยแหล่งข้อมูลจากแหล่งข้อมูล Prometheus หรือ Loki
- สร้างและอัปเดตกฎการแจ้งเตือน: สร้างกฎการแจ้งเตือนใหม่หรือแก้ไขกฎที่มีอยู่
- ลบกฎการแจ้งเตือน: ลบกฎการแจ้งเตือนตาม UID
- จัดการเส้นทางการแจ้งเตือน: ดูนโยบายการแจ้งเตือน จุดติดต่อ และช่วงเวลา รองรับทั้งจุดติดต่อที่จัดการโดย Grafana และตัวรับจากแหล่งข้อมูล Alertmanager ภายนอก (Prometheus Alertmanager, Mimir, Cortex)
Grafana OnCall
- รายการและจัดการตารางเวลา: ดูและจัดการตารางเวลา on-call ใน Grafana OnCall
- รับรายละเอียดกะ: ดึงข้อมูลโดยละเอียดเกี่ยวกับกะ on-call เฉพาะ
- รับผู้ใช้ on-call ปัจจุบัน: ดูว่าผู้ใช้ใดกำลัง on-call สำหรับตารางเวลา
- รายการทีมและผู้ใช้: ดูทีมและผู้ใช้ OnCall ทั้งหมด
- รายการกลุ่มการแจ้งเตือน: ดูและกรองกลุ่มการแจ้งเตือนจาก Grafana OnCall ตามเกณฑ์ต่างๆ รวมถึงสถานะ การรวมกลุ่ม ป้ายกำกับ และช่วงเวลา
- รับรายละเอียดกลุ่มการแจ้งเตือน: ดึงข้อมูลโดยละเอียดเกี่ยวกับกลุ่มการแจ้งเตือนเฉพาะตาม ID
Admin
หมายเหตุ: เครื่องมือ Admin ถูกปิดใช้งานโดยค่าเริ่มต้น เพื่อเปิดใช้งาน รวม
adminในแฟล็ก--enabled-toolsของคุณ
- รายการทีม: ดูทีมที่กำหนดค่าทั้งหมดใน Grafana
- รายการผู้ใช้: ดูผู้ใช้ทั้งหมดในองค์กรใน Grafana
- รายการบทบาททั้งหมด: แสดงรายการบทบาท Grafana ทั้งหมด พร้อมตัวกรองเสริมสำหรับบทบาทที่สามารถมอบหมายได้
- รับรายละเอียดบทบาท: รับรายละเอียดสำหรับบทบาท Grafana เฉพาะตาม UID
- รายการการกำหนดสำหรับบทบาท: แสดงรายการผู้ใช้ ทีม และบัญชีบริการทั้งหมดที่กำหนดให้กับบทบาท
- รายการบทบาทสำหรับผู้ใช้: แสดงรายการบทบาททั้งหมดที่กำหนดให้กับผู้ใช้หนึ่งคนหรือมากกว่า
- รายการบทบาทสำหรับทีม: แสดงรายการบทบาททั้งหมดที่กำหนดให้กับทีมหนึ่งทีมหรือมากกว่า
- รายการสิทธิ์สำหรับทรัพยากร: แสดงรายการสิทธิ์ทั้งหมดที่กำหนดสำหรับทรัพยากรเฉพาะ (แดชบอร์ด แหล่งข้อมูล โฟลเดอร์ ฯลฯ)
- อธิบายทรัพยากร Grafana: แสดงรายการสิทธิ์ที่พร้อมใช้งานและความสามารถในการกำหนดสำหรับประเภททรัพยากร
User
- ข้อมูลผู้ใช้: รับข้อมูลประจำตัว Grafana ปัจจุบัน—ล็อกอิน อีเมล ชื่อ ไม่ว่าเป็นผู้ดูแลระบบ Grafana (เซิร์ฟเวอร์) องค์กรปัจจุบัน และองค์กรที่ข้อมูลประจำตัวสามารถเข้าถึงได้ (พร้อมบทบาท) ใช้เพื่อค้นหาค่า
orgIdที่ถูกต้องสำหรับคำขอ หลายองค์กร
Navigation
- สร้าง deeplinks: สร้าง URL deeplink ที่แม่นยำสำหรับทรัพยากร Grafana แทนการพึ่งพาการเดา URL ของ LLM
- ลิงก์แดชบอร์ด: สร้างลิงก์โดยตรงไปยังแดชบอร์ดโดยใช้ UID (เช่น
http://localhost:3000/d/dashboard-uid) - ลิงก์แผง: สร้างลิงก์ไปยังแผงเฉพาะภายในแดชบอร์ดด้วยพารามิเตอร์ viewPanel (เช่น
http://localhost:3000/d/dashboard-uid?viewPanel=5) - ลิงก์ Explore: สร้างลิงก์ไปยัง Grafana Explore พร้อมแหล่งข้อมูลที่กำหนดค่าล่วงหน้า (เช่น
http://localhost:3000/explore?schemaVersion=1&panes={"a":{"datasource":"prometheus-uid"}}) Grafana ต่ำกว่า 10.2 ไม่เข้าใจpanesดังนั้นรูปแบบ?left={...}แบบเดิมจึงถูกส่งออกสำหรับเวอร์ชันเหล่านั้นแทน - การสนับสนุนช่วงเวลา: เพิ่มพารามิเตอร์ช่วงเวลาในลิงก์ (
from=now-1h&to=now) - พารามิเตอร์ที่กำหนดเอง: รวมพารามิเตอร์คิวรีเพิ่มเติม เช่น ตัวแปรแดชบอร์ดหรือช่วงเวลารีเฟรช
- ลิงก์แดชบอร์ด: สร้างลิงก์โดยตรงไปยังแดชบอร์ดโดยใช้ UID (เช่น
Annotations
- รับ Annotations: คิวรี annotations พร้อมตัวกรอง รองรับช่วงเวลา UID แดชบอร์ด แท็ก และโหมดการจับคู่
- สร้าง Annotation: สร้าง annotation ใหม่บนแดชบอร์ดหรือแผง
- สร้าง Graphite Annotation: สร้าง annotations โดยใช้รูปแบบ Graphite (
what,when,tags,data) - อัปเดต Annotation: แทนที่ฟิลด์ทั้งหมดของ annotation ที่มีอยู่ (อัปเดตเต็ม)
- แพตช์ Annotation: อัปเดตเฉพาะฟิลด์บางฟิลด์ของ annotation (อัปเดตบางส่วน)
- ลบ Annotation: ลบ annotation อย่างถาวรตาม ID
- รับแท็ก Annotation: แสดงรายการแท็ก annotation ที่พร้อมใช้งานพร้อมตัวกรองเสริม
Snapshots
- รายการ snapshots: แสดงรายการ snapshot แดชบอร์ดพร้อมตัวกรองคิวรีและขีดจำกัดเสริม
- รับ snapshot: ดึงข้อมูลเมตาของ snapshot และเพย์โหลดแดชบอร์ดตามคีย์ snapshot
- สร้าง snapshot: สร้าง snapshot แดชบอร์ดจากเพย์โหลดแดชบอร์ดเต็ม พร้อมตัวเลือกการหมดอายุและ snapshot ภายนอกเสริม
- ลบ snapshot: ลบ snapshot ตามคีย์ snapshot
Rendering
- รับภาพแผงหรือแดชบอร์ด: เรนเดอร์แผงแดชบอร์ด Grafana หรือแดชบอร์ดเต็มเป็นภาพ PNG ส่งคืนภาพเป็นข้อมูลเข้ารหัส base64 สำหรับใช้ในรายงาน การแจ้งเตือน หรือการนำเสนอ รองรับการปรับขนาด ช่วงเวลา ธีม สเกล และตัวแปรแดชบอร์ด ยังรองรับการเรนเดอร์แดชบอร์ดที่ยังไม่ได้ใช้จากสาขาพื้นที่เก็บข้อมูล provisioning (เช่น ตัวอย่าง PR git-sync) ผ่านพารามิเตอร์
provisioningPreviewเสริม- หมายเหตุ: ต้องติดตั้งและกำหนดค่าบริการ Grafana Image Renderer
Provisioning
- รายการพื้นที่เก็บข้อมูล provisioning: แสดงรายการพื้นที่เก็บข้อมูล provisioning ที่กำหนดค่าสำหรับอินสแตนซ์ Grafana นี้ (เช่น แหล่ง git-sync) ส่งคืน slug ของแต่ละพื้นที่เก็บข้อมูลพร้อม URL แหล่งที่มา สาขา เส้นทาง สถานะซิงก์ และสุขภาพ
- ตรวจสอบไฟล์ provisioning: Dry-run-apply ไฟล์จากพื้นที่เก็บข้อมูล provisioning ที่สาขาหรือคอมมิตที่กำหนด ส่งคืนว่าจะได้รับการยอมรับหรือไม่ การดำเนินการทรัพยากร (สร้าง/อัปเดต) ประเภททรัพยากรเป้าหมาย และข้อผิดพลาดการตรวจสอบที่มีโครงสร้าง—พื้นผิวการยอมรับเดียวกันกับที่ผู้แสดงความคิดเห็น PR ของ Grafana ใช้
รายการเครื่องมือสามารถกำหนดค่าได้ ดังนั้นคุณสามารถเลือกเครื่องมือที่ต้องการให้พร้อมใช้งานกับไคลเอ็นต์ MCP ได้
สิ่งนี้มีประโยชน์หากคุณไม่ใช้ฟังก์ชันบางอย่างหรือไม่ต้องการใช้พื้นที่บริบทมากเกินไป
เพื่อปิดใช้งานหมวดหมู่เครื่องมือ ใช้แฟล็ก --disable-<category> เมื่อเริ่มเซิร์ฟเวอร์ ตัวอย่างเช่น เพื่อปิดใช้งาน
เครื่องมือ OnCall ใช้ --disable-oncall หรือเพื่อปิดใช้งานการสร้าง deeplink การนำทาง ใช้ --disable-navigation
สิทธิ์ RBAC
แต่ละเครื่องมือต้องใช้สิทธิ์ RBAC เฉพาะเพื่อทำงานอย่างถูกต้อง เมื่อสร้างบัญชีบริการสำหรับเซิร์ฟเวอร์ MCP ตรวจสอบให้แน่ใจว่ามีสิทธิ์ที่จำเป็นตามเครื่องมือที่คุณวางแผนจะใช้ สิทธิ์ที่แสดงคือการดำเนินการขั้นต่ำที่จำเป็น—คุณอาจต้องมีขอบเขตที่เหมาะสม (เช่น datasources:*, dashboards:*, folders:*) ขึ้นอยู่กับกรณีการใช้งานของคุณ
เคล็ดลับ: หากคุณไม่คุ้นเคยกับ RBAC ของ Grafana หรือต้องการการตั้งค่าที่รวดเร็วและง่ายกว่าแทนการกำหนดค่าขอบเขตย่อยจำนวนมาก คุณสามารถกำหนดบทบาทในตัวเช่น Editor ให้กับบัญชีบริการได้ บทบาท Editor ให้สิทธิ์การเข้าถึงการอ่าน/เขียนในวงกว้างซึ่งจะอนุญาตให้การดำเนินการเซิร์ฟเวอร์ MCP ส่วนใหญ่ทำงานได้ มันมีความละเอียดน้อยกว่า (และจึงจำกัดน้อยกว่า) ขอบเขตที่ใช้ด้วยตนเอง ดังนั้นใช้เฉพาะเมื่อความสะดวกสำคัญกว่าการเข้าถึงสิทธิ์น้อยที่สุดที่เข้มงวด
หมายเหตุ: เครื่องมือ Grafana Incident และ Sift ใช้บทบาท Grafana พื้นฐานแทนสิทธิ์ RBAC แบบละเอียด:
- บทบาท Viewer: จำเป็นสำหรับการดำเนินการอ่านอย่างเดียว (รายการ incidents, รับ investigations)
- บทบาท Editor: จำเป็นสำหรับการดำเนินการเขียน (สร้าง incidents, แก้ไข investigations)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ RBAC ของ Grafana ดู เอกสารอย่างเป็นทางการ
ขอบเขต RBAC
ขอบเขตกำหนดทรัพยากรเฉพาะที่สิทธิ์ใช้กับ แต่ละการดำเนินการต้องใช้ทั้งสิทธิ์และชุดขอบเขตที่เหมาะสม
รูปแบบขอบเขตทั่วไป:
-
การเข้าถึงแบบกว้าง: ใช้ wildcards ของ
*เพื่อการเข้าถึงทั่วทั้งองค์กรdatasources:*- เข้าถึง datasources ทั้งหมดdashboards:*- เข้าถึง dashboards ทั้งหมดfolders:*- เข้าถึง folders ทั้งหมดteams:*- เข้าถึง teams ทั้งหมด
-
การเข้าถึงแบบจำกัด: ใช้ UIDs หรือ IDs เฉพาะเพื่อจำกัดการเข้าถึงทรัพยากรแต่ละรายการ
datasources:uid:prometheus-uid- เข้าถึงเฉพาะ Prometheus datasource ที่ระบุdashboards:uid:abc123- เข้าถึงเฉพาะ dashboard ที่มี UIDabc123folders:uid:xyz789- เข้าถึงเฉพาะ folder ที่มี UIDxyz789teams:id:5- เข้าถึงเฉพาะ team ที่มี ID5global.users:id:123- เข้าถึงเฉพาะ user ที่มี ID123
ตัวอย่าง:
-
การเข้าถึง MCP server เต็มรูปแบบ: ให้สิทธิ์กว้างสำหรับเครื่องมือทั้งหมด
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) -
การเข้าถึง datasource แบบจำกัด: คิวรีเฉพาะอินสแตนซ์ Prometheus และ Loki ที่ระบุ
datasources:uid:prometheus-prod (datasources:query) datasources:uid:loki-prod (datasources:query) -
การเข้าถึงเฉพาะ dashboard: อ่านเฉพาะ dashboards ที่ระบุ
dashboards:uid:monitoring-dashboard (dashboards:read) dashboards:uid:alerts-dashboard (dashboards:read)
เครื่องมือ
| เครื่องมือ | หมวดหมู่ | คำอธิบาย | สิทธิ์ RBAC ที่จำเป็น | ขอบเขตที่จำเป็น |
|---|---|---|---|---|
list_teams | ผู้ดูแลระบบ | แสดงรายการทีมทั้งหมด | teams:read | teams:* หรือ teams:id:1 |
list_users_by_org | ผู้ดูแลระบบ | แสดงรายการผู้ใช้ทั้งหมดในองค์กร | users:read | global.users:* หรือ global.users:id:123 |
list_all_roles | ผู้ดูแลระบบ | แสดงรายการบทบาท Grafana ทั้งหมด | roles:read | roles:* |
get_role_details | ผู้ดูแลระบบ | รับรายละเอียดสำหรับบทบาท Grafana | roles:read | roles:uid:editor |
get_role_assignments | ผู้ดูแลระบบ | แสดงรายการการกำหนดสำหรับบทบาท | roles:read | roles:uid:editor |
list_user_roles | ผู้ดูแลระบบ | แสดงรายการบทบาทสำหรับผู้ใช้ | roles:read | global.users:id:123 |
list_team_roles | ผู้ดูแลระบบ | แสดงรายการบทบาทสำหรับทีม | roles:read | teams:id:7 |
get_resource_permissions | ผู้ดูแลระบบ | แสดงรายการสิทธิ์สำหรับทรัพยากร | permissions:read | dashboards:uid:abcd1234 |
get_resource_description | ผู้ดูแลระบบ | อธิบายประเภททรัพยากร Grafana | permissions:read | dashboards:* |
user_info | ผู้ใช้ | ข้อมูลประจำตัว ความสามารถ และองค์กรที่เข้าถึงได้ในปัจจุบัน | ไม่มี (ผู้ใช้ที่เข้าสู่ระบบ) | — |
search_dashboards | ค้นหา | ค้นหาแดชบอร์ดตามคำค้นหา UID โฟลเดอร์ แท็ก หรือรายการที่ติดดาว | dashboards:read | dashboards:* หรือ dashboards:uid:abc123 |
get_dashboard_by_uid | แดชบอร์ด | รับแดชบอร์ดตาม uid หรือเวอร์ชันที่บันทึกไว้ | dashboards:read | dashboards:uid:abc123 |
list_dashboard_versions | แดชบอร์ด | แสดงรายการเวอร์ชันที่บันทึกของแดชบอร์ด (เวอร์ชัน ผู้เขียน เวลา ข้อความ) | dashboards:read | dashboards:uid:abc123 |
update_dashboard | แดชบอร์ด | อัปเดตหรือสร้างแดชบอร์ดใหม่ | dashboards:create, dashboards:write | dashboards:*, folders:* หรือ folders:uid:xyz789 |
get_dashboard_panel_queries | แดชบอร์ด | รับชื่อแผง คำค้นหา UID แหล่งข้อมูล และประเภทจากแดชบอร์ด | dashboards:read | dashboards:uid:abc123 |
run_panel_query | รันคำค้นหาแผง* | ดำเนินการคำค้นหาแผงแดชบอร์ดหนึ่งรายการขึ้นไป | dashboards:read, datasources:query | dashboards:uid:*, datasources:uid:* |
get_dashboard_property | แดชบอร์ด | แยกส่วนเฉพาะของแดชบอร์ดโดยใช้นิพจน์ JSONPath | dashboards:read | dashboards:uid:abc123 |
get_dashboard_summary | แดชบอร์ด | รับสรุปย่อของแดชบอร์ดโดยไม่มี JSON เต็มรูปแบบ | dashboards:read | dashboards:uid:abc123 |
list_datasources | แหล่งข้อมูล | แสดงรายการแหล่งข้อมูล | datasources:read | datasources:* |
get_datasource | แหล่งข้อมูล | รับแหล่งข้อมูลตาม UID หรือชื่อ | datasources:read | datasources:uid:prometheus-uid |
get_query_examples | ตัวอย่าง* | รับตัวอย่างคำค้นหาสำหรับประเภทแหล่งข้อมูล | datasources:read | datasources:* |
query_prometheus | Prometheus | ดำเนินการคำค้นหาต่อแหล่งข้อมูล Prometheus | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_metric_metadata | Prometheus | แสดงรายการข้อมูลเมตริก | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_metric_names | Prometheus | แสดงรายการชื่อเมตริกที่พร้อมใช้งาน | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_label_names | Prometheus | แสดงรายการชื่อป้ายกำกับที่ตรงกับตัวเลือก | datasources:query | datasources:uid:prometheus-uid |
list_prometheus_label_values | Prometheus | แสดงรายการค่าสำหรับป้ายกำกับเฉพาะ | datasources:query | datasources:uid:prometheus-uid |
query_prometheus_histogram | Prometheus | คำนวณค่าเปอร์เซ็นไทล์ฮิสโตแกรม | datasources:query | datasources:uid:prometheus-uid |
list_incidents | เหตุการณ์ | แสดงรายการเหตุการณ์ใน Grafana Incident พร้อมค่าฟิลด์ที่กำหนดเองได้ | บทบาทผู้ชม | N/A |
create_incident | เหตุการณ์ | สร้างเหตุการณ์ใน Grafana Incident พร้อมตั้งค่าฟิลด์ที่กำหนดเองได้ | บทบาทผู้แก้ไข | N/A |
add_activity_to_incident | เหตุการณ์ | เพิ่มรายการกิจกรรมให้กับเหตุการณ์ใน Grafana Incident | บทบาทผู้แก้ไข | N/A |
update_incident | เหตุการณ์ | อัปเดตเหตุการณ์ใน Grafana Incident (สถานะ ความรุนแรง ชื่อ หรือฟิลด์ที่กำหนดเอง) | บทบาทผู้แก้ไข | N/A |
get_incident | เหตุการณ์ | รับเหตุการณ์เดียวตาม ID รวมถึงฟิลด์ที่กำหนดเอง | บทบาทผู้ชม | N/A |
list_incident_custom_fields | เหตุการณ์ | แสดงรายการฟิลด์ที่กำหนดเองที่กำหนดค่าสำหรับเหตุการณ์ พร้อมประเภทและตัวเลือกการเลือก | บทบาทผู้ชม | N/A |
query_loki_logs | Loki | ค้นหาและดึงข้อมูลบันทึกโดยใช้ LogQL (ทั้งคำค้นหาบันทึกหรือเมตริก) | datasources:query | datasources:uid:loki-uid |
list_loki_label_names | Loki | แสดงรายการชื่อป้ายกำกับที่พร้อมใช้งานทั้งหมดในบันทึก | datasources:query | datasources:uid:loki-uid |
list_loki_label_values | Loki | แสดงรายการค่าสำหรับป้ายกำกับบันทึกเฉพาะ | datasources:query | datasources:uid:loki-uid |
query_loki_stats | Loki | รับสถิติเกี่ยวกับสตรีมบันทึก | datasources:query | datasources:uid:loki-uid |
query_loki_patterns | Loki | ค้นหารูปแบบบันทึกที่ตรวจพบเพื่อระบุโครงสร้างทั่วไป | datasources:query | datasources:uid:loki-uid |
analyze_loki_labels | Loki | ตรวจสอบกลยุทธ์ป้ายกำกับ Loki (สดหรือคงที่) และวินิจฉัยประสิทธิภาพคำค้นหาได้ | datasources:query | datasources:uid:loki-uid |
suggest_loki_alloy_label_config | การกำหนดค่า | สร้างข้อมูลโค้ด Alloy loki.process ที่บังคับใช้ป้ายกำกับที่อนุมัติ | N/A | N/A |
query_influxdb | InfluxDB | คิวรี InfluxDB โดยใช้ InfluxQL (v1) หรือ Flux (v2) | datasources:query | datasources:uid:influxdb-uid |
list_sql_databases | SQL* | แสดงรายการฐานข้อมูล สคีมา หรือแคตตาล็อกจากแหล่งข้อมูล SQL | datasources:query | datasources:uid:* |
list_sql_tables | SQL* | แสดงรายการตารางในแหล่งข้อมูล SQL | datasources:query | datasources:uid:* |
describe_sql_table | SQL* | รับสคีมาของคอลัมน์สำหรับตาราง | datasources:query | datasources:uid:* |
query_sql | SQL* | ดำเนินการคิวรี SQL พร้อมการแทนที่แมโคร | datasources:query | datasources:uid:* |
list_cloudwatch_namespaces | CloudWatch* | แสดงรายการเนมสเปซ AWS CloudWatch ที่มีอยู่ | datasources:query | datasources:uid:* |
list_cloudwatch_metrics | CloudWatch* | แสดงรายการเมตริกในเนมสเปซ | datasources:query | datasources:uid:* |
list_cloudwatch_dimensions | CloudWatch* | แสดงรายการมิติสำหรับเมตริก | datasources:query | datasources:uid:* |
list_cloudwatch_dimension_values | CloudWatch* | แสดงรายการค่าสำหรับคีย์มิติ | datasources:query | datasources:uid:* |
query_cloudwatch | CloudWatch* | ดำเนินการคิวรีเมตริก CloudWatch | datasources:query | datasources:uid:* |
list_cloud_logging_projects | Cloud Logging* | แสดงรายการโปรเจกต์ GCP ที่อ่านได้โดยแหล่งข้อมูล Google Cloud Logging | datasources:query | datasources:uid:* |
list_cloud_logging_buckets | Cloud Logging* | แสดงรายการบัคเก็ตล็อกในโปรเจกต์ GCP | datasources:query | datasources:uid:* |
list_cloud_logging_views | Cloud Logging* | แสดงรายการมุมมองล็อกในบัคเก็ตล็อก | datasources:query | datasources:uid:* |
query_cloud_logging | Cloud Logging* | คิวรีล็อกด้วยภาษาคิวรี Cloud Logging | datasources:query | datasources:uid:* |
query_elasticsearch | Elasticsearch/OpenSearch* | คิวรี Elasticsearch หรือ OpenSearch โดยใช้ไวยากรณ์ Lucene หรือ Query DSL | datasources:query | datasources:uid:datasource-uid |
query_quickwit | Quickwit* | คิวรี Quickwit โดยใช้ไวยากรณ์ Lucene หรือ Query DSL | datasources:query | datasources:uid:quickwit-uid |
alerting_manage_rules | Alerting | จัดการกฎการแจ้งเตือน (แสดงรายการ รับ เวอร์ชัน สร้าง อัปเดต ลบ) | alert.rules:read + alert.rules:write สำหรับการแก้ไข | folders:* หรือ folders:uid:alerts-folder |
alerting_manage_routing | Alerting | จัดการนโยบายการแจ้งเตือน จุดติดต่อ และช่วงเวลา | alert.notifications:read | ขอบเขตทั่วโลก |
alerting_manage_silences | Alerting | จัดการช่วงเงียบของการแจ้งเตือน (แสดงรายการ รับ สร้าง อัปเดต หมดอายุ) | alert.instances:read + alert.instances:write สำหรับการแก้ไข | ขอบเขตทั่วโลก |
list_oncall_schedules | OnCall | แสดงรายการตารางเวลาจาก Grafana OnCall | grafana-oncall-app.schedules:read | ขอบเขตเฉพาะปลั๊กอิน |
get_oncall_shift | OnCall | รับรายละเอียดสำหรับกะ OnCall เฉพาะ | grafana-oncall-app.schedules:read | ขอบเขตเฉพาะปลั๊กอิน |
get_current_oncall_users | OnCall | รับผู้ใช้ที่ปฏิบัติหน้าที่อยู่ในปัจจุบันสำหรับตารางเวลาเฉพาะ | grafana-oncall-app.schedules:read | ขอบเขตเฉพาะปลั๊กอิน |
list_oncall_teams | OnCall | แสดงรายการทีมจาก Grafana OnCall | grafana-oncall-app.user-settings:read | ขอบเขตเฉพาะปลั๊กอิน |
list_oncall_users | OnCall | แสดงรายการผู้ใช้จาก Grafana OnCall | grafana-oncall-app.user-settings:read | ขอบเขตเฉพาะปลั๊กอิน |
list_alert_groups | OnCall | แสดงรายการกลุ่มการแจ้งเตือนจาก Grafana OnCall พร้อมตัวเลือกการกรอง | grafana-oncall-app.alert-groups:read | ขอบเขตเฉพาะปลั๊กอิน |
get_alert_group | OnCall | รับกลุ่มการแจ้งเตือนเฉพาะจาก Grafana OnCall โดยใช้ ID | grafana-oncall-app.alert-groups:read | ขอบเขตเฉพาะปลั๊กอิน |
update_alert_group | OnCall | ยอมรับ เลิกยอมรับ แก้ไข หรือเลิกแก้ไขกลุ่มการแจ้งเตือน | grafana-oncall-app.alert-groups:write (และ :read) | ขอบเขตเฉพาะปลั๊กอิน |
get_sift_investigation | Sift | ดึงข้อมูลการสอบสวน Sift ที่มีอยู่โดยใช้ UUID | บทบาทผู้ดู | N/A |
get_sift_analysis | Sift | ดึงการวิเคราะห์เฉพาะจากการสอบสวน Sift | บทบาทผู้ดู | N/A |
list_sift_investigations | Sift | ดึงรายการการสอบสวน Sift พร้อมขีดจำกัดที่ไม่บังคับ | บทบาทผู้ดู | N/A |
find_error_pattern_logs | Sift | ค้นหารูปแบบข้อผิดพลาดที่สูงขึ้นในล็อก Loki | บทบาทผู้แก้ไข | N/A |
find_slow_requests | Sift | ค้นหาคำขอที่ช้าจากแหล่งข้อมูล tempo ที่เกี่ยวข้อง | บทบาทผู้แก้ไข | N/A |
list_pyroscope_label_names | Pyroscope | แสดงรายการชื่อป้ายกำกับที่ตรงกับตัวเลือก | datasources:query | datasources:uid:pyroscope-uid |
list_pyroscope_label_values | Pyroscope | แสดงรายการค่าป้ายกำกับที่ตรงกับตัวเลือกสำหรับชื่อป้ายกำกับ | datasources:query | datasources:uid:pyroscope-uid |
list_pyroscope_profile_types | Pyroscope | แสดงรายการประเภทโปรไฟล์ที่มีอยู่ | datasources:query | datasources:uid:pyroscope-uid |
query_pyroscope | Pyroscope | คิวรีโปรไฟล์ เมตริก หรือทั้งสองอย่างจาก Pyroscope | datasources:query | datasources:uid:pyroscope-uid |
get_assertions | Asserts | รับสรุปการยืนยันสำหรับเอนทิตีที่กำหนด | สิทธิ์เฉพาะปลั๊กอิน | ขอบเขตเฉพาะปลั๊กอิน |
agento11y_manage_conversations | Agent Observability* | แสดงรายการ ค้นหา และดึงข้อมูลการสนทนา LLM จาก Grafana Agent Observability | grafana-agento11y-app.conversations:read | N/A |
agento11y_manage_generations | Agent Observability* | ดึงรายละเอียดการสร้าง LLM และคะแนนการประเมินจาก Grafana Agent Observability | grafana-agento11y-app.data:read | N/A |
agento11y_manage_agents | Agent Observability* | อ่านแคตตาล็อกเอเจนต์: แสดงรายการเอเจนต์ รับเวอร์ชันเอเจนต์หนึ่งแบบเต็ม แสดงรายการประวัติเวอร์ชัน และคะแนนรวมรายเวอร์ชัน | grafana-agento11y-app.data:read | N/A |
agento11y_manage_evaluators | Agent Observability* | จัดการตัวประเมิน เทมเพลตตัวประเมิน และแคตตาล็อกผู้ตัดสิน (แสดงรายการ รับ upsert fork ทดสอบ ลบ) | grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write สำหรับการแก้ไขและการทดสอบ | N/A |
agento11y_manage_eval_rules | Agent Observability* | จัดการกฎการประเมินและการป้องกัน (แสดงรายการ รับ สร้าง อัปเดต ดูตัวอย่าง ลบ) | grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write สำหรับการแก้ไขและการดูตัวอย่าง | N/A |
agento11y_manage_eval_collections | Agent Observability* | จัดการการสนทนาที่บันทึกไว้และคอลเลกชันที่จัดกลุ่ม (แสดงรายการ รับ บันทึก สร้าง อัปเดต ลบ เพิ่มและลบสมาชิก) | grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write สำหรับการแก้ไข | N/A |
agento11y_manage_experiments | Agent Observability* | อ่านการทดลองแบบออฟไลน์ การทดลองย่อย คะแนน ข้อมูลเมตาของอาร์ติแฟกต์ และตัวกรองแฟกต์; อัปเดตและยกเลิกการทดลอง | grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write สำหรับการแก้ไข | N/A |
agento11y_manage_test_suites | Agent Observability* | จัดการชุดทดสอบที่การทดลองแบบออฟไลน์ใช้ทดสอบ เวอร์ชัน และกรณีทดสอบ (รายการ ดู สร้าง อัปเดต ร่าง เผยแพร่ อัปเซิร์ต ลบ) | grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write สำหรับการแก้ไข | N/A |
ask_assistant | Assistant* | ส่งพรอมต์ไปยัง Grafana Assistant และส่งคืนข้อความตอบกลับแบบเต็ม (หลายรอบผ่าน contextId) | สิทธิ์เฉพาะปลั๊กอิน | ขอบเขตเฉพาะปลั๊กอิน |
generate_deeplink | การนำทาง | สร้าง URL ลิงก์ลึกที่แม่นยำสำหรับทรัพยากร Grafana | ไม่มี (การสร้าง URL แบบอ่านอย่างเดียว) | N/A |
get_annotations | คำอธิบายประกอบ | ดึงคำอธิบายประกอบพร้อมตัวกรอง | annotations:read | annotations:* หรือ annotations:id:123 |
create_annotation | คำอธิบายประกอบ | สร้างคำอธิบายประกอบใหม่ (รูปแบบมาตรฐานหรือ Graphite) | annotations:write | annotations:* |
update_annotation | คำอธิบายประกอบ | อัปเดตฟิลด์เฉพาะของคำอธิบายประกอบ (การอัปเดตบางส่วน) | annotations:write | annotations:* |
delete_annotation | คำอธิบายประกอบ | ลบคำอธิบายประกอบตาม ID | annotations:delete | annotations:* |
get_annotation_tags | คำอธิบายประกอบ | รายการแท็กคำอธิบายประกอบพร้อมตัวกรองเสริม | annotations:read | annotations:* |
list_snapshots | สแนปชอต | รายการสแนปชอตแดชบอร์ดพร้อมตัวกรองคำค้นหาและขีดจำกัดเสริม | dashboards:read | dashboards:* หรือ dashboards:uid:abc123 |
get_snapshot | สแนปชอต | ดูข้อมูลเมตาของสแนปชอตและเพย์โหลดแดชบอร์ดตามคีย์สแนปชอต | dashboards:read | dashboards:* หรือ dashboards:uid:abc123 |
create_snapshot | สแนปชอต | สร้างสแนปชอตแดชบอร์ดจากเพย์โหลดแดชบอร์ดแบบเต็ม | dashboards:write | dashboards:* หรือ dashboards:uid:abc123 |
delete_snapshot | สแนปชอต | ลบสแนปชอตแดชบอร์ดตามคีย์สแนปชอต | dashboards:write | dashboards:* หรือ dashboards:uid:abc123 |
get_panel_image | การเรนเดอร์ | เรนเดอร์แดชบอร์ดหรือแผงที่จัดเก็บไว้ — หรือตัวอย่างการเตรียมการจากสาขาที่เก็บ — เป็นภาพ PNG | dashboards:read | dashboards:uid:abc123 |
list_provisioning_repositories | การเตรียมการ | รายการที่เก็บการเตรียมการ (เช่น แหล่งที่มา git-sync) พร้อม URL แหล่งที่มา สาขา สถานะการซิงค์ และความสมบูรณ์ | provisioning.repositories:read | N/A |
validate_provisioning_file | การเตรียมการ | ทดลองใช้ไฟล์จากที่เก็บการเตรียมการและรายงานข้อผิดพลาดการตรวจสอบการยอมรับ | provisioning.repositories:read | N/A |
search_docs | เอกสาร | ค้นหาเอกสาร Grafana หรือรายการกลุ่มผลิตภัณฑ์ (ละเว้นคำค้นหาเพื่อรายการผลิตภัณฑ์) | ไม่มี (grafana.com/docs สาธารณะ) | N/A |
get_doc | เอกสาร | ดึงหน้าคู่มือ; ตั้งค่า outline_only สำหรับหัวข้อ หรือ section สำหรับการดึงข้อมูลแบบจำกัด | ไม่มี (grafana.com/docs สาธารณะ) | N/A |
* ปิดใช้งานตามค่าเริ่มต้น เพิ่มหมวดหมู่ใน --enabled-tools เพื่อเปิดใช้งาน |
เอกสารอ้างอิงแฟล็ก CLI
ไบนารี mcp-grafana รองรับแฟล็กบรรทัดคำสั่งต่าง ๆ สำหรับการกำหนดค่า:
ตัวเลือกการขนส่ง:
-t, --transport: ประเภทการขนส่ง (stdio,sse, หรือstreamable-http) - ค่าเริ่มต้น:stdio--address: โฮสต์และพอร์ตสำหรับเซิร์ฟเวอร์ SSE/streamable-http - ค่าเริ่มต้น:localhost:8000--base-path: เส้นทางฐานสำหรับเซิร์ฟเวอร์ SSE/streamable-http/healthzและ/metricsจะให้บริการที่รากของเซิร์ฟเวอร์เสมอ ไม่ใช่ภายใต้คำนำหน้านี้ — เป็นเอนด์พอยต์ภายในสำหรับโพรบและสแครปเปอร์เท่านั้น และการเก็บไว้ไม่ให้อยู่ภายใต้คำนำหน้าแอปพลิเคชันทำให้ง่ายต่อการเปิดเผย API ผ่านพร็อกซีแบบย้อนกลับโดยไม่เปิดเผยสิ่งเหล่านั้นด้วย--endpoint-path: เส้นทางเอนด์พอยต์สำหรับเซิร์ฟเวอร์ streamable-http ต่อท้าย--base-path- ค่าเริ่มต้น:/mcp--server-name: ชื่อเซิร์ฟเวอร์ที่ใช้ในการจับมือ MCP และ OTelservice.name- ค่าเริ่มต้น:mcp-grafanaแทนที่ตัวแปรสภาพแวดล้อมGRAFANA_MCP_SERVER_NAME--instructions-append: ข้อความที่ต่อท้ายคำแนะนำเซิร์ฟเวอร์ที่ส่งกลับไปยังไคลเอ็นต์ MCP เมื่อเริ่มต้น เพื่อให้เอเจนต์ที่เชื่อมต่อทุกตัวเห็น
ความปลอดภัยการขนส่ง HTTP (เฉพาะ SSE / streamable-http):
การตรวจสอบ Host/Origin ถูกบังคับใช้บน ทุก เส้นทางบนตัวฟัง MCP — /sse, /mcp, และ /healthz / /metrics เมื่อใช้ตัวฟังร่วมกัน — ดังนั้นเบราว์เซอร์ที่รีไบน์ DNS ไม่สามารถเข้าถึงสิ่งใดสิ่งหนึ่งได้ การขนส่ง Stdio ไม่ได้รับผลกระทบ --healthz-address และ --metrics-address เริ่มตัวฟังแยกต่างหากที่ไม่ได้ถูกครอบคลุม
--allowed-hosts: รายการอนุญาตค่าของส่วนหัวHostคั่นด้วยเครื่องหมายจุลภาค ค่าเริ่มต้นเป็นรูปแบบลูปแบ็กของ--address(เช่นlocalhost:8000,127.0.0.1:8000,[::1]:8000) ค่าที่แยกวิเคราะห์เป็นค่าว่าง (ไม่ได้ตั้งค่า,,,,, ฯลฯ) จะย้อนกลับไปเป็นค่าเริ่มต้นเพื่อให้การพิมพ์ผิดไม่สามารถปิดการตรวจสอบอย่างเงียบ ๆ คำขอที่มีส่วนหัวHostภายนอกรายการอนุญาตจะถูกปฏิเสธด้วย403ส่ง*เพื่อปิดการตรวจสอบHost— ปลอดภัยเมื่อพร็อกซีแบบย้อนกลับที่เชื่อถือได้ตรวจสอบHostเท่านั้น โพรบ K8shttpGetและสแครป/metricsภายนอกจะต้องมีชื่อโฮสต์ที่ชัดเจนในรายการนี้,*, โพรบtcpSocket, หรือพอร์ตแยกต่างหาก (--healthz-address/--metrics-address)--allowed-origins: รายการอนุญาตค่าของส่วนหัวOriginคั่นด้วยเครื่องหมายจุลภาค ว่างเปล่าโดยค่าเริ่มต้น — คำขอใด ๆ ที่มีส่วนหัวOriginจะถูกปฏิเสธ (เบราว์เซอร์ส่งหนึ่งรายการเสมอสำหรับคำขอข้ามต้นทาง และไม่มีเบราว์เซอร์ใดควรเรียกเซิร์ฟเวอร์นี้โดยตรง) ตั้งเป็นรายการที่ชัดเจนเพื่ออนุญาตไคลเอ็นต์ที่ใช้เบราว์เซอร์ หรือ*เพื่อปิดการตรวจสอบ--allow-grafana-url-override: เปิดใช้งานการเลือกX-Grafana-URLย้อนกลับเป็นGRAFANA_ALLOW_URL_OVERRIDE; ปิดใช้งานโดยค่าเริ่มต้น หากไม่มีรายการอนุญาต ผู้เรียกสามารถเลือก URL HTTP(S) ใดก็ได้ที่เซิร์ฟเวอร์สามารถเข้าถึงได้--allowed-grafana-urls: รายการอนุญาต URL ฐาน Grafana ที่แน่นอนคั่นด้วยเครื่องหมายจุลภาคสำหรับการแทนที่ URL ย้อนกลับเป็นGRAFANA_ALLOWED_URLSต้องใช้--allow-grafana-url-override; แฟล็กว่างที่ชัดเจนจะปิดใช้งานรายการที่สืบทอดมา
การตรวจสอบสิทธิ์ผู้เรียก (เฉพาะ SSE / streamable-http):
กำหนดให้ไคลเอ็นต์ MCP ตรวจสอบสิทธิ์ กับเซิร์ฟเวอร์ ตามตัวเลือก ซึ่งแยกจากข้อมูลประจำตัวที่เซิร์ฟเวอร์ใช้เพื่อเข้าถึง Grafana Stdio ไม่ได้รับผลกระทบ
--server-auth-token: โทเค็น Bearer ที่ผู้เรียกต้องส่งเป็นAuthorization: Bearer <token>ย้อนกลับเป็นตัวแปรสภาพแวดล้อมMCP_GRAFANA_SERVER_TOKENเมื่อตั้งค่า คำขอที่ไม่มีโทเค็นที่ถูกต้องจะถูกปฏิเสธด้วย401ก่อนที่เครื่องมือใดจะทำงาน เลือกใช้ตัวแปรสภาพแวดล้อมเพื่อให้ความลับไม่ปรากฏในอาร์กิวเมนต์ของกระบวนการ
การตรวจสอบสิทธิ์ผู้เรียกถูกบังคับใช้เฉพาะเมื่อตั้งค่า --server-auth-token เมื่อไม่ได้ตั้งค่าและเซิร์ฟเวอร์ผูกที่อยู่ที่ไม่ใช่ลูปแบ็ก เซิร์ฟเวอร์ เริ่มทำงานแต่บันทึกข้อผิดพลาดด้านความปลอดภัย — ออกที่ระดับบันทึก error เพื่อไม่ให้ถูกซ่อนโดย --log-level (ลูปแบ็กและ stdio ไม่ได้รับผลกระทบ); รุ่นหลักในอนาคตจะทำให้เป็นข้อผิดพลาดเมื่อเริ่มต้น ใช้ TLS (หรือการยุติ TLS) เมื่อใดก็ตามที่เปิดใช้งานการตรวจสอบสิทธิ์ผู้เรียกบนที่อยู่ที่ไม่ใช่ลูปแบ็ก เมื่อเปิดใช้งานการตรวจสอบสิทธิ์ผู้เรียก ส่วนหัว Authorization ที่ตรวจสอบแล้วจะถูกตัดออกก่อนที่คำขอจะถึง Grafana; การรวม --server-auth-token กับ GRAFANA_FORWARD_HEADERS=Authorization จะถูกปฏิเสธเมื่อเริ่มต้น
การแทนที่ URL Grafana (เฉพาะ SSE / streamable-http):
[!WARNING] การแทนที่ URL ให้ผู้เรียก MCP เลือกปลายทาง HTTP(S) ขาออก รายการอนุญาตจำกัด URL แต่ไม่ได้ตรวจสอบสิทธิ์ผู้เรียกหรือผูกโทเค็นกับเป้าหมาย
ปรับใช้หลังพร็อกซีที่ตรวจสอบสิทธิ์ซึ่งอนุญาตแต่ละเป้าหมาย แทนที่ส่วนหัว URL และโทเค็นที่ไคลเอ็นต์ให้มา และจัดหาโทเค็นที่ตรงกัน จำกัดการเข้าถึงเครือข่ายขาออกของเซิร์ฟเวอร์ไปยังปลายทางที่อนุมัติ
หากไม่มีรายการอนุญาต โทเค็นคำขอปลอมอาจทำให้คำขอไปยังบริการ HTTP(S) ใดก็ได้ที่เข้าถึงได้ รวมถึงบริการภายในและบริการเมตาดาตา
ตั้งค่า GRAFANA_ALLOW_URL_OVERRIDE=true (หรือ --allow-grafana-url-override) เพื่อเปิดใช้งานการเลือกสำหรับฝูงขนาดใหญ่ เพื่อจำกัดปลายทาง ให้ตั้งค่า GRAFANA_ALLOWED_URLS=https://one.example.com,https://two.example.com/grafana (หรือ --allowed-grafana-urls) ด้วย
ส่งส่วนหัวเหล่านี้ในแต่ละคำขอ MCP ที่เลือกเป้าหมาย:
X-Grafana-URL: https://one.example.com
X-Grafana-Service-Account-Token: <token for one.example.com>
หากกำหนดค่า --server-auth-token ให้ส่ง Authorization: Bearer <MCP caller token> ด้วย ซึ่งจะตรวจสอบสิทธิ์กับเซิร์ฟเวอร์ MCP และแยกจาก X-Grafana-Service-Account-Token ซึ่งใช้สำหรับอินสแตนซ์ Grafana ที่เลือก พร็อกซีของคุณสามารถส่งโทเค็น Grafana ที่แตกต่างกันสำหรับแต่ละอินสแตนซ์; เซิร์ฟเวอร์ไม่เคยแชร์โทเค็นที่กำหนดค่าเดียวข้ามอินสแตนซ์เหล่านั้น ส่วนหัว X-Grafana-API-Key ที่เลิกใช้แล้วก็ใช้งานได้เช่นกัน ส่วนหัว URL ที่ไม่มีโทเค็น Grafana คำขอจะถูกปฏิเสธ ใช้ TLS สำหรับคำขอขาเข้าเพราะมีโทเค็น
รายการอนุญาตจับคู่ URL ฐานที่แน่นอน รวมถึง scheme, พอร์ต, และเส้นทาง; ไม่รองรับไวลด์การ์ด การตรวจสอบสิทธิ์ Grafana ไม่ใช่การป้องกัน SSRF
สำหรับ URL ที่เลือก เซิร์ฟเวอร์ไม่ใช้ GRAFANA_SERVICE_ACCOUNT_TOKEN, GRAFANA_SERVICE_ACCOUNT_TOKEN_FILE, GRAFANA_API_KEY, การตรวจสอบสิทธิ์พื้นฐานสภาพแวดล้อม, GRAFANA_EXTRA_HEADERS, หรือใบรับรองไคลเอ็นต์ การตรวจสอบ TLS ยังคงเปิดใช้งานแม้ตั้งค่า --tls-skip-verify; ไฟล์ CA ที่กำหนดค่ายังคงใช้ ส่วนหัวที่ส่งต่ออย่างชัดเจนจากคำขอนั้นยังคงใช้ การเปลี่ยนเส้นทางและคำขอ API Grafana อื่น ๆ นอก URL ฐานที่เลือกจะถูกบล็อก คำขอที่ไม่มี X-Grafana-URL ยังคงพฤติกรรมข้อมูลประจำตัว GRAFANA_URL และสภาพแวดล้อมตามปกติ ตัวเลือกนี้ใช้กับ SSE และ streamable HTTP เท่านั้น สำหรับ SSE ให้รวมส่วนหัวการเลือกทั้งสองในแต่ละ POST ข้อความ; ส่วนหัวบน GET SSE เริ่มต้นไม่ส่งต่อไปยังการเรียกเครื่องมือ
การดีบักและการบันทึก:
--debug: เปิดใช้งานโหมดดีบักสำหรับการบันทึกรายละเอียดคำขอ/การตอบสนอง HTTP--log-level: ระดับบันทึก (debug,info,warn,error) - ค่าเริ่มต้น:info
ตัวเลือกไคลเอ็นต์ Grafana:
--grafana-timeout: ขีดจำกัดเวลาสำหรับคำขอที่ทำโดยไคลเอ็นต์ Grafana ยอมรับสตริงระยะเวลา Go (เช่น10s,500ms) - ค่าเริ่มต้น:10s--include-args-in-spans: รวมอาร์กิวเมนต์การเรียกเครื่องมือในสแปน OpenTelemetry เปิดใช้งานเฉพาะในสภาพแวดล้อมที่ไม่ใช่การผลิตหรือเมื่อทราบว่าอาร์กิวเมนต์ไม่มี PII - ค่าเริ่มต้น:false
การสังเกตได้:
--metrics: เปิดใช้งานเอนด์พอยต์เมตริก Prometheus ที่/metrics--metrics-address: ที่อยู่แยกสำหรับเซิร์ฟเวอร์เมตริก (เช่น:9090) หากว่างเปล่า เมตริกจะให้บริการบนเซิร์ฟเวอร์หลัก--healthz-address: ที่อยู่แยกสำหรับ/healthz(เช่น:8080) หากว่างเปล่า/healthzจะให้บริการบนเซิร์ฟเวอร์หลัก แชร์ตัวฟังกับ--metrics-addressเมื่อที่อยู่ทั้งสองตรงกัน ตัวฟังด้านข้างข้ามการตรวจสอบ Host/Origin--slow-request-threshold: บันทึกเหตุการณ์เมื่อคำขอ MCP ใด ๆ (การเรียกเครื่องมือ, รายการ, การอ่านทรัพยากร, ฯลฯ) ใช้เวลานานกว่าระยะเวลานี้ ยอมรับสตริงระยะเวลา Go (เช่น500ms,5s) ค่าเริ่มต้น0ปิดการบันทึกคำขอช้า ดูส่วน การบันทึกคำขอช้า--slow-request-log-level: ระดับบันทึกสำหรับเหตุการณ์คำขอช้า (infoหรือwarn) - ค่าเริ่มต้น:warn
สถิติการใช้งานไม่ระบุชื่อ:
--usage-stats: การรายงานสถิติการใช้งานไม่ระบุชื่อ:enabled,disabled, หรือlog(พิมพ์รายงานที่จะส่งไปยัง stderr และไม่ส่งอะไรเลย) แทนที่ตัวแปรสภาพแวดล้อมGRAFANA_USAGE_STATSซึ่งแทนที่DO_NOT_TRACK; ค่าที่ไม่รู้จักใด ๆ ปิดการรายงาน ดูส่วน สถิติการใช้งานไม่ระบุชื่อ
การจัดการเซสชัน:
--session-idle-timeout-minutes: หมดเวลาเซสชันไม่มีการใช้งานเป็นนาที เซสชันที่ไม่มีการใช้งานในช่วงเวลานี้จะถูกเก็บโดยอัตโนมัติ - ค่าเริ่มต้น:30ตั้งเป็น0เพื่อปิดการเก็บเซสชัน เกี่ยวข้องเฉพาะกับการขนส่ง SSE และ streamable-http การกำหนดค่าเครื่องมือ:--enabled-tools: รายการหมวดหมู่ที่เปิดใช้งาน คั่นด้วยเครื่องหมายจุลภาค - ค่าเริ่มต้น: ทุกหมวดหมู่ยกเว้นadmin,agento11y,assistant,athena,clickhouse,cloudlogging,cloudwatch,elasticsearch,examples,graphite,quickwit,runpanelquery, และsnowflakeหากต้องการเปิดใช้งานหมวดหมู่ที่ถูกปิดใช้งาน ให้เพิ่มหมวดหมู่นั้นลงในรายการ (เช่น"search,datasource,...,snowflake")--max-loki-log-limit: จำนวนสูงสุดของบรรทัดล็อกที่ส่งคืนต่อการเรียกquery_loki_logs- ค่าเริ่มต้น:100หมายเหตุ: ตั้งค่านี้ให้ต่ำกว่าค่าmax_entries_limit_per_queryฝั่งเซิร์ฟเวอร์ของ Loki อย่างน้อย 1 เพื่อให้สามารถตรวจจับการตัดทอนได้ (เครื่องมือจะร้องขอlimit+1ภายในเพื่อตรวจจับว่ามีข้อมูลเพิ่มเติมหรือไม่)--loki-guardrail-mode: ตัวป้องกันค่าใช้จ่ายสำหรับการสอบถาม Loki สำหรับquery_loki_logs- ค่าเริ่มต้น:offLoki ไม่บังคับใช้max_query_bytes_readกับการสอบถามล็อกที่ไม่มีตัวกรองบรรทัด ดังนั้นตัวเลือกที่กว้างในช่วงกว้างสามารถสแกนข้อมูลเป็นเทราไบต์ได้ ตัวป้องกันกำหนดให้ต้องมีตัวเลือกสตรีมที่เฉพาะเจาะจง จำกัดช่วงเวลาที่มีผล (รวมถึงระยะเวลาของ range-vector เช่น[30d]) และตรวจสอบค่าประมาณไบต์จาก index/stats ของ Loki ก่อนรันการสอบถามshadowจะบันทึกการสอบถามที่จะถูกบล็อกแต่ปล่อยให้รันได้ (ยังคงเสียค่าใช้จ่ายในการเดินทางไปกลับของ index/stats)enforceจะปฏิเสธพร้อมคำแนะนำการเขียนใหม่ที่ LLM สามารถดำเนินการได้ บน VictoriaLogs ตัวป้องกันจะใช้เฉพาะกับการสอบถามแบบ selector ({...}) เท่านั้น — เมื่อไม่มีการแยกวิเคราะห์ selector (รูปแบบ LogsQL ปกติที่ไม่มีวงเล็บปีกกา) การสอบถามจะผ่านทั้งหมด และการตรวจสอบงบประมาณไบต์จะไม่ถูกนำมาใช้ (ไม่มีการประมาณ index ที่ถูก) ตัวสำรองจาก environment:GRAFANA_LOKI_GUARDRAIL_MODE--loki-guardrail-max-bytes: จำนวนไบต์สูงสุดที่การเรียกquery_loki_logsครั้งเดียวอาจสแกน โดยประมาณผ่าน API index/stats ของ Loki - ค่าเริ่มต้น:107374182400(100 GiB)0ปิดการตรวจสอบงบประมาณไบต์ ตัวสำรองจาก environment:GRAFANA_LOKI_GUARDRAIL_MAX_BYTES--loki-guardrail-max-range: ช่วงเวลาที่มีผลสูงสุดสำหรับการเรียกquery_loki_logsครั้งเดียว รวมถึงระยะเวลาของ range-vector - ค่าเริ่มต้น:24hรองรับสตริงระยะเวลาแบบ Go0ปิดการตรวจสอบช่วงเวลา ตัวสำรองจาก environment:GRAFANA_LOKI_GUARDRAIL_MAX_RANGE--loki-enforced-matchers: ตัวจับคู่ป้ายกำกับ LogQL ที่เชื่อมด้วย AND ในการสอบถาม Loki ดั้งเดิมทุกครั้งเพื่อจำกัดสตรีมล็อกที่สามารถอ่านได้ (เช่นenvironment=~"prod|staging") ต้องใช้--disable-apiดู การบังคับใช้การสอบถาม Loki--loki-label-enumeration-fallback: สิ่งที่เครื่องมือแจกแจงป้ายกำกับทำเมื่อตัวจับคู่บังคับเชิงลบไม่สามารถจำกัดขอบเขตได้:reject(ค่าเริ่มต้น) หรือunfilteredดู การบังคับใช้การสอบถาม Loki--disable-search: ปิดใช้งานเครื่องมือค้นหา--disable-datasource: ปิดใช้งานเครื่องมือ datasource--disable-incident: ปิดใช้งานเครื่องมือ incident--disable-prometheus: ปิดใช้งานเครื่องมือ prometheus--disable-write: ปิดใช้งานเครื่องมือเขียน (การดำเนินการสร้าง/อัปเดต)--disable-query: ปิดใช้งานเครื่องมือสอบถาม (เครื่องมือที่รันการสอบถามกับ datasource); เครื่องมือ metadata และ discovery ยังคงใช้งานได้--enable-query: เก็บเครื่องมือสอบถาม raw-SQL (query_sql,query_influxdb) ไว้แม้ภายใต้--disable-writeเทียบเท่ากับ--enable-write-tools=query_sql,query_influxdb; เก็บไว้เป็นตัวย่อสำหรับกรณีทั่วไปนั้น--enable-write-tools: รายชื่อเครื่องมือแต่ละตัวที่คั่นด้วยเครื่องหมายจุลภาคเพื่อเก็บไว้แม้ภายใต้--disable-writeสำหรับเครื่องมือที่มีพฤติกรรมการเขียนที่จำกัดขอบเขตพอที่จะเลือกกลับมาใช้ได้เอง (เช่นfind_error_pattern_logs,find_slow_requests) ไม่มีผลกับเครื่องมือที่ทั้งหมวดหมู่ถูกปิดใช้งาน เช่น ผ่าน--disable-sift--disable-loki: ปิดใช้งานเครื่องมือ loki--disable-elasticsearch: ปิดใช้งานเครื่องมือ elasticsearch และ opensearch--disable-quickwit: ปิดใช้งานเครื่องมือ quickwit--disable-influxdb: ปิดใช้งานเครื่องมือ InfluxDB--disable-alerting: ปิดใช้งานเครื่องมือ alerting--disable-dashboard: ปิดใช้งานเครื่องมือ dashboard--disable-oncall: ปิดใช้งานเครื่องมือ oncall--disable-asserts: ปิดใช้งานเครื่องมือ asserts--disable-sift: ปิดใช้งานเครื่องมือ sift--disable-admin: ปิดใช้งานเครื่องมือ admin--disable-pyroscope: ปิดใช้งานเครื่องมือ pyroscope--disable-navigation: ปิดใช้งานเครื่องมือ navigation--disable-rendering: ปิดใช้งานเครื่องมือ rendering (การส่งออกภาพ panel/dashboard)--disable-snapshot: ปิดใช้งานเครื่องมือ snapshot--disable-cloudwatch: ปิดใช้งานเครื่องมือ CloudWatch--disable-cloudlogging: ปิดใช้งานเครื่องมือ Google Cloud Logging--disable-examples: ปิดใช้งานเครื่องมือ query examples--disable-sql: ปิดใช้งานเครื่องมือ SQL datasource (ClickHouse, Snowflake, Athena, MySQL, PostgreSQL, MSSQL) ชื่ออื่น--disable-clickhouse,--disable-snowflake,--disable-athenaก็ใช้ได้เช่นกัน--disable-runpanelquery: ปิดใช้งานเครื่องมือ run panel query--disable-graphite: ปิดใช้งานเครื่องมือ Graphite--disable-provisioning: ปิดใช้งานเครื่องมือ provisioning--disable-agento11y: ปิดใช้งานเครื่องมือ Agent Observability--disable-assistant: ปิดใช้งานเครื่องมือ Grafana Assistant--disable-docs: ปิดใช้งานเครื่องมือ documentation
โหมดอ่านอย่างเดียว
แฟล็ก --disable-write เป็นวิธีรันเซิร์ฟเวอร์ MCP ในโหมดอ่านอย่างเดียว ป้องกันการดำเนินการเขียนใดๆ ไปยังอินสแตนซ์ Grafana ของคุณ มีประโยชน์สำหรับสถานการณ์ที่คุณต้องการให้การเข้าถึงแบบอ่านอย่างเดียวที่ปลอดภัย เช่น:
- การใช้ service account ที่มีสิทธิ์อ่านอย่างเดียวจำกัด
- การให้ผู้ช่วย AI เข้าถึงข้อมูล observability โดยไม่มีความสามารถในการแก้ไข
- การรันในสภาพแวดล้อมการผลิตที่ควรจำกัดการเขียน
- สถานการณ์การทดสอบและการพัฒนาที่คุณต้องการป้องกันการแก้ไขโดยไม่ตั้งใจ
เมื่อเปิดใช้งาน --disable-write การดำเนินการเขียนต่อไปนี้จะถูกปิดใช้งาน:
เครื่องมือ Dashboard:
update_dashboard
เครื่องมือ Folder:
create_folder
เครื่องมือ Incident:
create_incidentadd_activity_to_incidentupdate_incident
เครื่องมือ Alerting:
alerting_manage_rules(การดำเนินการสร้าง อัปเดต ลบ)alerting_manage_silences(การดำเนินการสร้าง อัปเดต ลบ)
เครื่องมือ OnCall:
update_alert_group
เครื่องมือ Annotation:
create_annotationupdate_annotationdelete_annotation
เครื่องมือ Sift:
find_error_pattern_logs(สร้างการสอบสวน)find_slow_requests(สร้างการสอบสวน)
เครื่องมือเหล่านี้สร้างเฉพาะบันทึกการสอบสวน Sift ชั่วคราวผ่าน API ของ Sift เท่านั้น — ไม่เคยแตะต้อง dashboard, alert หรือ datasource ของ Grafana หากไม่มีเครื่องมือเหล่านี้ list_sift_investigations/get_sift_investigation/get_sift_analysis จะไม่มีอะไรให้แสดงหรือดึงข้อมูล ส่ง --enable-write-tools=find_error_pattern_logs,find_slow_requests เพื่อเก็บไว้ภายใต้ --disable-write
เครื่องมือ Snapshot:
create_snapshotdelete_snapshot
เครื่องมือสอบถาม Raw-SQL:
เครื่องมือเหล่านี้รันการสอบถามใดๆ ที่คุณให้โดยไม่ตรวจสอบ ดังนั้นจึงสามารถเขียนได้เมื่อข้อมูลประจำตัวของ datasource อนุญาต — query_sql จะรัน DROP TABLE, query_influxdb จะรัน DELETE ดังนั้นโหมดอ่านอย่างเดียวจึงลบเครื่องมือเหล่านี้ ส่ง --enable-query เพื่อเก็บไว้เมื่อทราบว่าข้อมูลประจำตัวของ datasource เป็นแบบอ่านอย่างเดียว
query_sqlquery_influxdb
เครื่องมือ Agent Observability:
agento11y_manage_evaluators(การดำเนินการ upsert, delete, fork, test evaluator)agento11y_manage_eval_rules(การดำเนินการสร้าง อัปเดต ลบ ดูตัวอย่าง rule และ guard)agento11y_manage_eval_collections(บันทึกและลบการสนทนาที่บันทึกไว้; สร้าง อัปเดต ลบ collections; เพิ่มและลบสมาชิก collection)agento11y_manage_experiments(การดำเนินการอัปเดตและยกเลิก experiment)agento11y_manage_test_suites(สร้างและอัปเดต test suites; สร้างและเผยแพร่เวอร์ชัน; upsert และลบ test cases)
การดำเนินการอ่านทั้งหมดยังคงใช้งานได้ ช่วยให้คุณสอบถาม dashboards รันการสอบถาม PromQL/LogQL แสดงรายการทรัพยากร และดึงข้อมูลได้ ภาษาการสอบถามที่ไม่สามารถแสดงการเขียนได้ — PromQL, LogQL, TraceQL, Elasticsearch DSL, Graphite, CloudWatch — ยังคงเก็บเครื่องมือสอบถามไว้ในโหมดอ่านอย่างเดียว; เฉพาะเครื่องมือ raw-SQL ที่ระบุไว้ข้างต้นเท่านั้นที่ถูกลบออก
โหมดไม่มีการสอบถาม
แฟล็ก --disable-query ลบเครื่องมือทั้งหมดที่รันการสอบถามกับ datasource ในขณะที่ปล่อยให้เครื่องมือ metadata และ discovery อยู่ในตำแหน่งเดิม มีประโยชน์เมื่อคุณต้องการผู้ช่วยที่สามารถสำรวจสิ่งที่มีอยู่ — datasources, dashboards, ชื่อเมตริก, ป้ายกำกับ, โครงสร้างตาราง — โดยไม่ต้องรันการสอบถามที่อาจมีค่าใช้จ่ายสูงหรือเปิดเผยข้อมูล เช่น เมื่อ service account มี datasources:read แต่ไม่มี datasources:query
เป็นการตั้งค่าการสอบถามที่แข็งแกร่งที่สุดในสามแบบ และชนะเหนือ --enable-query:
| แฟล็ก | เครื่องมือสอบถามที่ปลอดภัย (query_prometheus, query_loki_logs, run_panel_query, …) | เครื่องมือสอบถาม Raw-SQL (query_sql, query_influxdb) |
|---|---|---|
| (ไม่มี) | ลงทะเบียน | ลงทะเบียน |
--disable-write | ลงทะเบียน | ไม่ลงทะเบียน |
--disable-write --enable-query | ลงทะเบียน | ลงทะเบียน |
--disable-query | ไม่ลงทะเบียน | ไม่ลงทะเบียน |
--disable-query --enable-query | ไม่ลงทะเบียน | ไม่ลงทะเบียน |
เมื่อเปิดใช้งาน --disable-query เครื่องมือต่อไปนี้จะไม่ถูกลงทะเบียน:
เครื่องมือ Prometheus:
query_prometheusquery_prometheus_histogram
เครื่องมือ Loki:
query_loki_logsquery_loki_patterns
query_loki_stats และ analyze_loki_labels ยังคงลงทะเบียน: ทั้งคู่ส่ง selector ไปยัง datasource แต่จะอ่าน index และส่งคืนจำนวนสตรีม ชิ้นส่วน และไบต์ แทนที่จะเป็นเนื้อหาล็อก
เครื่องมือ Elasticsearch/OpenSearch และ Quickwit:
query_elasticsearchquery_quickwit
เครื่องมือ InfluxDB (ถูกลบโดย --disable-write เช่นกัน ดูด้านบน):
query_influxdb
เครื่องมือ SQL Datasource (ถูกลบโดย --disable-write เช่นกัน ดูด้านบน):
query_sql
เครื่องมือ Graphite:
query_graphitequery_graphite_density
เครื่องมือ CloudWatch:
query_cloudwatch
เครื่องมือ Google Cloud Logging:
query_cloud_logging
เครื่องมือ Pyroscope:
query_pyroscope
เครื่องมือ Run Panel Query:
run_panel_query
หมวดหมู่ elasticsearch, quickwit, influxdb, และ runpanelquery ไม่มีอย่างอื่น ดังนั้นจึงไม่ลงทะเบียนเครื่องมือใดๆ เลยเมื่อปิดการสอบถาม เครื่องมือที่เกี่ยวข้องในทุกหมวดหมู่อื่น — list_prometheus_metric_names, list_loki_label_values, describe_sql_table, list_cloudwatch_metrics, list_cloud_logging_projects, และอื่นๆ — ยังคงใช้งานได้
โปรดทราบว่า --disable-query ควบคุมเครื่องมือสอบถามและเส้นทาง grafana_api_request POST ไปยัง /api/ds/query แต่ไม่ได้ตรวจสอบทุกเส้นทางไปยัง datasource ในโหมดอ่านอย่างเดียว grafana_api_request อนุญาต POST ไปยัง /api/ds/query เฉพาะเมื่อเปิดใช้งานเครื่องมือสอบถาม (เกตเดียวกันกับเครื่องมือ raw-SQL — ถูกบล็อกโดย --disable-write เว้นแต่ --enable-query จะแทนที่) get_panel_image ซึ่งแสดงผล panel ฝั่งเซิร์ฟเวอร์ ไม่ได้รับผลกระทบ
การกำหนดค่า TLS ของไคลเอ็นต์ (สำหรับการเชื่อมต่อ Grafana):
--tls-cert-file: เส้นทางไปยังไฟล์ใบรับรอง TLS สำหรับการตรวจสอบสิทธิ์ไคลเอ็นต์--tls-key-file: เส้นทางไปยังไฟล์คีย์ส่วนตัว TLS สำหรับการตรวจสอบสิทธิ์ไคลเอ็นต์--tls-ca-file: เส้นทางไปยังไฟล์ใบรับรอง CA ของ TLS สำหรับการตรวจสอบเซิร์ฟเวอร์--tls-skip-verify: ข้ามการตรวจสอบใบรับรอง TLS (ไม่ปลอดภัย)
การกำหนดค่า TLS ของเซิร์ฟเวอร์ (เฉพาะการขนส่ง streamable-http):
--server.tls-cert-file: เส้นทางไปยังไฟล์ใบรับรอง TLS สำหรับ HTTPS ของเซิร์ฟเวอร์--server.tls-key-file: เส้นทางไปยังไฟล์คีย์ส่วนตัว TLS สำหรับ HTTPS ของเซิร์ฟเวอร์
การใช้งาน
เซิร์ฟเวอร์ MCP นี้ทำงานร่วมกับทั้งอินสแตนซ์ Grafana ในเครื่องและ Grafana Cloud สำหรับ Grafana Cloud ให้ใช้ URL ของอินสแตนซ์ของคุณ (เช่น https://myinstance.grafana.net) แทน http://localhost:3000 ในตัวอย่างการกำหนดค่าด้านล่าง
-
หากใช้การตรวจสอบสิทธิ์ด้วย service account token ให้สร้าง service account ใน Grafana ที่มีสิทธิ์เพียงพอสำหรับเครื่องมือที่คุณต้องการใช้ สร้าง service account token และคัดลอกไปยังคลิปบอร์ดเพื่อใช้ในไฟล์การกำหนดค่า ปฏิบัติตาม เอกสาร service account ของ Grafana สำหรับรายละเอียดเกี่ยวกับการสร้าง service account tokens เคล็ดลับ: หากคุณไม่สะดวกใจกับการกำหนดค่า RBAC แบบละเอียด ตัวเลือกที่ง่ายกว่า (แต่จำกัดน้อยกว่า) คือกำหนดบทบาท
Editorในตัวให้กับ service account ซึ่งให้สิทธิ์อ่าน/เขียนกว้างๆ ที่ครอบคลุมการดำเนินการ MCP server ส่วนใหญ่ — ใช้เมื่อความสะดวกสำคัญกว่าข้อกำหนดสิทธิ์น้อยที่สุดที่เข้มงวดหมายเหตุ: ตัวแปรสภาพแวดล้อม
GRAFANA_API_KEYเลิกใช้งานแล้วและจะถูกลบในเวอร์ชันอนาคต โปรดย้ายไปใช้GRAFANA_SERVICE_ACCOUNT_TOKENแทน ชื่อตัวแปรเก่าจะยังคงทำงานเพื่อความเข้ากันได้ย้อนหลัง แต่จะแสดงคำเตือนการเลิกใช้งาน
การอ่าน service account token จากไฟล์
แทนที่จะส่ง token แบบอินไลน์ผ่าน GRAFANA_SERVICE_ACCOUNT_TOKEN คุณสามารถชี้ GRAFANA_SERVICE_ACCOUNT_TOKEN_FILE ไปยังพาธของไฟล์ที่มี token อยู่ได้ ไฟล์จะถูกอ่านใหม่ทุกครั้งที่มีคำขอ ดังนั้น token ที่ถูกหมุนเวียนจะถูกนำมาใช้โดยอัตโนมัติโดยไม่ต้องรีสตาร์ทเซิร์ฟเวอร์
สิ่งนี้มีประโยชน์โดยเฉพาะใน Kubernetes ซึ่ง Secret ที่ถูก mount เป็น volume จะถูกอัปเดตในตำแหน่งเดิมเมื่อ Secret ต้นทางมีการเปลี่ยนแปลง (โดยทั่วไปภายใน ~1 นาที) เมื่อรวมกับแคชของไคลเอ็นต์ต่อคำขอ — ซึ่งใช้ค่า token เป็นคีย์ — token ที่ถูกหมุนเวียนจะสร้างไคลเอ็นต์ใหม่ได้อย่างโปร่งใสโดยไม่ต้องรีสตาร์ทพอดและไม่มีเวลาหยุดทำงาน:
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
ช่องว่างโดยรอบ (รวมถึง newline ต่อท้าย) จะถูกตัดออกจากเนื้อหาไฟล์ หากตั้งค่าทั้ง GRAFANA_SERVICE_ACCOUNT_TOKEN และ GRAFANA_SERVICE_ACCOUNT_TOKEN_FILE token แบบอินไลน์จะมีลำดับความสำคัญสูงกว่า
การรองรับหลายองค์กร (Multi-Organization Support)
คุณสามารถระบุได้ว่าจะโต้ตอบกับองค์กรใดโดยใช้วิธีใดวิธีหนึ่งต่อไปนี้:
- ตัวแปรสภาพแวดล้อม: ตั้งค่า
GRAFANA_ORG_IDเป็นรหัสองค์กรแบบตัวเลข - HTTP header: ตั้งค่า
X-Grafana-Org-Idเมื่อใช้ทรานสปอร์ต SSE หรือ streamable HTTP (header มีลำดับความสำคัญสูงกว่าตัวแปรสภาพแวดล้อม — หมายความว่าคุณสามารถตั้งค่าองค์กรเริ่มต้นได้เช่นกัน)
เมื่อมีการระบุรหัสองค์กร MCP server จะตั้งค่า header X-Grafana-Org-Id ในคำขอทั้งหมดไปยัง Grafana เพื่อให้แน่ใจว่าการดำเนินการต่างๆ เกิดขึ้นภายในบริบทขององค์กรที่ระบุ
การเลือกองค์กรแบบไดนามิก (ต่อการเรียก)
ตัวเลือกด้านบนจะกำหนดองค์กรคงที่สำหรับการเชื่อมต่อทั้งหมด เพื่อให้การเชื่อมต่อเดียวสามารถกำหนดเป้าหมายองค์กรที่แตกต่างกันต่อการเรียกใช้เครื่องมือได้ ให้เริ่มเซิร์ฟเวอร์ด้วยแฟล็ก --dynamic-multi-org โดยปิดใช้งานตามค่าเริ่มต้น
เมื่อเปิดใช้งาน เครื่องมือทุกตัวจะยอมรับอาร์กิวเมนต์ orgId ที่ไม่บังคับ ซึ่งจะแทนที่องค์กรของการเชื่อมต่อสำหรับการเรียกนั้น (ขับเคลื่อนทั้ง header X-Grafana-Org-Id และสำหรับ API ของแพลตฟอร์มแอป คือ Kubernetes namespace ที่ถูก resolve) เครื่องมือ datasource ที่ถูกพร็อกซีจะถูกค้นพบเพิ่มเติมในทุกองค์กรที่ข้อมูลประจำตัวสามารถเข้าถึงได้ การเรียกที่ไม่ระบุ orgId จะใช้องค์กรเริ่มต้นของการเชื่อมต่อ
วิธีนี้ใช้ได้เฉพาะกับข้อมูลประจำตัวที่เป็นของมากกว่าหนึ่งองค์กร (เช่น ผู้ใช้หรือข้อมูลประจำตัวแบบ on-behalf-of) token ของ service account จะยังคงผูกกับองค์กรเดียวเท่านั้น ใช้เครื่องมือ user_info เพื่อค้นหาว่าค่า orgId ใดที่ถูกต้อง
ตัวอย่างพร้อมรหัสองค์กร:
{
"mcpServers": {
"grafana": {
"command": "mcp-grafana",
"args": [],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_USERNAME": "<your username>",
"GRAFANA_PASSWORD": "<your password>",
"GRAFANA_ORG_ID": "2"
}
}
}
}
HTTP Headers ที่กำหนดเอง
คุณสามารถเพิ่ม HTTP headers ใดๆ ลงในคำขอ Grafana API ทั้งหมดได้โดยใช้ตัวแปรสภาพแวดล้อม GRAFANA_EXTRA_HEADERS ค่าควรเป็นออบเจกต์ JSON ที่แมปชื่อ header กับค่า
ตัวอย่างพร้อม headers ที่กำหนดเอง:
{
"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\"}"
}
}
}
}
พร็อกซี SOCKS5
คุณสามารถกำหนดเส้นทางคำขอทั้งหมดที่เซิร์ฟเวอร์นี้ส่งไปยัง Grafana ผ่านพร็อกซี SOCKS5 ได้โดยใช้ตัวแปรสภาพแวดล้อม GRAFANA_SOCKS5_PROXY พร็อกซีจะจำกัดเฉพาะการรับส่งข้อมูล Grafana ของเซิร์ฟเวอร์นี้: ไม่ได้แก้ไขตัวแปร HTTP_PROXY/HTTPS_PROXY ทั่วโลก และเมื่อตั้งค่าแล้วจะแทนที่การเลือกพร็อกซีสำหรับทรานสปอร์ต Grafana เท่านั้น โดยไม่ส่งผลกระทบต่อ MCP server อื่นหรือเซสชันเชลล์ของคุณ เมื่อไม่ได้ตั้งค่า พฤติกรรมจะไม่เปลี่ยนแปลง
URL ต้องใช้ scheme socks5:// หรือ socks5h:// (Go จัดการทั้งสองแบบเหมือนกัน: การ resolve ชื่อโฮสต์ถูกมอบหมายให้พร็อกซี) และอาจรวมข้อมูลประจำตัวได้ เช่น socks5://user:pass@127.0.0.1:1080
ตัวอย่าง:
{
"mcpServers": {
"grafana": {
"command": "mcp-grafana",
"args": [],
"env": {
"GRAFANA_URL": "http://localhost:3000",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your token>",
"GRAFANA_SOCKS5_PROXY": "socks5://127.0.0.1:1080"
}
}
}
}
URL พร็อกซีที่ไม่ถูกต้องเป็นข้อผิดพลาดตอนเริ่มต้น และหากการสร้างการเชื่อมต่อแบบพร็อกซีล้มเหลวในขณะรันไทม์ เซิร์ฟเวอร์จะปิดตัวเองแทนที่จะส่งการรับส่งข้อมูล Grafana โดยตรงอย่างเงียบๆ
การส่งต่อ Headers จากไคลเอ็นต์ (เฉพาะ SSE/Streamable-HTTP)
เมื่อ MCP server ทำงานอยู่เบื้องหลังเกตเวย์หรือ reverse proxy ที่จัดการ SSO (เช่น AWS ALB พร้อม OIDC) คุกกี้เซสชันของผู้ใช้แต่ละคนต้องไปถึง Grafana เพื่อให้สามารถเชื่อมโยงคำขอกับผู้ใช้ที่ตรวจสอบสิทธิ์แล้วได้ ตัวแปรสภาพแวดล้อม GRAFANA_FORWARD_HEADERS เปิดใช้งานสิ่งนี้โดยระบุรายการอนุญาตชื่อ header ที่คั่นด้วยเครื่องหมายจุลภาคเพื่อคัดลอกจากคำขอ HTTP ที่เข้ามา ไปยังคำขอ Grafana API ที่ส่งออกทุกครั้ง
วิธีนี้ใช้เฉพาะเมื่อใช้ทรานสปอร์ต SSE (-t sse) หรือ streamable-http (-t streamable-http) ไม่มีผลในโหมด stdio
ตัวอย่าง: ส่งต่อคุกกี้เซสชัน
{
"env": {
"GRAFANA_URL": "https://grafana.internal",
"GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your token>",
"GRAFANA_FORWARD_HEADERS": "Cookie"
}
}
คุณสามารถส่งต่อหลาย headers ได้โดยคั่นด้วยเครื่องหมายจุลภาค:
GRAFANA_FORWARD_HEADERS=Cookie,X-Session-Id
Headers ที่ส่งต่อจะถูกรวมเข้ากับ headers ที่กำหนดใน GRAFANA_EXTRA_HEADERS หากชื่อ header ปรากฏในทั้งสอง ค่าจากคำขอที่เข้ามาจะมีลำดับความสำคัญสูงกว่าสำหรับคำขอนั้น
Headers บริบทการติดตาม (traceparent, tracestate, baggage) เป็นข้อยกเว้น: เซิร์ฟเวอร์จะแพร่กระจายบริบทการติดตามเอง ดังนั้นค่าที่ส่งต่อจะไม่แทนที่ค่าที่เซิร์ฟเวอร์ฉีดเข้าไป ดู observability
-
คุณมีหลายตัวเลือกในการติดตั้ง
mcp-grafana:-
uvx (แนะนำ): หากคุณติดตั้ง uv ไว้แล้ว ไม่จำเป็นต้องตั้งค่าเพิ่มเติม —
uvxจะดาวน์โหลดและรันเซิร์ฟเวอร์โดยอัตโนมัติ:uvx mcp-grafana -
อิมเมจ Docker: ใช้อิมเมจ Docker ที่สร้างไว้ล่วงหน้าจาก Docker Hub
สำคัญ: entrypoint ของอิมเมจ Docker ถูกกำหนดค่าให้รัน MCP server ในโหมด SSE ตามค่าเริ่มต้น แต่ผู้ใช้ส่วนใหญ่จะต้องการใช้โหมด STDIO สำหรับการผสานรวมโดยตรงกับผู้ช่วย AI เช่น Claude Desktop:
- โหมด STDIO: สำหรับโหมด stdio คุณต้องแทนที่ค่าเริ่มต้นอย่างชัดเจนด้วย
-t stdioและรวมแฟล็ก-iเพื่อให้ stdin เปิดอยู่:
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 stdioหมายเหตุ — รักษาความปลอดภัยโหมดเครือข่าย: ในโหมด SSE และ streamable-http คอนเทนเนอร์จะผูกกับที่อยู่ที่ไม่ใช่ loopback (
0.0.0.0:8000) หากไม่มี caller token เซิร์ฟเวอร์จะเริ่มทำงานแต่บันทึกข้อผิดพลาดด้านความปลอดภัย (ที่ระดับ logerrorดังนั้นจะไม่ถูกซ่อนโดย--log-level; และจะปฏิเสธการเริ่มทำงานในเวอร์ชันหลักถัดไป) ตั้งค่าMCP_GRAFANA_SERVER_TOKENเพื่อกำหนดให้ต้องมีAuthorization: Bearer <token>จากไคลเอ็นต์ (แนะนำ) โหมด STDIO ไม่ได้รับผลกระทบ ดู Caller Authentication- โหมด SSE: ในโหมดนี้ เซิร์ฟเวอร์จะทำงานเป็นเซิร์ฟเวอร์ HTTP ที่ไคลเอ็นต์เชื่อมต่อ คุณต้องเปิดพอร์ต 8000 โดยใช้แฟล็ก
-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- โหมด Streamable HTTP: ในโหมดนี้ เซิร์ฟเวอร์ทำงานเป็นกระบวนการอิสระที่สามารถจัดการการเชื่อมต่อไคลเอ็นต์หลายรายการได้ คุณต้องเปิดพอร์ต 8000 โดยใช้แฟล็ก
-p: สำหรับโหมดนี้ คุณต้องแทนที่ค่าเริ่มต้นอย่างชัดเจนด้วย-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-httpสำหรับโหมด HTTPS streamable HTTP พร้อมใบรับรอง TLS ของเซิร์ฟเวอร์:
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 - โหมด STDIO: สำหรับโหมด stdio คุณต้องแทนที่ค่าเริ่มต้นอย่างชัดเจนด้วย
-
ดาวน์โหลดไบนารี: ดาวน์โหลดเวอร์ชันล่าสุดของ
mcp-grafanaจาก หน้า releases และวางไว้ใน$PATHของคุณ -
สร้างจากซอร์สโค้ด: หากคุณติดตั้งชุดเครื่องมือ Go ไว้ คุณสามารถสร้างและติดตั้งจากซอร์สโค้ดได้ โดยใช้ตัวแปรสภาพแวดล้อม
GOBINเพื่อระบุไดเรกทอรีที่ควรติดตั้งไบนารี ซึ่งควรอยู่ใน$PATHของคุณด้วยGOBIN="$HOME/go/bin" go install github.com/grafana/mcp-grafana/cmd/mcp-grafana@latest -
ปรับใช้กับ Kubernetes โดยใช้ Helm: ใช้ Helm chart จากที่เก็บ 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
-
-
เพิ่มการกำหนดค่าเซิร์ฟเวอร์ลงในไฟล์การกำหนดค่าไคลเอ็นต์ของคุณ ตัวอย่างเช่น สำหรับ Claude Desktop:
หากใช้ uvx:
{ "mcpServers": { "grafana": { "command": "uvx", "args": ["mcp-grafana"], "env": { "GRAFANA_URL": "http://localhost:3000", "GRAFANA_SERVICE_ACCOUNT_TOKEN": "<your service account token>" } } } }หากใช้ไบนารี:
{ "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" } } } }
หมายเหตุ: หากคุณเห็น
Error: spawn mcp-grafana ENOENTใน Claude Desktop คุณต้องระบุพาธเต็มไปยังmcp-grafana
หากใช้ 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"
}
}
}
}
หมายเหตุ: อาร์กิวเมนต์
-t stdioมีความสำคัญที่นี่เพราะแทนที่โหมด SSE เริ่มต้นในอิมเมจ Docker
การใช้ VSCode กับ MCP server ระยะไกล
หากคุณใช้ VSCode และรัน MCP server ในโหมด SSE (ซึ่งเป็นค่าเริ่มต้นเมื่อใช้อิมเมจ Docker โดยไม่แทนที่ทรานสปอร์ต) ตรวจสอบให้แน่ใจว่า .vscode/settings.json ของคุณมีสิ่งต่อไปนี้:
"mcp": {
"servers": {
"grafana": {
"type": "sse",
"url": "http://localhost:8000/sse"
}
}
}
สำหรับโหมด HTTPS streamable HTTP พร้อมใบรับรอง TLS ของเซิร์ฟเวอร์:
"mcp": {
"servers": {
"grafana": {
"type": "sse",
"url": "https://localhost:8443/sse"
}
}
}
โหมดดีบัก
คุณสามารถเปิดใช้งานโหมดดีบักสำหรับทรานสปอร์ต Grafana ได้โดยเพิ่มแฟล็ก -debug ลงในคำสั่ง ซึ่งจะให้การบันทึกรายละเอียดของคำขอและการตอบสนอง HTTP ระหว่าง MCP server และ Grafana API ซึ่งมีประโยชน์สำหรับการแก้ไขปัญหา
หากต้องการใช้โหมดดีบักกับการกำหนดค่า Claude Desktop ให้อัปเดตการกำหนดค่าของคุณดังนี้:
หากใช้ไบนารี:
{
"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>"
}
}
}
}
หากใช้ 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>"
}
}
}
}
หมายเหตุ: เช่นเดียวกับการกำหนดค่ามาตรฐาน อาร์กิวเมนต์
-t stdioจำเป็นเพื่อแทนที่โหมด SSE เริ่มต้นในอิมเมจ Docker
การกำหนดค่า TLS
หากอินสแตนซ์ Grafana ของคุณอยู่เบื้องหลัง mTLS หรือต้องใช้ใบรับรอง TLS ที่กำหนดเอง คุณสามารถกำหนดค่า MCP server ให้ใช้ใบรับรองที่กำหนดเองได้ เซิร์ฟเวอร์รองรับตัวเลือกการกำหนดค่า TLS ต่อไปนี้:
--tls-cert-file: พาธไปยังไฟล์ใบรับรอง TLS สำหรับการตรวจสอบสิทธิ์ไคลเอ็นต์--tls-key-file: พาธไปยังไฟล์คีย์ส่วนตัว TLS สำหรับการตรวจสอบสิทธิ์ไคลเอ็นต์--tls-ca-file: พาธไปยังไฟล์ใบรับรอง CA TLS สำหรับการตรวจสอบเซิร์ฟเวอร์--tls-skip-verify: ข้ามการตรวจสอบใบรับรอง TLS (ไม่ปลอดภัย ใช้สำหรับการทดสอบเท่านั้น)
ตัวอย่างพร้อมการตรวจสอบสิทธิ์ใบรับรองไคลเอ็นต์:
{
"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>"
}
}
}
}
ตัวอย่างพร้อม 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>"
}
}
}
}
การกำหนดค่า TLS ถูกนำไปใช้กับไคลเอ็นต์ HTTP ทั้งหมดที่ใช้โดย MCP server รวมถึง:
- ไคลเอ็นต์ Grafana OpenAPI หลัก
- ไคลเอ็นต์ datasource Prometheus
- ไคลเอ็นต์ datasource Loki
- ไคลเอ็นต์การจัดการเหตุการณ์ (Incident management)
- ไคลเอ็นต์การสอบสวน Sift
- ไคลเอ็นต์การแจ้งเตือน (Alerting)
- ไคลเอ็นต์ Asserts
ตัวอย่างการใช้ CLI โดยตรง:
สำหรับการทดสอบด้วยใบรับรองที่ลงนามเอง:
./mcp-grafana --tls-skip-verify -debug
พร้อมการตรวจสอบสิทธิ์ใบรับรองไคลเอ็นต์:
./mcp-grafana \
--tls-cert-file /path/to/client.crt \
--tls-key-file /path/to/client.key \
--tls-ca-file /path/to/ca.crt \
-debug
ด้วยใบรับรอง CA ที่กำหนดเองเท่านั้น:
./mcp-grafana --tls-ca-file /path/to/ca.crt
การใช้งานเชิงโปรแกรม:
หากคุณใช้ไลบรารีนี้เชิงโปรแกรม คุณสามารถสร้างฟังก์ชันบริบทที่เปิดใช้งาน 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)
การตรวจสอบ URL:
เมื่อเรียก NewGrafanaClient โดยตรง (stdio หรือการสร้างเชิงโปรแกรม) ให้ตรวจสอบ URL ล่วงหน้าเพื่อหลีกเลี่ยง panic ที่เข้าถึงได้:
if err := mcpgrafana.ValidateGrafanaURL(urlFromHeader); err != nil {
http.Error(w, err.Error(), http.StatusBadRequest)
return
}
client := mcpgrafana.NewGrafanaClient(ctx, urlFromHeader, apiKey, nil)
การกำหนดค่า TLS ของเซิร์ฟเวอร์ (เฉพาะทรานสปอร์ต Streamable HTTP)
เมื่อใช้ทรานสปอร์ต streamable HTTP (-t streamable-http) คุณสามารถกำหนดค่า MCP server ให้ให้บริการ HTTPS แทน HTTP ได้ ซึ่งมีประโยชน์เมื่อคุณต้องการรักษาความปลอดภัยการเชื่อมต่อระหว่างไคลเอ็นต์ MCP และเซิร์ฟเวอร์เอง
เซิร์ฟเวอร์รองรับตัวเลือกการกำหนดค่า TLS ต่อไปนี้สำหรับทรานสปอร์ต streamable HTTP:
--server.tls-cert-file: พาธไปยังไฟล์ใบรับรอง TLS สำหรับ HTTPS ของเซิร์ฟเวอร์ (จำเป็นสำหรับ TLS)--server.tls-key-file: พาธไปยังไฟล์คีย์ส่วนตัว TLS สำหรับ HTTPS ของเซิร์ฟเวอร์ (จำเป็นสำหรับ TLS)
หมายเหตุ: แฟล็กเหล่านี้แยกจากแฟล็ก TLS ของไคลเอ็นต์ที่อธิบายไว้ข้างต้นโดยสิ้นเชิง แฟล็ก TLS ของไคลเอ็นต์กำหนดค่า MCP server เชื่อมต่อกับ Grafana อย่างไร ในขณะที่แฟล็ก TLS ของเซิร์ฟเวอร์เหล่านี้กำหนดค่าไคลเอ็นต์เชื่อมต่อกับ MCP server อย่างไรเมื่อใช้ทรานสปอร์ต streamable HTTP
ตัวอย่างพร้อมเซิร์ฟเวอร์ HTTPS streamable HTTP:
./mcp-grafana \
-t streamable-http \
--server.tls-cert-file /path/to/server.crt \
--server.tls-key-file /path/to/server.key \
-addr :8443
วิธีนี้จะเริ่ม MCP server บนพอร์ต HTTPS 8443 ไคลเอ็นต์จะเชื่อมต่อกับ https://localhost:8443/ แทน http://localhost:8000/
ตัวอย่าง Docker พร้อม TLS ของเซิร์ฟเวอร์:
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
ปลายทางตรวจสอบสุขภาพ (Health Check Endpoint)
เมื่อใช้ทรานสปอร์ต SSE (-t sse) หรือ streamable HTTP (-t streamable-http) MCP server จะเปิดเผยปลายทางตรวจสอบสุขภาพที่ /healthz ปลายทางนี้สามารถใช้โดย load balancer ระบบตรวจสอบ หรือแพลตฟอร์มการจัดเตรียมเพื่อตรวจสอบว่าเซิร์ฟเวอร์ทำงานและยอมรับการเชื่อมต่อ
ปลายทาง: GET /healthz
การตอบสนอง:
- รหัสสถานะ:
200 OK - เนื้อหา:
ok
ตัวอย่างการใช้งาน:
# For streamable HTTP or SSE transport on default port
curl http://localhost:8000/healthz
# Probe a side listener while MCP stays on loopback (Kubernetes + sidecar)
./mcp-grafana -t streamable-http --address 127.0.0.1:8000 --healthz-address :8080
curl http://127.0.0.1:8080/healthz
# With --base-path /my-base the MCP routes move under the prefix
# (/my-base/sse, /my-base/mcp), but healthz does not:
curl http://localhost:8000/healthz # 200 ok
curl http://localhost:8000/my-base/healthz # 404
หมายเหตุ: ปลายทางตรวจสอบสุขภาพใช้ได้เฉพาะเมื่อใช้ทรานสปอร์ต SSE หรือ streamable HTTP ไม่สามารถใช้ได้เมื่อใช้ทรานสปอร์ต stdio (-t stdio) เนื่องจาก stdio ไม่ได้เปิดเผยเซิร์ฟเวอร์ HTTP
สถิติการใช้งานโดยไม่ระบุตัวตน
เซิร์ฟเวอร์สามารถรายงานสถิติการใช้งานแบบไม่ระบุตัวตนเกี่ยวกับตัวเองไปยัง Grafana Labs ได้แก่: เครื่องมือใดถูกเรียกใช้, การเรียกเหล่านั้นล้มเหลวกี่ครั้ง, และเซิร์ฟเวอร์ถูกกำหนดค่าอย่างไร รายงานหนึ่งฉบับครอบคลุมหนึ่ง โพรเซส ของเซิร์ฟเวอร์ — ไม่ใช่หนึ่งผู้ใช้หรือหนึ่งบทสนทนา — และจะถูกส่งทุก 4 ชั่วโมงรวมถึงหนึ่งครั้งเมื่อปิดระบบ การรายงานถูกปิดใช้งานโดยค่าเริ่มต้นในรุ่นนี้ — ปลายทางที่รับยังไม่ทำงาน — และรุ่นถัดไปจะเปลี่ยนค่าเริ่มต้นเป็นเปิดใช้งานพร้อมกับตัวเลือกการยกเลิกเดียวกัน
อาร์กิวเมนต์ของเครื่องมือ, ชื่อทรัพยากร, คิวรี, บรรทัดล็อก, ข้อความแสดงข้อผิดพลาด และข้อมูลประจำตัวจะไม่ถูกส่ง ever แฟล็กจะถูกบันทึกโดยชื่อเท่านั้น ไม่เคยโดยค่า และอินสแตนซ์ Grafana จะถูกอธิบายเพียงเป็น cloud หรือ self_hosted — ไม่เคยโดย URL, โฮสต์เนม, สลักสแตก หรือองค์กร ไม่มีสิ่งใดที่เป็นต่อผู้ใช้, ต่อเซสชัน หรือต่อไคลเอ็นต์: ไม่มีตัวระบุเซสชันบนสายส่ง และไม่มีวิธีระบุว่าการเรียกเครื่องมือมาจากไคลเอ็นต์ใดโดยเฉพาะ
# Turn reporting on
mcp-grafana --usage-stats=enabled
# Turn it off (or GRAFANA_USAGE_STATS=disabled)
mcp-grafana --usage-stats=disabled
# Print what would be sent, to stderr, and send nothing
GRAFANA_USAGE_STATS=log mcp-grafana
DO_NOT_TRACK=1 ยังปิดใช้งานการรายงาน ตามธรรมเนียม DO_NOT_TRACK ข้ามเครื่องมือ เฉพาะ 1 เท่านั้นที่มีผล มันสามารถปิดใช้งานได้เท่านั้น และทั้ง --usage-stats และ GRAFANA_USAGE_STATS ครอบคลุมมัน ดังนั้นโฮสต์ที่ตั้งค่าแบบทั่วโลกยังสามารถเลือกให้เซิร์ฟเวอร์หนึ่งกลับมาเปิดใช้งานได้
GRAFANA_USAGE_STATS_ENDPOINT เปลี่ยนปลายทาง มันไม่ใช่ตัวเลือกการยกเลิก
สำหรับรายการฟิลด์ทั้งหมด, สิ่งที่ไม่ถูกส่ง ever, วิธีอ่านข้อมูลและข้อจำกัดของมัน ดู สถิติการใช้งานแบบไม่ระบุตัวตน
การสังเกตการณ์
เซิร์ฟเวอร์ MCP รองรับเมตริก Prometheus, การติดตามแบบกระจาย OpenTelemetry และการส่งออกล็อก OpenTelemetry ตาม ธรรมเนียมความหมาย MCP ของ OTel การติดตามและการส่งออกล็อกถูกกำหนดค่าผ่านตัวแปรสภาพแวดล้อมมาตรฐาน OTEL_* และทำงานกับทรานสปอร์ตใดก็ได้
หมายเหตุ: mcp-grafana ปัจจุบันรองรับเฉพาะทรานสปอร์ต OTLP/gRPC สำหรับทั้งเทรซและล็อก OTEL_EXPORTER_OTLP_PROTOCOL (และตัวแปร _TRACES_PROTOCOL / _LOGS_PROTOCOL ของมัน) จะไม่ถูกรับรู้ — ใช้ gRPC เสมอ
เมตริก
เมื่อใช้ทรานสปอร์ต SSE หรือ streamable HTTP เปิดใช้งานเมตริก Prometheus ด้วยแฟล็ก --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
เมตริกที่พร้อมใช้งาน:
| เมตริก | ประเภท | คำอธิบาย |
|---|---|---|
mcp_server_operation_duration_seconds | ฮิสโตแกรม | ระยะเวลาของการดำเนินการ MCP (ป้ายกำกับ: mcp_method_name, gen_ai_tool_name, error_type, network_transport, mcp_protocol_version) |
mcp_server_session_duration_seconds | ฮิสโตแกรม | ระยะเวลาของเซสชันไคลเอ็นต์ MCP (ป้ายกำกับ: network_transport, mcp_protocol_version) |
http_server_request_duration_seconds | ฮิสโตแกรม | ระยะเวลาของคำขอเซิร์ฟเวอร์ HTTP (จาก otelhttp) |
หมายเหตุ: เมตริกพร้อมใช้งานเฉพาะเมื่อใช้ทรานสปอร์ต SSE หรือ streamable HTTP เท่านั้น ไม่พร้อมใช้งานกับทรานสปอร์ต stdio
เมื่อเปิดใช้งาน Loki cost guardrail (--loki-guardrail-mode) ตัวนับอีกสี่ตัวจะบันทึกการตัดสินใจของมัน:
| เมตริก | ประเภท | คำอธิบาย |
|---|---|---|
mcp_loki_guardrail_admitted_total | ตัวนับ | คิวรีที่ผ่านการตรวจสอบที่เปิดใช้งานทั้งหมด (ป้ายกำกับ: backend) |
mcp_loki_guardrail_would_block_total | ตัวนับ | คิวรีที่ล้มเหลวการตรวจสอบในโหมด shadow และยังทำงานอยู่ (ป้ายกำกับ: backend, reason) |
mcp_loki_guardrail_blocked_total | ตัวนับ | คิวรีที่ถูกปฏิเสธในโหมด enforce (ป้ายกำกับ: backend, reason) |
mcp_loki_guardrail_fail_open_total | ตัวนับ | คิวรีที่ guardrail ไม่สามารถประเมินได้และยอมรับ (ป้ายกำกับ: backend, cause) |
reason เป็นหนึ่งใน selector, range, bytes; cause เป็นหนึ่งใน unparseable, estimate_failed; backend เป็นหนึ่งใน loki, victorialogs, unknown คิวรีที่ละเมิดการตรวจสอบหลายครั้งจะถูกนับครั้งเดียว โดยติดป้ายกำกับด้วยการตรวจสอบที่ทำงานก่อน (selector, จากนั้น range, จากนั้น bytes) ดังนั้นตัวนับทั้งสี่จึงแบ่งส่วนประชากรที่ได้รับการป้องกัน ดู การสังเกตการณ์ สำหรับวิธีอ่านระหว่างการเปิดตัว shadow → enforce
ผู้ที่ฝังไลบรารีควรตั้งค่า GrafanaConfig.MeterProvider (คู่ของเมตริกกับ GrafanaConfig.Logger): guardrail ทำงานภายในตัวจัดการเครื่องมือ ดังนั้นจึงไม่มีตัวเลือกคอนสตรักเตอร์ และโพรเซสที่ติดตั้ง MeterProvider ระดับโลกแบบ noop จะทำให้การบันทึกทุกครั้งหายไป
การบันทึกคำขอช้า
แฟล็ก --slow-request-threshold ส่งอีเวนต์ล็อกแบบมีโครงสร้างเมื่อใดก็ตามที่คำขอ MCP (การเรียกเครื่องมือ, รายการ, การอ่านทรัพยากร ฯลฯ) เกินระยะเวลาที่กำหนด มีประโยชน์สำหรับการวินิจฉัยคิวรีช้าและการเรียกเครื่องมือโดยไม่ต้องจมอยู่ในล็อกดีบักเต็มรูปแบบ
# 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
อีเวนต์ล็อกมีแอตทริบิวต์แบบมีโครงสร้างเหล่านี้:
| แอตทริบิวต์ | คำอธิบาย |
|---|---|
mcp.method | เมธอด MCP (เช่น tools/call, tools/list, resources/read) |
duration | ระยะเวลาคำขอที่สังเกตได้ |
threshold | เกณฑ์ที่กำหนดค่าไว้ |
tool | ชื่อเครื่องมือ (มีเฉพาะสำหรับเมธอด tools/call) |
error | ค่าข้อผิดพลาด เมื่อคำขอล้มเหลว (บริบทแบบ best-effort; เนื้อหาถูกควบคุมโดยการห่อหุ้มข้อผิดพลาดต้นทาง) |
error.type | การจำแนกข้อผิดพลาดแบบคาร์ดินาลิตี้จำกัด (_OTHER สำหรับข้อผิดพลาดที่ไม่มีประเภท) |
การบันทึกคำขอช้าทำงานบนทรานสปอร์ตทั้งหมด (รวมถึง stdio) และไม่ต้องการ --metrics เกณฑ์ค่าเริ่มต้นของ 0 ปิดใช้งานทั้งหมด เครื่องมือที่ผ่านพร็อกซีจะไหลผ่าน tools/call และถูกครอบคลุมโดยอัตโนมัติ
การติดตาม
การติดตามแบบกระจายถูกกำหนดค่าผ่านตัวแปรสภาพแวดล้อมมาตรฐาน OTEL_* และทำงานอิสระจากแฟล็ก --metrics เมื่อตั้งค่า OTEL_EXPORTER_OTLP_ENDPOINT (หรือ OTEL_EXPORTER_OTLP_TRACES_ENDPOINT เฉพาะสัญญาณ) เซิร์ฟเวอร์จะส่งออกเทรซผ่าน 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
สแปนการเรียกเครื่องมือเป็นไปตามการตั้งชื่อ semconv (tools/call <tool_name>) และรวมแอตทริบิวต์เช่น gen_ai.tool.name, mcp.method.name และ mcp.session.id เซิร์ฟเวอร์ยังรองรับการแพร่กระจายบริบทเทรซ W3C จากฟิลด์ _meta ของคำขอเรียกเครื่องมือ
ล็อก
เมื่อตั้งค่า OTEL_EXPORTER_OTLP_ENDPOINT (หรือ OTEL_EXPORTER_OTLP_LOGS_ENDPOINT เฉพาะสัญญาณ) เซิร์ฟเวอร์ยังส่งออกล็อกแบบมีโครงสร้างผ่าน OTLP/gRPC นอกเหนือจากเอาต์พุต stderr ข้อความธรรมดาที่มีอยู่ บริดจ์ otelslog แนบ trace_id และ span_id จากสแปนที่ใช้งานอยู่โดยอัตโนมัติ ดังนั้นบันทึกล็อกจึงสัมพันธ์กับเทรซที่เซิร์ฟเวอร์ส่งออกอยู่แล้ว
เทรซและล็อกแก้ไขปลายทางของพวกมันอย่างอิสระ ดังนั้นสัญญาณทั้งสองสามารถเปิดใช้งานแยกกันได้: การตั้งค่าเฉพาะ OTEL_EXPORTER_OTLP_TRACES_ENDPOINT เปิดใช้งานการติดตาม โดยไม่ ส่งออกล็อก การตั้งค่าเฉพาะ OTEL_EXPORTER_OTLP_LOGS_ENDPOINT เปิดใช้งานการส่งออกล็อกโดยไม่มีการติดตาม และ OTEL_EXPORTER_OTLP_ENDPOINT ทั่วไปเปิดใช้งานทั้งสอง
หากคุณใช้ OTEL_EXPORTER_OTLP_ENDPOINT ทั่วไปแต่ต้องการปิดใช้งานการส่งออกล็อก (เช่น แบ็กเอนด์ของคุณไม่รองรับ LogsService) ให้ตั้งค่า:
OTEL_LOGS_EXPORTER=none
สิ่งนี้ป้องกันไม่ให้เซิร์ฟเวอร์สร้างตัวส่งออกล็อก OTLP โดยไม่คำนึงถึงการกำหนดค่าปลายทาง หลีกเลี่ยงข้อผิดพลาดเช่น unknown service opentelemetry.proto.collector.logs.v1.LogsService
การบันทึก stderr ไม่เปลี่ยนแปลงเมื่อเปิดใช้งานการบันทึก OTLP; คุณสามารถพึ่งพาล็อกคอนเทนเนอร์หรือส่ง stderr ไปยัง /dev/null หากคุณต้องการ
# 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
ทรานสปอร์ตคือ OTLP/gRPC (พอร์ตเริ่มต้น 4317) ล็อกสามารถส่งตรงไปยังแบ็กเอนด์ที่จัดการใดๆ ที่ยอมรับ OTLP/gRPC — เช่น Grafana Cloud — โดยชี้ OTEL_EXPORTER_OTLP_LOGS_ENDPOINT (หรือ OTEL_EXPORTER_OTLP_ENDPOINT ทั่วไป) ไปที่ปลายทาง gRPC ระยะไกลและให้การรับรองความถูกต้องผ่าน OTEL_EXPORTER_OTLP_LOGS_HEADERS (หรือ OTEL_EXPORTER_OTLP_HEADERS) สะท้อนตัวอย่างการติดตามด้านบน ตัวรวบรวม OTel ในเครื่องเป็น ทางเลือก — มีประโยชน์สำหรับ fan-out, การจัดกลุ่ม หรือการกำหนดเส้นทางหลายแบ็กเอนด์ แต่ไม่จำเป็น
ตัวแปรเฉพาะสัญญาณ 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 และ OTEL_EXPORTER_OTLP_LOGS_COMPRESSION ถูกรับรู้และครอบคลุมคู่ OTEL_EXPORTER_OTLP_* ทั่วไปของพวกมัน — ดู ข้อมูลจำเพาะตัวส่งออก OTel สำหรับรายการเต็มและกฎลำดับความสำคัญ
หากตัวรวบรวมที่กำหนดค่าไม่สามารถเข้าถึงได้ บันทึกล็อกจะถูกบัฟเฟอร์ในหน่วยความจำ (คิวเริ่มต้น: 2048) และบันทึกที่เก่าที่สุดจะถูกทิ้งเมื่อคิวเต็ม โพรเซสดำเนินต่อไปโดยไม่บล็อกบริการ กำหนดค่าตัวรวบรวม OTel ในเครื่องหากคุณต้องการบัฟเฟอร์แบบไม่สูญเสียระหว่างการหยุดทำงาน
ล็อกยังถูกส่งออกภายใต้ทรานสปอร์ต stdio ซึ่งทำให้ง่ายต่อการรวมศูนย์ล็อกจากอินสแตนซ์ mcp-grafana ในเครื่องที่ถูกเรียกโดยไคลเอ็นต์ IDE
ตัวอย่าง Docker พร้อมเมตริก การติดตาม และล็อก:
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
การบังคับใช้คิวรี Loki
--loki-enforced-matchers ให้ผู้ดูแลระบบจำกัดสตรีมล็อก Loki ที่เซิร์ฟเวอร์สามารถอ่านได้ ever โดยการ AND ตัวจับคู่ป้ายกำกับ LogQL ชุดคงที่ลงในทุกคิวรี Loki ดั้งเดิมที่เซิร์ฟเวอร์ออก สิ่งนี้มีประโยชน์เมื่อ datasource มีสตรีมที่ไม่ควรเปิดเผย (เช่น ล็อกที่อาจมีข้อมูลที่ละเอียดอ่อน) แต่คุณไม่สามารถจำกัดการเข้าถึงที่ชั้น Grafana หรือ Loki ได้ (OSS ไม่มีการควบคุมการเข้าถึงป้ายกำกับต่อ datasource หรือต่อผู้ใช้)
# Only ever read prod/staging environments (allowlist)
./mcp-grafana --loki-enforced-matchers 'environment=~"prod|staging"' --disable-api
# Never read the vault or payments namespaces (exclusion)
./mcp-grafana --loki-enforced-matchers 'namespace!~"vault|payments"' --disable-api
วิธีการทำงาน:
- ตัวจับคู่ถูกแยกวิเคราะห์ครั้งเดียวที่การเริ่มต้น (อินพุตที่ไม่ถูกต้องจะหยุดเซิร์ฟเวอร์) และถูกผนวกเข้ากับตัวเลือกสตรีมทุกตัวในแต่ละคิวรี เนื่องจาก Loki AND ตัวจับคู่ภายในตัวเลือก คิวรีผู้ใช้สามารถ แคบลง ผลลัพธ์ภายในขอบเขตที่บังคับใช้เท่านั้น — ไม่สามารถขยายได้ ever ตัวเลือกผู้ใช้ที่ขัดแย้งกับนโยบาย (เช่น ขอ
{namespace="vault"}ภายใต้การยกเว้น) จะส่งคืนไม่มีอะไร - ครอบคลุม
query_loki_logs,query_loki_stats,query_loki_patterns,list_loki_label_namesและlist_loki_label_values - ล้มเหลวแบบปิด: คิวรีใดที่ไม่สามารถแยกวิเคราะห์ได้จะถูกปฏิเสธแทนที่จะส่งโดยไม่กรอง
- datasource VictoriaLogs ใช้ LogsQL ซึ่งไม่สามารถเขียนใหม่ได้อย่างปลอดภัย ดังนั้นจึงถูกปฏิเสธทั้งหมดในขณะที่เปิดใช้งานการบังคับใช้
- ตัวจับคู่เชิงลบล้วนไม่สามารถกำหนดขอบเขตปลายทางการแจงนับป้ายกำกับได้ (Loki ปฏิเสธตัวเลือกเดี่ยวที่ไม่มีตัวจับคู่เชิงบวก) ควบคุมกรณีขอบนั้นด้วย
--loki-label-enumeration-fallback(rejectโดยค่าเริ่มต้น หรือunfilteredเพื่ออนุญาตการแจงนับ เมทาดาทา ป้ายกำกับแบบไม่มีขอบเขต — บรรทัดล็อกไม่ถูกเปิดเผย ever) ตัวจับคู่เชิงบวก/allowlist ไม่ได้รับผลกระทบ
[!IMPORTANT] การบังคับใช้ใช้เฉพาะกับเครื่องมือคิวรี Loki เท่านั้น เครื่องมืออื่นสามารถเข้าถึงข้อมูลล็อก Loki ผ่านเส้นทางที่ไม่เคยแตะแบ็กเอนด์ที่บังคับใช้ ดังนั้นเพื่อให้ข้อจำกัดถือจริง คุณต้องปิดใช้งานพวกมันด้วย:
--disable-api—grafana_api_requestสามารถคิวรีพร็อกซี datasource Loki ได้โดยตรง (บายพาสเต็มรูปแบบ)--disable-rendering—get_panel_imageเรนเดอร์แผง Loki ฝั่งเซิร์ฟเวอร์ ผลิตภาพที่มีบรรทัดล็อกไม่จำกัด--disable-sift— การวิเคราะห์ Sift วิเคราะห์ล็อก Loki ฝั่งเซิร์ฟเวอร์ทั่วทุกสตรีม--disable-assistant—ask_assistantมอบหมายให้ Grafana Assistant ซึ่งอ่าน Loki ฝั่งเซิร์ฟเวอร์ทั่วทุกสตรีม ลงทะเบียนเฉพาะเมื่อเปิดใช้งานเครื่องมือเขียน ดังนั้น--disable-writeปิดมันด้วยเซิร์ฟเวอร์บันทึกคำเตือนที่การเริ่มต้นโดยระบุชื่อแต่ละรายการที่ยังเปิดใช้งาน
run_panel_queryปลอดภัย (มันใช้เส้นทางคิวรีที่บังคับใช้ซ้ำ) เครื่องมือ Tempo คิวรีเทรซ ไม่ใช่ล็อก Loki ดังนั้นจึงไม่ใช่บายพาส สแนปช็อตแดชบอร์ด (--disable-snapshot) ยังสามารถฝังข้อมูลแผงล็อกที่จับได้นอกการบังคับใช้
การแก้ไขปัญหา
ความเข้ากันได้ของเวอร์ชัน Grafana
หากคุณพบข้อผิดพลาดต่อไปนี้เมื่อใช้เครื่องมือที่เกี่ยวข้องกับ datasource:
get datasource by uid : [GET /datasources/uid/{uid}][400] getDataSourceByUidBadRequest {"message":"id is invalid"}
สิ่งนี้มักบ่งชี้ว่าคุณใช้ Grafana เวอร์ชันก่อน 9.0 ปลายทาง API /datasources/uid/{uid} ถูกนำมาใช้ใน Grafana 9.0 และการดำเนินการ datasource จะล้มเหลวในเวอร์ชันก่อนหน้า
วิธีแก้ไข: อัปเกรดอินสแตนซ์ Grafana ของคุณเป็นเวอร์ชัน 9.0 หรือใหม่กว่าเพื่อแก้ไขปัญหานี้
การพัฒนา
ยินดีต้อนรับการมีส่วนร่วม! โปรดอ่าน CONTRIBUTING.md ก่อน — ครอบคลุมสิ่งที่อยู่ในเซิร์ฟเวอร์นี้และวิธีเสนอ หากคุณกำลัง เพิ่มเครื่องมือใหม่ กรุณา เปิดข้อเสนอเครื่องมือ ก่อนที่จะเขียนโค้ด เครื่องมือที่เปิดใช้งานตามค่าเริ่มต้นทุกตัวจะถูกส่งไปยังโมเดลในทุกคำขอจากผู้ใช้ทุกคน ดังนั้นเราจึงอยากหารือเกี่ยวกับแนวคิดมากกว่าที่จะปฏิเสธ pull request ที่เสร็จสมบูรณ์ การแก้ไขบั๊ก เอกสารประกอบ การทดสอบ และพารามิเตอร์ใหม่บนเครื่องมือที่มีอยู่ไม่จำเป็นต้องมีข้อเสนอ — เพียงส่ง PR
โปรเจกต์นี้เขียนด้วยภาษา Go ติดตั้ง Go ตามคำแนะนำสำหรับแพลตฟอร์มของคุณ
หากต้องการรันเซิร์ฟเวอร์ในเครื่องในโหมด STDIO (ซึ่งเป็นค่าเริ่มต้นสำหรับการพัฒนาท้องถิ่น) ให้ใช้:
make run
หากต้องการรันเซิร์ฟเวอร์ในเครื่องในโหมด SSE ให้ใช้:
go run ./cmd/mcp-grafana --transport sse
คุณยังสามารถรันเซิร์ฟเวอร์โดยใช้การขนส่ง SSE ภายในอิมเมจ Docker ที่สร้างขึ้นเองได้ เช่นเดียวกับอิมเมจ Docker ที่เผยแพร่ entrypoint ของอิมเมจที่กำหนดเองนี้จะตั้งค่าเป็นโหมด SSE ตามค่าเริ่มต้น หากต้องการสร้างอิมเมจ ให้ใช้:
make build-image
และหากต้องการรันอิมเมจในโหมด SSE (ค่าเริ่มต้น) ให้ใช้:
docker run -it --rm -p 8000:8000 mcp-grafana:latest
หากคุณต้องการรันในโหมด STDIO แทน ให้แทนที่การตั้งค่าการขนส่ง:
docker run -it --rm mcp-grafana:latest -t stdio
การทดสอบ
มีการทดสอบสามประเภท:
- การทดสอบหน่วย (ไม่ต้องพึ่งพาภายนอก):
make test-unit
คุณยังสามารถรันการทดสอบหน่วยด้วย:
make test
- การทดสอบการรวมระบบ (ต้องมีคอนเทนเนอร์ Docker ที่ทำงานอยู่):
make test-integration
- การทดสอบคลาวด์ (ต้องมีอินสแตนซ์ Grafana คลาวด์และข้อมูลประจำตัว):
make test-cloud
หมายเหตุ: การทดสอบคลาวด์ถูกกำหนดค่าโดยอัตโนมัติใน CI สำหรับการพัฒนาท้องถิ่น คุณจะต้องตั้งค่าอินสแตนซ์ Grafana Cloud และข้อมูลประจำตัวของคุณเอง
การทดสอบการรวมระบบที่ครอบคลุมมากขึ้นจะต้องมีอินสแตนซ์ Grafana ที่ทำงานในเครื่องบนพอร์ต 3000 คุณสามารถเริ่มได้ด้วย Docker Compose:
docker-compose up -d
การทดสอบการรวมระบบสามารถรันได้ด้วย:
make test-all
หากคุณกำลังเพิ่มเครื่องมือเพิ่มเติม โปรดเพิ่มการทดสอบการรวมระบบสำหรับเครื่องมือเหล่านั้น การทดสอบที่มีอยู่ควรเป็นจุดเริ่มต้นที่ดี
การตรวจสอบโค้ด
หากต้องการตรวจสอบโค้ด ให้รัน:
make lint
ซึ่งรวมถึง linter ที่กำหนดเองที่ตรวจสอบเครื่องหมายจุลภาคที่ไม่มีการ escape ในแท็ก struct ของ jsonschema เครื่องหมายจุลภาคในฟิลด์ description ต้องถูก escape ด้วย \\, เพื่อป้องกันการตัดทอนอย่างเงียบ ๆ คุณสามารถรันเฉพาะ linter นี้ด้วย:
make lint-jsonschema
ดู เอกสารประกอบ JSONSchema Linter สำหรับรายละเอียดเพิ่มเติม
ใบอนุญาต
โปรเจกต์นี้ได้รับอนุญาตภายใต้ Apache License, เวอร์ชัน 2.0