2021-09-22 20:18:55 +00:00
|
|
|
# Osquery Server Performance Tester
|
|
|
|
|
|
2021-10-19 18:54:45 +00:00
|
|
|
This is a tool to generate realistic traffic to an osquery
|
2021-09-22 20:18:55 +00:00
|
|
|
management server (primarily, [Fleet](https://github.com/fleetdm/fleet)). With
|
|
|
|
|
this tool, many thousands of hosts can be simulated from a single host.
|
|
|
|
|
|
|
|
|
|
## Requirements
|
|
|
|
|
|
|
|
|
|
The only requirement for running this tool is a working installation of
|
|
|
|
|
[Go](https://golang.org/doc/install).
|
|
|
|
|
|
|
|
|
|
## Usage
|
|
|
|
|
|
2021-11-01 18:23:31 +00:00
|
|
|
Typically `go run` is used.
|
|
|
|
|
|
|
|
|
|
You can use `--help` to view the available configuration:
|
2021-09-22 20:18:55 +00:00
|
|
|
|
|
|
|
|
```
|
|
|
|
|
go run agent.go --help
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
The tool should be invoked with the appropriate enroll secret. A typical
|
|
|
|
|
invocation looks like:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
go run agent.go --enroll_secret hgh4hk3434l2jjf
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
When starting many hosts, it is a good idea to extend the intervals, and also
|
|
|
|
|
the period over which the hosts are started:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
go run agent.go --enroll_secret hgh4hk3434l2jjf --host_count 5000 --start_period 5m --query_interval 60s --config_interval 5m
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
This will start 5,000 hosts over a period of 5 minutes. Each host will check in
|
|
|
|
|
for live queries at a 1 minute interval, and for configuration at a 5 minute
|
|
|
|
|
interval. Starting over a 5 minute period ensures that the configuration
|
|
|
|
|
requests are spread evenly over the 5 minute interval.
|
|
|
|
|
|
|
|
|
|
It can be useful to start the "same" hosts. This can be achieved with the
|
|
|
|
|
`--seed` parameter:
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
go run agent.go --enroll_secret hgh4hk3434l2jjf --seed 0
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
By using the same seed, along with other values, we usually get hosts that look
|
|
|
|
|
the same to the server. This is not guaranteed, but it is a useful technique.
|
|
|
|
|
|
|
|
|
|
### Resource Limits
|
|
|
|
|
|
|
|
|
|
On many systems, trying to simulate a large number of hosts will result in hitting system resource limits (such as number of open file descriptors).
|
|
|
|
|
|
|
|
|
|
If you see errors such as `dial tcp: lookup localhost: no such host` or `read: connection reset by peer`, try increasing these limits.
|
|
|
|
|
|
|
|
|
|
#### macOS
|
|
|
|
|
|
|
|
|
|
Run the following command in the shell before running the Fleet server _and_ before running `agent.go` (run it once in each shell):
|
|
|
|
|
|
|
|
|
|
``` sh
|
|
|
|
|
ulimit -n 64000
|
|
|
|
|
```
|