mcsauna allows you to track the hottest keys on your memcached instances, reporting back in a graphite-friendly format. Regexps can be specified to group similar keys into the same bucket, for high-cardinality memcached instances, or tracking lots of keys over time.
Key rates are reported in the format:
mcsauna.keys.foo: 3
Errors in processing are reported in the format:
mcsauna.errors.bar: 3
If you are using diamond, you can output these to a file and watch via FilesCollector.
Note that at the moment, TCP reassembly / reordering is not supported. This should only be a problem for the case of multigets that span more than one packet. In these cases, an error will be reported indicating the command was truncated.
$ ./mcsauna --help
Usage of ./mcsauna:
-c string
config file
-e show errors in parsing as a metric (default true)
-i string
capture interface (default "any")
-n int
reporting interval (seconds, default 5)
-p int
capture port (default 11211)
-q suppress stdout output (default false)
-r int
number of items to report (default 20)
-w string
file to write output to
All command-line options can be specified via a configuration file in json format. Regular expressions and related options can only be specified in config. Command-line arguments will override settings passed in configuration.
Pass a configuration file using -c
:
# ./mcsauna -c conf.json
Example configuration:
{
"regexps": [
{"re": "^Foo_[0-9]+$", "name": "foo"},
{"re": "^Bar_[0-9]+$", "name": "bar"},
{"re": "^Baz_[0-9]+$", "name" "baz"},
],
"interval": 5,
"interface": "eth0",
"port": 11211,
"quiet": false,
"show_errors": true,
"output_file": "/tmp/mcsauna.out"
}
If regexps are specified, individual hot keys will not be reported. If not specifying regular expressions, you can limit the number of items that will be reported:
{
"interval": 5,
"num_items_to_report": 20
}
When debugging regular expressions, you can see which keys did not match
with the show_unmatched
flag set to true
.
The attempt to add support for multiple commands per packet caused a performance regression that hasn't been addressed. If you're experiencing this, version 1.0.2 (3dbb6d5179448f40c183cbb489c07d0862b8e57a) is recommended.