目次

    GoとPrometheus、Grafanaによるモニタリングシステム構築ガイド
    GoPrometheusGrafanaモニタリング可視化運用

    2025-06-13

    technology

    GoとPrometheus、Grafanaによるモニタリングシステム構築ガイド

    はじめに:あなたのGoアプリケーションは、本当に「健康」ですか?

    アプリケーションをデプロイして終わり、ではプロフェッショナルとは言えません。「正常に動いているか」「パフォーマンスは落ちていないか」を客観的なデータで把握することが、現代のエンジニアには不可欠です。

    本記事では、GoPrometheusGrafanaという強力なトリオを使い、実践的なモニタリングシステムを構築する第一歩をガイドします。読み終える頃には、基本的なモニタリングの概念を理解し、自分のGoアプリケーションを計測・可視化する具体的な手法が身についていることでしょう。


    なぜモニタリングが重要なのか?Goエンジニアが知るべき価値

    障害の予兆検知と迅速な対応

    ユーザーからの問い合わせで問題に気づく「受動的な対応」から、メトリクスの異常を基に問題発生前に手を打つ「能動的な対応」へ。これがプロフェッショナルなシステム運用の基本です。

    パフォーマンスのボトルネック特定

    レスポンスタイムの悪化、メモリ使用量の増大などをデータで特定し、的確な改善に繋げることができます。勘に頼らない、データドリブンな改善が可能になります。

    ビジネス判断の材料

    機能追加後のリクエスト数やエラー率の変化を把握し、ビジネス的なインパクトを測定できます。技術的な変更がビジネスにどう影響するかを定量的に示せるエンジニアは重宝されます。

    フリーランスとしての信頼性向上

    自身のコードが本番環境でどう振る舞うかに責任を持つ姿勢は、クライアントからの信頼を大きく向上させます。運用まで見据えた開発ができるエンジニアは、より高く評価され、高単価案件に繋がります。

    cycle

    モニタリングの三種の神器:各ツールの役割

    具体的な構築手順に入る前に、各ツールが何を担うのかを明確にしましょう。

    Goアプリケーション:計測対象(The Instrumented)

    自らの状態(例:HTTPリクエスト数、レスポンスタイム)をメトリクスとして外部に公開する役割を担います。アプリケーション自身が「自分の健康状態」を報告する仕組みです。

    Prometheus:収集・保存(The Collector & Database)

    Prometheusは、Goアプリケーションが公開するメトリクスを定期的に取得(プル)し、時系列データとして蓄積する役割を担います。データの収集と保存を一手に引き受ける中核システムです。

    Grafana:可視化(The Visualizer)

    Grafanaは、Prometheusに蓄積されたデータをクエリし、人間が理解しやすいグラフやダッシュボードとして表示する役割を担います。数値の羅列を直感的に理解できる形に変換します。


    実践!モニタリングシステム構築3ステップガイド

    シンプルなWebサーバーを例に、具体的なコードと設定を示しながら解説します。

    ステップ1:Goアプリケーションに計装(Instrumentation)を施す

    まず、GoアプリケーションからPrometheus形式のメトリクスを公開する方法を実装します。

    go
    1package main
    2
    3import (
    4    "log"
    5    "net/http"
    6    "github.com/prometheus/client_golang/prometheus"
    7    "github.com/prometheus/client_golang/prometheus/promhttp"
    8)
    9
    10var (
    11    httpRequestsTotal = prometheus.NewCounterVec(
    12        prometheus.CounterOpts{
    13            Name: "http_requests_total",
    14            Help: "Total number of HTTP requests",
    15        },
    16        []string{"method", "endpoint"},
    17    )
    18)
    19
    20func init() {
    21    prometheus.MustRegister(httpRequestsTotal)
    22}
    23
    24func handler(w http.ResponseWriter, r *http.Request) {
    25    httpRequestsTotal.WithLabelValues(r.Method, r.URL.Path).Inc()
    26    w.Write([]byte("Hello, World!"))
    27}
    28
    29func main() {
    30    http.HandleFunc("/", handler)
    31    http.Handle("/metrics", promhttp.Handler())
    32    log.Fatal(http.ListenAndServe(":8080", nil))
    33}

    prometheus/client_golangライブラリを使用し、promhttp.Handler()/metricsエンドポイントでメトリクスを公開します。このエンドポイントはContent-Type: text/plain; version=0.0.4; charset=utf-8でPrometheus形式のメトリクスを返します。HTTPリクエストの総数をカウントするカスタムメトリクス(カウンター)も作成しています。

    ステップ2:Prometheusでメトリクスを収集する

    Dockerを使ってPrometheusを起動し、作成したGoアプリケーションを監視対象として設定します。

    yaml
    1# prometheus.yml
    2global:
    3  scrape_interval: 15s
    4
    5scrape_configs:
    6  - job_name: "go-app"
    7    static_configs:
    8      - targets: ["host.docker.internal:8080"]
    bash
    1docker run -d -p 9090:9090 \
    2  -v $(pwd)/prometheus.yml:/etc/prometheus/prometheus.yml \
    3  prom/prometheus

    PrometheusのUIで、ターゲットが正常に認識され、メトリクスが収集できていることを確認できます。Status > Targetsページで監視対象の状態を確認しましょう。prom/prometheusの公式Dockerイメージを使用しています。

    ステップ3:Grafanaでデータを可視化する

    最後に、Grafanaを起動してPrometheusのデータを可視化します。

    bash
    1docker run -d -p 3000:3000 grafana/grafana

    Grafana、初期ログイン:admin/admin)にアクセスし、以下の手順でダッシュボードを作成します:

    1. Configuration > Data Sourcesで、Prometheusを追加
    2. 新しいダッシュボードを作成
    3. パネルを追加し、PromQLクエリを設定:rate(http_requests_total[1m])

    これで、HTTPリクエスト数の変化をリアルタイムでグラフ化できます。grafana/grafanaの公式Dockerイメージを使用しています。


    次のステップへ:モニタリングの奥深い世界

    ここまでが基本です。さらに探求すべき領域として、Alertmanagerによるアラート通知、HistogramやSummaryを使ったレイテンシの計測、Grafanaの高度な機能(テンプレート変数、アノテーションなど)があります。


    まとめ:モニタリングスキルで、ワンランク上のGoエンジニアへ

    モニタリングシステムを自ら構築できるスキルが、単なる「コーダー」から、システムの信頼性に責任を持つ「エンジニア」へとステップアップさせます。データに基づいた改善サイクルを回せるエンジニアの市場価値は非常に高く、特にフリーランス市場では重宝されます。

    システムの運用や信頼性向上まで見据えた開発スキルは、高単価なフリーランス案件や、やりがいのあるプロジェクトで特に求められます。自身のスキルを新しいステージで試したい方は、ぜひGoエンジニア専門の弊社GoForceにご相談ください。あなたの挑戦をサポートします。


    会員登録はこちら

    最適なGo案件を今すぐチェック!

    会員登録

    生年月日 *

    /

    /

    Go経験年数 *

    /

    利用規約プライバシーポリシーに同意してお申し込みください。