Ответ
Важно понимать, что Grafana — это инструмент для визуализации, а не для сбора или хранения метрик. Приложение отправляет метрики в систему хранения (например, Prometheus), а Grafana уже запрашивает данные оттуда для построения дашбордов.
Схема работы: Go-приложение
-> Prometheus
-> Grafana
.
Шаг 1: Инструментирование Go-приложения
В код приложения нужно добавить HTTP-эндпоинт (обычно /metrics
), который будет отдавать метрики в формате, понятном для Prometheus. Для этого используется официальная клиентская библиотека prometheus/client_golang
.
package main
import (
"net/http"
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promauto"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
// Создаем метрику (счетчик) для отслеживания HTTP-запросов.
var httpRequestsTotal = promauto.NewCounterVec(
prometheus.CounterOpts{
Name: "http_requests_total",
Help: "Total number of HTTP requests",
},
[]string{"path"}, // Метка для разделения запросов по разным путям
)
// Middleware для инкремента счетчика
func metricsMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
httpRequestsTotal.With(prometheus.Labels{"path": r.URL.Path}).Inc()
next.ServeHTTP(w, r)
})
}
func main() {
// Регистрируем эндпоинт /metrics
http.Handle("/metrics", promhttp.Handler())
// Оборачиваем наш основной обработчик в middleware
finalHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
})
http.Handle("/", metricsMiddleware(finalHandler))
// Запускаем сервер
http.ListenAndServe(":8080", nil)
}
Шаг 2: Настройка Prometheus
Prometheus должен знать, откуда забирать (scrape) метрики. В его конфигурационный файл prometheus.yml
нужно добавить job
для нашего приложения.
scrape_configs:
- job_name: 'my-go-app'
# Интервал сбора метрик
scrape_interval: 15s
static_configs:
# Указываем адрес, где приложение отдает метрики
- targets: ['localhost:8080']
Шаг 3: Настройка Grafana
- Добавить источник данных: В настройках Grafana (
Configuration -> Data Sources
) добавьте новый источник данных типаPrometheus
и укажите URL вашего сервера Prometheus. - Создать дашборд: Создайте новый дашборд и добавьте панель.
- Написать запрос: В редакторе панели выберите ваш источник данных Prometheus и напишите запрос на языке PromQL. Например, чтобы отобразить скорость роста HTTP-запросов, можно использовать запрос:
rate(http_requests_total[5m])
Таким образом, вы получите полный цикл сбора, хранения и визуализации метрик вашего Go-приложения.