みなさんこんにちは。マネージドサービス課の塩野です。
New Relicといえはアプリケーション(APM)のオブザーバビリティを実現するツールとして知っている方も多いと思いますが、ネットワーク監視でも使えますよというお話になります。以前にICMP監視やSyslog監視の話題を取り上げさせていただきましたが、やっぱりネットワーク監視の本命といえばSNMP監視ですね。今回はSNMP監視の中でもSNMP Trapを受信するための基本的な設定について記事にしました。
▼過去の記事はこちら
blog.serverworks.co.jp blog.serverworks.co.jp blog.serverworks.co.jp
目次
概要
システム管理やネットワーク管理を始めたばかりの方にとって、SNMP Trapの設定は難しく感じるかもしれません。しかし、適切な手順を踏めば、誰でもリアルタイムでのネットワーク監視を実現できます。
この記事では、New RelicでSNMP Trapを設定する方法を分かりやすく解説してみました。
SNMPについての基本
SNMPの基本的な仕組み
SNMP(Simple Network Management Protocol)は、ネットワーク機器を管理・監視するためのプロトコルです。ルーターやスイッチ、プリンタなどのネットワーク機器から情報を収集したり、設定を変更したりする際に使われています。
2つの監視方式の違い
SNMPには2つの主要な通信方式があります。
- ポーリング(定期的な問い合わせ)
- 監視システムが定期的に機器に「状態はどうですか?」と聞く方式です。例えば、5分ごとにCPU使用率を確認するような使い方をします。
- Trap(イベント通知)
- 機器で何かイベントが発生した時に、自動的に監視システムに通知する方式です。例えば、機器の電源が落ちた時や温度が異常値になった時に、即座に連絡が来ます。
SNMP Trapは後者の方式で、リアルタイムでの障害検知に非常に有効です。
SNMP Trapの役割
SNMP Trapは、ネットワーク機器で異常やイベントが発生した瞬間に監視システムへ通知を送る仕組みです。これにより、リアルタイムで障害を検知し、迅速な対応が可能になります。
また、定期的なポーリングが不要なため、ネットワークへの負荷を抑えつつ効率的な監視が実現できます。さらに、電源障害や温度異常、インターフェースダウンなど、機器の多様なイベントを幅広く検知できるため、包括的なネットワーク監視に役立ちます。
SNMPバージョンについて
SNMPには3つのバージョンがあり、それぞれ特徴が異なります。 New Relicのネットワーク監視ではこれらの全てのバージョンをサポートしています。
SNMP v1(最も古い)
v1は最もシンプルですが、セキュリティが低く(パスワードが平文)、古い機器との互換性が高いという特徴があります。 古いネットワーク機器やセキュリティ要件が低い内部ネットワークで使用されます。
SNMP v2c(改良版)
v2cはv1の改良版で、エラー処理が改善されています。ただし、セキュリティレベルはv1と同様です。 多くの現行機器でサポートされており、v1より高機能が必要な場合に使用されます。
SNMP v3(最新・高セキュリティ)
v3は認証と暗号化が追加され、セキュリティが大幅に向上しています。ユーザー名・パスワードによる認証(MD5/SHA)、通信内容の暗号化(DES/AES)が可能です。金融機関や外部公開ネットワークなど、セキュリティ要件が高い環境で推奨されます。
設定はやや複雑ですが、New RelicではYAMLファイルで認証情報や暗号化方式を細かく指定できます。SNMP v3を利用する場合は、監視対象機器側でもv3ユーザーやパスワード、暗号化方式の設定が必要です。
設定
事前環境の準備
SNMP Trapの設定を始める前に、いくつかの準備が必要です。
Docker環境の準備
New RelicのSNMP監視エージェントはDockerコンテナとして動作します。
Amazon Linux 2023でのインストール手順は次の通りです。
# パッケージリストの更新 sudo dnf update -y # Dockerのインストール sudo dnf install -y docker # Dockerサービスの開始と自動起動設定 sudo systemctl start docker sudo systemctl enable docker # 現在のユーザーをdockerグループに追加(再ログイン必要) sudo usermod -aG docker $USER
Dockerのインストール確認は次のコマンドで行えます。
docker --version
EC2セキュリティグループの設定
SNMP Trap受信にはUDP 162番ポートの開放が必要です。
AWSコンソールで対象EC2のセキュリティグループに、以下のインバウンドルールを追加してください。
- タイプ: カスタムUDP
- ポート範囲: 162
- ソース: 必要な送信元IP(例: 監視対象機器のIP)
設定後、Trap送信元から疎通テストを行い、受信できることを確認します。
監視対象ネットワーク機器の設定
監視対象機器では以下の設定が必要です。
まず、SNMPサービスを有効化します。次に、コミュニティストリングを設定します(SNMP v1/v2cの場合)。その後、Trap送信先を設定し、最後にSNMPバージョンを選択します。Yamahaルーターの設定例は下記の通りです。
# SNMP v2c の場合 snmp host 192.168.1.100 public snmp community public snmp trap enable
New RelicのSNMP監視設定
設定ファイルの作成
New RelicのSNMP監視エージェントは、YAML形式の設定ファイルで動作を制御します。
設定ファイル(snmp-base.yaml)は主要な4つのセクションから構成されます。
デバイス設定では監視対象デバイスの設定を行います。Trap設定ではSNMPトラップの受信設定を行います。ディスカバリー設定ではネットワークデバイスの自動検出設定を行います。グローバル設定では全体的な設定を行います。
Trapセクションの設定
Trapセクションは、ネットワーク機器から送信されるSNMP Trap(イベント通知)を受信・処理するための設定を記述します。ここでは、Trapの受信ポートや認証情報、SNMPバージョン、Trap専用モードなどを指定します。
基本的なTrap設定は次のようになります。
trap: listen: 0.0.0.0:1620 # 受信アドレス・ポート community: public # コミュニティストリング(v1/v2c) version: v2c # SNMPバージョン(空白=自動) transport: udp # トランスポート(空白=UDP) v3_config: null # SNMP v3設定 trap_only: false # Trap専用モード drop_undefined: false # 未定義Trapの破棄
| キー名 | 必須 | 説明 |
|---|---|---|
| listen | 〇 | SNMPトラップを受信するIPアドレスとポート。デフォルトは0.0.0.0:1620。docker run ... -p 162:1620/udpでホストのUDP 162をコンテナのUDP 1620へ転送します。 |
| community | SNMPv1/v2c用のコミュニティ文字列。デフォルトでは一致しない場合もトラップを受信します。 | |
| version | 利用するSNMPバージョン(v1、v2c、v3)。デフォルトはv2cです。 |
|
| transport | SNMP通信に使うプロトコル(TCPまたはUDP)。デフォルトはUDPです。 |
|
| v3_config | SNMPv3の認証・暗号化設定。version: v3の時のみ指定します。 |
|
| trap_only | trueでSNMPやICMPのポーリングを行わず、トラップ受信だけを行います。 |
|
| drop_undefined | trueでSNMPプロファイルに定義されていないトラップを転送しません(デフォルトはfalse)。 |
表の概要は下記URLを参照のこと docs.newrelic.com
SNMP v3の設定例
SNMP v3を使用する場合の設定例は次の通りです。
trap: listen: 0.0.0.0:1620 version: "3" v3_config: user_name: "snmpuser" authentication_protocol: "MD5" # または "SHA" authentication_passphrase: "authpass123" privacy_protocol: "DES" # または "AES" privacy_passphrase: "privpass123"
devicesセクション
devicesセクションでは、監視対象となるネットワーク機器ごとに設定を記述します。各デバイスのIPアドレス、SNMP認証情報、監視対象OID、説明、MIBプロファイルなどを指定します。SNMP Trapの場合は、ここで指定したmeta情報が参照されてNew Relicに送信されます。
SNMP v2c設定例
devices: office_switch_01: device_name: "office-switch-01" device_ip: "192.168.1.20" snmp_comm: "public" oid: ".1.3.6.1.2.1.1.1.0" # システム情報OID description: "オフィスのメインスイッチ" mib_profile: "cisco-switch.yml" provider: "kentik-switch" poll_time_sec: 60 retries: 2 timeout_ms: 3000 user_tags: location: "office" device_type: "switch"
| キー名 | 必須 | 説明 |
|---|---|---|
| device_name | 〇 | デバイスの名前(NewRelic内の一意識別子) |
| device_ip | 〇 | デバイスのターゲットIP |
| snmp_comm | 〇(SNMPv1/2cのみ) | SNMPv1/2c用コミュニティ文字列 |
| oid | 〇 | systemObjectID/sysObjectID/sysOID(プロファイル自動判定) |
| description | sysDescr(情報用) | |
| mib_profile | 〇(SNMPポーリングに必要) | MIBプロファイルファイル |
| provider | 〇 | エンティティ種別(mib_profileに基づく) |
| poll_time_sec | ポーリング間隔(秒、global上書き) | |
| retries | ポーリング再試行回数(global上書き) | |
| timeout_ms | タイムアウト(ms、global上書き) | |
| user_tags | 任意タグ(場所・用途など) |
全体の設定例
書く項目を統合した設定例です。 設定した内容は、snmp-base.yamlというファイル名で保存します。
# UPS監視の設定例 devices: office_switch_01: device_name: "office-switch-01" device_ip: "192.168.1.20" snmp_comm: "public" oid: ".1.3.6.1.2.1.1.1.0" # システム情報OID description: "オフィスのメインスイッチ" mib_profile: "cisco-switch.yml" provider: "kentik-switch" poll_time_sec: 60 retries: 2 timeout_ms: 3000 user_tags: location: "office" device_type: "switch" # SNMP Trap受信設定 trap: listen: 0.0.0.0:1620 community: public version: v2c transport: udp v3_config: null trap_only: false drop_undefined: false # グローバル設定 global: poll_time_sec: 300 timeout_ms: 3000 retries: 1 user_tags: environment: "production" monitored_by: "newrelic"
Dockerコンテナの起動
設定ファイルの準備ができたら、Dockerコンテナを起動します。 まず、設定ファイル用のディレクトリを作成し、設定ファイルを配置します。
# 設定ファイルのディレクトリを作成 mkdir -p /opt/snmp-config # 設定ファイルを配置 cp snmp-base.yaml /opt/snmp-config/
基本的な起動コマンドは次の通りです。
# Dockerコンテナの起動
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
まとめ
この記事では、New RelicでSNMP Trapを設定する方法をわかりやすく解説してみました。 ここまではデータ取得の設定になりますので、データ送信まで確認できた後はNew Relicでキレイにデータを表示するためのMIB読み込みの設定が必要になります。次回はMIB周りの設定について記載したいと思います。
こちらの記事がどなたかのお役に立てれば幸いです。
◆ 塩野 正人
◆ マネージドサービス部 所属
◆ X(Twitter):@shioccii
◆ 過去記事はこちら
前職ではオンプレミスで仮想化基盤の構築や運用に従事。現在は運用部隊でNew Relicを使ってサービス改善に奮闘中。New Relic User Group運営。