【超初心者向け】 New Relic 触ってみた！

# はじめに
この記事は、**New Relic** という **オブザーバビリティプラットフォーム** を「聞いたとことあるけど使ったことがない・どんなものか気になる・とりあえず動かしてみよう」という方向けの記事となります。（私もそうです）
細かい設定内容や設定の詳細は公式ドキュメントを参照してください。

まずはどんな事ができるのか、[New Relic 無料プラン](https://newrelic.com/jp/sign-up-japan?utm_source=external_partners&utm_medium=content&utm_campaign=apj_jp-ever-green-qiita&utm_content=qiita)への登録・Progateのタスクにある「[New Relic を使ってアプリケーションを改善しよう](https://app.path.progate.com/tasks/muzHlTIVNZkSxom_eL_be/preview)」を使って、**New Relic** がどのようなツールなのか試してみました。

※Progateのタスクを使用するには、ログインアカウント（無料）が必要となります。

### オブザーバビリティについて

オブザーバビリティとは何か記載します。

> オブザーバビリティとは複雑なシステムの内部状態を外部から観測する能力のことで、システムの健全性、パフォーマンス、信頼性を維持するために不可欠な概念です。
>
> 事前に定義された異常が発生した時に通知するだけの「モニタリング」と違い、「オブザーバビリティ」を備えたシステムでは問題が生じた原因とシステムの動作がどのようになっているのかをリアルタイムで把握できます。

* 引用URL
[オブザーバビリティについて](https://app.path.progate.com/tasks/muzHlTIVNZkSxom_eL_be/pages/new-relic-overview#%E3%82%AA%E3%83%96%E3%82%B6%E3%83%BC%E3%83%90%E3%83%93%E3%83%AA%E3%83%86%E3%82%A3%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)

# モニタリングする対象システムのセットアップと New Relic をセットアップ

Progateに記載されている手順を参照し、モニタリングする対象システムのセットアップと New Relic サインアップします。

まず、モニタリングする対象システムをセットアップします。
[モニタリングする対象システムをセットアップ手順](https://app.path.progate.com/tasks/muzHlTIVNZkSxom_eL_be/pages/setup)

オンラインIDE(GitHub Codespaces)を使用すると、必要なツールがすべてセットアップされているので楽ちんです。
![実務を疑似体験するプログラミング学習___Progate_Path.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/1fb90fcf-003e-d476-c27f-b7193ea35d2d.png)

次に New Relic の無料プランの登録をします。
下記のURLからサインアップしてください。

https://newrelic.com/jp/sign-up-japan?utm_source=external_partners&utm_medium=content&utm_campaign=apj_jp-ever-green-progate&utm_content=progate

以下のような画面が表示されればアカウント作成完了です。
![Integrations___Agents___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/82c13449-d280-1b64-abdc-2c8394a911f0.png)

### New Relic APM 導入
下記を参考に、New Relic APMをセットアップします。

> APM とは Application Performance Monitoring の略でアプリケーションの稼働状況をユーザー視点で監視し、問題を解決したり、パフォーマンスを改善することです。
> 
> New Relic APM はこの APM を実現するためのコア機能であり、アプリケーション全体のサービスレベルを可視化したり、アプリケーションの内部で実行されている処理を詳細にトレースできます。、イベント、ログ、トランザクション（MELT）を監視することで、アプリの健全性をリアルタイムで追跡します。

* 引用URL
[New Relic APM を導入する](https://app.path.progate.com/tasks/muzHlTIVNZkSxom_eL_be/pages/new-relic-setup#new-relic-apm-%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B)

[APM & Services]-[new_relic_app]-[summary]を開くと、正常に通信ができている場合は、以下のような画面が表示されます。

![Cursor_と_new_relic_app___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/caa6f20f-4873-8866-1d58-7b81998729c6.png)

summary画面では、応答時間・スループット・エラー率などがリアルタイムで確認できる他、脆弱性も確認できます。
※脆弱性の情報も確認できるのはすごいと感じでいます。

脆弱性情報は以下のように表示され、一目でどのような危険性にシステムが晒されているのかが確認できます。
![Cursor_と_new_relic_app___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/01ae6413-7b25-04f6-f101-36233bee5272.png)

### New Relic Browser を導入
下記を参考に、New Relic Browserをセットアップします。

> New Relic Browser は Web サイトにおけるユーザーのモニタリングを実現します。初期描画までの時間やどのようなリクエストをしているのかなど、 Web サイトがどのようにユーザーに使われているかを可視化します。

* 引用URL
[New Relic Browser を導入する](https://app.path.progate.com/tasks/muzHlTIVNZkSxom_eL_be/pages/new-relic-setup#new-relic-browser-%E3%82%92%E5%B0%8E%E5%85%A5%E3%81%99%E3%82%8B)

[Browser]-[new_relic_app]-[summary]を開くと、正常に通信ができている場合は、以下のような画面が表示されます。
![Cursor_と_new_relic_app___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/e541f7f4-e40d-c133-73f2-9d55c5d68518.png)

Browserでは、LCP（Largest Contentful Paint）・Error rate（ブラウザで発生したエラー）等のユーザが体験しているパフォーマンスや利用ブラウザやアクセス元の地域といったユーザの利用環境など詳細な情報がリアルタイムで確認できます。

この後のProgateのタスクでは下記のようなタスクがあり、実際の運用で発生しそうな内容のデモができます。
私もやってみましたが、実際にアラートを検知した時のエラー内容からの調査方法・どのページに処理がかかっていてページの読み込みが遅いのかを確認し対応するという実践向けの内容で、大変勉強になりましたので、ぜひチェックしてみてください。

* Browserで検知したErrorから調査し対応する
    * [エラーの発生箇所を特定して修正しよう](https://app.path.progate.com/tasks/muzHlTIVNZkSxom_eL_be/pages/fix-error)
* 表示に時間がかかっているページのチューニングする
    * [パフォーマンスの課題を見つけて改善しよう](https://app.path.progate.com/tasks/muzHlTIVNZkSxom_eL_be/pages/improve-performance)


# サーバ監視について
ここまでは、**New Relic** でどのような事ができるのかを、Progateのタスクを使って確認をしましたが、ここからはサーバ監視（リソースやプロセス監視）の観点で試してみました。
また、アラートを擬似的に発生させSlackに通知もしてみました。

## 事前準備
今回は、AWSで Amazon Linux 2023 のEC2を監視してみたいと思います。
AWSのアカウント作成と、 Amazon Linux 2023 のEC2起動方法はここでは割愛します。

### エージェントインストール

【1】 New Relic にログインし [APM & Services]-[Add data]をクリックする
![New_Relic_Explorer___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/55ee8021-d44f-ac6b-2248-5f327885d154.png)

【2】[Linux]をクリックする
![Integrations___Agents___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/77b10ba1-756a-975b-f79b-6f460930c4b2.png)

【3】[Create a new key]をクリックしキーを取得、[Continue]をクリックする
![Setup_data_source___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/ad1e5c1d-b2ab-3b30-d48d-c013f6c31e3b.png)

【4】 インフラストラクチャ・エージェント インストールコマンドが表示されているのでコピーする
```Automatically answer "yes" to all install prompts. We'll stop the installer if there's an error.```は 任意で有効にしてください。
インストール時に確認が必要なくなります。
インストールコマンドコピー後、この画面はそのままにしてください。
![Setup_data_source___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/c6a1a871-6673-4d82-b3c9-a68d89e23a8a.png)

【5】 Amazon Linux2023でインストールコマンドを実行する

```
$ curl -Ls https://download.newrelic.com/install/newrelic-cli/scripts/install.sh | bash && sudo NEW_RELIC_API_KEY=**************************** NEW_RELIC_ACCOUNT_ID=6210431 /usr/local/bin/newrelic install -y
```

インストールコマンド実行後、以下の結果が出力されればインストール完了です。
```
Installing New Relic CLI v0.97.2
Installing to /usr/local/bin using sudo

 _   _                 ____      _ _
| \ | | _____      __ |  _ \ ___| (_) ___
|  \| |/ _ \ \ /\ / / | |_) / _ | | |/ __|
| |\  |  __/\ V  V /  |  _ |  __| | | (__
|_| \_|\___| \_/\_/   |_| \_\___|_|_|\___|

Welcome to New Relic. Let's set up full stack observability for your environment.
Our Data Privacy Notice: https://newrelic.com/termsandconditions/services-notices

✔ Connecting to New Relic Platform
   Connected


Installing New Relic

✔ Installing Infrastructure Agent
   Installed

✔ Installing Logs Integration
   Installed

  New Relic installation complete

  --------------------
  Installation Summary

  ✔  Infrastructure Agent  (installed)
  ✔  Logs Integration  (installed)

  View your data at the link below:
  ⮕  https://onenr.io/0dQed0kxWje

  View your logs at the link below:
  ⮕  https://onenr.io/0Bj3Kv8G6jX

  --------------------
```

【6】 New Relicの画面に戻り[Continue]をクリックする
![Setup_data_source___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/3c44adbf-81b6-7912-b765-c6f4f02b3ef6.png)

【7】 Test the connectionが実行され、下記の結果になれば New Relic 接続完了です
[See your data]をクリックする

![Setup_data_source___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/f6b7cb85-b37a-2ea2-f1c6-d532af11f629.png)

以下の様なリソース情報が表示されれば完了です
![newrelic-test-01___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/d4413a26-e950-0123-9b96-fec067c940e2.png)

## アラートと Slack への通知設定

### Slack への通知設定手順
【1】[Alerts]-[Destinations]-[Slack]をクリックする
![Applied_Intelligence___Destinations___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/40e7861c-6cc5-b1b2-af50-f91e7305fed7.png)

【2】[Authenticate in one click]をクリックする
![Applied_Intelligence___Edit_destination___Applied_Intelligence___Destinations___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/77fb02b2-5092-f374-aca4-15f3ce5997a6.png)

【3】New Relic から Slack へのアクセスを許可する
![https___qiita-image-store_s3_ap-northeast-1_amazonaws_com_0_2594248_e55c348a-a3ca-6961-de3a-a1078654aa3e_png__1598×1472_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/1c244d95-a52c-fc1d-3b61-f385a93e5099.png)

認証が成功すると下記のような画面になるので、[Close]をクリックする
![Applied_Intelligence___Edit_destination___Applied_Intelligence___Destinations___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/6cb075dc-0156-146a-4601-1f3ed3e0e7d1.png)

これで Slack への通知設定が完了です。
![Applied_Intelligence___Destinations___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/4fb43a74-a6a1-eadd-3d9a-189b0d69c3ba.png)

### アラート設定手順

今回は例として、CPUの監視をして閾値を超えた場合は通知する設定をしたいと思います。

アラート設定には以下の2つの設定が必要です。
簡単にそれぞれの役割を記載しますが、詳細は公式ドキュメントを参照してください。

* Alert Policies
    * Conditionをグループ化する
    * 通知先の設定をする
    
https://docs.newrelic.com/jp/docs/alerts/organize-alerts/create-edit-or-find-alert-policy/

* Alert Conditions
    * アラートを検知する条件を設定する

https://docs.newrelic.com/jp/docs/alerts/create-alert/create-alert-condition/alert-conditions/

### Alert Policiesの作成

【1】[Alerts]-[Alert Policies]-[New alert Policies]をクリックする
![Cursor_と_Alert_policies___New_Relic_と_terraform_ネットワーク不通になる_-_Google_検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/5b978217-2f95-b53c-8f79-ed11b36dbead.png)

【2】 Policy name（今回はtest-policyとする）を入力、[One issue per condition]を選択し、[Set Up notifications]をクリックする

※One issue per condition
アラート条件（Conditions）毎に発生したアラートを通知をする設定となります。
![Cursor_と_Alert_policies___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/3d850182-2eb5-3427-7c12-98734a089e59.png)

【3】 [Slack]をクリックする
![Cursor_と_Connect_to_destination___Alert_policies___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/cc06dfb7-68d2-bcfd-9a21-03fcb7752b6c.png)

【4】 Slack destinationに、「Slack への通知設定手順」で許可したワークスペースを選択、Channelはアラーを通知したいチャンネルを選択し、[Save message]をクリックする
![Applied_Intelligence___Edit_channel___Connect_to_destination___Alert_policies___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/4bb233a7-22d8-7e8d-6bb4-9d7b6db53937.png)

【5】 [Active workflow]をクリックする
![Cursor_と_Connect_to_destination___Alert_policies___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/f0f9f065-3534-0571-8644-6cef0548a4ac.png)

以下のように登録されれば完了です。
![Cursor_と_Alert_policies___New_Relic_と_terraform_ネットワーク不通になる_-_Google_検索.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/805c5d39-dbeb-97c3-9cf7-09b768449fdb.png)

### Alert Conditionsの作成

【1】 [Alerts]-[Alert Conditions]-[New alert condition]をクリックする
![Cursor_と_Alert_conditions___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/da28d93f-8c52-931c-5d2a-8bc00c06d2e9.png)

【2】 [Use guided mode]をクリックする
![Cursor_と_Alert_conditions___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/e7d2417f-d7db-c0d8-c6a1-9b8bd4ebcf3e.png)

【3】 [Hosts]-[Hosts]を選択し、[Next]をクリックする
![Cursor_と_Create_alert_condition___Alert_conditions___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/d117f636-31dd-a25f-d3f1-a4e789020731.png)

【4】 [Host]-[Golen metrics]-[CPU usage(%)]を選択し、[Next]をクリックする
![Cursor_と_Create_alert_condition___Alert_conditions___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/85ac0fa9-2fa7-b60c-ef58-d908d17f458a.png)

【5】 下記の様に設定し、[Next]をクリックする

* Data aggregation

| 設定項目 | 値 | 備考 |
|:-----------:|:------------:|:------------:|
| Window duration | 1 minutes| データを集約する単位　|
| Streaming method | Event flow | 連続データ収集に適した方式<br>今回のようなインフラストラクチャエージェントを使用した監視でよく使われる |
| Delay | 2 minutes | 設定されたDelay時間後に集計を実行<br>今回は2分に設定し |

* Gap filling strategy

| 設定項目 | 値 | 備考 |
|:-----------:|:------------:|:------------:|
| Fill data gaps with | None | 欠損データの取り扱い定義<br>今回はNoneを選択　|

* Evaluation delay

| 設定項目 | 値 | 備考 |
|:-----------:|:------------:|:------------:|
| Use evaluation delay | 無効化 | 評価遅延<br>今回は無効化　|

* Set condition thresholds

| 設定項目 | 値 | 備考 |
|:-----------:|:------------:|:------------:|
| Static | 選択 | 静的な閾値の超過有無で判定　|
| Open incidents with a: Severity level | Critical | Criticalとしてインシデントを作成する　|
| When a query returns a value | above 90 for at least 2 minutes | クエリ結果の値が90以上の状態が2分間継続した場合にインシデントを作成する|

![Cursor_と_Create_alert_condition___Alert_conditions___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/dbd92c99-6a3f-d87d-5972-664a75ff1250.png)

【6】 Name your alert condition（今回はtest-condition-cpuとする）を入力、
Connect this condition to a policy は[Existing policy]を選択し、先ほど作成した「test-policy」を選択する
[Enable on save]を有効化し[Save condition]をクリックする

![Create_alert_condition___Alert_conditions___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/458417c3-b1dd-aa5c-ac61-d1306c64070a.png)

下記のような画面になれば設定完了です
![Create_alert_condition___Alert_conditions___New_Relic.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/f6826176-e710-41fb-4ac9-5198056e35a0.png)

## アラートを飛ばしてみよう

Amazon Linux 2023のサーバにログインし、CPU負荷を上げます。
下記を参考にCPU負荷を上げました。

https://qiita.com/keita0322/items/8fba88debe66fa8d2b39

スペックの低いインスタンスタイプで起動したので、すぐにCPUが100%に張り付きました。
![https___qiita-image-store_s3_ap-northeast-1_amazonaws_com_0_2594248_526e520e-4276-6aa9-f8d4-e15dac654b6a_png__3544×1746_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/4182067d-2222-512f-d2ad-907412c66709.png)

そのまま数分待つと...Slackにアラートの通知が飛んできました！
2回の通知でグラフも表示されており、どのタイミングから負荷が上がっているか分かりやすいですね。
![new_relic_test（チャンネル）_-_PDC_-_Slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/b48de4a7-dae8-fd28-2339-de739387b837.png)

![new_relic_test（チャンネル）_-_PDC_-_Slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/1c93610a-c094-711c-6205-d65c7966fb95.png)

[Acknowledge]をクリックすると以下のページに遷移し、アラートの詳細が表示されました。
![https___qiita-image-store_s3_ap-northeast-1_amazonaws_com_0_2594248_e7d7de4e-969c-b670-2917-ad46629e16b7_png__2722×1712_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/d61fb735-f083-cbaa-aec7-8f25112a0717.png)


CPUの負荷を解消してみました。
数分後、Closeの通知が来ました！
しかもグラフも更新されて、負荷が解消されていること分かりますね。
![new_relic_test（チャンネル）_-_PDC_-_Slack.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2594248/0ffbac76-a114-1e4a-8247-f164bc512657.png)

# まとめ
今回 **New Relic** を初めて触ってみました。
触れていないところも沢山ありますが、まずどのようなことができるかを、Progateとサーバー監視の観点から試してみました。

Progateでの検証は、New Relic APM　とNew Relic Browser を使い、アプリケーションのスループットやエラーを検知・可視化し、パフォーマンス改善をどの様にしたら良いかを学ぶことができました。
個人的には触ってきていなかった分野についてだったので、大変勉強になりました。
導入できればパフォーマンス改善の流れをテンプレート化して、より良いアプリケーションを開発・運用できると感じました。

サーバー監視では、コマンド1行で簡単にエージェントインストールができ監視をスタートできる事と
Slack への通知も行い、実際に通知される内容を確認する事ができました。
通知内容はグラフが画像として表示され、どのように負荷が上がっていったのかが通知一つで確認できるのが良いと思いました。
ダッシュボード（今回は触れませんでしたが）を作成できるので、環境にあったダッシュボードを作成すれば
さらに見やすく、障害時に迅速な対応が可能だと感じました。

本記事が、少しでも皆さんの参考になれば幸いです。