Gemini CLI × Grafana MCP

Gemini CLIでGrafana MCPを使ってみる

Gemini CLI × Grafana MCP
Generated by Gemini

概要

Gemini CLIからGrafana MCPを使ってメトリクス分析をさせたい

GitHub - grafana/mcp-grafana: MCP server for Grafana
MCP server for Grafana. Contribute to grafana/mcp-grafana development by creating an account on GitHub.

結論

Gemini CLI × Grafana MCPで,とりあえずそれっぽいことをさせられそう

事前準備 (4step)

Gemini CLIのインストール

❯ brew install gemini-cli

Grafana MCP導入

バイナリなりnpxなりdockerなり,任意の方法で.

今回はGemini CLI Extensionsを使ってみる

❯ gemini extensions install https://github.com/grafana/mcp-grafana
Browse Extensions

GrafanaでのService Account発行

お好きなGrafanaでWebUIから以下のパスをたどり,サービスアカウントを発行する.今回は自宅にホストしているGrafanaを使用

Home > Administration > Users and access > Service accounts

Admin権限のサービスアカウントを作ってTokenを発行

Grafana MCPの環境変数設定

❯ cat ~/.gemini/extensions/grafana/gemini-extension.json
{
  "name": "grafana",
  "version": "0.7.0",
  "mcpServers": {
    "grafana": {
      "command": "${extensionPath}${/}mcp-grafana", ## add comma
      ## add start
      "env": {
        "GRAFANA_URL": "https://grafana.hoge.fuga.com",
        "GRAFANA_SERVICE_ACCOUNT_TOKEN": "glsa_Q689.........."
      }
      ## add end
    }
  }
}

(どこで環境変数を設定すべきかわからんが,とりあえずこれで効く)

起動

❯ gemini

/mcp list で認識していればOK

あとはGrafanaから適当な情報を取得させるプロンプトを唱える

sample 1

> Grafana のダッシュボード一覧を取得して
...
...
...
✦ Here's a list of the Grafana dashboards and folders:

  Folders:
   * Application (UID: c6e36a3f-62ad-41b2-99cc-3b2b1840bbcb)
   * Infrastructure (UID: fe0de2ad-4a48-494b-bad2-bcc49784f6dd)
   * tmp (UID: pNss3qO4z)

  Dashboards:
   * ARP (UID: ddmh8yf4ixfr4b)
   * Blackbox Exporter Quick Overview (UID: xtkCtBkiza, Folder: tmp)
   * Blackbox HTTP (UID: xtkCtBkiz)
   * Blackbox ICMP (UID: oe-msimGz)
   * Blackbox SSH (UID: J0QFZXomk)
   * cAdvisor Docker Insights (UID: ae3c41d7-cea5-4cca-a918-5708706b4d1a)
   * Cadvisor exporter (UID: pMEd7m0Mz)
   * CoreDNS Analyze (UID: NsZoCbc4k)
   * CoreDNS Metrics (UID: wY4blRMGz)
   * Docker and System Monitoring (UID: bdgcmfycz1dz4f)
   * Docker Container & Host Metrics (UID: 4dMaCsRZz)
   * Docker Engine Metrics (UID: adgcpwlzbozcwe, Folder: tmp)
   * Electric Power Overview (UID: 2DKmGYzVk)
   * Go Processes (UID: ypFZFgvmz, Folder: tmp)
   * Grafana Internals (UID: ce53118f-c342-4e5d-b87d-0260bc8a1693)
   * Grafana metrics (UID: isFoa0z7k)
   * HAProxy (UID: PEqr_i2Gz, Folder: tmp)
   * Home (UID: 0gSs_RU4z)
   * Home Server Overview (UID: F_gWbiNnk)
   * MinIO Dashboard (UID: TgmJnqnnk)
   * MQTT (UID: j4EEjtpVz)
   * Nginx (UID: MsjffzSZz)
   * Node Exporter Full (UID: rYdddlPWk)
   * Prometheus 2.0 Overview (UID: X7-TfgGMz)
   * Prometheus 2.0 Stats (UID: SHAoPSHGz)
   * Prometheus Stats (UID: rpfmFFz7z)
   ...
   ...

sample 2

> アラート一覧を取得して
...
...
...
✦ Here's a list of the Grafana alert rules:

   * SSLCertExpiringSoon (UID: ba77442d-243c-4bcd-a007-51f97a68e1fc, State: inactive, Folder: Application)
   * Electric Power Exporter Health (UID: ea370b79-2ca4-4558-96c1-fc591a9c7c74, State: inactive, Folder: Application)
   * Worsening HTTP Latency (UID: f8b8fcff-20e7-46c6-8d5f-8a289d3c4dfd, State: inactive, Folder: Application)
   * CoreDNS Health Check (UID: yhZ5Za5Vk, State: inactive, Folder: Application)
   * SSH Server Down (UID: da795f03-50d4-490e-9223-80c42f335992, State: inactive, Folder: Application)
   * HTTP Status Check (UID: eetlq7nsr45j4b, State: inactive, Folder: Application)
   * ICMP Packet Loss (UID: c1ea57c2-541d-4de0-a65d-09a30f196b41, State: inactive, Folder: Infrastructure)
   * Server Status (UID: TwIXJt-4z, State: inactive, Folder: Infrastructure)
   * Temperature Monitor for RaspberryPi (UID: AEoL8jg4z, State: inactive, Folder: Infrastructure)
   * Temperature Monitor for Server (UID: ld8JkaR4k, State: inactive, Folder: Infrastructure)

sample 3

> CoreDNSについてメトリクス分析してください
...
...
...
✦ CoreDNSのメトリクス分析を開始します。まず、主要なメトリクスをいくつか紹介し、それぞれの現在の値を取得します。

  1. DNSリクエスト数 (5分間のレート)

  次のクエリで、CoreDNSが処理しているDNSリクエストの数を取得します。

  sum(rate(coredns_dns_requests_total[5m])) by (instance)

  2. DNSリクエストのレイテンシ (99パーセンタイル)

  次のクエリで、DNSリクエストの99パーセンタイルのレイテンシを取得します。

  histogram_quantile(0.99, sum(rate(coredns_dns_request_duration_seconds_bucket[5m])) by (le))

  3. DNSレスポンス (レスポンスコード別)

  次のクエリで、レスポンスコード別のDNSレスポンスの数を取得します。

  sum(rate(coredns_dns_responses_total[5m])) by (rcode)

  4. CPU使用率

  次のクエリで、CoreDNSのCPU使用率を取得します。

  sum(rate(process_cpu_seconds_total{job="coredns-exporter"}[5m]))

  これらのメトリクスをPrometheusでクエリして、現在の値を取得します。
  ...
  ...
  ...
  ✦ CoreDNSのメトリクス分析結果は以下の通りです。

  1. DNSリクエスト数 (5分間のレート)
   * pi4.home:9153: 1747.31 req/s

  2. DNSリクエストのレイテンシ (99パーセンタイル)
   * 0.068秒

  3. DNSレスポンス (レスポンスコード別、5分間のレート)
   * NOERROR: 1714.57 req/s
   * NXDOMAIN: 8.09 req/s
   * SERVFAIL: 23.54 req/s

  4. CPU使用率
   * 13.72

  これらの結果から、CoreDNSは安定して動作しており、リクエストの大部分は正常に処理されています。SERVFAILが比較的多いですが、これは上流のDNSサーバーの問題か、設定の問題である可能性があります。

できそうなこと

  • メトリクス分析 と ログ分析
    • Lokiでログ収集もしているので組み合わせ可
  • アラートの設定や修正
  • ダッシュボード自動生成