Memcached - Monitoring Extension

An AppDynamics extension to be used with a stand alone Java machine agent to provide metrics from memcached instances.


Metrics Provided


 curr_items              	-	Current number of items stored            
 total_items             	-	Total number of items stored since        
                         		the server started                        
 bytes                   	-	Current number of bytes used              
                         		to store items                            
 curr_connections        	-	Number of open connections                
 total_connections       	-	Total number of connections opened since  
                         		the server started running                
 connection_structures   	-	Number of connection structures allocated 
                         		by the server                             
 reserved_fds            	-	Number of misc fds used internally        
 cmd_get                 	-	Cumulative number of retrieval reqs       
 cmd_set                 	-	Cumulative number of storage reqs         
 cmd_flush               	-	Cumulative number of flush reqs           
 cmd_touch               	-	Cumulative number of touch reqs           
 get_hits                	-	Number of keys that have been requested   
                         		and found present                         
 get_misses              	-	Number of items that have been requested  
                         		and not found                             
 delete_misses           	-	Number of deletions reqs for missing keys 
 delete_hits             	-	Number of deletion reqs resulting in      
                         		an item being removed.                    
 incr_misses             	-	Number of incr reqs against missing keys. 
 incr_hits               	-	Number of successful incr reqs.           
 decr_misses             	-	Number of decr reqs against missing keys. 
 decr_hits               	-	Number of successful decr reqs.           
 cas_misses              	-	Number of CAS reqs against missing keys.  
 cas_hits                	-	Number of successful CAS reqs.            
 cas_badval              	-	Number of CAS reqs for which a key was    
                         		found, but the CAS value did not match.   
 touch_hits              	-	Numer of keys that have been touched with 
                         		a new expiration time                     
 touch_misses            	-	Numer of items that have been touched and 
                         		not found                                 
 auth_cmds               	-	Number of authentication commands         
                         		handled, success or failure.              
 auth_errors             	-	Number of failed authentications.         
 evictions               	-	Number of valid items removed from cache  
                         		to free memory for new items              
 reclaimed               	-	Number of times an entry was stored using 
                         		memory from an expired entry              
 bytes_read              	-	Total number of bytes read by this server 
                         		from network                              
 bytes_written           	-	Total number of bytes sent by this server 
                         		to network                                
 limit_maxbytes          	-	Number of bytes this server is allowed to 
                         		use for storage.                          
 threads                 	-	Number of worker threads requested.       
                         		(see doc/threads.txt)                     
 conn_yields             	-	Number of times any connection yielded to 
                         		another due to hitting the -R limit.      
 hash_bytes              	-	Bytes currently used by hash tables       
 expired_unfetched       	-	Items pulled from LRU that were never     
                         		touched by get/incr/append/etc before     
 evicted_unfetched       	-	Items evicted from LRU that were never    
                         		touched by get/incr/append/etc.           
 slabs_moved             	-	Total slab pages moved                    
 crawler_reclaimed       	-	Total items freed by LRU Crawler          







1. Download and unzip from AppSphere.
2. Copy the MemcachedMonitor directory to `<MACHINE_AGENT_HOME>/monitors`.




Note : Please make sure to not use tab (\t) while editing yaml files. You may want to validate the yaml file using a yaml validator



1. Configure the memcached instances by editing the config.yaml file in `<MACHINE_AGENT_HOME>/monitors/MemcachedMonitor/`. Below is the format


    - server: "localhost:11211"
      displayName: localhost
    - server: ""
      displayName: myUbuntu

  metricPrefix:  "Custom Metrics|Memcached|"


2. Configure the path to the config.yaml file by editing the <task-arguments> in the monitor.xml file. Below is the sample


         <!-- config file-->
         <argument name="config-file" is-required="true" default-value="monitors/MemcachedMonitor/config.yaml" />



Cluster level metrics : 


We support cluster level metrics only if each node in the cluster have a separate machine agent installed on it. There are two configurations required for this setup

1. Make sure that nodes belonging to the same cluster have the same <tier-name> in the <MACHINE_AGENT_HOME>/conf/controller-info.xml. The tier-name here should be your cluster name.

2. Make sure that in every node in the cluster, the <MACHINE_AGENT_HOME>/monitors/MemcachedMonitor/config.yaml should emit the same metric path. To achieve this make the displayName to be empty string and remove the trailing "|" in the metricPrefix.

To make it more clear,assume that Memcached "Node A" and Memcached "Node B" belong to the same cluster "ClusterAB". In order to achieve cluster level as well as node level metrics, you should do the following

1. Both Node A and Node B should have separate machine agents installed on them. Both the machine agent should have their own Memcached extension.

2. In the Node A's and Node B's machine agents' controller-info.xml make sure that you have the tier name to be your cluster name , "ClusterAB" here. Also, nodeName in controller-info.xml is Node A and Node B resp.

3. The config.yaml for Node A and Node B should be


    - server: "localhost:11211"
      displayName: ""

  metricPrefix:  "Custom Metrics|Memcached"




Now, if Node A and Node B are reporting say a metric called ReadLatency to the controller, with the above configuration they will be reporting it using the same metric path.

Node A reports Custom Metrics | ClusterAB | ReadLatency = 50
Node B reports Custom Metrics | ClusterAB | ReadLatency = 500

The controller will automatically average out the metrics at the cluster (tier) level as well. So you should be able to see the cluster level metrics under

Application Performance Management | Custom Metrics | ClusterAB | ReadLatency = 225

Also, now if you want to see individual node metrics you can view it under

Application Performance Management | Custom Metrics | ClusterAB | Individual Nodes | Node A | ReadLatency = 50
Application Performance Management | Custom Metrics | ClusterAB | Individual Nodes | Node B | ReadLatency = 500


Please note that for now the cluster level metrics are obtained by averaging all the individual node level metrics in a cluster.


Custom Dashboard







Always feel free to fork and contribute any changes directly via GitHub




Find out more in the Community




For any support questions, please contact





3.7 or later

Last Update:


Memcached version tested on:




 1.0.1 - Added support for cluster level metrics.

 1.0.3 - Enhanced by adding metric overrides and fixed NPE.

 2.0.1 - Delta metrics