オブザーバビリティの玄関口!DataDog Agentを使ったGoアプリのメトリクス送信サンプルコード


オブザーバビリティの玄関口!DataDog Agentを使ったGoアプリのメトリクス送信サンプルコード

DataDog/datadog-agent

2025-10-17

[go, monitoring, metrics]というヒントがありますが、DataDog Agentの主な役割はズバリ何でしょう?

選択肢答え
Aソースコードの自動生成
Bアプリケーションやインフラの監視とメトリクスの収集
Cビルドパイプラインの高速化

正解は… B!

DataDog Agentは、サーバー、コンテナ、アプリケーションの環境にインストールされ、そこからメトリクス(性能指標)、トレース(リクエストの流れ)、ログといったあらゆるデータを収集し、DataDogプラットフォームに送信する監視の「玄関口」となるソフトウェアです。ソフトウェアエンジニアにとっては、「自分のコードが本番環境でどう動いているか」を知るための目であり耳となります。

DataDog Agentが収集するデータは、エンジニアの皆さんが抱えるさまざまな課題を解決してくれます。

アプリケーションのレイテンシ(遅延)やCPU使用率などのメトリクスを収集することで、「なぜこのAPIは遅いのか?」「どこでリソースを食っているのか?」を具体的に特定できます。

エラーログや異常なメトリクス(例
エラーレートの急上昇)を即座にDataDogに送信。アラートを設定することで、ユーザーが気付く前に問題を検知し、トレース機能でコードレベルの原因特定がグッと容易になります。

サーバーのメモリやディスク使用率を監視し、過剰にリソースを割り当てている部分を見つけられます。結果として、インフラのコスト削減にも貢献します。

アプリケーション(Goで書かれたAPIなど)のメトリクスだけでなく、その下のOS、Kubernetes、データベースといったインフラ全体のデータを一つのダッシュボードで統合的に見ることができます。

DataDog Agentの導入は非常に簡単で、環境に合わせて様々な方法があります。

DataDogの公式サイトでアカウントを作成し、提供されるAPIキーを用意します。

インストールスクリプトの実行
LinuxやmacOSの場合、通常は提供されるワンライナーのシェルスクリプトを実行するだけです。 (セキュリティ上の理由から、具体的なスクリプトはここでは割愛しますが、公式サイトで最新のものが提供されます)

設定ファイルの確認
インストール後、設定ファイル datadog.yaml が作成されます。ここで、APIキーなどを設定します。

# /etc/datadog-agent/datadog.yaml の一部
api_key: <あなたのDataDog APIキー>
# ... その他の設定(ホスト名など)

Agentの起動
sudo systemctl start datadog-agent (Linuxの場合) などでサービスを起動します。

現在では、コンテナ環境での利用が主流です。

環境導入方法ポイント
Docker公式Dockerイメージをdocker runで実行ホストのネットワークやプロセスにアクセスするための権限設定が必要
Kubernetes公式のHelm ChartやDaemonSetを使用各ノードにAgentをデプロイし、クラスタ全体を監視

DataDog Agentが「インフラ」のメトリクス(CPU使用率など)を自動で収集してくれる一方で、「アプリケーション固有」のメトリクス(例ログイン成功回数、処理キューの長さ)は、エンジニアがコード内に記述して送信する必要があります。

DataDog Agentは、様々なライブラリを通じてメトリクスを受け取れますが、ここではDataDogが推奨するメトリクス送信ライブラリの一つである go-datadog-metrics (goconsensus/go-datadog-metrics) を使ったGo言語の例を見てみましょう。(DataDog AgentはGo言語で開発されていますが、アプリケーションはどの言語でも大丈夫です!)

このサンプルでは、アプリ内の「特定のエンドポイントが呼ばれた回数」を計測し、DataDog Agentに送信します。

コードの準備 (Go)

package main

import (
    "log"
    "net/http"
    "time"

    "github.com/DataDog/datadog-go/statsd" // DataDog Agentへの送信ライブラリ
)

var statsdClient *statsd.Client

func init() {
    // DataDog AgentはデフォルトでUDPポート8125でStatsDプロトコルをリッスンしています
    // 実際にはエラーハンドリングが必要です
    client, err := statsd.New("127.0.0.1:8125")
    if err != nil {
        log.Fatal(err)
    }
    statsdClient = client
}

func myHandler(w http.ResponseWriter, r *http.Request) {
    // 1. メトリクスの送信
    // "api.homepage.hits" という名前のカウンターを1増やす
    statsdClient.Incr("api.homepage.hits", nil, 1)

    // 2. タグを付けて送信(重要!)
    // どの環境(env)のどのバージョン(version)から来たリクエストかタグ付け
    tags := []string{"env:production", "version:1.2.0"}
    statsdClient.Gauge("api.response_time_ms", float64(time.Since(time.Now())), tags, 1)

    w.WriteHeader(http.StatusOK)
    w.Write([]byte("Hello, DataDog!"))
}

func main() {
    http.HandleFunc("/", myHandler)
    log.Fatal(http.ListenAndServe(":8080", nil))
}

動作の解説

statsd.New("127.0.0.1:8125") で、ローカルで動いているDataDog Agent(デフォルトでStatsDプロトコルを受け付けている)に接続します。

statsdClient.Incr(...) は、カウンターメトリクスをインクリメントします。

statsdClient.Gauge(...) は、現在の値(この例ではレスポンスタイム)を送信します。

タグ (tags) を付けることで、「どの環境」「どのバージョン」のデータか分類でき、DataDogのダッシュボードで絞り込みやグループ化が可能になり、デバッグ効率が劇的に向上します。

この仕組みにより、エンジニアは自分のアプリケーションの心臓部で何が起こっているかをリアルタイムで確認し、常に改善していくことができるのです!


DataDog/datadog-agent




Nightingale と Prometheus で実現するモダンな監視システム入門

ccfos/nightingaleは、モニタリング、時系列データの収集、メトリクスの管理に特化したツールです。Grafanaがデータの可視化に優れているのと同様に、Nightingaleはデータそのものを収集・管理することに焦点を当てています。つまり、Grafanaが「絵を描く画家」だとすれば、Nightingaleは「絵の具を集めて整理する人」のような役割を担います。


ソフトウェアエンジニア必見:OpenTelemetry Collectorでシステムの情報を完全掌握

FPSゲームで、敵の位置を正確に把握し、弾薬やヘルスパックの残量をリアルタイムで確認できるレーダーやHUDがあったら心強いですよね?「OpenTelemetry Collector」は、まさにそんな存在です。一言でいうと、あなたのアプリケーションやシステムから発せられる様々な「情報」を収集し、加工し、指定の場所に送り届けてくれる、頼もしい「情報収集・転送マシン」です。


シンプル、軽量、多機能なサーバー監視ツール「beszel」入門

henrygd/beszelは、サーバー監視を手軽に行うための軽量なツールです。牛丼の「うまい、はやい、やすい」のように、「シンプル、軽量、多機能」の三拍子が揃った監視ツールと言えます。特に、個人のラボ環境や小規模なプロジェクトで、手軽にサーバーの状態を把握したい場合に役立ちます。


Go言語で構築されたTraefikの威力:Docker/Kubernetes環境におけるサービスディスカバリとTLS自動化

Traefikは、まさに「クラウドネイティブアプリケーションプロキシ」というキャッチフレーズの通り、設定が容易、自動化、動的という三拍子揃った、現代のマイクロサービスやコンテナ環境に最適なリバースプロキシ兼ロードバランサーです。吉野家さんの牛丼に例えるなら、Traefikは


妹が教える!エンジニアのためのOllama活用術

ねえねえ、最近流行りの「Ollama」って知ってる?お兄ちゃんの好きそうな、めちゃくちゃ便利なツールなんだよ!Ollamaはね、お兄ちゃんのパソコンで、いろんなAIモデルを簡単に動かせるようにしてくれるすごーいツールなんだ!今までだと、AIモデルを使おうと思ったら、いろいろ難しそうな設定をしなきゃいけなかったり、パソコンの性能が足りなかったりしたんだけど、Ollamaを使えば、そんな心配はほとんどいらなくなるんだって!


プロンプト管理から性能監視まで! Langfuseで実現する健全なLLM開発

ソフトウェアエンジニアの皆さん、こんにちは! 最近、LLM(大規模言語モデル)を使った開発が本当に盛んですよね。チャットボットからコンテンツ生成、コードアシストまで、LLMは私たちの仕事を大きく変えつつあります。しかし、一方で「なんか動いているけど、なんでこうなるの?」「本番で急に性能が落ちたけど原因がわからない…」「プロンプトをちょっと変えただけで挙動がおかしくなった!」なんて経験、ありませんか? まさに、手探りでLLMと格闘しているような感覚に陥りがちですよね。


【エンジニア向け】監視ラーメン dgtlmoon/changedetection.ioでウェブ変更を自動検知する「黄金スープ」の作り方

このツールは一言でいうと、ウェブサイトの変更を監視し、何か変わったら教えてくれる「最強の監視システム」です。ソフトウェアエンジニアにとって、これは単なるウェブサイトの監視ツール以上の、非常に便利な「具材」になります。要するに、手作業でチェックしていた「面倒な監視」を全部自動化し、エンジニアの貴重な時間を節約してくれるんです!


ソフトウェアエンジニア必見!Cobraで実現するプロ級Go CLIツール

「コマンドの解析が面倒だ…」 「ヘルプメッセージをいちいち書くのが大変…」 「サブコマンドをうまく管理できない…」もう大丈夫です!そんな悩みとは今日でサヨナラ。 今回は、あなたの開発を劇的にラクにする、魔法のツール「Cobra」をご紹介します!


Go言語でCLIを楽しく!Bubble Tea入門

やぁ、ソフトウェアエンジニアの皆さん!今日は、Go言語を使ったCLI開発を劇的に楽しくしてくれるフレームワーク「Bubble Tea」について、飲み比べコント風にご紹介しますね。このお酒、見た目は素朴な「ターミナル画面」なんだけど、一口飲むと「わ、これすごい!」ってなるんですよ。


メディアサーバーの決定版!bluenviron/mediamtxで君のプロジェクトにモジョを注入!

オースティン・パワーズだぜ!今回は君たちソフトウェアエンジニアの悩みを解決する、とびっきりクールなツールを紹介するぜ!その名も「bluenviron/mediamtx」!君たちのプロジェクトに、こう、なんていうか…「映像と音声のセクシーな魔法」をかけることができるんだ!この「mediamtx」は、まるで僕のモジョみたいに、あらゆる種類のメディアストリームを自由自在に操れる、まさに究極のメディアサーバー&プロキシなんだ!