CircleCIのWebhookとNew Relicの連携

こんにちは。CircleCIカスタマーサクセスチームの Chisato です。

最近個人的に幸せを感じた出来事は、新潟で「こしいぶき」という品種の美味しいご飯をいただいたことです。
タレカツ丼とへぎそばの味も忘れられません。
ほんとうは新潟の旅行ブログを書きたいのをぐっと堪えながら、CircleCIの機能紹介をします。
<br>

# CircleCIのWebhook
Webhookは、お客様自身が作成したAPI、またはサードパーティのサービスと連携して、リアルタイムでCircleCIのデータを送信したり可視化したりすることを可能にします。

今回は New Relic のモニタリングスタックにデータを送信してみます。




# New Relic の設定
New Relic のサービス紹介をドキュメンテーションから引用します。

>New Relicは、よりよいソフトウェアの構築に役立つオブザーバビリティプラットフォームです。あらゆるデジタルソースからデータを取り込むことができるため、システム自体とシステムの改善方法を完全に理解できます。
>New Relicを使用すると、以下ができます。
すべてのデータを集約: エージェント、インテグレーション、APIを使用して、すべてをインストゥルメントし、テクノロジースタック全体からデータをインポートし、単一UIからアクセスします。
データの分析: 簡単にすべてのデータを入手できるようにして、問題の根本原因を見つけ、システムを最適化します。ダッシュボードとチャートを構築するか、または強力なクエリ言語を使用します。
インシデントに素早く対応: 機械学習ソリューションが異常をプロアクティブに検知し、問題となる前に警告します。

New Relicを初めて使う方は、こちらの[New Relicを使い始める](https://docs.newrelic.com/jp/docs/new-relic-solutions/get-started/intro-new-relic#get-started-now)をご参照ください。
<br>

### 設定のステップ
1. [こちら](https://newrelic.com/instant-observability/circleci) のページ上部にある`Install now`をクリックします。
1. New Relic にログインします。
1. 下記画像のように、`Begin Installation`、そして`Done`（または`Skip this step`）と進みます。(CircleCIのアカウントを持っていない方は、[こちら](https://circleci.com/vcs-authorize/)からご登録ください。)
![Screen Shot 2022-10-24 at 23.29.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/030d1ce6-62e8-0a0b-4be2-a15af6d97a19.png)
![Screen Shot 2022-10-24 at 23.30.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/7b6f904f-4299-685f-8063-48c9d0544836.png)


4. CircleCI の Webhook と連携するためには、 New Relic の `License Key` が必要です。自分のキーを確認するため、トップページ最下部のアカウントをクリックし、`API Keys` をクリックします。
![Screen Shot 2022-10-24 at 23.41.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/1f73e930-fae1-eb96-9b1e-ccc11399157c.png)
5. API keys ページに `License Key` の表示があります。後ほど使うタイミングになったら、三点リーダーをクリックし、`Copy key` をクリックしてキーをコピーします。
![Screen Shot 2022-10-24 at 23.52.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/c167c56c-733b-f46e-6387-645698fcc45f.png)

<br>


# CircleCI の設定

1. CircleCIのダッシュボードから、New Relicにデータを送信したいプロジェクトを選択し、プロジェクトのページに移動します。
1. プロジェクトページ右上の `Project Settings` ページに移動して、左側のリスト最下部の `Webhooks` をクリックします。![Screen Shot 2022-10-24 at 23.54.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/81102f9d-04d8-378b-d544-47f642de0d34.png)
1. 次に、`Add Webhook` をクリックして、下記項目（太字）を埋めます。
 　- **Webhook name**: 任意の Webhook 名
 　- **Receiver URL**: Logs endpoint をコピーし、`YOUR_LICENSE_KEY`部分を自身のライセンスキー （New Relicでの設定の最終ステップで確認したキー）に書き換えたものです。
 　     US: `https://log-api.newrelic.com/log/v1?Api-Key=YOUR_LICENSE_KEY`
 　     EU: `https://log-api.eu.newrelic.com/log/v1?Api-Key=YOUR_LICENSE_KEY `
 　- **Secret token**: 受信データが CircleCI からのデータかどうかを検証したい場合は別途設定します。
 　- **Certificate verification**: チェックを入れると、受信ホストが有効な SSL 証明書を保持していることを確認します。（テストの際はチェックボックスからチェックを外します。）
 　- **Events**: データの送信のタイミングを選択するため、`Workflow Completed`、 `Job Completed` 、または両方にチェックを入れます。![Screen Shot 2022-10-25 at 0.34.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/1e915d57-7261-343a-1795-62c3f648289f.png)
1. `Add Webhook`をクリックして、Webhookが正しく保存されたことを確認します。動作を確認したい場合は、`Test Ping Event` をクリックします。プロジェクトでビルドを実行し、New Relic のダッシュボードに移動します。
![Screen Shot 2022-10-25 at 0.40.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/2a3ac169-ef58-1fea-1426-c2c9a0bf39aa.png)


# Webhook の連携の確認
New RelicのUIから、`Dashboards` をクリックしてCircleCIのページを開きます。ページ右上の`＋`マークをクリックして、`Add a chart`をクリックします。下記のようにクエリを使って、CircleCIからのログを確認できました。
![Screen Shot 2022-10-25 at 1.23.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/91735a72-0e60-e375-f2cb-ce35291891d5.png)
このあと、CircleCIのダッシュボードにも自動的にデータが反映されていることを確認できました。
各チャートは、Jobレベルのデータなのか、Workflowレベルのデータなのか確認しながらご利用ください。
ご自身の用途に合わせてチャートをカスタマイズ作成することもできます。
![Screen Shot 2022-10-25 at 1.33.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/bfcc312e-b15b-668e-0777-940c467f27e9.png)



<br>

# Slackとの連携
どうしても毎回これをやらないと気が済みません。そうです、Slackへの通知です。
New RelicのUIから、`Alerts & AI` 、そして `Workflows` を選択します。
今回はSlackとの連携、そしてテスト通知を行いました。
![Screen Shot 2022-10-25 at 1.42.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/20ab4b20-8f0d-26e8-d050-6f624dd0f218.png)

ワークフローの設定については[こちら](https://docs.newrelic.com/jp/docs/alerts-applied-intelligence/applied-intelligence/incident-workflows/incident-workflows/)のページを参照できます。
![Screen Shot 2022-10-25 at 1.46.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/0e02c184-5f3a-88ec-319f-dd23e3e37e8c.png)


♪シュットトト♪（どうしてもこれが言いたい）
無事に通知できました。
![Screen Shot 2022-10-25 at 1.49.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1101915/a5179b4e-39f6-439b-9ac5-0e3b02b01011.png)

このあと、New Relic からかっこよくデータを送信したかったのですが、これはまた次回にとっておきます。

CircleCIとSlackを直接連携したいという場合は、[Slack orb](https://circleci.com/developer/orbs/orb/circleci/slack) をご利用ください。
<br>


# まとめ
今回はNew Relicを使うのが初めてだったので、できることに限りがありました。
今後はNRQLなどを用いてCircleCIのデータをいい感じに表示し、それを最適化プロセスに活かす道を模索したいと思います。


CircleCI Webhook に関するフィードバックやリクエストがありましたら、ぜひお聞かせください。

[**機能リクエスト**](https://ideas.circleci.com/) ページでは、リクエストを作成したり、他のユーザーの方々のリクエストに投票したりできます。

技術的なご質問がある場合は、[**サポートセンター**](https://support.circleci.com/hc/ja) から無料チケットを作成してお問い合わせください。

さらに、[**Product Roadmap**](https://circleci.com/product-roadmap/) ページで、CircleCIの最新機能や今後リリースされる機能の一覧を確認いただけます。


お読みいただきありがとうございました。
美味しい秋の味覚を楽しみつつ、一緒に最適化を進めましょう。



## 参考

https://circleci.com/docs/ja/webhooks/


https://docs.newrelic.com/docs/logs/forward-logs/circleci-logs/

https://docs.newrelic.com/


https://docs.newrelic.com/jp/docs/query-your-data/nrql-new-relic-query-language/get-started/introduction-nrql-new-relics-query-language/