はじめに
New Relic を活用したネットワーク機器のモニタリング
New Relicではネットワーク運用監視向けにNetwork Performance Monitoring(NPM)を提供しています。さまざまな機能を提供しており、SNMP、Syslog、Network Flowといったプロトコルに対応しています。
今回はNPMのSNMP機能でポーリングしているデバイスの一覧がどこで管理されているのか、そしてデバイスの設定を外部ファイルで管理する方法について紹介します。ファイルを分けることで監視台数が多い等の理由で手動でのディスカバリーが必要な環境においてデバイスの一覧情報をファイルの置き換えることで更新できたり、モニタリング設定のバージョン管理ができるようになるといったメリットがあります。
最新のアップデートの詳細はこちら
New Relic アップデート一覧
New Relic株式会社のQiita Organizationでは、新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。
今回紹介する New Relic NPM は、無料アカウントでも利用できます。是非永久無償ライセンスをこちらから試してみてください。
デバイスの設定一覧はどこにあるのか
New Relic の NPM は、kentik 社の ktranslate を使用してデバイスの情報を収集しています。どの機器からSNMPで情報を収集するのかという設定は、ktranslateの設定であるため New Relic の UI 上から設定を確認することはできません。
snmp-base.ymlに書き込まれている
ktranslate のSNMPの設定は、 snmp-base.yml で管理されていて、ポーリングしているデバイスの一覧もこのファイルに存在します。
正確には、ktranslateの起動に指定している -snmp
のフラグで指定しているファイルです。
docker run -d --name ktranslate-$CONTAINER_SERVICE \
--restart unless-stopped \
--pull=always -p 162:1620/udp \
-v `pwd`/snmp-base.yaml:/snmp-base.yaml \
-e NEW_RELIC_API_KEY=$YOUR_NR_LICENSE_KEY \
kentik/ktranslate:v2 \
-snmp /snmp-base.yaml \
-nr_account_id=$YOUR_NR_ACCOUNT_ID \
-metrics=jchf \
-tee_logs=true \
-service_name=$CONTAINER_SERVICE \
-snmp_discovery_on_start=true \
-snmp_discovery_min=180 \
nr1.snmp
snmp-base.yml の構成要素
snmp-base.yml のファイルは大きく4つのセクションに分かれています。
- devices
-
SNMPでポーリングしているデバイスの情報、設定が記載されています。
device_name が New Relic の UI に表示されているデバイスのエンティティ名です。 - trap
- SNMPTrapを有効化する場合に必要な設定が記載されています。
- discovery
- SNMPでポーリングするデバイスを探索する際に必要な設定が記載されています。
- global
- SNMPでポーリングする際のタイムアウトやリトライ回数のデフォルト設定が記載されています。
各セクションに含まれるの設定値の詳細については、New Relic の公式ドキュメントもしくはGithubのWikiで確認できます。
デバイスの設定を別ファイルで管理する方法
デバイスの設定を外部の設定ファイルで管理することが可能です。
実践
実際に外部設定ファイルを作成してみます。
1. snmp-base.yamlの設定
外部設定ファイルを使用するために devices セクションに "@ファイル名" の形式でファイル名を記載する。
devices: "@network-devices.yaml"
trap:
listen: 0.0.0.0:1620
community: ""
version: ""
transport: ""
v3_config: null
trap_only: false
drop_undefined: false
discovery:
cidrs:
- 192.168.100.1
- 192.168.100.3
ignore_list: []
debug: false
ports:
- 161
default_communities:
- public
use_snmp_v1: false
default_v3: null
add_devices: true
add_mibs: true
threads: 4
replace_devices: false
check_all_ips: true
kentik: null
global:
poll_time_sec: 300
mib_profile_dir: /etc/ktranslate/profiles
mibs_enabled:
- IF-MIB
timeout_ms: 3000
retries: 0
2. 外部設定ファイルを作成する
下記のコマンドを使用して空の設定ファイルを作成します。
touch network-devices.yaml
ここまでの手順で準備は完了です。この時点で作業ディレクトリには下記の様にnetwork-devices.yamlとsnmp-base.yamlが配置されている状態です。
% ls -1
network-devices.yaml
snmp-base.yaml
あとはktranslateのコンテナを起動するだけです。またこの際に注意が必要なのは、ktranslateを起動する際のマウント引数に外部設定ファイルを設定する必要があるということです。下記のように指定することでデバイスの設定が外部設定ファイル network-devices.yaml に出力されます。
docker run -d --name ktranslate-$CONTAINER_SERVICE \
--restart unless-stopped \
--pull=always -p 162:1620/udp \
-v `pwd`/snmp-base.yaml:/snmp-base.yaml \
-v `pwd`/network-devices.yaml:/network-devices.yaml \
-e NEW_RELIC_API_KEY=$YOUR_NR_LICENSE_KEY \
kentik/ktranslate:v2 \
-snmp /snmp-base.yaml \
-nr_account_id=$YOUR_NR_ACCOUNT_ID \
-metrics=jchf \
-tee_logs=true \
-service_name=$CONTAINER_SERVICE \
-snmp_discovery_on_start=true \
-snmp_discovery_min=180 \
nr1.snmp
ktranslateのコンテナを起動するとディスカバリーの処理が実行されて指定したIPアドレスの範囲にあるデバイスの情報を取得します。そのデバイスの情報が下記のnetwork-devices.yamlに出力されます。
192.168.100.1__192.168.100.1:
device_name: 192.168.100.1
device_ip: 192.168.100.1
snmp_comm: public
use_snmp_v1: false
debug: false
port: 161
oid: .1.3.6.1.4.1.1182.1.41
description: RTX810 Rev.11.01.34 (Tue Nov 26 18:39:12 2019)
last_checked: 2024-03-18T11:41:28.162192884Z
mib_profile: yamaha-rt.yaml
provider: kentik-router
user_tags: {}
discovered_mibs:
- IF-MIB
- YAMAHA-RT-HARDWARE
match_attributes: {}
monitor_admin_shut: false
no_use_bulkwalkall: false
purge_after_num: 0
192.168.100.3__192.168.100.3:
device_name: 192.168.100.3
device_ip: 192.168.100.3
snmp_comm: public
use_snmp_v1: false
debug: false
port: 161
oid: .1.3.6.1.4.1.211.1.127.118.39
description: '''SR-S318TL2'' ''2.1 V14.00'' ''Fri Jan 31 20:52:37 JST 2014'''
last_checked: 2024-03-18T11:41:29.17629276Z
mib_profile: sr-s.yml
provider: kentik-switch
user_tags: {}
discovered_mibs:
- FUJITSU-SRS
- IF-MIB
match_attributes: {}
monitor_admin_shut: false
no_use_bulkwalkall: false
purge_after_num: 0
まとめ
今回はNPMのSNMP機能でポーリングしているデバイスの一覧を外部ファイルで管理する方法について紹介しました。このアプローチを採用する利点は、複数のネットワーク機器にわたる監視作業の効率化です。具体的には、外部ファイルを用いることで、機器の一覧更新や設定のバージョン管理を簡単に実行できるようになります。
外部ファイルによる管理方法は、監視対象のネットワーク機器が増えた場合でも柔軟に対応できるため、スケーラビリティの面でもメリットがあります。New Relic NPMと外部ファイルを組み合わせることで、ネットワーク機器の効率的なモニタリングと運用の最適化・自動化を実現しましょう。
New Relic株式会社のQiita Organizationでは、新機能を含む活用方法を公開していますので、ぜひフォローをお願いします。