Files
teleport/assets/monitoring/README.md
T
Ben Arent 855738a475 Add docs / table for Prometheus endpoint. (#4069)
* Add docs / table for Prometheus endpoint.
2020-07-23 08:40:02 -07:00

108 lines
3.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Metrics
Teleport exports Prometheus Metrics endpoints.
**Start Teleport With Prometheus Endpoint**
To start teleport with prometheus endpoint enabled:
```bash
teleport start --diag-addr=127.0.0.1:3000
# http://127.0.0.1:3000/metrics
```
To start monitoring stack, simply `docker-compose up`
Then go to `http://localhost:3001`
```
Username: admin
Password: admin
```
### Grafana Dashboard
Modify and export Grafana dashboard, then convert to the format that Grafana can auto import using this tool
```bash
python convert.py health-raw.json health-dashboard.json
```
## Low level monitoring
Teleport can be started with Go's standard profiler [pprof](https://golang.org/pkg/net/http/pprof/).
```bash
$ teleport start -d --diag-addr=127.0.0.1:3000
# http://127.0.0.1:3000/debug/pprof/
```
When teleport is started in debug mode (with teleport start -d flag) Go’s CPU,
memory and go routines dumps could be collected on the host.
Assuming debugging endpoint address is set to `127.0.0.1:3000`, the following key profiles
can be collected:
CPU profile (it will observe the system for 30 seconds and collect metrics) about CPU usage
per function:
`curl -o cpu.profile http://127.0.0.1:3000/debug/pprof/profile`
Note: This curl command will hang for 30 seconds collecting the CPU profile
Goroutine profile shows how many concurrent Golang “lightweight threads” are used
in the system:
`curl -o goroutine.profile http://127.0.0.1:3000/debug/pprof/goroutine`
Heap profile shows allocated objects in the system:
`curl -o heap.profile http://127.0.0.1:3000/debug/pprof/heap`
To view the resulting profiles, use go tool pprof:
```
go tool pprof cpu.profile
go tool pprof heap.profile
go tool pprof goroutine.profile
# Use --web flag to create a SVG diagram in the browser, for high-level view of whats going on.
go tool pprof --web heap.profile
```
### Performance Testing
By default tsh bench does not create interactive sessions, but is using exec.
**Loging in**
You have to login before calling `tsh bench` using `tsh login`, otherwise
requests will fail.
**Non interactive mode**
E.g. this creates requests at a rate 10 requests per second
and uses a pool of 100 execution threads (goroutines in go) for 30 seconds
```bash
tsh bench --threads=100 --duration=300s --rate=10 localhost ls -l
```
**NOTE:** Algorithm does not apply backpressure if requests delay on purpose
(watch [this](https://www.infoq.com/presentations/latency-pitfalls) for more details about why).
In practice this means that you could pick a seemingly low rate value per second,
however it could trigger system outage because you will locate the system breaking
point and the amount of connections will blow up. Also times are measured from the point where
request was originated, and not dispacthed to the thread, so latency report is closer to
what real users will observe.
**Interactive mode**
This creates real interactive session, allocating PTY, calling `ls -l` and then `exit`:
```bash
tsh bench --interactive --threads=100 --duration=300s --rate=10 localhost ls -l
```
The performance difference is huge between interactive and non interactive modes.