CPUの使用率が高い時にSNMPのTRAPを送信するプログラムを作り始めた
何日か前にCPUの使用率が高くなった時にSNMPのTRAPを送りたいという質問がTwitterにありました。
NetSNMPのエージェントなら工夫すればできそうですが、Windowsだとできないようなので作ってみることにしました。
題してtwhr2trapです。まだ空ですが、リポジトリも作りました。
使うGO言語のパッケージは、
でCPUの使用率が取得できます。
のマニュアルがわかりやすいです。
SNMPのTRAPを送信するのは、
です。TWSNMP FCでも使っているものです。
TRAPを送信するのは、
// Copyright 2012 The GoSNMP Authors. All rights reserved. Use of this
// source code is governed by a BSD-style license that can be found in the
// LICENSE file.
package main
import (
"log"
"os"
g "github.com/gosnmp/gosnmp"
)
func main() {
// Default is a pointer to a GoSNMP struct that contains sensible defaults
// eg port 161, community public, etc
g.Default.Target = "127.0.0.1"
g.Default.Port = 162
g.Default.Version = g.Version2c
g.Default.Community = "public"
g.Default.Logger = g.NewLogger(log.New(os.Stdout, "", 0))
err := g.Default.Connect()
if err != nil {
log.Fatalf("Connect() err: %v", err)
}
defer g.Default.Conn.Close()
pdu := g.SnmpPDU{
Name: ".1.3.6.1.6.3.1.1.4.1.0",
Type: g.ObjectIdentifier,
Value: ".1.3.6.1.6.3.1.1.5.1",
}
trap := g.SnmpTrap{
Variables: []g.SnmpPDU{pdu},
}
_, err = g.Default.SendTrap(trap)
if err != nil {
log.Fatalf("SendTrap() err: %v", err)
}
}
のような感じです。
プログラムは概ねできたのですが、送信するTRAPを定義する必要があります。残念ながら今朝は、6時半まで寝てしまって時間切れです。
明日に続く
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。