見出し画像

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の運営にも貢献できるのでよろしくお願います。