New RelicをCircleCIと連携してみた

本記事は [New Relic 使ってみた情報をシェアしよう！ by New Relic Advent Calendar 2023 シリーズ2](https://qiita.com/advent-calendar/2023/newrelic) および [CircleCI Advent Calendar 2023](https://qiita.com/advent-calendar/2023/circleci) 14日目の記事です。

# はじめに
開発プロセスを自動化していますか？ コードは(CoPilotのサポートで？)人間が書くとしても、ビルド、テスト、リリース、デプロイが人に依存しない(担当者が会社休んでいるとか、人間関係のあれこれで頼みづらいとか)と、開発のスピードは大幅にアップしますね。

ただ、CI/CDは手作業でやっていたことが自動化されてバンザイ！というところだけに価値があるのではなく、さまざまなデータ(一日に何回ビルドしたとか、失敗したとか、時間がどの程度かかったとか、問題からの復旧にどれだけ時間がかかったかとか)をストップウォッチを使って計測したり、アンケートをとって回ったり、スプレッドシートにデータをまとめなくても、「今」の開発／運用現場の状況をリアルタイムで捉えることができるという点は、もっともっと強調されていいかと思います。

ということで、「現場の今」を可視化すべく、CircleCIとNew Relic、連携してみましょう！
(Developer friendlyな両社のサービスということもあり、どちらもフリープランで始められますよ！)

# ゴール
こんなダッシュボードがNew Relic上で見られます👏
![スクリーンショット 2023-12-13 224504.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/bb7aaa94-c367-0c7a-e10b-741706f456f1.png)

# 連携手順
New Relicさんのサイトにドキュメントが用意されているので、そちらをご覧ください。
- [Forward CircleCI logs to New Relic](https://docs.newrelic.com/docs/logs/forward-logs/circleci-logs/)
- [CircleCIログをNewRelicに転送する](https://docs.newrelic.com/jp/docs/logs/forward-logs/circleci-logs/)
    - 機械翻訳なのでUS(米国)を「私たち」と訳出していたり、突っ込み所はありますが、一読すればわかるレベルかと。

本記事は公式ドキュメントと違って、
- 日本人(人間)が日本語で書いている
- スクショを多めに貼っておいた

といったところがプラスアルファになっていればと思います。

## [CircleCI] CircleCIにログイン
まずはお使いのCircleCIにログインしましょう。まだアカウントをお持ちでなければ、毎月6000分までは無料でご利用いただけるFreeプランにぜひご登録下さいませ。今年はCircleCIも(以前はGitHubやBitbucketのアカウントでログインしていたのを)独自のアカウントを持ち出したので、サインアップの方法も私のほうでQiitaに記事を書きました。

- [【2023年版】CircleCIにサインアップ(Sign up)](https://qiita.com/mfunaki/items/14080547b352be9d265c)
- [【2023年版】CircleCI で GitHub プロジェクトをビルド＆テストする](https://qiita.com/mfunaki/items/7a68fd137e936798b391)

CircleCIの[ログイン画面](https://circleci.com/vcs-authorize/)はこんな感じです。
![スクリーンショット 2023-12-13 214633.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/5764615b-c242-32d0-69dc-99aefe003895.png)

2023年9月以前にユーザ登録された方(つまり、GitHubやBitbucketのアカウントでCircleCIにログインする方)は青い枠で囲まれた Signed up with GitHub or Bitbucket before September 2023? というリンクを、それ以降にユーザ登録された方は赤い枠で囲まれた Log In with Email ボタンをクリックしてください。

## [CircleCI] ログ収集したいプロジェクトに移動する
次にCircleCIでCI/CDワークフローを実行しているプロジェクトを開きます。サンプルとしてご紹介しているのは、cci-test-yolov8-mask-model というマスクを着用している／していないを画像認識で検出し、テストするプロジェクトです。
![スクリーンショット 2023-12-13 215044.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/2fb3a39b-92c4-a25c-8a3d-6f55bac8f050.png)

このプロジェクトに関しては、公式ブログに私が説明した記事があるので、よろしければご覧ください。
- [Optimize your MLOps pipelines with inbound webhooks](https://circleci.com/blog/mlops-trigger-inbound-webhooks/)(日本語版は絶賛準備中)

## [CircleCI] Webhook の追加
プロジェクト画面の左側サイドバーに Webhook という項目があるので、こちらをクリックします。すると、下のような画面が表示されるので、Add Webhook ボタンをクリックしてください。
![スクリーンショット 2023-12-13 215119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/27fa9057-4fa8-0a37-19a7-d1048d9967f4.png)

## [CircleCI] Webhook (CircleCIからNew Relicを呼び出す際の呼び出し先と呼び出しタイミング) を設定
Add Webhookという画面が表示されるので、必要な情報を入力します。

- **Webhook name(Webhook　名)**: ここではプロジェクト名の前に NewRelic_ を付けて NewRelic_cci-test-yolov8-mask-model という名前にしました。
- **Receiver URL(受け取り手のURL)**: https://log-api.newrelic.com/log/v1?Api-Key= のあとにライセンスキー(APIキー)を指定します。New Relicのライセンスキーは、[こちら](https://one.newrelic.com/api-keys)から参照可能です。
- **Secret token(シークレットトークン)**: CircleCIからの受信データかどうかを検証するために使用する「合言葉」。
- **Certificate verification(認証の確認)**: 受信ホスト(Receiver URLで指定したURLのホスト)が有効なSSL証明書を保持しているかをチェックできます。
- **Events(Webhookをトリガーするイベント)**: ワークフローの完了時、ジョブの完了時をそれぞれ(または両方)指定可能です。

![スクリーンショット 2023-12-13 215654.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/ea961370-9ac2-5c47-8f73-4f7899c0ec86.png)

## [NewRelic] CircleCI用ダッシュボードのインストール
ここから New Relic 側の作業に移ります。New Relicにログインした状態で、[CircleCI Quickstart](https://newrelic.com/instant-observability/circleci)ページにアクセスすると、画面中央に Install Now ボタンが表示されているので、こちらをクリックします。
![スクリーンショット 2023-12-13 215954.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/f0fad911-086e-1740-1f8d-3e7cca843e01.png)

すると、インストール画面が表示されるので、Begin Installatioon ボタンをクリックします。
![スクリーンショット 2023-12-13 220016.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/ba9b1dde-74ff-d536-dcae-10fe69633c66.png)

ここからステップを追って、インストールを進めていきます。インストールドキュメントを参照するには、See installation docs ボタンをクリックします。確認したら Done ボタンをクリックします。
![スクリーンショット 2023-12-13 220037.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/663813fb-8c57-18f3-e8ee-527c69bd6d23.png)

最後は、CircleCI (dashboard) をデプロイした旨のメッセージが表示されるので、See your data ボタンをクリックしてダッシュボードに移動します。
![スクリーンショット 2023-12-13 220100.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/15d0d633-b845-10de-d100-8ee048dbe69a.png)

## [NewRelic] CircleCI用ダッシュボードを表示
先ほどのSee your data ボタンをクリックするか、New RelicのDashboardsメニューからCircleCI用ダッシュボードを選択すると、下のようなダッシュボードが表示されます。
![スクリーンショット 2023-12-13 220131.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/96278773-f0bb-f797-c88c-46b34f6fb124.png)

ただし、この時点ではWebhookを設定して以降、当該プロジェクトでワークフローを実行していないのであれば、データとしては何も表示されません。実際にワークフローを実行すると、こんな感じでデータがWebhook呼び出しのタイミングでリアルタイムに反映され、表示されます！
![スクリーンショット 2023-12-13 224504.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/19248/97c309fb-c268-bebd-d195-a52e3e06c9d1.png)

本記事を文字で追っていると、何やらいろいろ設定作業があるなーという印象があるかもしれませんが、実際に手を動かしてみると「なんでこれまで使ってこなかったんだろう」というくらいの簡単さです。

# さいごに
New Relicを使うことでCircleCIのダッシュボード以外にも開発や運用をサポートするさまざまな機能が利用可能になります。私にとっては、CircleCIのダッシュボード機能がNew Relic初利用のきっかけとなりましたが、これまでNew Relicを使ってみたかったものの、きっかけがなかったという方の参考になり、背中を押すことができていれば幸いです。