For nearly a decade, consumer web and SaaS companies have relied on the Graphite time series database to provide enhanced visibility into how their applications and infrastructure are performing. With its high-resolution metrics gathered via flexible, open-source telemetry and easily visualized through the use of a graphing API, Graphite at its debut in 2008 was clearly superior to previous approaches to monitoring.
Common Issues with Graphite
Although Graphite has proven to be durable and capable, as usage grows within an organization, it is common to encounter limitations not only in Graphite itself, but also in the willingness of the organization to invest in ongoing enhancement and management. In addition, although Graphite and its offshoots and successors have been effective at tackling the observability problem, most organizations have concluded that they should use them alongside check-based alerting tools like Nagios, in spite of their longstanding and well-known issues with noise and lack of suitability for modern, elastic environments.
Numerous organizations have replaced Graphite with SignalFx. Several themes have emerged in discussions with customers regarding this choice:
Service vs. Self-Hosting
Most software engineering organizations have the resources necessary to get Graphite up and running, and some have the skills to scale or build upon it. The question is rarely whether they can do it, though, and is instead whether they should. In a hiring environment where engineering positions go unfilled for long periods of time, only a small handful of companies can afford to put resources towards monitoring instead of projects that contribute to their core business.
Performance at Scale
SignalFx was built by the team that created ODS, the in-house monitoring system at Facebook that currently handles in excess of 20 billion metrics per minute. With those lessons in-hand, we built SignalFx as a monitoring-as-a-service solution to provide consistently high performance not just in the ingestion and storage of metrics, but also in the processing of high-resolution metrics for real-time visualization and alerting.
Reliable, Accurate, and Fast Alerting
It is possible to integrate Graphite with Sensu, or to use Seyren or Cabot for Graphite-based alerting. These approaches (and anything similar) have two fundamental issues. First, they introduce yet another tool to learn and manage. Second, they rely on Graphite to process the metrics against which the alerting can be done, and Graphite cannot ensure the timeliness or consistency of that processing. In contrast, SignalFx’s fully integrated, scalable, and powerful streaming analytics engine was designed for exactly this purpose and delivers alerts within two periods at the incoming metrics’ native data resolution.
Powerful Analytics, No Query Language Required
Much of Graphite’s popularity stems from its rich library of analytical functions for aggregating, transforming, or composing raw metrics into a meaningful signal. SignalFx provides a more flexible and even broader set of analytical capabilities, including the ability to create arbitrary formulas and use conditionals, and makes those capabilities accessible via an easy-to-use web app or API.
Better Data Model → Ease of Use
The Graphite practice of modeling metric identifiers in a tree structure is easy to understand and use at small scale. SignalFx uses a multi-dimensional data model that makes it easy to find, filter, and aggregate the metrics you want to chart or alert on, in a way that scales. Using the SignalFx model, all charts, dashboards, and detectors are data-driven. Nodes of a modern application service or cloud infrastructure environment are auto-enrolled for monitoring, and creation and maintenance of dashboards and alerts for multiple environments is an order of magnitude more efficient.
SignalFx is a powerful platform for users that want to send in custom metrics and build their own charts and alerts. On top of that platform, we provide integrations with a wide variety of technologies and services, including not just the ability to collect and send a curated set of metrics, but also a rich set of out-of-the-box content: best-in-class built-in dashboards and charts, Recommended Detectors with pre-built alert configurations, and more.
Rapid and Sustained Innovation
As a cloud offering, SignalFx delivers new capabilities at a rapid clip. For example, here are features from a single month of releases: an enhanced metric finder, the ability to share snapshots of charts or dashboards, an enhanced alert detail page, multiple ways to summarize incoming metrics data, auto-discovery of correlations between metrics and dimensions, and support for Docker in our Host Navigator feature.
Transitioning to SignalFx
SignalFx has invested in a number of capabilities that dramatically simplify the transition from Graphite, enabling Graphite users to:
- Use familiar Graphite wildcard conventions while building charts in SignalFx
- Take advantage of SignalFx’s multidimensional analytics without modifying incoming Graphite metrics, through on-the-fly dimension aliasing
- Translate existing Graphite metrics to dimensionalized SignalFx metrics at scale with the SignalFx metric proxy
Support for Graphite Wildcard Conventions
Many Graphite users have become accustomed to its wildcard conventions, and use them actively to generate the custom charts that they want. SignalFx supports the use of those conventions in the signal (metric or event) field of the SignalFx chart builder UI, including asterisks, character lists and ranges, or value lists. To use the Graphite wildcard, simply enter the syntax into the signal field, then select the Graphite wildcard option.
On-the-Fly Dimension Aliasing
One of the most powerful features in SignalFx is the ability to use dimensions to filter or group everything: metrics, charts, dashboards, alerts, and the Host Navigator. For example, you can filter in or out time series that match
datacenter:snc or calculate the average value of the metric
cpu.total.user across multiple hosts, grouped by microservice.
In Graphite, metric names typically contain multiple dot-separated dimension values, such as
snc.role1.server3.cpu.total.user. (The dimension keys—e.g., datacenter, role, host—are implicit.) To use the dimensions in Graphite metric names as if they were native SignalFx dimensions, you can simply apply on-the-fly dimension aliasing to the chart you’re constructing. This allows you to treat the nodes in a Graphite metric name as if they were dimensions in SignalFx, and you can also assign aliases to the implicit dimension keys to make it easier to use and easier to understand.
SignalFx Metric Proxy
The SignalFx metric proxy is a multilingual datapoint demultiplexer that can accept time series data from a variety of metrics protocols and emit those datapoints to one or more servers on the same protocols. It is designed to be used in the following scenarios:
- You are using a metrics monitoring system like Graphite in production and want to evaluate SignalFx in a non-disruptive way
- You have decided to use SignalFx, but you have a mechanism for collecting metrics (typically an agent or other client-side code) that does not yet have a native SignalFx backend or handler
- You limit the number of egress points from your network due to security or other concerns, and you want to consolidate metrics-related traffic as it leaves your network
To try out SignalFx, you can place the proxy in between collectors and Graphite. In other words, collectd, StatsD, and other agents and/or client libraries send their metrics to the proxy, which then forwards it on to both Graphite and SignalFx. (When you are ready to make the switch, SignalFx will ingest those metrics directly.)
In the simplest case, Graphite metric names are forwarded as-is and appear in SignalFx with the traditional dot-separated format. When you decide to leverage SignalFx’s dimension-based capabilities across the board (as opposed to on a per-chart basis, as with on-the-fly dimension aliasing) you can add a schema to the proxy that will parse the Graphite metric names into dimensionalized SignalFx metrics. Learn more about the metric proxy.