目次
こんにちは、那須です。本記事は New Relic Advent Calendar 2022 の9日目の記事です。たまたまこの日だけエントリがなかったので書いてみました。
最近、New Relic でどういう情報が見れるのかをいろいろ試しています。その中で New Relic Flex というものでどのような情報が取れそうか調べて簡単に試してみました。
New Relic Flexとは
簡単に書くと、API からのレスポンスやOSコマンドの実行結果を処理して New Relic に送信してくれるものです。詳しくは こちら や こちら をご覧ください。New Relic Infrastructure agent が導入されていることが前提条件です。
やりたいこと
SAP システムの BASIS 運用で SAP プロセスが動いていることを確認されている方は多いと思います。ただ、わざわざサーバにログインして確認したくはありませんし、監視システムでチェックしててもアラートがなければ気づきません(プロセスはアラートで気づくべきなのですが、一旦この記事ではそういうことにします
ダッシュボード形式で今のプロセス状態をパッと見てわかるようにしたいのと、過去1時間の SAP プロセスの状態履歴をグラフで見れるようにしたいということで話を進めます。
試したこと
ドキュメントや GitHub での説明を読んだだけではよくわからなかったので、いきなりテスト環境でガチャガチャと試してみました。
まずは設定ファイルを作成
見よう見まねで以下のように作成しました。ファイル名はなんでもいいです。
これを /etc/newrelic-infra/integrations.d/ に置きます。
integrations:
- name: nri-flex
interval: 60s
config:
name: SAPProcessCheck
apis:
- name: sapcontrol
commands:
- run: su - sidadm -c "/usr/sap/hostctrl/exe/sapcontrol -nr 0 -function GetProcessList | tail -n +6 || true"
set_header: [name, description, dispstatus, textstatus, starttime, elapsedtime, pid]
split: horizontal
split_by: ", "
これだけで sapcontrol の結果が New Relic に送信されます。簡単ですね。気を付けている点としては、New Relic Infrastructure agent は root ユーザで動くので sidadm ユーザで実行しているのと、GetProcessList は正常時のリターンコードが 3 なので最後に無理やり 0 にしています。リターンコードが 3 のままだと New Relic 側でエラー扱いとなってデータが見れませんでいた。出力結果はカンマで区切った形で一旦すべて New Relic に送ることにします。
ちなみに、このコマンドの実行結果は以下のようになります。
# su - sidadm -c "/usr/sap/hostctrl/exe/sapcontrol -nr 0 -function GetProcessList"
09.12.2022 14:34:01
GetProcessList
OK
name, description, dispstatus, textstatus, starttime, elapsedtime, pid
disp+work, Dispatcher, GREEN, Running, 2022 12 09 09:10:40, 5:23:21, 5179
igswd_mt, IGS Watchdog, GREEN, Running, 2022 12 09 09:10:40, 5:23:21, 5180
gwrd, Gateway, GREEN, Running, 2022 12 09 09:10:41, 5:23:20, 5184
icman, ICM, GREEN, Running, 2022 12 09 09:10:41, 5:23:20, 5185
NRQL で表示を整える
無事にデータが送られてきていたので、NRQL で早速処理していきます。ちなみに NRQL は「ぬるくる」と読むそうですよ。設定ファイルの set_header で「name, description, dispstatus, textstatus, starttime, elapsedtime, pid」と指定したので、それぞれの名前でデータが入っています。設定ファイルの apis.name で「sapcontrol」と指定したので、FROM 句は「sapcontrolSample」となります。
FROM sapcontrolSample SELECT *
データが入ってきていることが確認できたら、次は表示する項目を絞っていきます。ホストとプロセスごとに状態を表示したいので、FACET 句にhostname, name、SELECT 句には最終のステータスを表示させたいので latest(dispstatus) を指定しましょう。この NRQL クエリを実行すると下の画像のようになりました。
FROM sapcontrolSample SELECT latest(dispstatus) FACET hostname, name
いい感じでプロセスの状態が表示できたところで、ダッシュボードにそのまま追加します。Query your data の画面の右下に「Add to Dashboard」というボタンがあるのでそれを押すだけでダッシュボードにこのチャートを追加できます。楽ですね。
次に時系列で SAP プロセスの状態履歴を見れるようにしましょう。先ほどの sapcontrolSample のデータを使って NRQL クエリを書きます。こんな感じです。ホスト名とプロセス名の組み合わせごとにグラフの線をつくります。また、ステータスが GREEN の場合に 1 をプロットするようにします。以下のどちらでも同じチャートが作れます。
FROM sapcontrolSample SELECT count(*) ago FACET if( dispstatus = 'GREEN', 'GREEN' , 'NOT GREEN'), hostname, name TIMESERIES 1 minute
FROM sapcontrolSample SELECT filter(count(*), WHERE dispstatus='GREEN') FACET hostname, name TIMESERIES 1 minute
最後に先ほどと同様に「Add to Dashboard」ボタンを押して完了です。
結果
ダッシュボードに追加したらこのようになりました。少し小さく表示しているので先ほどのような並びではありませんが、見たい情報は見れていますね。初めて New Relic Flex を触ってみたんですが、使い方がわかってしまえば本当に何でもできるんだなと思いました。
さいごに
コマンド結果を処理して常時可視化できるのは、サーバにログインしなくてもいいという点で SAP プロセスに限らずとても嬉しいことだと思います。現時点で標準で見れない情報はうまく New Relic Flex を使って運用に役立つ形を作れると嬉しいので頑張ります!
- カテゴリー