Lang ist es her, dass ein Blogpost über das hauseigene NETWAYS go-check geschrieben wurde. Seitdem hat sich das go-check immer weiterentwickelt und wurde mit vielen verschiedenen Funktionen erweitert, sodass die Pluginentwicklung noch einfacher von der Hand geht.
Um einen kurzen Umriss zu geben, bei dem go-check handelt es sich um GO Package, mit dem es möglich ist, schnell und einfach, Icinga Plugins zu entwickeln.
Ein Beispiel dafür wäre das Evaluieren von Thresholds und anschließendem Anhängen von Performance data im richtigen Format:
package main
import (
"github.com/NETWAYS/go-check"
"github.com/NETWAYS/go-check/perfdata"
)
func main() {
config := check.NewConfig()
config.Name = "check_new"
config.Readme = `example Plugin Readme`
config.Version = "1.0.0"
return_code := check.Unknown
plugin_output := ""
crit_thresh := config.FlagSet.StringP("crit-example", "c", "20", "Critical threshold")
warn_thresh := config.FlagSet.StringP("warn-example", "w", "10", "Warning threshold")
example_val := config.FlagSet.Float64("example-val", 0.0, "Example value")
config.ParseArguments()
crit, err := check.ParseThreshold(*crit_thresh)
if err != nil {
check.ExitError(err)
}
warn, err := check.ParseThreshold(*warn_thresh)
if err != nil {
check.ExitError(err)
}
if crit.DoesViolate(*example_val) {
return_code = check.Critical
plugin_output = "Value is critical!"
} else if warn.DoesViolate(*example_val) {
return_code = check.Warning
plugin_output = "Value is warning!"
} else {
return_code = check.OK
plugin_output = "Everything is fine"
}
p := perfdata.PerfdataList{{
Label: "example_label",
Value: *example_val,
Warn: warn,
Crit: crit,
Uom: "Mb",
}}
example_perf := perfdata.Perfdata{
Label: "another_perfdata",
Value: 1.0,
Warn: &check.Threshold{Upper: 50.0},
Crit: &check.Threshold{Upper: 100.0},
}
p.Add(&example_perf)
check.ExitRaw(return_code, plugin_output, "|", p.String())
}
Nach dem Kompilieren des Programms können beispielhaft Parameter mitgegeben werden:
go build -o check_test main.go
./check_test -c 20 -w 9 --example-val 10
WARNING - Value is warning! | example_label=10Mb;9;20 another_perfdata=1;50;100
Darüber hinaus gibt es folgende weitere Funktionen:
- Konvertierung von IEC zu SI Einheit
- Performance data in Human-readable Format
- Http-Mock, welcher http-requests und results „dokumentiert“ und in XML speichert
- Evaluierung des „schlechtesten“ Ergebnisses (Value) in einem Array
Somit bietet go-check ein schnelles und komfortables Package für die Entwicklung eines Icinga 2 Check Plugins. Für weitere Releases und Aktualisierungen, einfach bei dem offiziellen NETWAYS Organisation vorbei schauen.