SlideShare a Scribd company logo
1 of 56
Download to read offline
Monitor all the Things!

KEVIN MCGUIRE - DIRECTOR OF ENGINEERING, PLATFORM
OCTOBER 25/2013

Wednesday, November 6, 13
The evolution of monitoring

Wednesday, November 6, 13
The evolution of monitoring

Wednesday, November 6, 13
The evolution of monitoring

Wednesday, November 6, 13
The evolution of monitoring

Wednesday, November 6, 13
Your end user experience depends on more

Wednesday, November 6, 13
A lot more

Wednesday, November 6, 13
You can’t manage what you can’t monitor

Wednesday, November 6, 13
You can’t manage what you can’t monitor

Wednesday, November 6, 13
You can’t manage what you can’t monitor

Wednesday, November 6, 13
Solution?

Wednesday, November 6, 13
Solution?
MONITOR ALL THE THINGS!

http://hyperboleandahalf.blogspot.com/

Wednesday, November 6, 13
Platform gives complete visibility

Wednesday, November 6, 13
Platform gives complete visibility

Wednesday, November 6, 13
Platform gives complete visibility

Wednesday, November 6, 13
Plugins for, well, everything!
To
ob
ig
t

68 69 published plugins
29 different publishers

of

Wednesday, November 6, 13

it i
n

pre
s

en
tat

ion
!
We got databases

Wednesday, November 6, 13
We got yer NoSQL stores

Wednesday, November 6, 13
Yup, caching too

Wednesday, November 6, 13
Queuing, web server, load blance, ...

Wednesday, November 6, 13
And my personal favorite:

Wednesday, November 6, 13
And my personal favorite:

You go Yuri Yasiyarov, wherever you are!

Wednesday, November 6, 13
Integrated, 1st class experience

Wednesday, November 6, 13
Integrated, 1st class experience

Wednesday, November 6, 13
Integrated, 1st class experience

Wednesday, November 6, 13
Integrated, 1st class experience

Wednesday, November 6, 13
Integrated, 1st class experience

Wednesday, November 6, 13
Customized charts
MySQL plugin has MySQL’y stuff

Wednesday, November 6, 13
Install is a snap
Easy as...
1

Wednesday, November 6, 13
Install is a snap
Easy as...
1

2
[
{
"name" : "Localhost",
"host" : "localhost",
"user" : "USER_NAME_HERE",
"passwd" : "USER_PASSWD_HERE"
},
]
licenseKey=blahblahblah12345

Wednesday, November 6, 13
Install is a snap
Easy as...
1

2

3

[

java -jar newrelic_mysql_plugin.jar
{
"name" : "Localhost",
"host" : "localhost",
"user" : "USER_NAME_HERE",
"passwd" : "USER_PASSWD_HERE"
},

]
licenseKey=blahblahblah12345

Wednesday, November 6, 13
Independent runtime
Infrastructure
Varnish
Server

Memcached
Server

MySQL
Server 1
MySQL
Server 2

Externally monitored

Platform Agents
Varnish
Agent

Memcached
Agent

...

RPM
MySQL
Agent

+ GUID +

New Relic
Metric
Store

Wednesday, November 6, 13

MySQL
UI

...

Memcached UI

Varnish
UI
SaaS
SaaS Service
Customer A

Customer B B
Customer
Customer B
Data
Customer B
Data
Data

Customer X

Customer X
license key

SaaS ‘agent code’

RPM

+ GUID +

HTTP API

New Relic
Metric
Store

Wednesday, November 6, 13

SaaS
UI

...

Memcached UI

Varnish
UI
Don’t see one you like?

Built 9 prior to launch,
now at 14!

Wednesday, November 6, 13

Built 6!

Built 4!

Built 3!

Built the Redis Plugin in a
couple hours, and used it to
solve performance issues the
same day
Simple APIs + SDKs = Easy to write

Wednesday, November 6, 13
Simple APIs + SDKs = Easy to write
•SDKs do all the “heavy lifting”
•Java (primary), Ruby
•Runs polling cycle
•Connecting to New Relic
•Aggregation

Wednesday, November 6, 13
Simple APIs + SDKs = Easy to write
•SDKs do all the “heavy lifting”
•Java (primary), Ruby
•Runs polling cycle
•Connecting to New Relic
•Aggregation
•HTTP API
•SaaS
•Non Java/Ruby

Wednesday, November 6, 13
Anatomy of a plugin agent
(yes, it’s really that simple)
public	
  class	
  MySQLAgent	
  extends	
  Agent	
  {
	
  	
  public	
  MySQLAgent()	
  {
	
  	
  	
  	
  super("com.mycompany.mysql",	
  "1.0.0");
	
  	
  }
	
  	
  private	
  Map<String,	
  Number>	
  gatherMetrics()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  MySQL.runSQL(getConnection(),	
  "SHOW	
  GLOBAL	
  STATUS");	
  
	
  	
  	
  	
  return	
  metrics;
	
  	
  }
	
  	
  public	
  void	
  pollCycle()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  gatherMetrics();	
  

	
  	
  	
  	
  reportMetric("network/bytes_reads",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_reads"));
	
  	
  	
  	
  reportMetric("network/bytes_writes",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_writes"));
	
  	
  	
  	
  reportMetric("queries/com_select",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "selects/second",	
  	
  metrics.get("com_select"));
	
  	
  	
  	
  reportMetric("queries/com_insert",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "inserts/second",	
  	
  metrics.get("com_insert"));
	
  	
  	
  	
  reportMetric("queries/slow_queries",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "queries/second",	
  	
  metrics.get("slow_queries"));
	
  	
  	
  	
  reportMetric("connections/connected",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "connections",	
  	
  	
  	
  	
  metrics.get("connections_connected"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_flushed",	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_flushed"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_dirty",	
  	
  	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_dirty"));
	
  	
  	
  	
  //	
  ...
	
  	
  }
}

Wednesday, November 6, 13
Anatomy of a plugin agent
(yes, it’s really that simple)
public	
  class	
  MySQLAgent	
  extends	
  Agent	
  {
	
  	
  public	
  MySQLAgent()	
  {
	
  	
  	
  	
  super("com.mycompany.mysql",	
  "1.0.0");
	
  	
  }

Unique identifier (GUID), agent version

	
  	
  private	
  Map<String,	
  Number>	
  gatherMetrics()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  MySQL.runSQL(getConnection(),	
  "SHOW	
  GLOBAL	
  STATUS");	
  
	
  	
  	
  	
  return	
  metrics;
	
  	
  }
	
  	
  public	
  void	
  pollCycle()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  gatherMetrics();	
  

	
  	
  	
  	
  reportMetric("network/bytes_reads",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_reads"));
	
  	
  	
  	
  reportMetric("network/bytes_writes",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_writes"));
	
  	
  	
  	
  reportMetric("queries/com_select",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "selects/second",	
  	
  metrics.get("com_select"));
	
  	
  	
  	
  reportMetric("queries/com_insert",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "inserts/second",	
  	
  metrics.get("com_insert"));
	
  	
  	
  	
  reportMetric("queries/slow_queries",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "queries/second",	
  	
  metrics.get("slow_queries"));
	
  	
  	
  	
  reportMetric("connections/connected",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "connections",	
  	
  	
  	
  	
  metrics.get("connections_connected"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_flushed",	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_flushed"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_dirty",	
  	
  	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_dirty"));
	
  	
  	
  	
  //	
  ...
	
  	
  }
}

Wednesday, November 6, 13
Anatomy of a plugin agent
(yes, it’s really that simple)
public	
  class	
  MySQLAgent	
  extends	
  Agent	
  {
	
  	
  public	
  MySQLAgent()	
  {
	
  	
  	
  	
  super("com.mycompany.mysql",	
  "1.0.0");
	
  	
  }

Unique identifier (GUID), agent version

	
  	
  private	
  Map<String,	
  Number>	
  gatherMetrics()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  MySQL.runSQL(getConnection(),	
  "SHOW	
  GLOBAL	
  STATUS");	
  
	
  	
  	
  	
  return	
  metrics;
	
  	
  }

Query metrics from system

	
  	
  public	
  void	
  pollCycle()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  gatherMetrics();	
  

	
  	
  	
  	
  reportMetric("network/bytes_reads",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_reads"));
	
  	
  	
  	
  reportMetric("network/bytes_writes",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_writes"));
	
  	
  	
  	
  reportMetric("queries/com_select",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "selects/second",	
  	
  metrics.get("com_select"));
	
  	
  	
  	
  reportMetric("queries/com_insert",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "inserts/second",	
  	
  metrics.get("com_insert"));
	
  	
  	
  	
  reportMetric("queries/slow_queries",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "queries/second",	
  	
  metrics.get("slow_queries"));
	
  	
  	
  	
  reportMetric("connections/connected",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "connections",	
  	
  	
  	
  	
  metrics.get("connections_connected"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_flushed",	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_flushed"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_dirty",	
  	
  	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_dirty"));
	
  	
  	
  	
  //	
  ...
	
  	
  }
}

Wednesday, November 6, 13
Anatomy of a plugin agent
(yes, it’s really that simple)
public	
  class	
  MySQLAgent	
  extends	
  Agent	
  {
	
  	
  public	
  MySQLAgent()	
  {
	
  	
  	
  	
  super("com.mycompany.mysql",	
  "1.0.0");
	
  	
  }

Unique identifier (GUID), agent version

	
  	
  private	
  Map<String,	
  Number>	
  gatherMetrics()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  MySQL.runSQL(getConnection(),	
  "SHOW	
  GLOBAL	
  STATUS");	
  
	
  	
  	
  	
  return	
  metrics;
	
  	
  }

Query metrics from system

	
  	
  public	
  void	
  pollCycle()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  gatherMetrics();	
  

Value
	
  	
  	
  	
  reportMetric("network/bytes_reads",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_reads"));
	
  	
  	
  	
  reportMetric("network/bytes_writes",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_writes"));
	
  	
  	
  	
  reportMetric("queries/com_select",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "selects/second",	
  	
  metrics.get("com_select"));
	
  	
  	
  	
  reportMetric("queries/com_insert",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "inserts/second",	
  	
  metrics.get("com_insert"));
	
  	
  	
  	
  reportMetric("queries/slow_queries",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "queries/second",	
  	
  metrics.get("slow_queries"));
	
  	
  	
  	
  reportMetric("connections/connected",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "connections",	
  	
  	
  	
  	
  metrics.get("connections_connected"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_flushed",	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_flushed"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_dirty",	
  	
  	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_dirty"));
	
  	
  	
  	
  //	
  ...
	
  	
  }
}

Wednesday, November 6, 13
Anatomy of a plugin agent
(yes, it’s really that simple)
public	
  class	
  MySQLAgent	
  extends	
  Agent	
  {
	
  	
  public	
  MySQLAgent()	
  {
	
  	
  	
  	
  super("com.mycompany.mysql",	
  "1.0.0");
	
  	
  }

Unique identifier (GUID), agent version

	
  	
  private	
  Map<String,	
  Number>	
  gatherMetrics()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  MySQL.runSQL(getConnection(),	
  "SHOW	
  GLOBAL	
  STATUS");	
  
	
  	
  	
  	
  return	
  metrics;
	
  	
  }

Query metrics from system

	
  	
  public	
  void	
  pollCycle()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  gatherMetrics();	
  

Identifier

Value

	
  	
  	
  	
  reportMetric("network/bytes_reads",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_reads"));
	
  	
  	
  	
  reportMetric("network/bytes_writes",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_writes"));
	
  	
  	
  	
  reportMetric("queries/com_select",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "selects/second",	
  	
  metrics.get("com_select"));
	
  	
  	
  	
  reportMetric("queries/com_insert",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "inserts/second",	
  	
  metrics.get("com_insert"));
	
  	
  	
  	
  reportMetric("queries/slow_queries",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "queries/second",	
  	
  metrics.get("slow_queries"));
	
  	
  	
  	
  reportMetric("connections/connected",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "connections",	
  	
  	
  	
  	
  metrics.get("connections_connected"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_flushed",	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_flushed"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_dirty",	
  	
  	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_dirty"));
	
  	
  	
  	
  //	
  ...
	
  	
  }
}

Wednesday, November 6, 13
Anatomy of a plugin agent
(yes, it’s really that simple)
public	
  class	
  MySQLAgent	
  extends	
  Agent	
  {
	
  	
  public	
  MySQLAgent()	
  {
	
  	
  	
  	
  super("com.mycompany.mysql",	
  "1.0.0");
	
  	
  }

Unique identifier (GUID), agent version

	
  	
  private	
  Map<String,	
  Number>	
  gatherMetrics()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  MySQL.runSQL(getConnection(),	
  "SHOW	
  GLOBAL	
  STATUS");	
  
	
  	
  	
  	
  return	
  metrics;
	
  	
  }

Query metrics from system

	
  	
  public	
  void	
  pollCycle()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  gatherMetrics();	
  

Identifier

Units

Value

	
  	
  	
  	
  reportMetric("network/bytes_reads",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_reads"));
	
  	
  	
  	
  reportMetric("network/bytes_writes",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_writes"));
	
  	
  	
  	
  reportMetric("queries/com_select",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "selects/second",	
  	
  metrics.get("com_select"));
	
  	
  	
  	
  reportMetric("queries/com_insert",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "inserts/second",	
  	
  metrics.get("com_insert"));
	
  	
  	
  	
  reportMetric("queries/slow_queries",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "queries/second",	
  	
  metrics.get("slow_queries"));
	
  	
  	
  	
  reportMetric("connections/connected",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "connections",	
  	
  	
  	
  	
  metrics.get("connections_connected"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_flushed",	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_flushed"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_dirty",	
  	
  	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_dirty"));
	
  	
  	
  	
  //	
  ...
	
  	
  }
}

Wednesday, November 6, 13
Anatomy of a plugin agent
(yes, it’s really that simple)
public	
  class	
  MySQLAgent	
  extends	
  Agent	
  {
	
  	
  public	
  MySQLAgent()	
  {
	
  	
  	
  	
  super("com.mycompany.mysql",	
  "1.0.0");
	
  	
  }

Unique identifier (GUID), agent version

	
  	
  private	
  Map<String,	
  Number>	
  gatherMetrics()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  MySQL.runSQL(getConnection(),	
  "SHOW	
  GLOBAL	
  STATUS");	
  
	
  	
  	
  	
  return	
  metrics;
	
  	
  }

Query metrics from system

	
  	
  public	
  void	
  pollCycle()	
  {
	
  	
  	
  	
  Map<String,	
  Number>	
  metrics	
  =	
  gatherMetrics();	
  

Send to NR

Identifier

Units

Value

	
  	
  	
  	
  reportMetric("network/bytes_reads",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_reads"));
	
  	
  	
  	
  reportMetric("network/bytes_writes",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "bytes/second",	
  	
  	
  	
  metrics.get("bytes_writes"));
	
  	
  	
  	
  reportMetric("queries/com_select",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "selects/second",	
  	
  metrics.get("com_select"));
	
  	
  	
  	
  reportMetric("queries/com_insert",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "inserts/second",	
  	
  metrics.get("com_insert"));
	
  	
  	
  	
  reportMetric("queries/slow_queries",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "queries/second",	
  	
  metrics.get("slow_queries"));
	
  	
  	
  	
  reportMetric("connections/connected",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  "connections",	
  	
  	
  	
  	
  metrics.get("connections_connected"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_flushed",	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_flushed"));
	
  	
  	
  	
  reportMetric("innodb/buffer_pool_pages_dirty",	
  	
  	
  "pages",	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  metrics.get("innodb_buffer_pool_pages_dirty"));
	
  	
  	
  	
  //	
  ...
	
  	
  }
}

Wednesday, November 6, 13
Easy to build UIs

Wednesday, November 6, 13
Custom Dashboards
Fast and easy UI creation

Wednesday, November 6, 13
Optionally publish
Lists in Plugin Central, makes available the UIs

Wednesday, November 6, 13
Install UI = run the agent
Infrastructure
Varnish
Server

Memcached
Server

MySQL
Server 1
MySQL
Server 2

Externally monitored

Platform Agents
Varnish
Agent

Memcached
Agent

...

RPM
MySQL
Agent

+ GUID +

New Relic
Metric
Store

Wednesday, November 6, 13

MySQL
UI

...

Memcached UI

Varnish
UI
Install UI = run the agent
Infrastructure
Varnish
Server

Memcached
Server

MySQL
Server 1
MySQL
Server 2

Externally monitored

Platform Agents
Varnish
Agent

Memcached
Agent

...

RPM
MySQL
Agent

+ GUID +

New Relic
Metric
Store

Wednesday, November 6, 13

MySQL
UI

...

Memcached UI

Varnish
UI
“But Kevin, how much will all this cost?”

Wednesday, November 6, 13
“But Kevin, how much will all this cost?”

Free!!
Wednesday, November 6, 13
New! Plugin community reviews
Help improve plugins, give feedback

Wednesday, November 6, 13
New! Private publishing
Distribute within multiple accounts, closed Betas

Wednesday, November 6, 13
In progress: Deployment recipes
Simplified configuration and deployment across your data center

Wednesday, November 6, 13
Get involved!
✓

Review plugins

✓ Contribute to the plugins
• Many are open source
• Write one!
✓

Contribute to the SDKs

✓ Help us with Chef
• Try out our recipes
• Try authoring recipes

Wednesday, November 6, 13
Thank you!

Wednesday, November 6, 13

More Related Content

More from New Relic

FutureStack Tokyo 19 -[特別講演]システム開発によろこびと驚きの連鎖を
FutureStack Tokyo 19 -[特別講演]システム開発によろこびと驚きの連鎖をFutureStack Tokyo 19 -[特別講演]システム開発によろこびと驚きの連鎖を
FutureStack Tokyo 19 -[特別講演]システム開発によろこびと驚きの連鎖をNew Relic
 
FutureStack Tokyo 19 -[パートナー講演]アマゾン ウェブ サービス ジャパン株式会社: New Relicを活用したAWSへのアプリ...
FutureStack Tokyo 19 -[パートナー講演]アマゾン ウェブ サービス ジャパン株式会社: New Relicを活用したAWSへのアプリ...FutureStack Tokyo 19 -[パートナー講演]アマゾン ウェブ サービス ジャパン株式会社: New Relicを活用したAWSへのアプリ...
FutureStack Tokyo 19 -[パートナー講演]アマゾン ウェブ サービス ジャパン株式会社: New Relicを活用したAWSへのアプリ...New Relic
 
FutureStack Tokyo 19_インサイトとデータを組織の力にする_株式会社ドワンゴ 池田 明啓 氏
FutureStack Tokyo 19_インサイトとデータを組織の力にする_株式会社ドワンゴ 池田 明啓 氏FutureStack Tokyo 19_インサイトとデータを組織の力にする_株式会社ドワンゴ 池田 明啓 氏
FutureStack Tokyo 19_インサイトとデータを組織の力にする_株式会社ドワンゴ 池田 明啓 氏New Relic
 
Three Monitoring Mistakes and How to Avoid Them
Three Monitoring Mistakes and How to Avoid ThemThree Monitoring Mistakes and How to Avoid Them
Three Monitoring Mistakes and How to Avoid ThemNew Relic
 
Intro to Multidimensional Kubernetes Monitoring
Intro to Multidimensional Kubernetes MonitoringIntro to Multidimensional Kubernetes Monitoring
Intro to Multidimensional Kubernetes MonitoringNew Relic
 
FS18 Chicago Keynote
FS18 Chicago Keynote FS18 Chicago Keynote
FS18 Chicago Keynote New Relic
 
10 Things You Can Do With New Relic - Number 9 Will Shock You
10 Things You Can Do With New Relic - Number 9 Will Shock You10 Things You Can Do With New Relic - Number 9 Will Shock You
10 Things You Can Do With New Relic - Number 9 Will Shock YouNew Relic
 
Ground Rules for Code Reviews
Ground Rules for Code ReviewsGround Rules for Code Reviews
Ground Rules for Code ReviewsNew Relic
 
Understanding Microservice Latency for DevOps Teams: An Introduction to New R...
Understanding Microservice Latency for DevOps Teams: An Introduction to New R...Understanding Microservice Latency for DevOps Teams: An Introduction to New R...
Understanding Microservice Latency for DevOps Teams: An Introduction to New R...New Relic
 
Monitor all your Kubernetes and EKS stack with New Relic
Monitor all your Kubernetes and EKS stack with New Relic	Monitor all your Kubernetes and EKS stack with New Relic
Monitor all your Kubernetes and EKS stack with New Relic New Relic
 
Host for the Most: Cloud Cost Optimization
Host for the Most: Cloud Cost OptimizationHost for the Most: Cloud Cost Optimization
Host for the Most: Cloud Cost OptimizationNew Relic
 
New Relic Infrastructure in the Real World: AWS
New Relic Infrastructure in the Real World: AWSNew Relic Infrastructure in the Real World: AWS
New Relic Infrastructure in the Real World: AWSNew Relic
 
Best Practices for Measuring your Code Pipeline
Best Practices for Measuring your Code PipelineBest Practices for Measuring your Code Pipeline
Best Practices for Measuring your Code PipelineNew Relic
 
Top Three Mistakes People Make with Monitoring
Top Three Mistakes People Make with MonitoringTop Three Mistakes People Make with Monitoring
Top Three Mistakes People Make with MonitoringNew Relic
 
Kubernetes in the Wild: Best Practices for Monitoring
Kubernetes in the Wild: Best Practices for MonitoringKubernetes in the Wild: Best Practices for Monitoring
Kubernetes in the Wild: Best Practices for MonitoringNew Relic
 
re:Thinking the Cloud
re:Thinking the Cloudre:Thinking the Cloud
re:Thinking the CloudNew Relic
 
Our Evolution to GraphQL: Unifying our API Strategy
Our Evolution to GraphQL: Unifying our API StrategyOur Evolution to GraphQL: Unifying our API Strategy
Our Evolution to GraphQL: Unifying our API StrategyNew Relic
 
Kick Ass Data Exploration through Dashboards
Kick Ass Data Exploration through DashboardsKick Ass Data Exploration through Dashboards
Kick Ass Data Exploration through DashboardsNew Relic
 
DevOps without Measurement is a Fail
DevOps without Measurement is a FailDevOps without Measurement is a Fail
DevOps without Measurement is a FailNew Relic
 

More from New Relic (20)

FutureStack Tokyo 19 -[特別講演]システム開発によろこびと驚きの連鎖を
FutureStack Tokyo 19 -[特別講演]システム開発によろこびと驚きの連鎖をFutureStack Tokyo 19 -[特別講演]システム開発によろこびと驚きの連鎖を
FutureStack Tokyo 19 -[特別講演]システム開発によろこびと驚きの連鎖を
 
FutureStack Tokyo 19 -[パートナー講演]アマゾン ウェブ サービス ジャパン株式会社: New Relicを活用したAWSへのアプリ...
FutureStack Tokyo 19 -[パートナー講演]アマゾン ウェブ サービス ジャパン株式会社: New Relicを活用したAWSへのアプリ...FutureStack Tokyo 19 -[パートナー講演]アマゾン ウェブ サービス ジャパン株式会社: New Relicを活用したAWSへのアプリ...
FutureStack Tokyo 19 -[パートナー講演]アマゾン ウェブ サービス ジャパン株式会社: New Relicを活用したAWSへのアプリ...
 
FutureStack Tokyo 19_インサイトとデータを組織の力にする_株式会社ドワンゴ 池田 明啓 氏
FutureStack Tokyo 19_インサイトとデータを組織の力にする_株式会社ドワンゴ 池田 明啓 氏FutureStack Tokyo 19_インサイトとデータを組織の力にする_株式会社ドワンゴ 池田 明啓 氏
FutureStack Tokyo 19_インサイトとデータを組織の力にする_株式会社ドワンゴ 池田 明啓 氏
 
Three Monitoring Mistakes and How to Avoid Them
Three Monitoring Mistakes and How to Avoid ThemThree Monitoring Mistakes and How to Avoid Them
Three Monitoring Mistakes and How to Avoid Them
 
Intro to Multidimensional Kubernetes Monitoring
Intro to Multidimensional Kubernetes MonitoringIntro to Multidimensional Kubernetes Monitoring
Intro to Multidimensional Kubernetes Monitoring
 
FS18 Chicago Keynote
FS18 Chicago Keynote FS18 Chicago Keynote
FS18 Chicago Keynote
 
SRE-iously
SRE-iouslySRE-iously
SRE-iously
 
10 Things You Can Do With New Relic - Number 9 Will Shock You
10 Things You Can Do With New Relic - Number 9 Will Shock You10 Things You Can Do With New Relic - Number 9 Will Shock You
10 Things You Can Do With New Relic - Number 9 Will Shock You
 
Ground Rules for Code Reviews
Ground Rules for Code ReviewsGround Rules for Code Reviews
Ground Rules for Code Reviews
 
Understanding Microservice Latency for DevOps Teams: An Introduction to New R...
Understanding Microservice Latency for DevOps Teams: An Introduction to New R...Understanding Microservice Latency for DevOps Teams: An Introduction to New R...
Understanding Microservice Latency for DevOps Teams: An Introduction to New R...
 
Monitor all your Kubernetes and EKS stack with New Relic
Monitor all your Kubernetes and EKS stack with New Relic	Monitor all your Kubernetes and EKS stack with New Relic
Monitor all your Kubernetes and EKS stack with New Relic
 
Host for the Most: Cloud Cost Optimization
Host for the Most: Cloud Cost OptimizationHost for the Most: Cloud Cost Optimization
Host for the Most: Cloud Cost Optimization
 
New Relic Infrastructure in the Real World: AWS
New Relic Infrastructure in the Real World: AWSNew Relic Infrastructure in the Real World: AWS
New Relic Infrastructure in the Real World: AWS
 
Best Practices for Measuring your Code Pipeline
Best Practices for Measuring your Code PipelineBest Practices for Measuring your Code Pipeline
Best Practices for Measuring your Code Pipeline
 
Top Three Mistakes People Make with Monitoring
Top Three Mistakes People Make with MonitoringTop Three Mistakes People Make with Monitoring
Top Three Mistakes People Make with Monitoring
 
Kubernetes in the Wild: Best Practices for Monitoring
Kubernetes in the Wild: Best Practices for MonitoringKubernetes in the Wild: Best Practices for Monitoring
Kubernetes in the Wild: Best Practices for Monitoring
 
re:Thinking the Cloud
re:Thinking the Cloudre:Thinking the Cloud
re:Thinking the Cloud
 
Our Evolution to GraphQL: Unifying our API Strategy
Our Evolution to GraphQL: Unifying our API StrategyOur Evolution to GraphQL: Unifying our API Strategy
Our Evolution to GraphQL: Unifying our API Strategy
 
Kick Ass Data Exploration through Dashboards
Kick Ass Data Exploration through DashboardsKick Ass Data Exploration through Dashboards
Kick Ass Data Exploration through Dashboards
 
DevOps without Measurement is a Fail
DevOps without Measurement is a FailDevOps without Measurement is a Fail
DevOps without Measurement is a Fail
 

Recently uploaded

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processorsdebabhi2
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsRoshan Dwivedi
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Miguel Araújo
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Igalia
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 

Recently uploaded (20)

Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live StreamsTop 5 Benefits OF Using Muvi Live Paywall For Live Streams
Top 5 Benefits OF Using Muvi Live Paywall For Live Streams
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 

FUTURESTACK13: Monitor All the Things from Kevin McGuire, Director of Engineering at New Relic

  • 1. Monitor all the Things! KEVIN MCGUIRE - DIRECTOR OF ENGINEERING, PLATFORM OCTOBER 25/2013 Wednesday, November 6, 13
  • 2. The evolution of monitoring Wednesday, November 6, 13
  • 3. The evolution of monitoring Wednesday, November 6, 13
  • 4. The evolution of monitoring Wednesday, November 6, 13
  • 5. The evolution of monitoring Wednesday, November 6, 13
  • 6. Your end user experience depends on more Wednesday, November 6, 13
  • 7. A lot more Wednesday, November 6, 13
  • 8. You can’t manage what you can’t monitor Wednesday, November 6, 13
  • 9. You can’t manage what you can’t monitor Wednesday, November 6, 13
  • 10. You can’t manage what you can’t monitor Wednesday, November 6, 13
  • 12. Solution? MONITOR ALL THE THINGS! http://hyperboleandahalf.blogspot.com/ Wednesday, November 6, 13
  • 13. Platform gives complete visibility Wednesday, November 6, 13
  • 14. Platform gives complete visibility Wednesday, November 6, 13
  • 15. Platform gives complete visibility Wednesday, November 6, 13
  • 16. Plugins for, well, everything! To ob ig t 68 69 published plugins 29 different publishers of Wednesday, November 6, 13 it i n pre s en tat ion !
  • 17. We got databases Wednesday, November 6, 13
  • 18. We got yer NoSQL stores Wednesday, November 6, 13
  • 19. Yup, caching too Wednesday, November 6, 13
  • 20. Queuing, web server, load blance, ... Wednesday, November 6, 13
  • 21. And my personal favorite: Wednesday, November 6, 13
  • 22. And my personal favorite: You go Yuri Yasiyarov, wherever you are! Wednesday, November 6, 13
  • 23. Integrated, 1st class experience Wednesday, November 6, 13
  • 24. Integrated, 1st class experience Wednesday, November 6, 13
  • 25. Integrated, 1st class experience Wednesday, November 6, 13
  • 26. Integrated, 1st class experience Wednesday, November 6, 13
  • 27. Integrated, 1st class experience Wednesday, November 6, 13
  • 28. Customized charts MySQL plugin has MySQL’y stuff Wednesday, November 6, 13
  • 29. Install is a snap Easy as... 1 Wednesday, November 6, 13
  • 30. Install is a snap Easy as... 1 2 [ { "name" : "Localhost", "host" : "localhost", "user" : "USER_NAME_HERE", "passwd" : "USER_PASSWD_HERE" }, ] licenseKey=blahblahblah12345 Wednesday, November 6, 13
  • 31. Install is a snap Easy as... 1 2 3 [ java -jar newrelic_mysql_plugin.jar { "name" : "Localhost", "host" : "localhost", "user" : "USER_NAME_HERE", "passwd" : "USER_PASSWD_HERE" }, ] licenseKey=blahblahblah12345 Wednesday, November 6, 13
  • 32. Independent runtime Infrastructure Varnish Server Memcached Server MySQL Server 1 MySQL Server 2 Externally monitored Platform Agents Varnish Agent Memcached Agent ... RPM MySQL Agent + GUID + New Relic Metric Store Wednesday, November 6, 13 MySQL UI ... Memcached UI Varnish UI
  • 33. SaaS SaaS Service Customer A Customer B B Customer Customer B Data Customer B Data Data Customer X Customer X license key SaaS ‘agent code’ RPM + GUID + HTTP API New Relic Metric Store Wednesday, November 6, 13 SaaS UI ... Memcached UI Varnish UI
  • 34. Don’t see one you like? Built 9 prior to launch, now at 14! Wednesday, November 6, 13 Built 6! Built 4! Built 3! Built the Redis Plugin in a couple hours, and used it to solve performance issues the same day
  • 35. Simple APIs + SDKs = Easy to write Wednesday, November 6, 13
  • 36. Simple APIs + SDKs = Easy to write •SDKs do all the “heavy lifting” •Java (primary), Ruby •Runs polling cycle •Connecting to New Relic •Aggregation Wednesday, November 6, 13
  • 37. Simple APIs + SDKs = Easy to write •SDKs do all the “heavy lifting” •Java (primary), Ruby •Runs polling cycle •Connecting to New Relic •Aggregation •HTTP API •SaaS •Non Java/Ruby Wednesday, November 6, 13
  • 38. Anatomy of a plugin agent (yes, it’s really that simple) public  class  MySQLAgent  extends  Agent  {    public  MySQLAgent()  {        super("com.mycompany.mysql",  "1.0.0");    }    private  Map<String,  Number>  gatherMetrics()  {        Map<String,  Number>  metrics  =  MySQL.runSQL(getConnection(),  "SHOW  GLOBAL  STATUS");          return  metrics;    }    public  void  pollCycle()  {        Map<String,  Number>  metrics  =  gatherMetrics();          reportMetric("network/bytes_reads",                            "bytes/second",        metrics.get("bytes_reads"));        reportMetric("network/bytes_writes",                          "bytes/second",        metrics.get("bytes_writes"));        reportMetric("queries/com_select",                              "selects/second",    metrics.get("com_select"));        reportMetric("queries/com_insert",                              "inserts/second",    metrics.get("com_insert"));        reportMetric("queries/slow_queries",                          "queries/second",    metrics.get("slow_queries"));        reportMetric("connections/connected",                        "connections",          metrics.get("connections_connected"));        reportMetric("innodb/buffer_pool_pages_flushed",  "pages",                      metrics.get("innodb_buffer_pool_pages_flushed"));        reportMetric("innodb/buffer_pool_pages_dirty",      "pages",                      metrics.get("innodb_buffer_pool_pages_dirty"));        //  ...    } } Wednesday, November 6, 13
  • 39. Anatomy of a plugin agent (yes, it’s really that simple) public  class  MySQLAgent  extends  Agent  {    public  MySQLAgent()  {        super("com.mycompany.mysql",  "1.0.0");    } Unique identifier (GUID), agent version    private  Map<String,  Number>  gatherMetrics()  {        Map<String,  Number>  metrics  =  MySQL.runSQL(getConnection(),  "SHOW  GLOBAL  STATUS");          return  metrics;    }    public  void  pollCycle()  {        Map<String,  Number>  metrics  =  gatherMetrics();          reportMetric("network/bytes_reads",                            "bytes/second",        metrics.get("bytes_reads"));        reportMetric("network/bytes_writes",                          "bytes/second",        metrics.get("bytes_writes"));        reportMetric("queries/com_select",                              "selects/second",    metrics.get("com_select"));        reportMetric("queries/com_insert",                              "inserts/second",    metrics.get("com_insert"));        reportMetric("queries/slow_queries",                          "queries/second",    metrics.get("slow_queries"));        reportMetric("connections/connected",                        "connections",          metrics.get("connections_connected"));        reportMetric("innodb/buffer_pool_pages_flushed",  "pages",                      metrics.get("innodb_buffer_pool_pages_flushed"));        reportMetric("innodb/buffer_pool_pages_dirty",      "pages",                      metrics.get("innodb_buffer_pool_pages_dirty"));        //  ...    } } Wednesday, November 6, 13
  • 40. Anatomy of a plugin agent (yes, it’s really that simple) public  class  MySQLAgent  extends  Agent  {    public  MySQLAgent()  {        super("com.mycompany.mysql",  "1.0.0");    } Unique identifier (GUID), agent version    private  Map<String,  Number>  gatherMetrics()  {        Map<String,  Number>  metrics  =  MySQL.runSQL(getConnection(),  "SHOW  GLOBAL  STATUS");          return  metrics;    } Query metrics from system    public  void  pollCycle()  {        Map<String,  Number>  metrics  =  gatherMetrics();          reportMetric("network/bytes_reads",                            "bytes/second",        metrics.get("bytes_reads"));        reportMetric("network/bytes_writes",                          "bytes/second",        metrics.get("bytes_writes"));        reportMetric("queries/com_select",                              "selects/second",    metrics.get("com_select"));        reportMetric("queries/com_insert",                              "inserts/second",    metrics.get("com_insert"));        reportMetric("queries/slow_queries",                          "queries/second",    metrics.get("slow_queries"));        reportMetric("connections/connected",                        "connections",          metrics.get("connections_connected"));        reportMetric("innodb/buffer_pool_pages_flushed",  "pages",                      metrics.get("innodb_buffer_pool_pages_flushed"));        reportMetric("innodb/buffer_pool_pages_dirty",      "pages",                      metrics.get("innodb_buffer_pool_pages_dirty"));        //  ...    } } Wednesday, November 6, 13
  • 41. Anatomy of a plugin agent (yes, it’s really that simple) public  class  MySQLAgent  extends  Agent  {    public  MySQLAgent()  {        super("com.mycompany.mysql",  "1.0.0");    } Unique identifier (GUID), agent version    private  Map<String,  Number>  gatherMetrics()  {        Map<String,  Number>  metrics  =  MySQL.runSQL(getConnection(),  "SHOW  GLOBAL  STATUS");          return  metrics;    } Query metrics from system    public  void  pollCycle()  {        Map<String,  Number>  metrics  =  gatherMetrics();   Value        reportMetric("network/bytes_reads",                            "bytes/second",        metrics.get("bytes_reads"));        reportMetric("network/bytes_writes",                          "bytes/second",        metrics.get("bytes_writes"));        reportMetric("queries/com_select",                              "selects/second",    metrics.get("com_select"));        reportMetric("queries/com_insert",                              "inserts/second",    metrics.get("com_insert"));        reportMetric("queries/slow_queries",                          "queries/second",    metrics.get("slow_queries"));        reportMetric("connections/connected",                        "connections",          metrics.get("connections_connected"));        reportMetric("innodb/buffer_pool_pages_flushed",  "pages",                      metrics.get("innodb_buffer_pool_pages_flushed"));        reportMetric("innodb/buffer_pool_pages_dirty",      "pages",                      metrics.get("innodb_buffer_pool_pages_dirty"));        //  ...    } } Wednesday, November 6, 13
  • 42. Anatomy of a plugin agent (yes, it’s really that simple) public  class  MySQLAgent  extends  Agent  {    public  MySQLAgent()  {        super("com.mycompany.mysql",  "1.0.0");    } Unique identifier (GUID), agent version    private  Map<String,  Number>  gatherMetrics()  {        Map<String,  Number>  metrics  =  MySQL.runSQL(getConnection(),  "SHOW  GLOBAL  STATUS");          return  metrics;    } Query metrics from system    public  void  pollCycle()  {        Map<String,  Number>  metrics  =  gatherMetrics();   Identifier Value        reportMetric("network/bytes_reads",                            "bytes/second",        metrics.get("bytes_reads"));        reportMetric("network/bytes_writes",                          "bytes/second",        metrics.get("bytes_writes"));        reportMetric("queries/com_select",                              "selects/second",    metrics.get("com_select"));        reportMetric("queries/com_insert",                              "inserts/second",    metrics.get("com_insert"));        reportMetric("queries/slow_queries",                          "queries/second",    metrics.get("slow_queries"));        reportMetric("connections/connected",                        "connections",          metrics.get("connections_connected"));        reportMetric("innodb/buffer_pool_pages_flushed",  "pages",                      metrics.get("innodb_buffer_pool_pages_flushed"));        reportMetric("innodb/buffer_pool_pages_dirty",      "pages",                      metrics.get("innodb_buffer_pool_pages_dirty"));        //  ...    } } Wednesday, November 6, 13
  • 43. Anatomy of a plugin agent (yes, it’s really that simple) public  class  MySQLAgent  extends  Agent  {    public  MySQLAgent()  {        super("com.mycompany.mysql",  "1.0.0");    } Unique identifier (GUID), agent version    private  Map<String,  Number>  gatherMetrics()  {        Map<String,  Number>  metrics  =  MySQL.runSQL(getConnection(),  "SHOW  GLOBAL  STATUS");          return  metrics;    } Query metrics from system    public  void  pollCycle()  {        Map<String,  Number>  metrics  =  gatherMetrics();   Identifier Units Value        reportMetric("network/bytes_reads",                            "bytes/second",        metrics.get("bytes_reads"));        reportMetric("network/bytes_writes",                          "bytes/second",        metrics.get("bytes_writes"));        reportMetric("queries/com_select",                              "selects/second",    metrics.get("com_select"));        reportMetric("queries/com_insert",                              "inserts/second",    metrics.get("com_insert"));        reportMetric("queries/slow_queries",                          "queries/second",    metrics.get("slow_queries"));        reportMetric("connections/connected",                        "connections",          metrics.get("connections_connected"));        reportMetric("innodb/buffer_pool_pages_flushed",  "pages",                      metrics.get("innodb_buffer_pool_pages_flushed"));        reportMetric("innodb/buffer_pool_pages_dirty",      "pages",                      metrics.get("innodb_buffer_pool_pages_dirty"));        //  ...    } } Wednesday, November 6, 13
  • 44. Anatomy of a plugin agent (yes, it’s really that simple) public  class  MySQLAgent  extends  Agent  {    public  MySQLAgent()  {        super("com.mycompany.mysql",  "1.0.0");    } Unique identifier (GUID), agent version    private  Map<String,  Number>  gatherMetrics()  {        Map<String,  Number>  metrics  =  MySQL.runSQL(getConnection(),  "SHOW  GLOBAL  STATUS");          return  metrics;    } Query metrics from system    public  void  pollCycle()  {        Map<String,  Number>  metrics  =  gatherMetrics();   Send to NR Identifier Units Value        reportMetric("network/bytes_reads",                            "bytes/second",        metrics.get("bytes_reads"));        reportMetric("network/bytes_writes",                          "bytes/second",        metrics.get("bytes_writes"));        reportMetric("queries/com_select",                              "selects/second",    metrics.get("com_select"));        reportMetric("queries/com_insert",                              "inserts/second",    metrics.get("com_insert"));        reportMetric("queries/slow_queries",                          "queries/second",    metrics.get("slow_queries"));        reportMetric("connections/connected",                        "connections",          metrics.get("connections_connected"));        reportMetric("innodb/buffer_pool_pages_flushed",  "pages",                      metrics.get("innodb_buffer_pool_pages_flushed"));        reportMetric("innodb/buffer_pool_pages_dirty",      "pages",                      metrics.get("innodb_buffer_pool_pages_dirty"));        //  ...    } } Wednesday, November 6, 13
  • 45. Easy to build UIs Wednesday, November 6, 13
  • 46. Custom Dashboards Fast and easy UI creation Wednesday, November 6, 13
  • 47. Optionally publish Lists in Plugin Central, makes available the UIs Wednesday, November 6, 13
  • 48. Install UI = run the agent Infrastructure Varnish Server Memcached Server MySQL Server 1 MySQL Server 2 Externally monitored Platform Agents Varnish Agent Memcached Agent ... RPM MySQL Agent + GUID + New Relic Metric Store Wednesday, November 6, 13 MySQL UI ... Memcached UI Varnish UI
  • 49. Install UI = run the agent Infrastructure Varnish Server Memcached Server MySQL Server 1 MySQL Server 2 Externally monitored Platform Agents Varnish Agent Memcached Agent ... RPM MySQL Agent + GUID + New Relic Metric Store Wednesday, November 6, 13 MySQL UI ... Memcached UI Varnish UI
  • 50. “But Kevin, how much will all this cost?” Wednesday, November 6, 13
  • 51. “But Kevin, how much will all this cost?” Free!! Wednesday, November 6, 13
  • 52. New! Plugin community reviews Help improve plugins, give feedback Wednesday, November 6, 13
  • 53. New! Private publishing Distribute within multiple accounts, closed Betas Wednesday, November 6, 13
  • 54. In progress: Deployment recipes Simplified configuration and deployment across your data center Wednesday, November 6, 13
  • 55. Get involved! ✓ Review plugins ✓ Contribute to the plugins • Many are open source • Write one! ✓ Contribute to the SDKs ✓ Help us with Chef • Try out our recipes • Try authoring recipes Wednesday, November 6, 13