This commit is contained in:
Dmitry Vasilyev 2016-11-14 19:53:48 +03:00
parent 1ece28029c
commit 9d843a62a1
2 changed files with 20 additions and 19 deletions

View File

@ -8,19 +8,15 @@ Run `./generate-template-clients.sh > clients.xml` and upload template with clie
## Run benchmark ## Run benchmark
```bash ```bash
Usage of zabbix-bench: make && ./bin/zabbix-bench -zabbix "192.168.1.1:10051" -packet-delay 1ms
-client int go build -o ./bin/zabbix-bench ./src/main.go
number of concurrent clients (default 200) Start 200 clients with packet size 100 metric and delay between packets 1ms
-client-format string progress 1 s, 13100 metric/s
format of client name (default "client-%d") progress 2 s, 15300 metric/s
-metric-format string progress 3 s, 11200 metric/s
format of metric name in packet (default "metric-%d") progress 4 s, 17500 metric/s
-packet-delay duration progress 5 s, 13100 metric/s
delay of send packet (default 100ms) ^C
-packet-send-timeout duration -----------------------------
packet send timeout (default 10ms) Total processed: 70300 (11716 metric/s)
-packet-size int
count of metric in packet (default 100)
-zabbix string
address of zabbix server (default "127.0.0.1:10051")
``` ```

View File

@ -43,13 +43,14 @@ func main() {
go StartClient(i) go StartClient(i)
} }
os.Stdout.WriteString(fmt.Sprintf("Start %d clients with packet size %d metric and delay between packets %v\n", *argClientCount, *argPacketSize, *argPacketDelay))
ticker := time.Tick(time.Second) ticker := time.Tick(time.Second)
for { for {
select { select {
case <-ticker: case <-ticker:
mutex.Lock() mutex.Lock()
os.Stdout.WriteString(fmt.Sprintf("progress %d s, %d metric/s\n", sec, counter))
sec += 1 sec += 1
os.Stdout.WriteString(fmt.Sprintf("Metric sended: %d\n", counter))
counter = 0 counter = 0
mutex.Unlock() mutex.Unlock()
case count := <-completedChannel: case count := <-completedChannel:
@ -58,9 +59,13 @@ func main() {
total += count total += count
mutex.Unlock() mutex.Unlock()
case err := <-errorChannel: case err := <-errorChannel:
os.Stderr.WriteString(fmt.Sprintf("Error write package:\t%s\n", err.Error())) os.Stderr.WriteString(fmt.Sprintf("Error write metric:\t%s\n", err.Error()))
case <-signalChannel: case <-signalChannel:
os.Stdout.WriteString(fmt.Sprintf("Total: %d (%d metric/s)\n", total, int(total/sec))) speed := 0
if sec > 0 {
speed = int(total / sec)
}
os.Stdout.WriteString(fmt.Sprintf("\n-----------------------------\nTotal processed: %d (%d metric/s)\n", total, speed))
os.Exit(0) os.Exit(0)
} }
} }
@ -79,7 +84,7 @@ func (c *client) send() error {
now := time.Now().Unix() now := time.Now().Unix()
metrics := make([]*zabbix.Metric, 0) metrics := make([]*zabbix.Metric, 0)
for i := 0; i < *argPacketSize; i++ { for i := 0; i < *argPacketSize; i++ {
metrics = append(metrics, zabbix.NewMetric(c.host, fmt.Sprintf(*argMetricName, i), string(i), now)) metrics = append(metrics, zabbix.NewMetric(c.host, fmt.Sprintf(*argMetricName, i), fmt.Sprintf("%d", i), now))
} }
return c.sender.Send(zabbix.NewPacket(metrics, now)) return c.sender.Send(zabbix.NewPacket(metrics, now))
} }