マグル(非エンジニア)の私がOpenTelemetry とバトルした話

 

 

この記事は Mackerel Advent Calendar 2025  23日目の記事です。

 

はじめに

みなさんこんにちは。

株式会社はてなでMackerelのセールスを担当している栗原です。

 

MackerelのAPMはOpenTelemetryを採用していますが、マグル(非エンジニア)の私はOpenTelemetryというものを触ったことがありませんでした。

 

普段はセールスとしてMackerelやオブザーバビリティの価値をお伝えしていますが、そもそも自分でやってみないと「簡単に始められます」って言えなくないか?

と思いたち、OptenTelemetryの計装やCollectorの設定を自分でやってみることにしました。

 

今回はその「やってみた」中身をご紹介します。

 

とはいえ、これまで営業一筋でやってきたものですから、お見苦しい失敗がたくさんあります。どうか温かい目で読んであげてください。

 

準備したもの

Mackerel

わかった気になる分散トレーシング - OpenTelemetryでトレーシングに入門するハンズオン

Mackerel OpenTelemetry Collector

・Docker

Visual Studio Code

python

・Gemini

・Gemini CLI

 


1. 歓喜の第一歩:デモアプリが動いた!

まずは、GitHubmackerel-handson リポジトリを使い、環境構築からスタート。 Dockerのエラーで出鼻をくじかれましたが、AIの助けを借りてなんとか突破。

さすが弊社のCREが用意しているハンズオン。マグルの私でもわりと簡単にできました。

 

ハンズオンのサービス

 

2. 「Mackerel仕様」への改造と、属性の付与

次に、既存のCollectorから Mackerel OpenTelemetry Collectorへと差し替えました。

さらに、データに「属性(Attributes)」を付与する設定を追加。 「このデータは栗原のテスト環境から送られたものですよ」という印を付ける作業です。設定ファイル(YAML)のインデント一つでエラーが出るシビアな世界に、少しずつ足を踏み入れていきました(YAMLってヤムルって読むのか???という疑問を抱きつつ)。

 

↓User にkuriharaと入るように設定できました

 

3. 高度な設定「サンプリング」への挑戦

ここで、Phase 2の仕上げとして 「Tail Sampling」 を設定しました。 これは、「全てのデータを送るのではなく、条件に合うものだけを送る」という高度な設定です。

 

今回は「処理に 700ms(0.7秒)以上 かかった、遅いリクエストのトレースだけをMackerelに送る」というルールにしました。デモ環境でわざと処理に時間がかかるようにして、700ms以上のトレースを生成して無事に対象のトレースのみをMackerel上に送ることができました。

 

「思ったより簡単!」と思っていましたが、この時の私は、この設定が後に自分を苦しめる「罠」になるとは知る由もありませんでした。

 

↓一番右のトレースは700ms以上のトレースのみとなっていることが確認できました。

 

4. 独自プロジェクト:AIと作った simple_tracer.py

次に「既存のハンズオン環境ではなく、自ら計装してこそ本当の理解だ」 そう思い、AIにPythonスクリプトを書いてもらいました。

その名も simple_tracer.py。 ただ一行、"Hello OpenTelemetry!"  というトレースをCollector経由でMackerelに送るだけの、純粋でシンプルなプログラムです。

pip install でSDKを揃え、いざ、実行!……しかし、Mackerelの画面は沈黙したままでした。

 

5. 襲いかかるデバッグの三重苦

ここから泥沼のデバッグが始まりました。

とても初歩的なミスでしたが、マグルの私にとっては泥沼だったのです。

① 接続拒否(Connection Refused)

スクリプトを叩いてもエラー。

原因:受信側であるCollectorのコンテナを立ち上げ忘れていました。「郵便局が閉まっていれば、手紙は届かない」とAIに諭されました。お恥ずかしい。

APIキーの迷宮

Collectorを動かしても届かない。

原因:設定ファイルの変数名が APIKEYAPI_KEY で食い違っていました。タイポ一つでシステムは沈黙します。デリケートですね。

 

6. 最後の壁:自分自身が仕掛けた「700msの罠」

APIキーも直し、エラーも消えた。しかし、なぜかMackerelにデータが届きません。トレースは送れているはずなのに何故???

AIとログを血眼になって確認した結果、衝撃の事実が判明しました。

 

原因は、Phase 3で設定した「700ms以上のトレースのみ送信する」というサンプリング設定でした。

私の作った simple_tracer.py は、あまりに単純すぎて 700ms以下 で処理が終わってしまいます。そのため、Collector側で「これは速すぎるから不要なデータだ」と判断され、Mackerelに届く前に捨てられていたのです。

過去の自分が「完璧だ」と自慢げに書いた設定が、現在の自分の首を絞めていたのです……。 

 

 

7. そして成功へ:可視化された「my-first-span」

サンプリング設定を修正し、震える指でスクリプトを実行。 ついに、Mackerelの画面に「my-first-span」の文字が踊りました。

エンジニアの皆様からすれば、ほんの一歩かもしれません。 しかし、自ら設定を書き、エラーを吐かれ、自らの罠に嵌り、それを乗り越えて届いたこの一筋のトレースは、私にとってはとても価値のあるトレースとなりました。

 

 

 


おわりに

今回の検証を通して、OpenTelemetryとはどれくらい簡単なのか、どれくらいの時間でできるのかを学ぶことができました。

マグルの私でもある程度はできたので、きっとエンジニアの方ならチョチョイのチョイだと思います。

 

これからも自信を持って「Otelってそんなに難しくないですよ!」とカッコつけながらMackerelの魅力を伝えていきたいと思います。