自分は Mackerel アンバサダーなのですが、ここn年、それに見合う活動ができていませんでした。......本当にすみません🙏🙏
ということで(?)、今回、Mackerel の APM 機能を「何も知らない」ところから「使い始める」ところまでやってみたので、ブログとして記録に残します。「従来までのホスト監視などと勝手が違いそう......」ということで腰が重い人も多いんじゃないかと思うですが(僕も含む)、実際にやってみたら比較的簡単にできたのと、なにより "ワクワク" できたので、同じような方にはぜひこの記事を見ながらやってみることをオススメします!
まずは Mackerel の画面を見てみる

ふむふむ

なるほどなるほど。トレースとやらを送信しさえすればこの画面で見れちゃいそう。
ドキュメントを読む
複数のページが用意されてるのですが、どれも丁寧なもので感動しました。
- APM(Application Performance Monitoring)の基本とMackerel APMで得られる価値 - Mackerel ヘルプ
- ふむふむ
- Mackerel APMの基本概念 ― トレース、スパン、データフロー - Mackerel ヘルプ
- うおーわかりやすい...!!
分散トレーシングとは、複数のサービスやコンポーネントにまたがるリクエストの処理の流れを「トレース」と「スパン」という単位で追跡する手法ですアプリケーションで計装されたトレースデータをMackerelに送信する方法は2つあります。OpenTelemetry Collectorを経由する方法と、アプリケーションから直接送信する方法です。- 今回自分は Google App Engine (Standard Environment) で運用しているアプリケーション(後述)を題材に Mackerel APM を試してみたいと思っているんだけど、Gemini にも聞いてみたけど、GAE SE 内部で直接動作させられる OpenTelemetry Collector はなさそう。
- なので今回は直接送信を試すことになりそう。
- トレース - Mackerel トレーシング機能ガイド - Mackerel ヘルプ
- インデックスページ的な。
- トレース - はじめに - Mackerel ヘルプ
- トレーシング機能の概要。
- トレース - Mackerelトレーシング機能概要 - Mackerel ヘルプ
- トレーシング機能の利用を開始するための手順。
- トレース - インストール・実装 - Mackerel ヘルプ
- 直接送信したい場合の、言語別の計装方法ページへのインデックスページ的な。
直接送信のための計装をやってみる
今回のチャレンジの題材となるアプリケーションは Pixela で、こいつは Go 製のWebアプリケーションなので、トレース - GoにOpenTelemetryを導入する - Mackerel ヘルプ をみながらやっていく。
やったこと
- go get
- initTracerProvider 関数を実装(とりま main 関数の実装があるファイル内に)
- 必要に応じて service_name に任意の値を設定しておくとよさそう(今回は
pixelaにした)
- 必要に応じて service_name に任意の値を設定しておくとよさそう(今回は
- ミドルウェアの挿入
- もともと
heartbeatエンドポイント(ただOK文字列を返すだけのエンドポイント)を持っていたので、手始めにそいつに。(FWとしては chi を使用していた)
- もともと
... ctx := context.Background() shutdown, err := initTracerProvider(ctx) if err != nil { panic(err) } defer shutdown(ctx) otelHeartbeatHandler := otelhttp.NewHandler(http.HandlerFunc(handlers.HeartbeatHandler), "heartbeat") r.Method("GET", "/heartbeat", otelHeartbeatHandler) ...
4.デプロイして /heartbeat を叩く
5.オッ!!


6.というか、chi を使ってるから、個別でやらずとも↓のようなかんじでいいのか?
r.Use(otelhttp.NewMiddleware("pixela"))
7.オオオッ!!




Mackerel で APM、できちゃいました!
できました!
計装のためのコードはいくらかは必要だったとはいえ、ドキュメントの通りにやったらできたので簡単!グラフが描画されるときのワクワク感を再びこうやって味わうことができるとは...!やっぱり「かんたん」「ワクワク」は Mackerel のコアバリューだよなー、ということを改めて実感できました!
あまりにも簡単にできたので、次は独自のスパンの追加とかにも挑戦してみたいと思います!(つづく?)
