New Relic

Intro to Blue Medora Developers

The story

A new platform

New Relic specializes in Application Monitoring, mainly focused on web applications,
 

...but not exclusively by any means

How do we develop for it?

  • Use Existing ExUno Data Providers
  • Send (Filtered) Data to Plugin - write a yaml
    • Most time spent deciding what to send
    • Pairs well with the MP generator KPIs list
  • Send (Unfiltered) Data to Insights
  • Do Custom Post Processing (only if we really need to)
    • Custom licensing too
      • (only if it's a really weird licensing scheme)

You may be thinking...

Don't worry!

We made it easy!

What do we have on it?

  • 21 Solutions
    • Initially Developed by Katherine, Corbin, and Joe K.
      • Plugins was a big focus
      • Insights got added on later
    • Each capable of producing 2 separate products
    • New Relic Plugin & New Relic Insights
  • Soon to be many, many more...
    • Dan J, Corbin, Joe K. and I rewrote core
      • To be more of an even split (Plugin/Insights)
      • To be more dev friendly
      • To include Relationships and Events

Plugin

  • A place to send Numeric data
  • Analytics on data - think: dynamic thresholds 
  • Widgets on Dashboards
  • A good amount of filtering on Ex Uno Collection Results often needs to be done

 

Insights

  • Capable of handling String, Boolean, and Numeric data
  • Populates Tables/Rows 
    • Database-ish, JSON-ish
  • Can use a query language called "NRQL" to retrieve sets of information
    • Pronounced like "Urkel"
    • Sort of SQL
      • somewhat limited - no JOINs
  • More graph types!

The filter

Part 1

---
:data_collector_classes:
  default: com.bluemedora.mysql.MySQLDataCollector
:guid: com.bluemedora.mysql
:insights_notification_prefix: mysql
:version:
  :major: 1
  :minor: 0
  :patch: 0
:static_args:
  order_queries_by: calls
  monitor_tables: true
  query_history_interval: 24
  query_count: 10
:licensable_resources:
  default: mysql_database

The filter

(cont'd)

:key_definitions:
  default:
    mysql_database:
    - :metric_type: resource_name
      :label: Database
    ...
:counter_metric_definitions:
  default:
    mysql_instance:
    - :metric_type: os_data_reads
      :time_unit: SECONDS
    ...
:unit_renamings:
  default:
    mysql_instance:
      os_data_reads: reads
      os_data_writes: writes
      ...
:metric_white_list:
  default:
    mysql_replication: 
    mysql_instance:
      total_allocated:
      os_data_reads:
      os_data_writes:
      lock_deadlocks:

Knobs & Levers

{
  "polling_interval_seconds": 60,
  "agents": [
    {
      "instance_name": "Dev Test",
      "username": "myCoolUsername",
      "password": "superSecretPassword",
      "port": 3306,
      "host": "mysql-host-name",
      "database": "sports-db",
      "send_to_plugin": {
        "mysql_instance": true,
        "mysql_tablespace": true,
        "mysql_table": true,
        "mysql_database": true,
        "mysql_index": true,
        "mysql_query": true
      },
      "send_to_insights": {
        "mysql_instance": true,
        "mysql_tablespace": true,
        "mysql_table": true,
        "mysql_database": true,
        "mysql_index": true,
        "mysql_query": true,
        "relationships": true,
        "notifications": true
      }
    }
}

Using the data

Plugins:

  • Search for a single metric
    • Over several objects
    • ../res_kind/*/metric[units]
  • Search for similarly named metrics
    • "<read/write/del>_ops"
    • *_ops

Using the Data

Insights:

// Some examples...

SELECT some_metric FROM <resource_kind>_collection
SELECT count(some_metric) FROM <resource_kind>_collection
SELECT metric1, metric2 FROM <resource_kind1>_collection, <resource_kind2>_collection
SELECT count(some_metric) FROM <resource_kind>_collection SINCE 1 week ago TIMESERIES
SELECT count(some_metric) FROM <resource_kind>_collection FACET resource_name

Different Query Recipes

Yield Different Graph-types

Tooling

Relationships

  • New Relic is not inherently hierarchical
  • Parent-Child relationships 
  • Customers can now dig through related resources, just like vR Ops

Notifications

  • Bring Events from the underlying API to New Relic

How can I help?

  • Be mindful of non-standard units
  • Remember Numeric metrics
  • Follow Ex Uno Tenets
    • resource_resource_naming_conventions
    • ["lists", "are", "bad"]
    • "false" != false
  • Use the MP Generator
    • KPI lists reduce the time spent deciding what to send

Overview

  • Data Provider to Functioning NR product
    • Standing up a project can take 10 minutes
    • Standing up as in running
  • You get lots of things for free (including CI!)
  • You can speed things up by being responsible

Questions?

(Huge thanks to Katherine, Corbin, Joe K, Cam, and Dan J)

Made with Slides.com