[これは何]
まだオブザーバビリティに触れた事の無い学生が、New Relic を使ってみるべき理由と、その簡単な実例を紹介します。
[注意]
この記事は、オブザーバビリティやモニタリングを初めて知る/あまり触れたことのない学生向けに書かれています。
[略語]
記事中では、New Relic
をNR
と略して表記します。
自己紹介
Yuma Satake
普段は フロントおじさん Webアプリケーション開発をしている車好きの学生。
9月に相方のむらさめと、NRUG Nagoya を立ち上げました。
- 名前:佐竹友真
- 所属:名古屋工学院専門学校(3 年)
- 領域:Web 開発
- 趣味:車・旅行
- Twitter:Yuma Satake | Matsuriba🏮
なんか一通り書いたら、めちゃくちゃAI生成みたいな文章になってしまった。
学生よ、New Relic を使え
New Relic
やData Dog
といったツールを使ったことはありますか?
これらのツールは、アプリケーションやインフラのログやパフォーマンスを監視する、オブザーバビリティツールです。
何が嬉しいか
-
エラー時のトレース
エラーが発生した際に、どの処理で、どんな内容でエラーが発生したかをトレースできる -
ユーザ体験を可視化
ページロードが遅い・APIエラーが多発してる などユーザーの体験を損ねてる問題を簡単に発見できる -
パフォチューのお供
スロークエリや、時間がかかってる処理が可視化できる
このようにオブザーバビリティツールを使うことで、より快適に開発ができるようになります!
しかし、周囲でこれらのツールを使っている学生を私はほぼ知りません😇
なぜ学生が触れる機会が少ないか(n=2)
- そもそも運用フェーズを踏まないので、ツールに触れる機会が少ない
- 利用料が高いイメージがある
- 導入が難しそうなので、手を出しにくい
ですが、実際に大きな企業の開発現場では、これらのツールが導入されていることが多いです。
インターン等でなら触れる機会があった...という学生も多いのではないでしょうか?
しかし、NRには、開発中も便利に使える機能や、学生向けの無料プランがあります!!
この記事では、そんなNRの登録方法や、Goにおける簡単な導入方法を紹介します。
New Relic とは?
[NR公式サイトより]
New Relic は、モバイルやブラウザのエンドユーザーモニタリングや、外形監視、バックエンドのアプリケーションとインフラモニタリングなど、オンプレやクラウド、コンテナからサーバレスまであらゆるシステム環境での性能管理を実現するプラットフォームです
NRとは何か、を一言で説明するのはとても難しいですが、フロント→バックエンド→インフラまで、サービスの全てを可視化する事ができるツール(プラットフォーム)です。
学生に優しい New Relic
NRは、学生向けの無料プランや、初めてオブザーバビリティを学ぶためのコンテンツを提供しています。
- 学生向け無料プラン:Github Education 経由で無料で利用できます
- 全ての機能が使える:無料プランでも、全ての機能+500GB/月のデータ書き込みが可能
- 学習コンテンツ:オブザーバビリティとは?から、実際のアプリケーションに導入する方法まで
New Relic の始め方
実際に、Github Student Developer Pack 経由で NR を始める手順を紹介していきます。
1. アカウントの作成
まず、正面からアカウントを作成します。
▼ サインアップ
一通り入力して、仮登録
仮登録のメールが届くので、リンクから本登録
今回は後で Github との連携を行うので、GithubのOAuthで登録します
Githubとの連携画面が出るので許可
ダッシュボードが表示されれば完了です!
2. GitHub Education との連携
次に、GitHub Education と NR を連携し、学生アカウントとして認証します。
① Github アカウントを GitHub Education で認証
まず、Github アカウントを Github Education で学生であることを証明し、GitHub Student Developer Pack の特典を利用できるようにします。
日本語の証明書を使った場合に必要な対応がコロコロ変わるため、完全に保証はできませんが、2024年8月に以下の記事の内容で認証が通りました。
▼ Github Education の申請方法
② New Relic アカウントへの特典追加
New Relic for Studentsもしくは
サイドバーのHelp > Resources > New Relic for Students
を開きます
GitHub Education
を選択
※ DarkThemeだとGithubが闇堕ちして見づらかったのでここだけ、LightTheme
Student
を選択し、Authorize with GitHub
をクリック
Githubとの連携画面が出るので許可
これで、学生アカウントとして認証が完了しました!
Go BE アプリへの New Relic の導入
一通り準備ができたので、以下の公式のDocsを参考に、Goのバックエンドアプリケーションに NR を導入してみます。
▼ [公式]Go アプリへの New Relic の導入
環境について
筆者の環境は以下の通りです。
使用しているOSや言語バージョンに沿った対応が必要です。
- OS:MacOS Sequoia 15.1.1
- Go:1.23.1
▼ 今回のデモプロジェクトのリポジトリ
1. ライセンスキーの発行
API KEYの管理画面でライセンスキーを発行します。
右上のCreate a Key
をクリック
それぞれ入力して Key を作成。
(今回はバックエンドアプリケーションのため、Key type
にIngest - License
を選択)
▼ KEY Typeについてはこちら
2. 簡単なGoのプロジェクトの作成
① プロジェクトの作成
※Go
についての記載は本筋ではないため、Cloud Run
のサンプルを利用します。
▼ クイックスタート: Cloud Run に Go サービスをデプロイする
テンプレート通りmain.go
を作成
package main
import (
"fmt"
"log"
"net/http"
"os"
)
func main() {
log.Print("starting server...")
http.HandleFunc("/", handler)
// Determine port for HTTP service.
port := os.Getenv("PORT")
if port == "" {
port = "8080"
log.Printf("defaulting to port %s", port)
}
// Start HTTP server.
log.Printf("listening on port %s", port)
if err := http.ListenAndServe(":"+port, nil); err != nil {
log.Fatal(err)
}
}
func handler(w http.ResponseWriter, r *http.Request) {
name := os.Getenv("NAME")
if name == "" {
name = "World"
}
fmt.Fprintf(w, "Hello %s!\n", name)
}
② NRの導入
パッケージをインストール
go get github.com/newrelic/go-agent/v3/newrelic
インストールしたパッケージを import するために、main.go
に以下を追記
import "github.com/newrelic/go-agent/v3/newrelic"
main関数
に以下を追記し、NRを初期化
app, err := newrelic.NewApplication(
newrelic.ConfigAppName("go-nr-test-app")
newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY"))
newrelic.ConfigDistributedTracerEnabled(true),
)
if err != nil {
log.Fatal(err)
}
NRでラップするため、handler関数
を以下のように変更
http.HandleFunc(newrelic.WrapHandleFunc(app, "/", handler))
最終的なmain.go
は以下のようになります
package main
import (
"fmt"
"log"
"net/http"
"os"
"github.com/newrelic/go-agent/v3/newrelic"
)
func main() {
log.Print("starting server...")
app, err := newrelic.NewApplication(
newrelic.ConfigAppName("go-nr-test-app"),
newrelic.ConfigLicense(os.Getenv("NEW_RELIC_LICENSE_KEY")),
newrelic.ConfigDistributedTracerEnabled(true),
)
if err != nil {
log.Fatal(err)
}
http.HandleFunc(newrelic.WrapHandleFunc(app, "/", handler))
// Determine port for HTTP service.
port := os.Getenv("PORT")
if port == "" {
port = "8080"
log.Printf("defaulting to port %s", port)
}
// Start HTTP server.
log.Printf("listening on port %s", port)
if err := http.ListenAndServe(":"+port, nil); err != nil {
log.Fatal(err)
}
}
func handler(w http.ResponseWriter, r *http.Request) {
name := os.Getenv("NAME")
if name == "" {
name = "World"
}
fmt.Fprintf(w, "Hello %s!\n", name)
}
cloud run
にライセンスキーを環境変数として設定してデプロイ
gcloud run deploy --set-env-vars NEW_RELIC_LICENSE_KEY=YOUR_LICENSE_KEY
エンドポイントにアクセスして、Hello World
が表示される事を確認
しばらくしてからNRにアクセスし、All Entities
にアプリケーションが表示されていれば成功です!
APM & Services
から、詳細を確認できます
3. ダッシュボードの確認
せっかく表示できたので、初期設定のSummaryに何が表示されているのかについてざっくり見ていきます
[レイテシー]:レスポンスに掛かっているレイテシーが確認できます。
[スループット]:リクエストの数が確認できます。
[エラー]:発生しているエラーの数が確認できます。
[トランザクション]:どのエンドポイントがどれだけ呼ばれているかが確認できます。
[Apdex Score]:ユーザーの満足度を示す指標です。(1に近いほど満足度が高い)
New Relic の学習コンテンツ
NR には、オブザーバビリティについて学ぶためのコンテンツや、実際のアプリケーションに導入する方法が多く用意されてます!
▼ 学生向けコンテンツ
基本
[オブザーバビリティとは?]
オブザーバビリティってなーに?
とっつきやすいもの
以下のコンテンツは私達が実際に使う際のユースケースに沿っていて、とっつきやすいです。
[Webサイトのパフォーマンスを向上する]
NRを使って、Webサイトのパフォーマンスを向上させる方法について、
導入→観測→改善の一連が載ってます
[Next.jsアプリケーションの監視]
Next.jsアプリケーションに NR を導入する方法についての記事です
番外編
NR の清水さんが過去に発表して下さった資料が、オブザーバビリティや、NRのコンセプトについて分かりやすかったので掲載。
New Relic User Group Nagoya について
私が NR に触れ始めたきっかけは、相方のむらさめと一緒に名古屋で New Relic User Group Nagoya
(通称ヌルグ
)を立ち上げたことです!!
それまでは、オブザーバビリティについて全く触れる機会がなかったのですが、たまたま相方に誘われて立ち上げに関わり、NRを触り始めました。
そんなNRUG Nagoya
ですが、初回イベントを2024年10月に開催しました。
引き続き、イベントを開催していく予定ですので、興味がある方はぜひご参加ください!
(ぜひ社会人のユーザの方もご参加下さい)
▼ NRUG Connpass
最後に
私自身もまだ NR を使い始めたばかりで、巨大なプラットフォームである NR を使いきれている自信は全くありませんが、多くのエンジニアの方が NR を使って、オブザーバビリティやモニタリングを学んで下さればと思っております!
資料