New Relicのアラート検証ってどうしてる？Postman使って、New RelicのAPIを叩くとこんな簡単に！

:::note info
[New Relic株式会社のQiita Organization](https://qiita.com/organizations/newrelic)では、
新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
:::

:::note info
最新のアップデートの詳細はこちら
[New Relic アップデート(2024年4月)
](https://newrelic.com/jp/blog/nerdlog/new-relic-update-202404 "New Relic アップデート(2024年4月)")[New Relic アップデート一覧
](https://newrelic.com/jp/blog/nerdlog/new-relic-update  "New Relic アップデート一覧")
:::

# はじめに
New Relic Universityというオンラインセミナーで時折アラート周りの講師をすることがあるのですが、New Relicのアラート機能の柔軟さを理解するまで苦戦をされる方が思ったい以上に多いなと感じています。完全に個人的な感想ですが、その1つの理由としては、ダミーのアラートを発報させて色々と試す方法があまり知られていないからかな？と感じています。

じゃあ、その方法を早速共有した方がいいんじゃないかなということで、Qiitaに投稿してみることに。その具体的な方法は、[Event API](https://docs.newrelic.com/jp/docs/data-apis/ingest-apis/event-api/introduction-event-api/)や[Log API](https://docs.newrelic.com/jp/docs/logs/log-api/introduction-log-api/)を使うことなのですが・・・「はて？APIを使うって、誰もが当たり前の様にできるっけ？」ということで、簡単にAPIを叩く方法も併せてお知らせすると役に立つのではということで、完全に個人的に最高だと思っている[Postman](https://www.postman.com/)を使って紹介してみることに。

:::note info
Postmanは個人的見解で最高だと思っていますが、New Relicの公式見解ではないです。ですが、使ってもらうと、アラート検証の効率が劇的に改善するので、Postmanを使ったことがない人は試しに使ってもらえると幸いです。
フリーでサインアップして多くの機能を使うことができます。また、コンソール版もあったり、最近日本語対応してくれたりで、<strong>感謝感謝</strong>です!!
:::

<strong>補足:</strong> Postmanのサインアップは完了済みという前提で以降は記載しています。また、筆者はPostmanの専門家ではないので・・・最大限具体的な手順を記載するように努めますが、至らない点がありましたらご容赦下さい。

# New RelicのAPIを使うと何ができる？
New Relicの主要なAPIは、先に紹介した[Event API](https://docs.newrelic.com/jp/docs/data-apis/ingest-apis/event-api/introduction-event-api/)や[Log API](https://docs.newrelic.com/jp/docs/logs/log-api/introduction-log-api/)の他に[Metric API](https://docs.newrelic.com/jp/docs/data-apis/ingest-apis/metric-api/introduction-metric-api/)や[Trace API](https://docs.newrelic.com/jp/docs/distributed-tracing/trace-api/introduction-trace-api/)があります。このAPIを介して任意のデータをNew Relic上に記録することができる様になります。それぞれのデータの違いは[こちら](https://newrelic.com/jp/blog/how-to-relic/metrics-events-logs-and-traces)のブログを一読してもらうとイメージがつくかと思います。
例えば、特定のツールやバッチ処理の計測開始時点から終了時間までかかった時間を計測し、その計測結果をEvent APIを介して記録するなどでもできます。あるいは、サーバ＆クライアントのクライアントが内部で重要なログ情報を出力しているのなら、このログの内容をそのままNew Relicに転送するなどが可能です。

また、GraphQLに対応した[NerdGraph API](https://docs.newrelic.com/jp/docs/apis/nerdgraph/get-started/introduction-new-relic-nerdgraph/)も用意されており、このAPIを介して、さまざまな設定を新たに追加したり、設定を参照し、変更するなどを行うことができます。具体的には、アラートの閾値条件などを定義したcondtionの作成や、特定の監視対象にタグを追加したりなど、多岐に渡って利用することができるAPIとなっています。

:::note info
ここまで読まれて、「あれ？アラートの検証とNew RelicのAPIってどう関係があるの？」と思われた方、すごい良いポイントに気づかれました!!
先にも書かせてもらいましたが、APIを活用することで、New Relicのエージェントが計測したアプリケーションやサーバキャパシティなどのデータとまったく同じ形式のダミーデータをAPI経由で生成することができるんです。とはいえ、これを実際に行うとすると、かなり大量のパラメータをAPIのリクエスト内で記載しないといけなくなるので、今回は<strong>エージェントとはまったく関係のないダミーデータ</strong>を生成する方法をお伝えしています。でも、<strong>ダミーデータで十二分にアラートのロジックや挙動を試すことが可能</strong>なので、「えっ？ダミーデータなの？」と思わず、最後まで読んでくれたら嬉しいです。
:::

# Postmanを使って早速APIを叩いてみよう
アラート検証を行うことを目的とした場合、[Event API](https://docs.newrelic.com/jp/docs/data-apis/ingest-apis/event-api/introduction-event-api/)か[Log API](https://docs.newrelic.com/jp/docs/logs/log-api/introduction-log-api/)を使うと簡単です。今回は[Event API](https://docs.newrelic.com/jp/docs/data-apis/ingest-apis/event-api/introduction-event-api/)を例に進めますが、どちらも必須の項目はほぼ同じでエンドポイントが異なっているというイメージを持ってもらうと良いかもしれません。

:::note info
Event APIを用いるための事前準備
- 利用しているデータセンタは<strong>US</strong>か<strong>EU</strong>かを確認する
- データを送信する先の[アカウントID](https://docs.newrelic.com/jp/docs/accounts/accounts-billing/account-structure/account-id/)を確認する
- 上記で選択したアカウントIDに紐づいた[APIキー](https://docs.newrelic.com/jp/docs/apis/intro-apis/new-relic-api-keys/)([INGEST - LICENSE Key](https://newrelic.com/jp/blog/how-to-relic/api-key-generation-steps))を取得する
- 送信したEventを格納するための任意のテーブル名(eventType名)を決める

:::

それでは、早速Postmanの環境にアクセスし、Event APIを叩く設定を行ってみましょう。

#### ステップ1: HTTPリクエストのテンプレート起動
<strong>コレクション</strong>配下に<strong>新規</strong>ボタンから<strong>HTTP</strong>リクエストを選択し、無題のリクエストを生成します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534647/cfef2e83-beae-b934-ac7d-9f48fd04e313.png">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534647/e306a564-7f1c-b938-45d3-9a883fb01146.png">


#### ステップ2: Event APIの必須項目の設定
Event APIを実行するために必須の項目を設定します。
- HTTPメソッドを<strong>POST</strong>に変更します
- Event APIの送信先(エンドポイント)URLを入力します
    - USデータセンタを利用している場合: https://insights-collector.newrelic.com/v1/accounts/＊＊＊/events
    - EUデータセンタを利用している場合: https://insights-collector.eu01.nr-data.net/v1/accounts/＊＊＊/events
    上記URLの"＊＊＊"部分には、事前準備で確認したアカウントIDが入ります。もし、アカウントIDが12345678でUSデータセンタを利用している場合には、エンドポイントURLは、https://insights-collector.newrelic.com/v1/accounts/12345678/events となります。

一旦ここで設定を保存してみましょう。もしPostman上で複数のコレクションがある場合には、保存先のコレクションを選択することができ、かつ、任意のリクエスト名を設定することができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534647/8384afbb-906e-8eed-f907-fff1f498819a.png">

次に、リクエストをエンドポイントに受け取ってもらうための認証情報をヘッダーに設定します。
- <strong>ヘッダー</strong>タブを選択します
    - 必要であれば、非表示となっているヘッダーを表示してください
- <strong>Api-Key</strong>ヘッダーを追加し、事前準備で取得したINGEST - LICENSEキーの値を設定します
- <strong>Content-Type</strong>ヘッダーを追加し、<strong>application/json</strong>の値を設定します

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534647/84ea4263-40c3-6075-d6f3-f6aa2482f8ed.png">

#### ステップ3: データの内容として送信したい中身を指定し、送信する
実際にリクエストを飛ばすまであと一歩です。次に、リクエストのボディを設定します。
- <strong>ボディ</strong>タブを選択します
- <strong>Raw</strong>を選択し、ボディの内容をJSON形式で記載します
- <stong>eventType</strong>keyを記載し、送信したデータを格納したいEvent space名(SQLで言うところのテーブル名に相当)をvalueに指定します
    - また、格納するデータレコードに含めるカラムや値を記載することができます
    - 余裕があれば、以下の設定例を参考に、利用したいカラムを追加してください

```json:設定例
[{
"eventType": "EventAPIByPostman",
"title": "PostmanでNew Relic Event APIを叩いてみた件について",
"description": "これでアラートの理解が進むといいな",
"severity": "Critical"
}]
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534647/134fd5aa-8876-41c0-8546-0d73dae9a647.png">

ここまでくれば、あとは実際にEvent APIのリクエストを発報するだけです。右上の青い<strong>発信</strong>ボタンをクリックしてください。Go!Go!
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534647/0f58d47c-e788-965a-dbc4-3a032d1e52f7.png">

正しく発信できれば、エンドポイントがレスポンスを返すので、PostmanのUI下部が以下の様な表示に変わります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534647/b0c779fa-89f4-48c6-7130-6269f6bdfbdc.png">

<strong>補足:</strong> ヘッダータブやボディタブと同じ箇所にScriptsタブがあるのですが、そこをうまく使うと送信するボディに乱数や特定の処理を行った結果を埋め込むことができるようです。Postmanをもっと使いこなせたら・・・。

#### ステップ4: New Relicポータル上で、送信したデータを確認する
送信したデータを参照してみましょう。
- [New Relicポータル](https://login.newrelic.com)にログインします
- ログイン後、Webブラウザの最下部に<strong>Start querying your data</strong>と表記されている箇所があるので、そちらをクリックします
- クエリ(NRQL)を記載するUIが画面下部より競り上がってくるので、送信したデータを参照するためのクエリを記載します
    - 以下は、クエリ例となっており、FROM句に続けるテーブル名は、ボディ設定時に指定したeventTypeのvalueとなります
    - もし他のvalueを指定している場合には、以下のクエリ例のFROM句で指定するテーブル名は環境にある様に置き換えてください
```SQL: クエリ例
FROM EventAPIByPostman SELECT *
```
クエリを記載後、Enterキーを押すことで、クエリ結果が以下のスクリーンショットの様に返ってきます。指定した通りの値が表示されれば、成功です
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534647/9ea35901-dca2-46a5-d02f-d849be0c0943.png">

#### ステップ5: 試してみたいアラートの設定を行い、挙動を確認する
任意のイベントを発生させることができたので、そのイベントに合わせてアラートの発報設定を行うことで、実際のアラート発報の挙動を核にすることができるようになります。
例えば、発行した1つのAPIが、皆様のシステムから上がってきた注意すべきデータとした場合、そのデータのseverityの値が<strong>'Critical'</strong>であるデータ数の時間推移を追いかけることでシステムの状況変化を把握することができそうですよね。'Critical'以外に、'Normal'や'info'といった値が入ってくるようなケースを連想してみてください。

詳細は割愛させて頂きますが、その様な場合には、以下の様な手順で設定を進めて行きます。
1. [New Relicプラットフォーム](https://login.newrelic.com)にログインし、左のメニューから<strong>Alerts</strong>を選択し、<strong>Alert Policies</strong>に進む
1. 新規Policyを作成するか、既存のPolicyを選択し、新たな<strong>condition</strong>を追加作成する(このステップは複数の導線があるので、詳細については、後日別のQiita記事をポストさせて頂きます!!)
1. <strong>Write your own query</strong>を選択し、以下の設定を行なっていく
    1. Query the data you want to monitor: <strong>SELECT filter(count(*), WHERE severity = 'Critical') FROM EventAPIByPostman</strong>
    1. Fine-tune your signalのセクション: Streaming methodを<strong>Event timer</strong>に変更し、それ以外はデフォルトのままで問題ありません
    1. Set condition thresholdsのセクション: デフォルトのままでも問題ありませんが、When a query returns a valueを<strong>above 1 at least once in 1 minutes</strong>に変更するとアラート検証が行いやすいかと思います
    1. Add detailsのセクション: Name your alert conditionで任意の名前を設定し、それ以降はデフォルトのままで進めて、設定を保存します
    1. 以下の画像の様な設定内容をまとめたページが表示されるので、右下のCloseボタンを押して設定画面を閉じます

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3534647/1fc29bd7-b391-5fd5-ca26-25f55a42c910.png">

今回のポストではここまでとさせて頂きますが、ここまでの設定で計測したデータに対するアラートの設定が行えました。更にWorkflowの設定などを行うことで、メールやSLACKなどへの通知を行うことができる様になります。

# さいごに
ここまで読んでくれてありがとうございます。一連の流れを読んで、実際に試してもらえれば幸いです。色々試してみて、アラートの理解を深めるお役に立てればです。また、自由に利用できるNew Relicの環境がないから試せないなど悩みがある場合は、是非、後続の無料アカウントの取得を行ってみてください。

:::note info
無料のアカウントで試してみよう！
[New Relic フリープランで始めるオブザーバビリティ！
](https://qiita.com/ktst79/items/5ee74b34e6adb8a7a6fa)

:::