Как из Go-приложения взаимодействовать с Grafana API?

Ответ

Для программного взаимодействия с Grafana из Go-приложения используется официальный клиент grafana-api-golang-client. Это позволяет автоматизировать управление дашбордами, источниками данных, пользователями и другими сущностями Grafana.

Пример подключения и получения списка дашбордов:

package main

import (
    "fmt"
    "log"

    gapi "github.com/grafana/grafana-api-golang-client"
)

func main() {
    // Инициализируем клиент, указывая URL вашего инстанса Grafana и API-ключ
    client, err := gapi.New("http://localhost:3000", gapi.Config{
        APIKey: "your_api_key_here",
    })
    if err != nil {
        log.Fatalf("Ошибка создания клиента Grafana: %s", err)
    }

    // Пример использования: получение списка дашбордов
    dashboards, err := client.Dashboards()
    if err != nil {
        log.Fatalf("Ошибка получения дашбордов: %s", err)
    }

    fmt.Printf("Найдено %d дашбордовn", len(dashboards))
    for _, board := range dashboards {
        fmt.Printf("- %s (UID: %s)n", board.Title, board.UID)
    }
}

Основные шаги:

  1. Установите библиотеку: go get github.com/grafana/grafana-api-golang-client
  2. Создайте API-ключ в Grafana: Перейдите в Configuration -> API Keys в вашем Grafana и создайте новый ключ с необходимыми правами (например, Admin или Editor).
  3. Инициализируйте клиент: Используйте gapi.New(), передав URL и созданный ключ.

Важно: Это один из двух основных способов интеграции Go и Grafana. Описанный метод (через API) используется для управления Grafana. Другой популярный способ — это предоставление метрик из вашего Go-приложения (например, в формате Prometheus), которые Grafana будет собирать и визуализировать.

Ответ 18+ 🔞

Смотри, чтобы твоё Go-приложение могло командовать Grafana как своим личным холопом, есть официальная библиотека grafana-api-golang-client. Эта штука позволяет на автомате создавать дашборды, источники данных и прочую хуйню, не тыкая мышкой в интерфейс, как последний лох.

Вот, например, как подключиться и вытащить список всех дашбордов, которые у тебя там наворочены:

package main

import (
    "fmt"
    "log"

    gapi "github.com/grafana/grafana-api-golang-client"
)

func main() {
    // Подключаемся, как будто это наш личный сервер. Подсовываем URL и API-ключ.
    client, err := gapi.New("http://localhost:3000", gapi.Config{
        APIKey: "your_api_key_here",
    })
    if err != nil {
        log.Fatalf("Ошибка создания клиента Grafana: %s", err)
    }

    // А теперь просто командуем: "Давай сюда все дашборды, быстро!"
    dashboards, err := client.Dashboards()
    if err != nil {
        log.Fatalf("Ошибка получения дашбордов: %s", err)
    }

    fmt.Printf("Найдено %d дашбордовn", len(dashboards))
    for _, board := range dashboards {
        fmt.Printf("- %s (UID: %s)n", board.Title, board.UID)
    }
}

Что делать, чтобы это заработало, а не вылетело в пизду:

  1. Ставим библиотеку, ёпта: go get github.com/grafana/grafana-api-golang-client
  2. Добываем API-ключ в самой Grafana: Лезешь в Configuration -> API Keys, создаёшь новый ключ и даёшь ему права, например, Admin, чтобы он мог всё, как хозяин.
  3. Инициализируем клиента: Кидаешь в gapi.New() адрес своей Grafana и этот самый ключ — и вуаля, ты уже почти бог.

Важный момент, чтобы не облажаться: Этот способ — для управления Grafana, чтобы она плясала под твою дудку. Но есть и другой, не менее охуенный путь — когда твоё приложение отдаёт метрики (например, в формате Prometheus), а Grafana их уже красиво рисует. Так что выбирай, что тебе нужно: командовать или отчитываться.