Grafana

ทางการ

ค้นหาแดชบอร์ด ตรวจสอบเหตุการณ์ และสอบถามแหล่งข้อมูลในอินสแตนซ์ Grafana ของคุณ

GitHub
3.5k
ลองใช้ MCP นี้ผู้สนับสนุน

คุณทำอะไรได้บ้างด้วย 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

Unit Tests Integration Tests E2E Tests Go Reference MCP Catalog

เซิร์ฟเวอร์ 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)
    • พารามิเตอร์ที่กำหนดเอง: รวมพารามิเตอร์คิวรีเพิ่มเติม เช่น ตัวแปรแดชบอร์ดหรือช่วงเวลารีเฟรช

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 ที่มี UID abc123
    • folders:uid:xyz789 - เข้าถึงเฉพาะ folder ที่มี UID xyz789
    • teams:id:5 - เข้าถึงเฉพาะ team ที่มี ID 5
    • global.users:id:123 - เข้าถึงเฉพาะ user ที่มี ID 123

ตัวอย่าง:

  • การเข้าถึง 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:readteams:* หรือ teams:id:1
list_users_by_orgผู้ดูแลระบบแสดงรายการผู้ใช้ทั้งหมดในองค์กรusers:readglobal.users:* หรือ global.users:id:123
list_all_rolesผู้ดูแลระบบแสดงรายการบทบาท Grafana ทั้งหมดroles:readroles:*
get_role_detailsผู้ดูแลระบบรับรายละเอียดสำหรับบทบาท Grafanaroles:readroles:uid:editor
get_role_assignmentsผู้ดูแลระบบแสดงรายการการกำหนดสำหรับบทบาทroles:readroles:uid:editor
list_user_rolesผู้ดูแลระบบแสดงรายการบทบาทสำหรับผู้ใช้roles:readglobal.users:id:123
list_team_rolesผู้ดูแลระบบแสดงรายการบทบาทสำหรับทีมroles:readteams:id:7
get_resource_permissionsผู้ดูแลระบบแสดงรายการสิทธิ์สำหรับทรัพยากรpermissions:readdashboards:uid:abcd1234
get_resource_descriptionผู้ดูแลระบบอธิบายประเภททรัพยากร Grafanapermissions:readdashboards:*
user_infoผู้ใช้ข้อมูลประจำตัว ความสามารถ และองค์กรที่เข้าถึงได้ในปัจจุบันไม่มี (ผู้ใช้ที่เข้าสู่ระบบ)—
search_dashboardsค้นหาค้นหาแดชบอร์ดตามคำค้นหา UID โฟลเดอร์ แท็ก หรือรายการที่ติดดาวdashboards:readdashboards:* หรือ dashboards:uid:abc123
get_dashboard_by_uidแดชบอร์ดรับแดชบอร์ดตาม uid หรือเวอร์ชันที่บันทึกไว้dashboards:readdashboards:uid:abc123
list_dashboard_versionsแดชบอร์ดแสดงรายการเวอร์ชันที่บันทึกของแดชบอร์ด (เวอร์ชัน ผู้เขียน เวลา ข้อความ)dashboards:readdashboards:uid:abc123
update_dashboardแดชบอร์ดอัปเดตหรือสร้างแดชบอร์ดใหม่dashboards:create, dashboards:writedashboards:*, folders:* หรือ folders:uid:xyz789
get_dashboard_panel_queriesแดชบอร์ดรับชื่อแผง คำค้นหา UID แหล่งข้อมูล และประเภทจากแดชบอร์ดdashboards:readdashboards:uid:abc123
run_panel_queryรันคำค้นหาแผง*ดำเนินการคำค้นหาแผงแดชบอร์ดหนึ่งรายการขึ้นไปdashboards:read, datasources:querydashboards:uid:*, datasources:uid:*
get_dashboard_propertyแดชบอร์ดแยกส่วนเฉพาะของแดชบอร์ดโดยใช้นิพจน์ JSONPathdashboards:readdashboards:uid:abc123
get_dashboard_summaryแดชบอร์ดรับสรุปย่อของแดชบอร์ดโดยไม่มี JSON เต็มรูปแบบdashboards:readdashboards:uid:abc123
list_datasourcesแหล่งข้อมูลแสดงรายการแหล่งข้อมูลdatasources:readdatasources:*
get_datasourceแหล่งข้อมูลรับแหล่งข้อมูลตาม UID หรือชื่อdatasources:readdatasources:uid:prometheus-uid
get_query_examplesตัวอย่าง*รับตัวอย่างคำค้นหาสำหรับประเภทแหล่งข้อมูลdatasources:readdatasources:*
query_prometheusPrometheusดำเนินการคำค้นหาต่อแหล่งข้อมูล Prometheusdatasources:querydatasources:uid:prometheus-uid
list_prometheus_metric_metadataPrometheusแสดงรายการข้อมูลเมตริกdatasources:querydatasources:uid:prometheus-uid
list_prometheus_metric_namesPrometheusแสดงรายการชื่อเมตริกที่พร้อมใช้งานdatasources:querydatasources:uid:prometheus-uid
list_prometheus_label_namesPrometheusแสดงรายการชื่อป้ายกำกับที่ตรงกับตัวเลือกdatasources:querydatasources:uid:prometheus-uid
list_prometheus_label_valuesPrometheusแสดงรายการค่าสำหรับป้ายกำกับเฉพาะdatasources:querydatasources:uid:prometheus-uid
query_prometheus_histogramPrometheusคำนวณค่าเปอร์เซ็นไทล์ฮิสโตแกรมdatasources:querydatasources: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_logsLokiค้นหาและดึงข้อมูลบันทึกโดยใช้ LogQL (ทั้งคำค้นหาบันทึกหรือเมตริก)datasources:querydatasources:uid:loki-uid
list_loki_label_namesLokiแสดงรายการชื่อป้ายกำกับที่พร้อมใช้งานทั้งหมดในบันทึกdatasources:querydatasources:uid:loki-uid
list_loki_label_valuesLokiแสดงรายการค่าสำหรับป้ายกำกับบันทึกเฉพาะdatasources:querydatasources:uid:loki-uid
query_loki_statsLokiรับสถิติเกี่ยวกับสตรีมบันทึกdatasources:querydatasources:uid:loki-uid
query_loki_patternsLokiค้นหารูปแบบบันทึกที่ตรวจพบเพื่อระบุโครงสร้างทั่วไปdatasources:querydatasources:uid:loki-uid
analyze_loki_labelsLokiตรวจสอบกลยุทธ์ป้ายกำกับ Loki (สดหรือคงที่) และวินิจฉัยประสิทธิภาพคำค้นหาได้datasources:querydatasources:uid:loki-uid
suggest_loki_alloy_label_configการกำหนดค่าสร้างข้อมูลโค้ด Alloy loki.process ที่บังคับใช้ป้ายกำกับที่อนุมัติN/AN/A
query_influxdbInfluxDBคิวรี InfluxDB โดยใช้ InfluxQL (v1) หรือ Flux (v2)datasources:querydatasources:uid:influxdb-uid
list_sql_databasesSQL*แสดงรายการฐานข้อมูล สคีมา หรือแคตตาล็อกจากแหล่งข้อมูล SQLdatasources:querydatasources:uid:*
list_sql_tablesSQL*แสดงรายการตารางในแหล่งข้อมูล SQLdatasources:querydatasources:uid:*
describe_sql_tableSQL*รับสคีมาของคอลัมน์สำหรับตารางdatasources:querydatasources:uid:*
query_sqlSQL*ดำเนินการคิวรี SQL พร้อมการแทนที่แมโครdatasources:querydatasources:uid:*
list_cloudwatch_namespacesCloudWatch*แสดงรายการเนมสเปซ AWS CloudWatch ที่มีอยู่datasources:querydatasources:uid:*
list_cloudwatch_metricsCloudWatch*แสดงรายการเมตริกในเนมสเปซdatasources:querydatasources:uid:*
list_cloudwatch_dimensionsCloudWatch*แสดงรายการมิติสำหรับเมตริกdatasources:querydatasources:uid:*
list_cloudwatch_dimension_valuesCloudWatch*แสดงรายการค่าสำหรับคีย์มิติdatasources:querydatasources:uid:*
query_cloudwatchCloudWatch*ดำเนินการคิวรีเมตริก CloudWatchdatasources:querydatasources:uid:*
list_cloud_logging_projectsCloud Logging*แสดงรายการโปรเจกต์ GCP ที่อ่านได้โดยแหล่งข้อมูล Google Cloud Loggingdatasources:querydatasources:uid:*
list_cloud_logging_bucketsCloud Logging*แสดงรายการบัคเก็ตล็อกในโปรเจกต์ GCPdatasources:querydatasources:uid:*
list_cloud_logging_viewsCloud Logging*แสดงรายการมุมมองล็อกในบัคเก็ตล็อกdatasources:querydatasources:uid:*
query_cloud_loggingCloud Logging*คิวรีล็อกด้วยภาษาคิวรี Cloud Loggingdatasources:querydatasources:uid:*
query_elasticsearchElasticsearch/OpenSearch*คิวรี Elasticsearch หรือ OpenSearch โดยใช้ไวยากรณ์ Lucene หรือ Query DSLdatasources:querydatasources:uid:datasource-uid
query_quickwitQuickwit*คิวรี Quickwit โดยใช้ไวยากรณ์ Lucene หรือ Query DSLdatasources:querydatasources:uid:quickwit-uid
alerting_manage_rulesAlertingจัดการกฎการแจ้งเตือน (แสดงรายการ รับ เวอร์ชัน สร้าง อัปเดต ลบ)alert.rules:read + alert.rules:write สำหรับการแก้ไขfolders:* หรือ folders:uid:alerts-folder
alerting_manage_routingAlertingจัดการนโยบายการแจ้งเตือน จุดติดต่อ และช่วงเวลาalert.notifications:readขอบเขตทั่วโลก
alerting_manage_silencesAlertingจัดการช่วงเงียบของการแจ้งเตือน (แสดงรายการ รับ สร้าง อัปเดต หมดอายุ)alert.instances:read + alert.instances:write สำหรับการแก้ไขขอบเขตทั่วโลก
list_oncall_schedulesOnCallแสดงรายการตารางเวลาจาก Grafana OnCallgrafana-oncall-app.schedules:readขอบเขตเฉพาะปลั๊กอิน
get_oncall_shiftOnCallรับรายละเอียดสำหรับกะ OnCall เฉพาะgrafana-oncall-app.schedules:readขอบเขตเฉพาะปลั๊กอิน
get_current_oncall_usersOnCallรับผู้ใช้ที่ปฏิบัติหน้าที่อยู่ในปัจจุบันสำหรับตารางเวลาเฉพาะgrafana-oncall-app.schedules:readขอบเขตเฉพาะปลั๊กอิน
list_oncall_teamsOnCallแสดงรายการทีมจาก Grafana OnCallgrafana-oncall-app.user-settings:readขอบเขตเฉพาะปลั๊กอิน
list_oncall_usersOnCallแสดงรายการผู้ใช้จาก Grafana OnCallgrafana-oncall-app.user-settings:readขอบเขตเฉพาะปลั๊กอิน
list_alert_groupsOnCallแสดงรายการกลุ่มการแจ้งเตือนจาก Grafana OnCall พร้อมตัวเลือกการกรองgrafana-oncall-app.alert-groups:readขอบเขตเฉพาะปลั๊กอิน
get_alert_groupOnCallรับกลุ่มการแจ้งเตือนเฉพาะจาก Grafana OnCall โดยใช้ IDgrafana-oncall-app.alert-groups:readขอบเขตเฉพาะปลั๊กอิน
update_alert_groupOnCallยอมรับ เลิกยอมรับ แก้ไข หรือเลิกแก้ไขกลุ่มการแจ้งเตือนgrafana-oncall-app.alert-groups:write (และ :read)ขอบเขตเฉพาะปลั๊กอิน
get_sift_investigationSiftดึงข้อมูลการสอบสวน Sift ที่มีอยู่โดยใช้ UUIDบทบาทผู้ดูN/A
get_sift_analysisSiftดึงการวิเคราะห์เฉพาะจากการสอบสวน Siftบทบาทผู้ดูN/A
list_sift_investigationsSiftดึงรายการการสอบสวน Sift พร้อมขีดจำกัดที่ไม่บังคับบทบาทผู้ดูN/A
find_error_pattern_logsSiftค้นหารูปแบบข้อผิดพลาดที่สูงขึ้นในล็อก Lokiบทบาทผู้แก้ไขN/A
find_slow_requestsSiftค้นหาคำขอที่ช้าจากแหล่งข้อมูล tempo ที่เกี่ยวข้องบทบาทผู้แก้ไขN/A
list_pyroscope_label_namesPyroscopeแสดงรายการชื่อป้ายกำกับที่ตรงกับตัวเลือกdatasources:querydatasources:uid:pyroscope-uid
list_pyroscope_label_valuesPyroscopeแสดงรายการค่าป้ายกำกับที่ตรงกับตัวเลือกสำหรับชื่อป้ายกำกับdatasources:querydatasources:uid:pyroscope-uid
list_pyroscope_profile_typesPyroscopeแสดงรายการประเภทโปรไฟล์ที่มีอยู่datasources:querydatasources:uid:pyroscope-uid
query_pyroscopePyroscopeคิวรีโปรไฟล์ เมตริก หรือทั้งสองอย่างจาก Pyroscopedatasources:querydatasources:uid:pyroscope-uid
get_assertionsAssertsรับสรุปการยืนยันสำหรับเอนทิตีที่กำหนดสิทธิ์เฉพาะปลั๊กอินขอบเขตเฉพาะปลั๊กอิน
agento11y_manage_conversationsAgent Observability*แสดงรายการ ค้นหา และดึงข้อมูลการสนทนา LLM จาก Grafana Agent Observabilitygrafana-agento11y-app.conversations:readN/A
agento11y_manage_generationsAgent Observability*ดึงรายละเอียดการสร้าง LLM และคะแนนการประเมินจาก Grafana Agent Observabilitygrafana-agento11y-app.data:readN/A
agento11y_manage_agentsAgent Observability*อ่านแคตตาล็อกเอเจนต์: แสดงรายการเอเจนต์ รับเวอร์ชันเอเจนต์หนึ่งแบบเต็ม แสดงรายการประวัติเวอร์ชัน และคะแนนรวมรายเวอร์ชันgrafana-agento11y-app.data:readN/A
agento11y_manage_evaluatorsAgent Observability*จัดการตัวประเมิน เทมเพลตตัวประเมิน และแคตตาล็อกผู้ตัดสิน (แสดงรายการ รับ upsert fork ทดสอบ ลบ)grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write สำหรับการแก้ไขและการทดสอบN/A
agento11y_manage_eval_rulesAgent Observability*จัดการกฎการประเมินและการป้องกัน (แสดงรายการ รับ สร้าง อัปเดต ดูตัวอย่าง ลบ)grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write สำหรับการแก้ไขและการดูตัวอย่างN/A
agento11y_manage_eval_collectionsAgent Observability*จัดการการสนทนาที่บันทึกไว้และคอลเลกชันที่จัดกลุ่ม (แสดงรายการ รับ บันทึก สร้าง อัปเดต ลบ เพิ่มและลบสมาชิก)grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write สำหรับการแก้ไขN/A
agento11y_manage_experimentsAgent Observability*อ่านการทดลองแบบออฟไลน์ การทดลองย่อย คะแนน ข้อมูลเมตาของอาร์ติแฟกต์ และตัวกรองแฟกต์; อัปเดตและยกเลิกการทดลองgrafana-agento11y-app.data:read + grafana-agento11y-app.eval:write สำหรับการแก้ไขN/A
agento11y_manage_test_suitesAgent Observability*จัดการชุดทดสอบที่การทดลองแบบออฟไลน์ใช้ทดสอบ เวอร์ชัน และกรณีทดสอบ (รายการ ดู สร้าง อัปเดต ร่าง เผยแพร่ อัปเซิร์ต ลบ)grafana-agento11y-app.data:read + grafana-agento11y-app.eval:write สำหรับการแก้ไขN/A
ask_assistantAssistant*ส่งพรอมต์ไปยัง Grafana Assistant และส่งคืนข้อความตอบกลับแบบเต็ม (หลายรอบผ่าน contextId)สิทธิ์เฉพาะปลั๊กอินขอบเขตเฉพาะปลั๊กอิน
generate_deeplinkการนำทางสร้าง URL ลิงก์ลึกที่แม่นยำสำหรับทรัพยากร Grafanaไม่มี (การสร้าง URL แบบอ่านอย่างเดียว)N/A
get_annotationsคำอธิบายประกอบดึงคำอธิบายประกอบพร้อมตัวกรองannotations:readannotations:* หรือ annotations:id:123
create_annotationคำอธิบายประกอบสร้างคำอธิบายประกอบใหม่ (รูปแบบมาตรฐานหรือ Graphite)annotations:writeannotations:*
update_annotationคำอธิบายประกอบอัปเดตฟิลด์เฉพาะของคำอธิบายประกอบ (การอัปเดตบางส่วน)annotations:writeannotations:*
delete_annotationคำอธิบายประกอบลบคำอธิบายประกอบตาม IDannotations:deleteannotations:*
get_annotation_tagsคำอธิบายประกอบรายการแท็กคำอธิบายประกอบพร้อมตัวกรองเสริมannotations:readannotations:*
list_snapshotsสแนปชอตรายการสแนปชอตแดชบอร์ดพร้อมตัวกรองคำค้นหาและขีดจำกัดเสริมdashboards:readdashboards:* หรือ dashboards:uid:abc123
get_snapshotสแนปชอตดูข้อมูลเมตาของสแนปชอตและเพย์โหลดแดชบอร์ดตามคีย์สแนปชอตdashboards:readdashboards:* หรือ dashboards:uid:abc123
create_snapshotสแนปชอตสร้างสแนปชอตแดชบอร์ดจากเพย์โหลดแดชบอร์ดแบบเต็มdashboards:writedashboards:* หรือ dashboards:uid:abc123
delete_snapshotสแนปชอตลบสแนปชอตแดชบอร์ดตามคีย์สแนปชอตdashboards:writedashboards:* หรือ dashboards:uid:abc123
get_panel_imageการเรนเดอร์เรนเดอร์แดชบอร์ดหรือแผงที่จัดเก็บไว้ — หรือตัวอย่างการเตรียมการจากสาขาที่เก็บ — เป็นภาพ PNGdashboards:readdashboards:uid:abc123
list_provisioning_repositoriesการเตรียมการรายการที่เก็บการเตรียมการ (เช่น แหล่งที่มา git-sync) พร้อม URL แหล่งที่มา สาขา สถานะการซิงค์ และความสมบูรณ์provisioning.repositories:readN/A
validate_provisioning_fileการเตรียมการทดลองใช้ไฟล์จากที่เก็บการเตรียมการและรายงานข้อผิดพลาดการตรวจสอบการยอมรับprovisioning.repositories:readN/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 และ OTel service.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 เท่านั้น โพรบ K8s httpGet และสแครป /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 - ค่าเริ่มต้น: off Loki ไม่บังคับใช้ 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 รองรับสตริงระยะเวลาแบบ Go 0 ปิดการตรวจสอบช่วงเวลา ตัวสำรองจาก 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_incident
  • add_activity_to_incident
  • update_incident

เครื่องมือ Alerting:

  • alerting_manage_rules (การดำเนินการสร้าง อัปเดต ลบ)
  • alerting_manage_silences (การดำเนินการสร้าง อัปเดต ลบ)

เครื่องมือ OnCall:

  • update_alert_group

เครื่องมือ Annotation:

  • create_annotation
  • update_annotation
  • delete_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_snapshot
  • delete_snapshot

เครื่องมือสอบถาม Raw-SQL:

เครื่องมือเหล่านี้รันการสอบถามใดๆ ที่คุณให้โดยไม่ตรวจสอบ ดังนั้นจึงสามารถเขียนได้เมื่อข้อมูลประจำตัวของ datasource อนุญาต — query_sql จะรัน DROP TABLE, query_influxdb จะรัน DELETE ดังนั้นโหมดอ่านอย่างเดียวจึงลบเครื่องมือเหล่านี้ ส่ง --enable-query เพื่อเก็บไว้เมื่อทราบว่าข้อมูลประจำตัวของ datasource เป็นแบบอ่านอย่างเดียว

  • query_sql
  • query_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_prometheus
  • query_prometheus_histogram

เครื่องมือ Loki:

  • query_loki_logs
  • query_loki_patterns

query_loki_stats และ analyze_loki_labels ยังคงลงทะเบียน: ทั้งคู่ส่ง selector ไปยัง datasource แต่จะอ่าน index และส่งคืนจำนวนสตรีม ชิ้นส่วน และไบต์ แทนที่จะเป็นเนื้อหาล็อก

เครื่องมือ Elasticsearch/OpenSearch และ Quickwit:

  • query_elasticsearch
  • query_quickwit

เครื่องมือ InfluxDB (ถูกลบโดย --disable-write เช่นกัน ดูด้านบน):

  • query_influxdb

เครื่องมือ SQL Datasource (ถูกลบโดย --disable-write เช่นกัน ดูด้านบน):

  • query_sql

เครื่องมือ Graphite:

  • query_graphite
  • query_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 ในตัวอย่างการกำหนดค่าด้านล่าง

  1. หากใช้การตรวจสอบสิทธิ์ด้วย 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

  1. คุณมีหลายตัวเลือกในการติดตั้ง mcp-grafana:

    • uvx (แนะนำ): หากคุณติดตั้ง uv ไว้แล้ว ไม่จำเป็นต้องตั้งค่าเพิ่มเติม — uvx จะดาวน์โหลดและรันเซิร์ฟเวอร์โดยอัตโนมัติ:

      uvx mcp-grafana
      
    • อิมเมจ Docker: ใช้อิมเมจ Docker ที่สร้างไว้ล่วงหน้าจาก Docker Hub

      สำคัญ: entrypoint ของอิมเมจ Docker ถูกกำหนดค่าให้รัน MCP server ในโหมด SSE ตามค่าเริ่มต้น แต่ผู้ใช้ส่วนใหญ่จะต้องการใช้โหมด STDIO สำหรับการผสานรวมโดยตรงกับผู้ช่วย AI เช่น Claude Desktop:

      1. โหมด 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 เซิร์ฟเวอร์จะเริ่มทำงานแต่บันทึกข้อผิดพลาดด้านความปลอดภัย (ที่ระดับ log error ดังนั้นจะไม่ถูกซ่อนโดย --log-level; และจะปฏิเสธการเริ่มทำงานในเวอร์ชันหลักถัดไป) ตั้งค่า MCP_GRAFANA_SERVER_TOKEN เพื่อกำหนดให้ต้องมี Authorization: Bearer <token> จากไคลเอ็นต์ (แนะนำ) โหมด STDIO ไม่ได้รับผลกระทบ ดู Caller Authentication

      1. โหมด 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
      
      1. โหมด 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
      
    • ดาวน์โหลดไบนารี: ดาวน์โหลดเวอร์ชันล่าสุดของ 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
      
  2. เพิ่มการกำหนดค่าเซิร์ฟเวอร์ลงในไฟล์การกำหนดค่าไคลเอ็นต์ของคุณ ตัวอย่างเช่น สำหรับ 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

การทดสอบ

มีการทดสอบสามประเภท:

  1. การทดสอบหน่วย (ไม่ต้องพึ่งพาภายนอก):
make test-unit

คุณยังสามารถรันการทดสอบหน่วยด้วย:

make test
  1. การทดสอบการรวมระบบ (ต้องมีคอนเทนเนอร์ Docker ที่ทำงานอยู่):
make test-integration
  1. การทดสอบคลาวด์ (ต้องมีอินสแตนซ์ 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