From 9197ec8b846097738d813756f3c0a6e88f4afb0e Mon Sep 17 00:00:00 2001 From: lufia Date: Mon, 12 Dec 2022 16:53:40 +0900 Subject: [PATCH 1/4] delete nvidia-smi entry from packaging/config.json --- packaging/config.json | 1 - 1 file changed, 1 deletion(-) diff --git a/packaging/config.json b/packaging/config.json index e42dd392a..343dc8288 100644 --- a/packaging/config.json +++ b/packaging/config.json @@ -29,7 +29,6 @@ "munin", "mysql", "nginx", - "nvidia-smi", "openldap", "php-apc", "php-fpm", From 13e0a90002b2ae579abe0401a596319362ac7320 Mon Sep 17 00:00:00 2001 From: lufia Date: Mon, 12 Dec 2022 16:55:01 +0900 Subject: [PATCH 2/4] re-generate plugin list --- mackerel-plugin_gen.go | 4 ---- 1 file changed, 4 deletions(-) diff --git a/mackerel-plugin_gen.go b/mackerel-plugin_gen.go index 0e1f46131..d924e172b 100644 --- a/mackerel-plugin_gen.go +++ b/mackerel-plugin_gen.go @@ -38,7 +38,6 @@ import ( "github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-munin/lib" "github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-mysql/lib" "github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-nginx/lib" - "github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-nvidia-smi/lib" "github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-openldap/lib" "github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-php-apc/lib" "github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-php-fpm/lib" @@ -132,8 +131,6 @@ func runPlugin(plug string) error { mpmysql.Do() case "nginx": mpnginx.Do() - case "nvidia-smi": - mpnvidiasmi.Do() case "openldap": mpopenldap.Do() case "php-apc": @@ -217,7 +214,6 @@ var plugins = []string{ "munin", "mysql", "nginx", - "nvidia-smi", "openldap", "php-apc", "php-fpm", From cb618fddfda88375bf0adbfa73c947d254b0001f Mon Sep 17 00:00:00 2001 From: lufia Date: Mon, 12 Dec 2022 17:12:53 +0900 Subject: [PATCH 3/4] remove mackerel-plugin-nvidia-smi --- mackerel-plugin-nvidia-smi/README.md | 16 +- mackerel-plugin-nvidia-smi/go.mod | 19 +++ mackerel-plugin-nvidia-smi/go.sum | 47 ++++++ mackerel-plugin-nvidia-smi/lib/nvidia_smi.go | 145 ------------------ .../lib/nvidia_smi_test.go | 53 ------- mackerel-plugin-nvidia-smi/main.go | 2 +- t/convention.t | 1 + 7 files changed, 70 insertions(+), 213 deletions(-) create mode 100644 mackerel-plugin-nvidia-smi/go.mod create mode 100644 mackerel-plugin-nvidia-smi/go.sum delete mode 100644 mackerel-plugin-nvidia-smi/lib/nvidia_smi.go delete mode 100644 mackerel-plugin-nvidia-smi/lib/nvidia_smi_test.go diff --git a/mackerel-plugin-nvidia-smi/README.md b/mackerel-plugin-nvidia-smi/README.md index 171a864a0..4206f7ba5 100644 --- a/mackerel-plugin-nvidia-smi/README.md +++ b/mackerel-plugin-nvidia-smi/README.md @@ -1,18 +1,6 @@ mackerel-plugin-nvidia-smi ========================== -GPU custom metrics plugin using nvidia-smi for mackerel.io agent. - -## Synopsis - -```shell -mackerel-plugin-nvidia-smi [-metric-key-prefix=] -``` - -## Example of mackerel-agent.conf - -``` -[plugin.metrics.nvidia-smi] -command = "/path/to/mackerel-plugin-nvidia-smi" -``` +This plugin moved to [mackerelio/mackerel-plugin-nvidia-smi][url] +[url]: https://github.com/mackerelio/mackerel-plugin-nvidia-smi diff --git a/mackerel-plugin-nvidia-smi/go.mod b/mackerel-plugin-nvidia-smi/go.mod new file mode 100644 index 000000000..94942e659 --- /dev/null +++ b/mackerel-plugin-nvidia-smi/go.mod @@ -0,0 +1,19 @@ +module github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-nvidia-smi + +go 1.19 + +require ( + github.com/mackerelio/go-mackerel-plugin-helper v0.1.2 + github.com/mackerelio/mackerel-plugin-nvidia-smi v1.0.0 + github.com/stretchr/testify v1.8.1 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/mackerelio/golib v1.2.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect + golang.org/x/tools v0.1.5 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/mackerel-plugin-nvidia-smi/go.sum b/mackerel-plugin-nvidia-smi/go.sum new file mode 100644 index 000000000..4168a4709 --- /dev/null +++ b/mackerel-plugin-nvidia-smi/go.sum @@ -0,0 +1,47 @@ +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mackerelio/go-mackerel-plugin-helper v0.1.2 h1:p/KTlMK/mocWAIjNuYzpCybYvkfAEroDZBDAiOuz2QQ= +github.com/mackerelio/go-mackerel-plugin-helper v0.1.2/go.mod h1:Vfs2Fk1FfE8c8mufAQKcWBtGI0GCrOLGvaJg+kS5yz4= +github.com/mackerelio/golib v1.2.1 h1:SDcDn6Jw3p9bi1N0bg1Z/ilG5qcBB23qL8xNwrU0gg4= +github.com/mackerelio/golib v1.2.1/go.mod h1:b8ZaapsHGH1FlEJlCqfD98CqafLeyMevyATDlID2BsM= +github.com/mackerelio/mackerel-plugin-nvidia-smi v1.0.0 h1:xJ3H/DIUAEcxRwcWdpUP/Vq1Jm0Aihzdup4x6rNy/Dw= +github.com/mackerelio/mackerel-plugin-nvidia-smi v1.0.0/go.mod h1:TBpf67FDZNUel3KpVd4Id5G+EPidBfFHQfRkcL1f1dE= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8 h1:OH54vjqzRWmbJ62fjuhxy7AxFFgoHN0/DPc/UrL8cAs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= +golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/mackerel-plugin-nvidia-smi/lib/nvidia_smi.go b/mackerel-plugin-nvidia-smi/lib/nvidia_smi.go deleted file mode 100644 index 40400bc7a..000000000 --- a/mackerel-plugin-nvidia-smi/lib/nvidia_smi.go +++ /dev/null @@ -1,145 +0,0 @@ -package mpnvidiasmi - -import ( - "flag" - "fmt" - mp "github.com/mackerelio/go-mackerel-plugin-helper" - "os/exec" - "strconv" - "strings" -) - -var queryOptions = []string{ - "utilization.gpu", - "utilization.memory", - "temperature.gpu", - "fan.speed", - "memory.total", - "memory.used", - "memory.free", -} - -var formatOptions = []string{ - "noheader", - "nounits", - "csv", -} - -var nvidiaSmiOptions = []string{ - fmt.Sprintf("--format=%s", strings.Join(formatOptions, ",")), - fmt.Sprintf("--query-gpu=%s", strings.Join(queryOptions, ",")), -} - -var metricsKeyFormats = []string{ - "gpu.util.gpu%d", - "memory.util.gpu%d", - "temperature.gpu%d", - "fanspeed.gpu%d", - "memory.usage.gpu%d.total", - "memory.usage.gpu%d.used", - "memory.usage.gpu%d.free", -} - -func (n NVidiaSMIPlugin) getMetricKey(index int, gpuIndex int) string { - return fmt.Sprintf(metricsKeyFormats[index], gpuIndex) -} - -// NVidiaSMIPlugin mackerel plugin for nvidia-smi -type NVidiaSMIPlugin struct { - Prefix string -} - -// GraphDefinition interface for mackerelplugin -func (n NVidiaSMIPlugin) GraphDefinition() map[string]mp.Graphs { - var graphdef = map[string]mp.Graphs{ - "gpu.util": { - Label: "GPU Utilization", - Unit: "percentage", - Metrics: []mp.Metrics{ - {Name: "#", Label: "util"}, - }, - }, - "memory.util": { - Label: "GPU Memory Utilization", - Unit: "percentage", - Metrics: []mp.Metrics{ - {Name: "#", Label: "util"}, - }, - }, - "temperature": { - Label: "GPU Temperature", - Unit: "integer", - Metrics: []mp.Metrics{ - {Name: "#", Label: "temp"}, - }, - }, - "fanspeed": { - Label: "GPU Fan Speed", - Unit: "percentage", - Metrics: []mp.Metrics{ - {Name: "#", Label: "fan speed"}, - }, - }, - "memory.usage.#": { - Label: "GPU Memory Usage", - Unit: "bytes", - - Metrics: []mp.Metrics{ - {Name: "total", Label: "total", Scale: 1024 * 1024}, - {Name: "used", Label: "used", Scale: 1024 * 1024, Stacked: true}, - {Name: "free", Label: "free", Scale: 1024 * 1024, Stacked: true}, - }, - }, - } - return graphdef -} - -// FetchMetrics interface for mackerelplugin -func (n NVidiaSMIPlugin) FetchMetrics() (map[string]interface{}, error) { - ret, err := exec.Command("nvidia-smi", nvidiaSmiOptions...).CombinedOutput() - if err != nil { - return nil, fmt.Errorf("%s: %s", err, ret) - } - return n.parseStats(string(ret)) -} - -// MetricKeyPrefix interface for mackerelplugin -func (n NVidiaSMIPlugin) MetricKeyPrefix() string { - return n.Prefix -} - -func (n NVidiaSMIPlugin) parseStats(ret string) (map[string]interface{}, error) { - stats := make(map[string]interface{}) - for id, line := range strings.Split(ret, "\n") { - err := n.parseLine(id, line, &stats) - if err != nil { - return nil, fmt.Errorf("%s: %s", err, ret) - } - } - return stats, nil -} - -func (n NVidiaSMIPlugin) parseLine(id int, line string, stats *map[string]interface{}) error { - if strings.TrimSpace(line) == "" { - return nil - } - - for i, value := range strings.Split(line, ",") { - value, err := strconv.ParseUint(strings.TrimSpace(value), 10, 64) - if err != nil { - continue - } - (*stats)[n.getMetricKey(i, id)] = value - } - return nil -} - -// Do the plugin -func Do() { - optPrefix := flag.String("metric-key-prefix", "nvidia.gpu", "Metric key prefix") - flag.Parse() - var plugin NVidiaSMIPlugin - plugin.Prefix = *optPrefix - helper := mp.NewMackerelPlugin(plugin) - helper.Run() -} diff --git a/mackerel-plugin-nvidia-smi/lib/nvidia_smi_test.go b/mackerel-plugin-nvidia-smi/lib/nvidia_smi_test.go deleted file mode 100644 index d18668740..000000000 --- a/mackerel-plugin-nvidia-smi/lib/nvidia_smi_test.go +++ /dev/null @@ -1,53 +0,0 @@ -package mpnvidiasmi - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestGraphDefinition(t *testing.T) { - var plugin NVidiaSMIPlugin - - graphdef := plugin.GraphDefinition() - if len(graphdef) != 5 { - t.Errorf("GraphDef's size: %d should be 5", len(graphdef)) - } -} - -func TestParse(t *testing.T) { - var plugin NVidiaSMIPlugin - plugin.Prefix = "nvidia.gpu" - data := `10, 20, 30, 40, 1024, 64, 962 -11, 21, 31, 41, 1024, 65, 961 -12, 22, [Not Supported], [Not Supported], 1024, 66, 960 -` - - stats, err := plugin.parseStats(data) - - assert.Nil(t, err) - - assert.EqualValues(t, 10, stats["gpu.util.gpu0"]) - assert.EqualValues(t, 20, stats["memory.util.gpu0"]) - assert.EqualValues(t, 30, stats["temperature.gpu0"]) - assert.EqualValues(t, 40, stats["fanspeed.gpu0"]) - assert.EqualValues(t, 1024, stats["memory.usage.gpu0.total"]) - assert.EqualValues(t, 64, stats["memory.usage.gpu0.used"]) - assert.EqualValues(t, 962, stats["memory.usage.gpu0.free"]) - - assert.EqualValues(t, 11, stats["gpu.util.gpu1"]) - assert.EqualValues(t, 21, stats["memory.util.gpu1"]) - assert.EqualValues(t, 31, stats["temperature.gpu1"]) - assert.EqualValues(t, 41, stats["fanspeed.gpu1"]) - assert.EqualValues(t, 1024, stats["memory.usage.gpu1.total"]) - assert.EqualValues(t, 65, stats["memory.usage.gpu1.used"]) - assert.EqualValues(t, 961, stats["memory.usage.gpu1.free"]) - - assert.EqualValues(t, 12, stats["gpu.util.gpu2"]) - assert.EqualValues(t, 22, stats["memory.util.gpu2"]) - assert.Nil(t, stats["temperature.gpu2"]) - assert.Nil(t, stats["fanspeed.gpu2"]) - assert.EqualValues(t, 1024, stats["memory.usage.gpu2.total"]) - assert.EqualValues(t, 66, stats["memory.usage.gpu2.used"]) - assert.EqualValues(t, 960, stats["memory.usage.gpu2.free"]) -} diff --git a/mackerel-plugin-nvidia-smi/main.go b/mackerel-plugin-nvidia-smi/main.go index ec41dfcb3..5dfec605a 100644 --- a/mackerel-plugin-nvidia-smi/main.go +++ b/mackerel-plugin-nvidia-smi/main.go @@ -1,6 +1,6 @@ package main -import "github.com/mackerelio/mackerel-agent-plugins/mackerel-plugin-nvidia-smi/lib" +import "github.com/mackerelio/mackerel-plugin-nvidia-smi/lib" func main() { mpnvidiasmi.Do() diff --git a/t/convention.t b/t/convention.t index 18510d968..dca418381 100644 --- a/t/convention.t +++ b/t/convention.t @@ -13,6 +13,7 @@ my $plugins_in_other_repository = [qw( mackerel-plugin-gcp-compute-engine mackerel-plugin-gearmand mackerel-plugin-json + mackerel-plugin-nvidia-smi )]; my $is_in_other_repository = { map { $_ => 1 } @$plugins_in_other_repository, From b50514cb74dd009d53787c7bb3997b587ff6efc4 Mon Sep 17 00:00:00 2001 From: lufia Date: Mon, 12 Dec 2022 17:29:20 +0900 Subject: [PATCH 4/4] delete nvidia-smi entry from README.md --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index a4c832519..fc9180387 100644 --- a/README.md +++ b/README.md @@ -44,7 +44,6 @@ Documentation for each plugin is located in its respective sub directory. * [mackerel-plugin-murmur](./mackerel-plugin-murmur/README.md) * [mackerel-plugin-mysql](./mackerel-plugin-mysql/README.md) * [mackerel-plugin-nginx](./mackerel-plugin-nginx/README.md) -* [mackerel-plugin-nvidia-smi](./mackerel-plugin-nvidia-smi/README.md) * [mackerel-plugin-openldap](./mackerel-plugin-openldap/README.md) * [mackerel-plugin-php-apc](./mackerel-plugin-php-apc/README.md) * [mackerel-plugin-php-fpm](./mackerel-plugin-php-fpm/README.md)