fleet/cmd/osquery-perf/README.md

64 lines
2 KiB
Markdown
Raw Normal View History

# Osquery Server Performance Tester
2021-10-19 18:54:45 +00:00
This is a tool to generate realistic traffic to an osquery
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
Typically `go run` is used.
You can use `--help` to view the available configuration:
```
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
```