Diagnosing issues in a distributed application is hard.
etcd will help as much as it can - just enable these debug features using the CLI flag -trace=*
or the config option trace=*
.
Log verbosity can be increased to the max using either the -vvv
CLI flag or the very_very_verbose=true
config option.
The only supported logging mode is to stdout.
etcd itself can generate a set of metrics. These metrics represent many different internal data points that can be helpful when debugging etcd servers.
Each individual metric name is prefixed with etcd.<NAME>
, where <NAME> is the configured name of the etcd server.
timer.appendentries.handle
: amount of time a peer takes to process an AppendEntriesRequest from the POV of the peer itselftimer.peer.<PEER>.heartbeat
: amount of time a peer heartbeat operation takes from the POV of the leader that initiated that operation for peer <PEER>timer.command.<COMMAND>
: amount of time a given command took to be processed through the local server's raft state machine. This does not include time waiting on locks.Once tracing has been enabled on a given etcd server, all metric data is available at the server's /debug/metrics
HTTP endpoint (i.e. http://127.0.0.1:4001/debug/metrics
).
Executing a GET HTTP command against the metrics endpoint will yield the current state of all metrics in the etcd server.
etcd supports Graphite's Carbon plaintext protocol - a TCP wire protocol designed for shipping metric data to an aggregator.
To send metrics to a Graphite endpoint using this protocol, use of the -graphite-host
CLI flag or the graphite_host
config option (i.e. graphite_host=172.17.0.19:2003
).
See an example graphite deploy script.
Collectd gathers metrics from the host running etcd. While these aren't metrics generated by etcd itself, it can be invaluable to compare etcd's view of the world to that of a separate process running next to etcd.
See an example collectd deploy script.
etcd exposes profiling information from the Go pprof package over HTTP.
The basic browsable interface is served by etcd at the /debug/pprof
HTTP endpoint (i.e. http://127.0.0.1:4001/debug/pprof
).
For more information on using profiling tools, see http://blog.golang.org/profiling-go-programs.
NOTE: In the following examples you need to ensure that the ./bin/etcd
is identical to the ./bin/etcd
that you are targeting (same git hash, arch, platform, etc).
go tool pprof ./bin/etcd http://127.0.0.1:4001/debug/pprof/heap
go tool pprof ./bin/etcd http://127.0.0.1:4001/debug/pprof/profile
go tool pprof ./bin/etcd http://127.0.0.1:4001/debug/pprof/block