New RelicでSNMP Trapの基本的な監視設定をしよう

記事タイトルとURLをコピーする

みなさんこんにちは。マネージドサービス課の塩野です。

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:1620docker run ... -p 162:1620/udpでホストのUDP 162をコンテナのUDP 1620へ転送します。
community SNMPv1/v2c用のコミュニティ文字列。デフォルトでは一致しない場合もトラップを受信します。
version 利用するSNMPバージョン(v1v2cv3)。デフォルトは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運営