SNMP Trap設定ファイル生成ツール

このツールはNew RelicのktranslateでSNMP Trapを受信するための設定ファイルを生成します。

SNMP Trap受信設定
通常は0.0.0.0:1620に設定し、Dockerで-p 162:1620/udpのようにリダイレクトします
🔒 セキュリティ推奨:
  • v3: 暗号化と認証をサポート(本番環境推奨)
  • v1/v2c: 平文通信のため、信頼できるネットワーク内でのみ使用
ℹ️ 情報: この設定ファイルはSNMP Trap受信専用です。
  • SNMPポーリング機能は無効になります
  • トラップ受信とNew Relicへの転送に特化した設定です
MIB・プロファイル設定
ベンダーを選択してからプロファイルを選択します(選択したプロファイル名がmibs_enabledに追加されます)
個別のMIB名を指定します(プロファイルと合わせてmibs_enabledに出力されます)

🚀 SNMP Trap監視コンテナ起動手順

ktranslateでSNMP Trapを受信・監視するための手順です

1

環境変数の設定

New Relicの認証情報を設定します

export NEW_RELIC_API_KEY="your_license_key"
export NR_ACCOUNT_ID="your_account_id"
2

設定ファイルの準備

設定管理タブで生成したYAMLファイルを保存します

# 設定ファイルを snmp-trap-base.yaml として保存
# 設定管理タブで生成したYAMLをコピーして保存してください
3

コンテナ起動

SNMP Trap監視コンテナを起動します

🎯 標準起動(推奨)

設定ファイルを使用してSNMP Trap監視を開始

docker run -d --name ktranslate-snmp-trap \
  --restart unless-stopped \
  -p 162:1620/udp \
  -v $(pwd)/snmp-trap-base.yaml:/snmp-trap-base.yaml \
  -e NEW_RELIC_API_KEY="$NEW_RELIC_API_KEY" \
  kentik/ktranslate:v2 \
  -snmp /snmp-trap-base.yaml \
  -nr_account_id="$NR_ACCOUNT_ID" \
  -metrics=jchf \
  -tee_logs=true \
  -dns=local \
  -service_name="ktranslate-snmp-trap" \
  nr1.snmp
🔧 デバッグモード

ログ出力を詳細にして問題を調査

docker run -d --name ktranslate-snmp-trap-debug \
  --restart unless-stopped \
  -p 162:1620/udp \
  -v $(pwd)/snmp-trap-base.yaml:/snmp-trap-base.yaml \
  -e NEW_RELIC_API_KEY="$NEW_RELIC_API_KEY" \
  kentik/ktranslate:v2 \
  -snmp /snmp-trap-base.yaml \
  -nr_account_id="$NR_ACCOUNT_ID" \
  -metrics=jchf \
  -tee_logs=true \
  -dns=local \
  -log_level=debug \
  -service_name="ktranslate-snmp-trap-debug" \
  nr1.snmp
4

動作確認

コンテナの起動状態とログを確認します

コンテナ状態確認
docker ps | grep ktranslate-snmp-trap
ログ確認
docker logs ktranslate-snmp-trap
New Relicでの検索
# New Relic Insights/NRQL
SELECT * FROM InfrastructureEvent WHERE eventType = 'SnmpTrap'
5

テスト送信

SNMP Trapの送信テストを行います

snmptrapコマンドでのテスト
# SNMPv2c テストトラップ
snmptrap -v2c -c public localhost:162 '' 1.3.6.1.4.1.1.1.1 \
  1.3.6.1.4.1.1.1.1.1 s "Test trap message"
Pythonでのテスト
# Python pysnmp使用例
from pysnmp.hlapi import *

for (errorIndication, errorStatus, errorIndex, varBinds) in sendNotification(
    SnmpEngine(),
    CommunityData('public'),
    UdpTransportTarget(('localhost', 162)),
    ContextData(),
    'trap',
    NotificationType(ObjectIdentity('1.3.6.1.4.1.1.1.1')),
    lexicographicMode=False):
    if errorIndication:
        print(errorIndication)
        break

🔧 トラブルシューティング

ポート162がバインドできない

権限やポート競合の問題

  • Linuxでは sudo でDockerを実行(ポート162は特権ポート)
  • 他のSNMPサービスが162ポートを使用していないか確認
  • ファイアウォールで162/udpが開放されているか確認
トラップが受信されない

ネットワークや設定の問題

  • 送信元デバイスのトラップ設定を確認
  • コミュニティ文字列が一致しているか確認
  • SNMPバージョンが一致しているか確認
  • ネットワーク経路でUDP 162が通るか確認
トラップが解釈されない

MIBやプロファイルの問題

  • 適切なMIBが設定に含まれているか確認
  • ベンダー固有のプロファイルが設定されているか確認
  • 未定義トラップのログを確認してMIBを追加
  • drop_undefined設定を無効にして全トラップを受信