概要
カスタムメトリクスとしてサーバ内での任意のコマンド実行結果をNewRelicに収集したい場合、サーバ内にインストールしたInfrastructure AgentのFlex機能が役に立つ。
前提
- 実行環境はAmazon Linux 2
- Infrastructure Agentはインストール済み
-
newrelic-infra
コマンドが使える状態 - インストール手順についてはこちら(公式ドキュメント)
-
手順
1: ymlファイルを作成
/etc/newrelic-infra/integrations.d
配下にymlファイルを作成する。
ファイル名は自由。今回はflex.yml
とする
以下サンプル
integrations:
- name: nri-flex # ここには必ずnri-flexを指定
interval: 30s # データを取得する間隔。デフォルトは30秒
config:
name: dfFlex # 一意の設定名をつける。
apis:
- name: dfOutput # メトリクス名。NewRelicのクエリビルダーでは"dfOutputSample"という名前になる。
commands:
- run: df -i # 実行するコマンド
split: horizontal
set_header: [filesystem,inodes,iused,ifree,iusedPerf,mountedOn] # 後述のsplit_byで分割された値をそれぞれ格納するvalue
regex_match: true
split_by: (\S+)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\S+)\s+(\S+) # 正規表現でコマンド実行結果を分割
perc_to_decimal: true
このサンプルではdf -i
コマンドの実行結果をメトリクスとして収集できる。
ファイルシス Iノード I使用 I残り I使用% マウント位置
devtmpfs 499594 297 499297 1% /dev
tmpfs 501843 2 501841 1% /dev/shm
tmpfs 501843 377 501466 1% /run
tmpfs 501843 16 501827 1% /sys/fs/cgroup
/dev/xvda1 15727552 129528 15598024 1% /
tmpfs 501843 1 501842 1% /run/user/1000
ymlを設定した時点でメトリクス収集設定は完了!
2: ちゃんとメトリクスが送信されているか確認
以下コマンドで確認可能
sudo /var/db/newrelic-infra/newrelic-integrations/bin/nri-flex -verbose -pretty -config_path /etc/newrelic-infra/integrations.d/flex.yml
/var/db/newrelic-infra/newrelic-integrations/bin/
配下にnri-flexというバイナリファイルが存在しており、これによってエージェントの挙動を確認することができる。
出力結果として以下のように、自分が設定したメトリクスが送信されているよーってログが確認できていればOK
"metrics": [
{
"event_type": "dfOutputSample",
"filesystem": "devtmpfs",
"ifree": 499297,
"inodes": 499594,
"integration_name": "com.newrelic.nri-flex",
"integration_version": "1.5.2",
"iused": 297,
"iusedPerf": 1,
"mountedOn": "/dev"
},
メトリクスが送信できていない時
以下のケースが考えられる
- ymlファイルの正規表現にマッチしない
- コマンドの出力結果が意図するものになっていない(権限エラーなど)
3: NewRelicでクエリ作成
上記手順で作成したメトリクスをもとに、NewRelic側でクエリを作成する。
FROM dfOutputSample
SELECT average(ifree)
facet filesystem, mountedOn
ファイルシステム・マウント位置ごとの空きノードを取得してみる。
データが取得できることが確認できた。
参考