はじめに

New RelicのEC2プロセス監視において、New Relic Agentの設定によりアラート発生条件が揃っていたとしてもインシデントが発砲せず各種連携サービスに通知が届かない場合があるので、その対処法をご紹介します。

環境

OS Amazon Linux 2
Agent Version 1.40.1

本事象の発生原因

NRQLの設定によりますが、以下の条件が揃うとAlert Conditionのグラフ上ではCritical incidentが発生していたとしても、インシデントが発砲されません。
・AgentからNew Relicへ送るプロセスデータを以下のように一つに絞っている場合(本記事では対象プロセスをhttpdとします)

enable_process_metrics: true
disable_zero_mem_process_filter: true
include_matching_metrics:
  process.name:
    - regex "^httpd"
  process.executable:
    - "/usr/sbin/httpd"

・信号喪失の設定をしていない場合

事象の予防方法

予防方法としては2種類あります。

予防策A

New Relicへ送るプロセスデータを2種類以上にする
NRQLのSELECT句でfilterを使用する

予防策B

NRQLのSELECT句でcountを使用する
信号喪失設定を実施する

事象の予防手順

予防策Aの場合

1.AgentからNew Relicへ送るプロセスデータを二つ以上に設定する
 今回はchronydプロセスを追加で設定します。

enable_process_metrics: true
disable_zero_mem_process_filter: true
include_matching_metrics:
  process.name:
    - regex "^chronyd"
    - regex "^httpd"
  process.executable:
    - "/usr/sbin/chronyd"
    - "/usr/sbin/httpd"

2.以下のようにNRQLを記述する

SELECT filter(Count(*), where processDisplayName = 'httpd')  FROM ProcessSample FACET provider.ec2InstanceId WHERE provider.ec2InstanceId='i-xxx'

予防策Bの場合

1.AgentからNew Relicへ送るプロセスデータは一つでも問題ありません
2.以下のようにNRQLを記述する

SELECT count(*) FROM ProcessSample FACET provider.ec2InstanceId WHERE provider.ec2InstanceId='i-xxx' AND processDisplayName='httpd'

3 Define thresholdsにて、信号喪失設定のチェックリストにチェックを入れます。
 ☑︎ Open new “lost signal” incident

まとめ

この記事では、二通りの対処法を紹介しました。
なお、予防策Bは信号喪失設定の必要があり、EC2が停止した際にもプロセスアラート発生の条件が揃うので、インシデントが発生することをご留意ください。

参考:https://docs.newrelic.com/jp/docs/alerts-applied-intelligence/new-relic-alerts/alert-conditions/create-nrql-alert-conditions/#signal-loss