まえがき
システムの監視と障害対応は非常に重要なプロセスで、何らかの問題が発生した際、迅速かつ効果的に対処する能力は、サービスの品質と信頼性に直結します。
NewRelicはシステムのモニタリングが可能なSaaSであり、PagerDutyはインシデント管理するSaaSです。
これら二つのツールを統合することで、システムの監視から障害発生時の通知まで、一元的かつ効率的に管理することが可能となります。
本記事では、NewRelicとPagerDutyをインテグレーションし、AWS EC2リソースのモニタリングとインシデント管理の仕組みを構築するための8つのステップを詳しく解説します。
イメージ:
※後述のHowToに必要な前提条件:AWSアカウント所持している。EC2構築済みである。構築したEC2にSSH接続が可能である。
早速見ていきましょう。
目次
- 1. ステップ1:PagerDutyのアカウントを作成する。
- 2. ステップ2:PagerDutyでNewRelicとインテグレーションする用のサービスを作成する。
- 3. ステップ3:NewRelicのアカウントを作成する。
- 4. ステップ4:EC2にNewRelicエージェントをインストールする。
- 5. ステップ5:AWSとNewRelicをインテグレーションする。
- 6. ステップ6:NewRelicでアラートとポリシーを作成する。
- 7. ステップ7:PagerDutyとNewRelicをインテグレーションする。
- 8. ステップ8:EC2に負荷をかけ、NewRelicアラート発報させる。
- 9. まとめ
1. ステップ1:PagerDutyのアカウントを作成する。
https://ja.pagerduty.com/sign-up/
URLにアクセスし、「トライアル」から情報を入力し無料アカウントを作成します。
登録が完了し以下のページに遷移ができることを確認します。
2. ステップ2:PagerDutyでNewRelicとインテグレーションする用のサービスを作成する。
「Services」タブを選択、「+ New Service」をクリックする。
以下のように入力し「Next」クリックする。
設定する項目 | 入力する項目 |
---|---|
Name* | pagerduty-newrelic-integration |
Description | pagerduty-newrelic-integration |
エスカレーションポリシーの選択画面ですが、「Default」を選択します。「Next」クリックする。
アラートグループ機能も今回使用しないため「Turn Off Alert Grouping」を選択
インテグレーションするサービスを選択できる画面に遷移するため、「NewRelic」にチェックを入れ、「Create Service」をクリックする。
作成完了画面に遷移すると、NewRelicをインテグレーションするためのAPI Keyが表示される。
これは後続の手順ステップ7で使用するため控えておく。
3. ステップ3:NewRelicのアカウントを作成する。
https://newrelic.com/jp/sign-up-japan
URLにアクセスし、「無料で始める」をクリックし「サインアップ」の項目に情報を入力し無料アカウントを作成します。
登録が完了し以下のページに遷移ができることを確認します。
4. ステップ4:EC2にNewRelicエージェントをインストールする。
今回EC2のOSは「Amazon Linux 2 AMI (HVM) – Kernel 5.10, SSD Volume Type」になります。
NewRelic画面から「All Entities」→「Linux」を選択する。
次ページへ遷移→「Begin installation」を選択する。
「Copy and run the command」ページのモーダルウィンドウが表示される。→表示されているコマンドをコピーする。
EC2にSSH接続し、コピーしたコマンドを入力する。
NewRelicエージェントのインストールが始まります。
We've detected additional monitoring that can be configured by installing the following: Golden Signal Alerts ? Continue installing? (Y/n)
途中で上記質問を聞かれると思います、今回「Golden Signal Alerts」の追加設定は不要なので、「n」を入力してエンターを押してください。
インストールが成功すると以下のような画面となります。
インストールログ終盤にアクセス用のURLが発行されますので、以下の文言のURLをクリックします。画面が遷移します。
View your data at the link below: ⮕ https://onenr.io/xxxxxxx
「See your data」をクリックすると、エージェントをインストールしたEC2のモニタリング可能な様々なデータが表示されていることが確認できます。
5. ステップ5:AWSとNewRelicをインテグレーションする。
NewRelic公式手順を参考にする。
※インテグレーション推奨となりますが、こちらのステップはスキップしても問題ありません。
ステップ5で作成するアラートのNRQLの中でlabel.Nameが使用できなくなります。
アラートの作成発報は行なえます。
6. ステップ6:NewRelicでアラートとポリシーを作成する。
今回はCPU使用率をモニタリングするため、CPU使用率が80%を1分間で1回でも超過した場合に発報するアラート条件で作成する。
「Alerts & AI」→「Alert Conditions & Policies」→「Create alert condition」を選択する。
「Build a query」を選択する。
以下のNRQLクエリを入力する。
SELECT latest(cpuPercent) FROM SystemSample FACET awsAccountId,label.Name WHERE label.Name='pagerduty-newrelic-Integration-ec2'
グラフが表示されるため、カーソルを照らしアカウントIDとEC2インスタンス名が表示され、正しいことを確認する。
※ステップ5のAWSとNewRelicのインテグレーションをスキップされた方は、label.Nameが使用できずnullとなりますので、以下のNRQLを代用ください。部分は代入が必要です。
SELECT latest(cpuPercent) FROM SystemSample FACET awsAccountId,hostname WHERE hostname='ip-<プライベートIP>.<リージョン>.compute.internal'
「Next」をクリックすると、「Adjust to signal behavior」ページが遷移するが設定する項目がないため「Next」をクリックしスキップする。
「Define your thresholds」ページに遷移する。ここではアラート条件を設定できる。
以下の条件を選択・入力する。「Next」をクリックする。
設定する項目 | 選択する値 |
---|---|
Severity level | Critical |
設定する項目 | 選択する値 | 入力する値 | 選択する値 | 入力する値 | 選択する値 |
---|---|---|---|---|---|
When a query returns a value | above or equal to | 80 | at least once in | 1 | minnutes |
「Add details」のページに遷移する。
以下の条件を選択・入力する。「Save & set up notifications」をクリック、アラートとポリシーを作成する。
設定する項目 | 選択・入力する項目 |
---|---|
Name your alert condition * | ec2 cpu使用率アラート |
Connect your alert condition to a policy | New policy |
Policy name * | pagerduty-newrelic-Integration |
Group incidents into issues | One issue per condition |
Close open incidents after | 10 minutes |
7. ステップ7:PagerDutyとNewRelicをインテグレーションする。
ステップ6でアラートとポリシーを作成完了すると以下のような画面となっている。
これはNewRelicのポリシーに紐づくアラートの発報先にPagerDutyを紐付けることが可能な設定画面です。
「PagerDuty」のアイコンをクリックする。
(初期画面からの移動する場合、「Alert & AI」クリック→「Alert Conditions & Policies」クリック→「pagerduty-newrelic-Integration(作成したポリシー名)」クリック→「Notification settings」クリック→「Create a workflow」クリック)
「New Channel」は入力しなくて問題ないです。
「Add a destinition」をクリックする。
destinition詳細画面では2つの設定方法があるが、「Service integration」のみ設定する。
「Service Name」には、作成したPagerDutyのサービス名「pagerduty-newrelic-integration」を入力する。
「Integration key」には、ステップ2でコピーしたインテグレーションキーを入力する。
設定を保存する。
画面が戻るので、「Save message」をクリックする。
インテグレーション設定追加が確認できれば、「Activate workflow」をクリックする。
ポリシーの「Notification settings」にPagerDutyへのインテグレーションが追加された。
8. ステップ8:EC2に負荷をかけ、NewRelicアラート発報させる。
最後のステップでは、発報されたアラートをPagerDutyでインシデントとして管理できるか動作確認します。
EC2にSSH接続します。
以下コマンドでstressというツールをインストールする。
パッケージのアップデート
sudo amazon-linux-extras install epel -y
stressのインストール
sudo yum install stress -y
3分間80%のCPU使用率となるように負荷をかける。想定の挙動では3分間経過するとCPU使用率が戻るためPagerDuty、NewRelicともにクローズされるはずです。
stress --cpu 1 --timeout 180s
CPU使用率が80%超過したためPagerDutyにインシデントが起票されました。
また起票されたインシデントの下部にはNewRelicへのリンクが「Issue Page」に埋め込まれています。こちらクリックすると詳細な情報閲覧が可能です。
NewRelic詳細情報リンクでは、streesコマンドで負荷をかけた3分間でアラート条件を満たし発報されている。さらに3分間を経過した時点でアラート解消していることも確認できる。
9. まとめ
PagerDutyを使用する事でAWSアカウントのリソースを始め、マルチクラウドリソースや他の監視ツールでモニタリングしているリソースなども一括してインシデント管理をすることが可能となります。
PagerDutyにインシデントを集約する事で過去のデータを分析することも可能となります。
PagerDutyを取り入れる事でたくさんのメリットが教授できるかと思いますので、是非みなさん使ってみてはいかがでしょうか。