はじめに
New Relic でSeniorTechnicalSupportEngineerをしている九龍です。
New Relic ではInfrastructure Agentを利用してOSのプロセス情報
Windows Serviceの情報を収集することが出来ます。
これらの設定はデータ量が多いためデフォルトでは収集せず、明示的に設定を行ったりガイド付きインストールによって自動化する必要があります。
これらの設定には似たようなパラメーターやあまり認知されていないパラメーターもあるため、よく(社内で)問合せされるパラメーターについて解説をしたいと思います。
プロセスモニタリング設定
New Relic Infrastructure ではOSのリソース情報だけではなくプロセス毎のCPU,Memory、Storage、Networkの利用状況を簡単に収集することが出来ます。
この機能は以下の場合に動作するようになります。
- Infra Agentをガイド付きインストールでインストールした場合(自動的に下記の設定が追記されます。)
-
enable_process_metrics
を 手動でtrue
に設定した場合
これによってOS内部で動作している各種プロセス毎のリソース情報が収集されるようになります。
コマンドライン引数の収集
プロセスモニタリングは情報漏洩リスクを軽減するためデフォルトではコマンドライン引数の情報を収集しません。
データを分析する際にコマンドライン引数まで含めて識別する必要がある場合にはコマンドライン引数の削除を無効化する必要があります。
strip_command_line
を false
に設定することによって コマンドライン引数も収集されるようになります。
対象プロセスのフィルタリング
全てのプロセス情報を収集することによって自分たちが意図していないプロセスがリソースを浪費しているなどの問題に気づく事ができます。
適切な分析のためには全てのプロセス情報を収集することをおすすめします。
しかし、コスト制約などによって特定のプロセスの稼働状況だけを把握したい場合には指定したプロセスの情報だけを収集することも可能です。
include_matching_metrics
Blockでプロセス名やコマンドライン引数を文字列もしくは正規表現で一致するプロセスの情報だけを収集するように指定する事ができます。
[Infrastructure Agent v1.57.0以降ではexclude_matching_metrics
で除外設定も行えるようになりました。]
include_matching_metrics: # You can combine attributes from different metrics
process.name:
- regex "^java" # Include all processes starting with "java"
process.executable:
- "/usr/bin/python2" # Include the Python 2.x executable
- regex "\\System32\\svchost" # Include all svchost executables
Memoryを消費していないプロセスの情報を収集する
New Relic Infrastructure では、プロセスを消費している≒システムに負荷をかけているプロセスを分析することに主眼を置いているため、リソースを消費していない(メモリ消費をしていない)プロセスの情報は収集されません。
待機系プロセスなどの死活監視のために、メモリを消費していないプロセスの情報を収集し続ける必要がある場合にはこのフィルタを無効化する必要があります。
disable_zero_mem_process_filter
を true
に設定すればメモリを消費していないプロセスの情報も収集されるようになります。
※これはゼロメモリのプロセスフィルターを設定をdisable(無効)にするをtrueにするという事です。
ドラクエ風に表現すると設定値が理解しやすいと思います。
ゼロメモリーのプロセスフィルターをdisabled(無効)にしますか?
・はい(True)
・いいえ(false)
Windows サービスのモニタリング
New Relic Infrastructure でWindows サービスの状態をモニタリングする場合にはWindows services integration を利用します。
これによって、Windows サービスの状態(実行中、停止中など)や開始モード(自動、手動)などの設定値を収集することが出来ます。
これらの値はMetric
Sampleに収集されます。
動作していないサービスを検出するNRQLは以下のようになります。
SELECT count(*) FROM Metric WHERE metricName = 'windows_service_state' AND state != 'running' FACET hostname, service_name
Windows services integrationでは各種アプリケーションのサービス情報を収集します。
Windows OS 自体のサービス情報(Win32.*)は収集しません。
Windows OS 自体の内部サービスの情報も収集する必要がある場合はwinservices-config.yml
で以下のようにWin32 サービスを含めるように設定します。
integrations:
- name: nri-winservices
config:
exporter_bind_address: 127.0.0.1
exporter_bind_port: 9182
include_matching_entities:
windowsService.name:
- regex "win32.*"
- "newrelic-infra"
scrape_interval: 30s
timeout: 60s
Inventoryに記録されるサービス
Infrastructure Agentにはwindows_services_refresh_sec
というパラメータが存在します。
このパラメーターもWindowsのサービスの情報を収集しますがこのパラメータによって収集されたWindows サービス情報は上記のWindows services integration とは関連がありません。
windows_services_refresh_sec
によって収集されたデータはInventoryとInfrastructureEvent
Sampleに記録されます。
以下のように設定した場合にはInfrastructureEventおよびInventoryへのWindows サービス情報の登録が停止します。
windows_services_refresh_sec : -1
まとめ
プロセス情報・サービス情報を収集することによって、単なるサーバーリソースの監視では無く一体どのようなプロセス、サービスにリソースが消費されているのか本来目的としているサービスに利用されるべきサーバーリソースが想定外のプロセスに浪費されていないかなどを確認することが出来るようになります。
これにより、スケールアウトではなくスケールアップが適しているなどの適切なサービス構成を計画する事が出来るようになります。
New Relic Infrastructure Agentのパラメーターを適切に設定してよりよいInfrastructure オブザーバビリティを実現してください。