【初心者向け】苦手意識を持っていたNew RelicでAPIの外形監視ができるようになるまで


## はじめに
KIYOラーニング株式会社のムナカタです。
「[New Relic 使ってみた情報をシェアしよう！](https://qiita.com/advent-calendar/2024/newrelic) 」18日目の記事になります。

この記事ではNew Relicを使い始めたばかりの私が、機能を理解するために取り組んだこと、そして実際にNew Relicを使ってAPIの外形監視を設定するまでの手順を紹介します。


### 記事の対象者

- New Relic初心者（これからNew Relicを触る人、あるいは触り始めた人）
- New Relicを使ってAPIの外形監視を行いたい人

## New Relicとは

> New Relic  は、モバイルやブラウザのエンドユーザーモニタリングや、外形監視、バックエンドのアプリケーションとインフラ、ネットワークモニタリングなど、オンプレやクラウド、コンテナからサーバレスまであらゆるシステム環境での性能管理を実現するプラットフォームです。
参照：[NRU101 - New Relic 入門](https://newrelic.com/jp/resources/presentations/nru101-2024)

New Relicはアプリケーションをリアルタイムで監視・分析するためのツール（プラットフォーム）です。モニタリング対象は多岐にわたり、視覚的でわかりやすいダッシュボードを提供しています。

## New Relic触ってみたけど・・・

当社ではシステムのパフォーマンス改善やサーバーモニタリングなどでNew Relicを活用しています。

https://www.wantedly.com/companies/kiyo-learning/post_articles/410056

私自身、当社に入社してから初めてNew Relicを触りました。利用するメリットは理解したものの、最初は下記の理由から利用することに対して個人的にハードルを感じていました。

* 機能が豊富すぎて、どこから手をつければいいのかわからない
* UIは英語で構成されており、見慣れない英単語の意味を都度理解する必要がある
* そもそも私自身、オブザーバビリティについてよくわかっていない




## 私がNew Relicを理解するためにやったこと

New Relicに苦手意識を感じていた私が、社内の推進チームからの助言を受け、理解を深めるために取り組んだことをいくつか紹介します。


### 1. New Relic 入門動画を視聴する
まず、公式が無料公開している初心者向けの入門動画を視聴しました。
この動画では、

* ユーザーに指摘されるまで障害に気づけない
* パフォーマンス問題を横断的に切り分けができていない

などの課題をもとに、オブザーバビリティの重要性やNew Relicの基本機能が解説されていて、初心者に役立つ内容となっていました。

動画リンク：[NRU101 - New Relic 入門](https://newrelic.com/jp/resources/presentations/nru101-2024)


### 2. 公式のハンズオンイベントに参加する

New Relicが主催するハンズオンセミナーにも参加しました。

初心者向けのオフラインセミナーでは、ハンズオンでのトラブル対応を対面で丁寧にサポートしていただけたり、実践的な理解度チェック用のテスト問題があるなど、New Relicの基本知識について理解を深めることができました。

また、New Relic University（NRU）と呼ばれるラーニングコンテンツがあり、そこでは一部の機能に特化したハンズオンセミナーが定期的に開催されています。こちらも実際に参加し、より実践的な内容を学ぶことができました。

イベント情報：
・[New Relic ハンズオン for beginners](https://newrelic.com/jp/events/2024-11-22/handson-beginners)
・[NRUスケジュール](https://newrelic.com/jp/events?nr_upcoming_past=past&date_op=%3C%3D&date%5Bvalue%5D=today&date%5Bmin%5D=&date%5Bmax%5D=&type=workshop&search=&sort_by=field_event__date_value&sort_order=DESC)


### 3. 入門書を読む

> 本書では、大規模システムの開発・運用に携わるエンジニアに向け、オブザーバビリティの基礎や考え方を身に付けつつ、オブザーバビリティを実現するツール「New Relic」の実践的な利用法や活用パターンについて解説します。
参照：[Amazon - New Relic実践入門 第2版 オブザーバビリティの基礎と実現](https://www.amazon.co.jp/dp/4798184500)


ハンズオンで学んだ後に、業務で実践してみてつまづいた箇所は入門書を見て解決するということを繰り返していきました。書籍内ではNew Relicの各種機能や用語がわかりやすく説明されていて、個人的にWeb上の公式ドキュメントよりも理解しやすい内容だと感じています。

ちなみに、この書籍はハンズオンイベントへ参加した際に、特典として配布していただけたのでありがたかったです。


## New Relicで実践してみたこと
次に学んだことをもとに、New Relicで実践したことを紹介します。

業務の中でAPIの外形監視を行うタスクがあり、当初はAWS上のサービスを使って監視する計画を立てていましたが、今回を機にNew Relic側での監視設定にチャレンジしてみました。

以下に、実際に設定した内容を解説していきます。
※本手順はNew Relicアカウントが作成済みであることを前提としています



## 構成

一定間隔で対象のAPIをリクエストし、意図しないレスポンスが返ってくる場合はSlackに通知させる仕組みです。

```mermaid
graph TD
    NewRelic[New Relic] -- "リクエスト" --> 監視対象のAPI
    監視対象のAPI -- "レスポンス" -->  NewRelic[New Relic]
    NewRelic -- "通知" --> Slack["Slack チャンネル"]
```

New Relicの外形監視機能である、Synthetic Monitoringを使って構築しました。

参考：[Syntheticモニターの概要](https://docs.newrelic.com/jp/docs/synthetics/synthetic-monitoring/using-monitors/intro-synthetic-monitoring/)

## 設定手順

### 手順1：Synthetic MonitoringでMonitorを作成

1.「Synthetic Monitor」👉「Create Monitor」を選択します。

![スクリーンショット 2024-12-16 4.16.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855637/8dae52ce-3a0a-94fc-6cc3-b0e70963bf2a.png)


### 手順2：Select monitor typeの設定
「Endpoint availability Scripted API」を選択します。



### 手順3：Configure monitorの設定

任意のName（Monitor名）と、Period（APIを実行する間隔）を設定します。今回は10分間隔でAPIを実行させます。

![スクリーンショット 2024-12-16 0.25.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855637/f2b091f6-715b-8f73-df9c-8877d6e17884.png)


### 手順4：Select locations
モニタリングを行いたいロケーションにチェックを入れることで、世界中の様々な場所から監視を実施することが可能です。今回はロケーション別で設定する必要はないためTokyoのみを指定しています

![スクリーンショット 2024-12-16 0.32.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855637/e3d56157-57dd-2a03-fe7c-441d9ac27bde.png)


### 手順5：Write scriptの設定

次に実行するスクリプトを設定していきます。

![スクリーンショット 2024-12-17 9.45.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855637/2dd9f14f-2678-786f-c8a6-50165bf7c935.png)

↓実行するスクリプト

```js
const assert = require('assert');
$http.post('https://xxxxxxxxx.com/xxxxxx/',//リクエスト対象のAPI
  {
    headers: {
      'Content-Type': 'application/json',
      'access-key': $secure.SAMPLE_API_ACCESS_KEY,
    },
    body: JSON.stringify({})
  },
  function (err, response, body) {
    assert.equal(response.statusCode, 200, 'Expected a 200 OK response');
  }
);
```

このスクリプトでは対象のAPIでpostリクエストを実行し、レスポンスが200かどうかを判定する処理を実行しています。

今回のAPIはキーを必要とするため、Secure Credentialsを使いセキュアにAPIキーを利用しています

### Secure Credentialsとは

Credentialsを使うことで、APIキーなどの認証情報を不可視の変数として扱うことができます。そのためScripted APIを利用する際、セキュリティを高めつつ、柔軟に認証情報を管理することができ、より安全なモニタリング環境を構築することが可能です。

### Secure Credentialsの設定方法
「Secure credentials」👉「Create secure credential」を選択し、必要項目を入力します。


今回は`SAMPLE_API_ACCESS_KEY`として作成しました。

![スクリーンショット 2024-12-16 2.55.55.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855637/9d5ab8c8-f841-c8be-0ca7-fdab33aa6361.png)

作成したCredentialはエディタ内で下記のように呼び出すことで使用することが可能です。
```js
    headers: {
      'Content-Type': 'application/json',
      'access-key': $secure.SAMPLE_API_ACCESS_KEY, 
    },
```

参考：[Write synthetic API tests](https://docs.newrelic.com/docs/synthetics/synthetic-monitoring/scripting-monitors/write-synthetic-api-tests/)


## 設定後

Synthetic monitorsの「Results」から結果を確認できれば設定完了です。
リクエストが成功していれば「SUCCESS」、失敗した場合は「FAILED」tテーブルに表示されます。


![スクリーンショット 2024-12-16 0.55.59.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3855637/4db4ef3b-01d3-a6f4-7acd-c7794a142a5f.png)

ここでは説明を省略しますが、最終的に結果が「FAILED」の場合はSlack通知させるように設定しました。

今回はシンプルな外形監視の設定でしたが、結果をダッシュボードで閲覧可能になることや通知連携も容易に行えるなど便利に感じました。Synthetic Monitoringでは他にも外形監視の機能があるため、この辺りは引き続き理解を深めていきたいです。


## おわりに
以上、New Relicを理解するための取り組み、Synthetic MonitoringによるAPIの外形監視の設定手順の共有でした。

今回、New Relicには初心者向けコンテンツが豊富にあることだったり、サポートの手厚さを改めて感じました。

私自身も使い始めたばかりで理解にはまだまだ自信がありませんが、これからNew Relicを触る人、あるいは触り始めた人、つまづいている人へこの記事がお役に立てば幸いです。


## KIYOラーニング株式会社について
当社のビジョンは『世界一「学びやすく、分かりやすく、続けやすい」学習手段を提供する』ことです。革新的な教育サービスを作り成長させていく事で、オンライン教育分野でナンバーワンの存在となり、世界に展開していくことを目指しています。

https://kiyo-learning.com/




### サービス
 スタディング：https://studying.jp/
スタディングキャリア：https://career.studying.jp/
AirCourse：https://aircourse.com/

### KIYOラーニング株式会社では一緒に働く仲間を募集しています

https://www.wantedly.com/companies/kiyo-learning/projects


https://herp.careers/v1/kiyolearning