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


「パスワードの付箋はもう卒業!」GoとVaultで作る、セキュリティ・クッキング

今回の主役は、Hashicorp Vault。 「パスワードを付箋に書いてモニターに貼っちゃう」なんていう、おっちょこちょいなエンジニアの皆さん、必見です!エンジニア界隈では、APIキーやデータベースのパスワードのことを「シークレット」と呼びます。これをコードの中に直接書く(ハードコードする)のは、まるでカレーの隠し味を街中の看板に掲示するようなもの!筒抜けです!


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

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


Dockerだけじゃない!Moby Projectで自作コンテナ環境を構築する

Moby Project ってのはな、一言で言うと「コンテナをベースにしたシステムを作るための、オープンソースのツールキット」だ。例えるなら、俺たちが事件現場で使う道具一式、例えば手錠とか懐中電灯とか、そういうのを全部まとめて提供してくれるようなもんだな。


コード量削減!オールインワン開発環境で実現する高効率AI開発

「おーい、兄ちゃん!アンタ、ソフトウェアエンジニアなんだろ?最近流行りのナウい開発ツールがあるんだ。名前は使わないが、この『開発スタジオ』ってやつ、これがまた、うちのラーメンの味見みたいに、手間なくササッとAIエージェントを作れちまうって話でな!」


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

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


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

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


ソフトウェアエンジニアが知るべきSyncthing:分散型ファイル同期の決定版

この度、エンジニアの皆さんにとって革命的なツール、Syncthingについてニュース速報でお伝えします。これは、従来のファイル同期サービスとは一線を画す、画期的なP2P(ピアツーピア)型のファイル同期ソフトウェアです。エンジニアの皆さんにとって、Syncthingは非常に心強い味方になります。


自動化の極み!Seanimeでアニメ管理をハックする:Goエンジニア視点の導入ガイド

簡単に言うと、「自分専用の最強アニメ・マンガ管理サーバー」 を作れるツールやね。エンジニア的な視点で「これ、役立つわ〜」ってポイントを3つに絞ってみたで。技術スタックが現代的で勉強になる バックエンドが Go、フロントエンドが React。この組み合わせはパフォーマンスもええし、コードの見通しもええから、ソースを追うだけでも勉強になるわ。