diff --git a/mackerel-plugin-snmp/README.md b/mackerel-plugin-snmp/README.md index 801ae6b9..be550abc 100644 --- a/mackerel-plugin-snmp/README.md +++ b/mackerel-plugin-snmp/README.md @@ -7,7 +7,7 @@ SNMP V2c custom metrics plugin for mackerel.io agent. can specify multiple metric-definitions in the form of `OID:NAME[:DIFF?][:STACK?]` args. ```shell -mackerel-plugin-snmp [-name=] [-unit=] [-host=] [-community=] [-tempfile=] 'OID:NAME[:DIFF?][:STACK?]' ['OID:NAME[:DIFF?][:STACK?][:COUNTER?]' ...] +mackerel-plugin-snmp [-name=] [-unit=] [-host=] [-port=] [-community=] [-tempfile=] 'OID:NAME[:DIFF?][:STACK?]' ['OID:NAME[:DIFF?][:STACK?][:COUNTER?]' ...] ``` diff --git a/mackerel-plugin-snmp/lib/snmp.go b/mackerel-plugin-snmp/lib/snmp.go index e6351fa4..725b57c9 100644 --- a/mackerel-plugin-snmp/lib/snmp.go +++ b/mackerel-plugin-snmp/lib/snmp.go @@ -23,6 +23,7 @@ type SNMPPlugin struct { GraphName string GraphUnit string Host string + Port uint16 Community string Tempfile string SNMPMetricsSlice []SNMPMetrics @@ -33,6 +34,7 @@ func (m SNMPPlugin) FetchMetrics() (map[string]interface{}, error) { stat := make(map[string]interface{}) gosnmp.Default.Target = m.Host + gosnmp.Default.Port = m.Port gosnmp.Default.Community = m.Community gosnmp.Default.Version = gosnmp.Version2c gosnmp.Default.Timeout = time.Duration(30) * time.Second @@ -93,6 +95,7 @@ func Do() { optGraphUnit := flag.String("unit", "float", "Graph unit") optHost := flag.String("host", "localhost", "Hostname") + optPort := flag.Uint("port", 161, "Port") optCommunity := flag.String("community", "public", "SNMP V2c Community") optTempfile := flag.String("tempfile", "", "Temp file name") @@ -100,6 +103,7 @@ func Do() { var snmp SNMPPlugin snmp.Host = *optHost + snmp.Port = uint16(*optPort) snmp.Community = *optCommunity snmp.GraphName = *optGraphName snmp.GraphUnit = *optGraphUnit diff --git a/mackerel-plugin-snmp/test.sh b/mackerel-plugin-snmp/test.sh index 22f3ec5c..bfab52b1 100755 --- a/mackerel-plugin-snmp/test.sh +++ b/mackerel-plugin-snmp/test.sh @@ -17,8 +17,7 @@ then fi image=local/test-$plugin -# mackerel-plugin-snmp is disallowed --port option. -port=161 +port=10161 docker build -t $image testdata/ @@ -26,7 +25,7 @@ docker run --name "test-$plugin" -v $(pwd)/testdata/snmpd.conf:/etc/snmp/snmpd.c trap 'docker stop test-$plugin; docker rm test-$plugin; exit 1' 1 2 3 15 sleep 10 -$plugin '.1.3.6.1.2.1.25.1.5.0:hrSystemNumUsers:0:0' '.1.3.6.1.2.1.25.1.6.0:hrSystemProcesses:0:0' '.1.3.6.1.4.1.8072.1.3.2.3.1.2.4.101.99.104.111:echo:0:0' | graphite-metric-test -f rule.txt +$plugin -port $port '.1.3.6.1.2.1.25.1.5.0:hrSystemNumUsers:0:0' '.1.3.6.1.2.1.25.1.6.0:hrSystemProcesses:0:0' '.1.3.6.1.4.1.8072.1.3.2.3.1.2.4.101.99.104.111:echo:0:0' | graphite-metric-test -f rule.txt status=$? docker stop "test-$plugin"