![見出し画像](https://assets.st-note.com/production/uploads/images/156291085/rectangle_large_type_2_ce9cde705853ebe81676913052538878.png?width=1200)
TWSNMP FC/FKのgNMI対応開発2日目:gNMIcとSNMP TRAPで連携する機能を作っています
今朝は、5時近くに、助手の猫さんが起こしてくれました。猫さんは日の出前に活動を開始するようです。
昨日、整理した開発項目を作り始めました。
最初は、開発量の少ないgNMIcから送信されたSNMP TRAPに関する処理です。
TRAPに付帯するMIBにsysNameがあれば、その値からノードを検索して登録されていれば、TRAPの送信元を、そのノードに置き換えるという簡単な仕様にしました。
for _, vb := range s.Variables {
key := datastore.MIBDB.OIDToName(vb.Name)
val := datastore.GetMIBValueString(key, &vb, false)
vbs += fmt.Sprintf("%s=%s\n", key, val)
if strings.HasPrefix(key, "sysName") {
n := datastore.FindNodeFromName(val)
if n != nil {
record["FromAddress"] = fmt.Sprintf("%s(%s) via %s", n.IP, n.Name, u.IP.String())
}
}
}
のぐらいの変更でできました。
gNMIcの設定ファイルを
username: admin
password: NokiaSrl1!
skip-verify: true
log: true
targets:
192.168.1.50:
subscriptions:
sub1:
paths:
- /interface/admin-state
- /interface/oper-state
- /interface/ifindex
- /system/name/host-name
stream-mode: on-change
encoding: ascii
outputs:
snmp_trap:
type: snmp
address: 192.168.1.250
port: 162
community: public
cache:
type: oc
# duration, default: 60s.
# updates older than the expiration value will not be read from the cache.
expiration: 60s
# enable extra logging
debug: true
traps:
- trigger:
path: /interface/oper-state # static path
oid: '".1.3.6.1.2.1.2.2.1.8"' # ifOperStatus
type: int
value: if (.values."/interface/oper-state" == "up")
then 1
else 2
end
bindings:
- path: '"/system/name/host-name"' # jq script
oid: '".1.3.6.1.2.1.1.5"' # sysName
type: octetString
value: '.values."/system/name/host-name"'
- path: '"/interface[name="+.tags.interface_name+"]/admin-state"' # jq script
oid: '".1.3.6.1.2.1.2.2.1.7"' # ifAdminStatus
type: int
value: if (.values."/interface/admin-state" == "enable")
then 1
else 2
end
- path: '"/interface[name="+.tags.interface_name+"]/oper-state"' # jq script
oid: '".1.3.6.1.6.3.1.1.4.1.0"' # sysTrapOID.0
type: objectID
value: if (.values."/interface/oper-state" == "up")
then ".1.3.6.1.6.3.1.1.5.4"
else ".1.3.6.1.6.3.1.1.5.3"
end
- path: '"/interface[name="+.tags.interface_name+"]/ifindex"' # jq script
oid: '".1.3.6.1.2.1.2.2.1.1"' # ifIndex
type: int
value: '.values."/interface/ifindex" | tonumber' # jq script
のように設定してsubscribeすれば対象のノードのLANポートの状態が変化した時にTRAPを送信します。
TWSNMP FCで受信した場合
![](https://assets.st-note.com/img/1727729903-5LpCH60PAwztByeiF8mIUoj7.png?width=1200)
のようになります。元の対象ノードと経由したgNMIcがわかるようになっています。
昨日、作ったマインドマップを修正しました。
![](https://assets.st-note.com/img/1727730301-PImE8iMbKlA3W1vwJn0YpUSB.png?width=1200)
SNMP連携とgNMツールなどのパラメータの設定です。
明日に続く
いいなと思ったら応援しよう!
![twsnmp](https://assets.st-note.com/production/uploads/images/14333815/profile_ee1accba5615957e5029db85d57fdb0a.jpg?width=600&crop=1:1,smart)