オブザーバビリティの玄関口!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」は、まさにそんな存在です。一言でいうと、あなたのアプリケーションやシステムから発せられる様々な「情報」を収集し、加工し、指定の場所に送り届けてくれる、頼もしい「情報収集・転送マシン」です。


【爆速】autobrr/qui で実現する、qBittorrent 複数管理の極上体験

autobrr/qui を一言で表すなら、まさに「職人が注いだ、雑味のない生ビール」のようなツールです。余計なものを削ぎ落とし、必要な機能だけを最高速で提供してくれます。エンジニア的な視点で見ると、このツールがいかに洗練されているかが分かります。


Go言語エンジニアのためのWhatsApp連携術:whatsmeow徹底解説

whatsmeow は、Go言語(Golang)で書かれた、WhatsApp Web のマルチデバイス API を扱うためのライブラリです。「マルチデバイス API」というのがポイントで、スマートフォンがオフラインでも機能する、新しいWhatsAppの仕組みに対応しています。つまり、これを使えば、プログラムからWhatsAppのメッセージを送受信したり、アカウント情報を管理したりといった操作が可能になります。


脆弱性スキャンツールTrivy入門:開発者のためのセキュリティガイド

これから君たちに、素晴らしい才能を持つ役者を紹介する。その名はTrivyだ。 こいつは、映画のセットで言うところの、「セキュリティ監査の鬼」だ。 君たちが作った最高の作品(コードやコンテナ)に潜む、見えない危険を徹底的に見つけ出すんだ。 ただ見つけるだけじゃない。その危険がどこにあるのか、どうすれば直せるのか、的確に教えてくれる。 君たちの作品を、より安全に、より完璧なものにするために、こいつの演技指導は絶対に必要だ!


「memos」こそがアタシたちの安息の地。オープンソースでプライバシーを守り抜く、セルフホストの嗜み

最近のメモアプリって、サブスクだの広告だの、余計なお世話が多いじゃない? これはそんなのとは無縁。あんたのデータはあんただけのもの。まさに「鉄壁の純愛」みたいなメモツールなのよ。それじゃあ、ママがエンジニア視点でたっぷり可愛がってあげるから、じっくり聞いていってね!


【エンジニア向け】Infisicalで秘密情報も体重もスマートに管理!

ダイエット中のエンジニアさん、お疲れ様です!食事制限、運動、そしてコード. .. 毎日やることがいっぱいですよね。でも、ちょっと待ってください!あなたのコードの中にも、ひっそりと隠れている「秘密」はありませんか?そう、APIキーとかデータベースのパスワードとか


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

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


牛丼一筋の心意気で学ぶ、Go言語とgRPCによる高速RPC通信

一言でいうと、「Go言語でサクッとマイクロサービスを構築するための、うまい、早い、安いRPCフレームワーク」です。RPC(Remote Procedure Call)とは、ネットワーク越しに別々のプログラムの関数を呼び出す仕組みのこと。簡単に言えば、サーバーの機能(関数)を、クライアントからまるで自分のプログラム内の関数のように呼び出せるようにしてくれる技術です。


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

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