<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>InfluxData Blog - Will Faurot</title>
    <description>Posts by Will Faurot on the InfluxData Blog</description>
    <link>https://www.influxdata.com/blog/author/willf/</link>
    <language>en-us</language>
    <lastBuildDate>Tue, 05 Apr 2016 08:00:03 -0700</lastBuildDate>
    <pubDate>Tue, 05 Apr 2016 08:00:03 -0700</pubDate>
    <ttl>1800</ttl>
    <item>
      <title>The Chronograf Files: The Curious Case of JavaScript's `sort`</title>
      <description>&lt;p&gt;&lt;em&gt;“The world is full of obvious things which nobody by any chance ever observes.”
— Sir Arthur Conan Doyle, The Hound of the Baskervilles*&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It was your average day at the InfluxData offices. The usual sounds filled the air: the clack of a ping pong ball, the ever-present drip of an overworked coffee pot. A day just like any other – or so I thought.&lt;/p&gt;

&lt;p&gt;It all started when a new &lt;a href="https://w2.influxdata.com/time-series-platform/chronograf/"&gt;Chronograf&lt;/a&gt; ticket came in, where a user had reported their graphs behaving strangely.&lt;/p&gt;
&lt;h2&gt;The Bug&lt;/h2&gt;
&lt;p&gt;I give you ‘Exhibit A’, a screenshot submitted by our affected user:&lt;/p&gt;

&lt;p&gt;&lt;img class="aligncenter size-full wp-image-8616" src="/images/legacy-uploads/chrono-out-of-order.png" alt="chrono-out-of-order" width="1120" height="413" /&gt;&lt;/p&gt;

&lt;p&gt;Though this graph is quite the visual cacophony, the issue was clear immediately: Chronograf was plotting this user’s data out of order. For a product like Chronograf, this is about as critical as a bug can be. Because we’re in the business of time series data, we’d better be sure we’re respecting the laws of physics and that time continues to function as it has since the beginning of, well, &lt;em&gt;time&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;At this point, Chronograf had seen several releases over the better part of a year. How had we not seen behavior like this before?&lt;/p&gt;

&lt;p&gt;The user also provided us with the sample dataset that resulted in the above graph, hereby dubbed ‘Exhibit B’. The dataset itself was large so I won’t reproduce it in full, but here is a small sample we’ll use for investigative purposes:
&lt;code&gt;timestamp value
--------- ------
100000000 4
200000000 9
300000000 6
400000000 7
500000000 6
600000000 4
700000000 9
800000000 7
900000000 10
1000000000 6
1100000000 4
...&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Note: InfluxDB supports multiple time formats, though in this case we’re using &lt;a href="https://en.wikipedia.org/wiki/Unix_time"&gt;Unix time&lt;/a&gt;. Not to spoil too much, but this will be highly relevant soon!&lt;/p&gt;

&lt;p&gt;At first glance, the data seems reasonable. The values seem OK, and the timestamps are ordered chronologically. No cause for alarm, right?&lt;/p&gt;
&lt;h2&gt;The Fix&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;“Wait, you said &lt;code&gt;sort&lt;/code&gt; does WHAT??’”&lt;/em&gt;
— Anonymous&lt;/p&gt;

&lt;p&gt;Now I had exhibit A, a graph which explained how the bug affected the end-user. And I had exhibit B, a sample dataset I used to accurately reproduce the issue.&lt;/p&gt;

&lt;p&gt;The next step was to ask myself a few questions which I’ve found helpful when beginning the debugging process:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1) What sections of the code does this bug touch? Who is the most likely offender?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I immediately thought of a piece of code that converts raw InfluxDB responses, which use JSON formatting, into data structures that our graphing library understands. As far as I could tell, the sample dataset was ordered correctly. It had to be something farther down the line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2) Are there any obvious anomalies?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As far as plotting data chronologically, Chronograf seemed to function properly in all other known cases. Given the graph we saw earlier, it’s also the kind of bug you feel like you’d tend to notice.&lt;/p&gt;

&lt;p&gt;Here is where it starts to get good: the test data was noteworthy because the first point starts on day one of what &lt;a href="https://en.wikipedia.org/wiki/Unix_time"&gt;Unix considers to be the dawn of the universe&lt;/a&gt;. Unix timestamps represent the amount of time (usually in seconds or milliseconds) that has passed since 00:00:00 UTC, January 1, 1970.&lt;/p&gt;

&lt;p&gt;For example, the ‘Unix time’ as of me finishing this sentence is &lt;code&gt;1458851975430&lt;/code&gt;. On its own, maybe this isn’t a particularly exciting or interesting detail. It’s test data, who cares if we’re plotting points from 1970 or 2016? &lt;em&gt;We do&lt;/em&gt;, as it turns out!&lt;/p&gt;

&lt;p&gt;I took a hard look at the data after it had gone through the conversion process, immediately before it made its way into our graphing library. I confirmed it was out of order. Using the same small subset of data from the last section, here’s a view of the test data as it appeared to me:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;timestamp value
--------- ------
100000000 4
1000000000 6
1100000000 4
200000000 9
300000000 6
400000000 7
500000000 6
600000000 4
700000000 9
800000000 7
900000000 10
...&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Wait, what? Why on earth is &lt;code&gt;1000000000&lt;/code&gt; (9 zeroes) appearing before &lt;code&gt;200000000&lt;/code&gt; (8 zeroes)? This new insight was enough for me locate the perpetrator, a line that looked something like this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;// allTimestamps is a list of unique timestamps,
// e.g. [100000000, 200000000, 300000000 ...]
allTimestamps.sort()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I remembered why this line was initially added: if for any reason the data came in to the converter out of order, or merging multiple &lt;a href="https://docs.influxdata.com/influxdb/v0.11/concepts/glossary/#series"&gt;series&lt;/a&gt; was required, we wanted to ensure that our data was chronological before trying to plot it on a graph.&lt;/p&gt;

&lt;p&gt;And suddenly it all made sense. Let’s try something…&lt;/p&gt;

&lt;p&gt;If you’re on a device with a keyboard, open your browser’s developer console. On Chrome you can choose View -&amp;gt; Developer -&amp;gt; JavaScript Console and type in the following and hit enter: &lt;code&gt;[2, 10, 5].sort()&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Does the result surprise you at all? I imagine it does, as this is the output you should have seen:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[2, 10, 5].sort()
// =&amp;amp;gt; [10, 2, 5]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It boils down to this: JavaScript’s built-in &lt;code&gt;sort&lt;/code&gt; function, by default, sorts its items ‘lexicographically’, i.e. alphabetically. ’1’ comes before ‘2’ in the alphabet according to JavaScript. From this perspective, the output we just saw makes sense. Is this the default behavior we expected when sorting a list of numbers? Not in the slightest.&lt;/p&gt;

&lt;p&gt;The fix itself was simple. Instead of using &lt;code&gt;sort&lt;/code&gt; without any arguments, we provided what Mozilla calls a &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort"&gt;&lt;code&gt;compareFunction&lt;/code&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you ran the previous example in your browser’s console, give this one a try:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[2, 10, 5].sort((a, b) =&amp;amp;gt; a - b)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Better, right?&lt;/p&gt;

&lt;p&gt;OK, now we now how &lt;code&gt;sort&lt;/code&gt; works. We know &lt;em&gt;what&lt;/em&gt; to fix, but we still haven’t fully answered our original question: Why did we have to wait so long for a bug like this to make an appearance? The answer lies in the number of significant digits for each timestamp. With the provided test data, we had multiple rollovers where the timestamps not only grew in numerical size, they grew enough to require another significant digit to represent them.&lt;/p&gt;

&lt;p&gt;We can illustrate this by using the test data, and it only requires a few points:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;timestamp value
--------- ------
800000000 4
900000000 6
1000000000 4&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Try sorting these timestamps without a &lt;code&gt;compareFunction&lt;/code&gt; and see the results:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;[800000000, 900000000, 1000000000].sort()
// =&amp;amp;gt; [1000000000, 800000000, 900000000]&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;1000000000&lt;/code&gt; appears at the beginning of the list, which is technically correct according to JavaScript. But because it has an extra digit, it results in non-chronological data. Most of the data being fed into Chronograf is recent, typically from the last several years. Enough time has passed since 1970 (the beginning of Unix time) to the point where it will be quite a while before Unix timestamps need another digit to be represented. If we’re using milliseconds, Nov 21, 2286 in fact.&lt;/p&gt;

&lt;p&gt;During normal Chronograf usage, if InfluxDB was returning Unix timestamps, they were of the same length in virtually all cases. The fact that JavaScript was treating these numbers as strings when trying to sort them was irrelevant – we’d get the same results regardless of whether we told JavaScript to explicitly sort them as numbers.&lt;/p&gt;

&lt;p&gt;One last experiment for the console, where the results should be identical:
&lt;code&gt;// Using Three realistic InfluxDB timestamps:
[1459444040000, 1459444050000, 1459444060000].sort()
[1459444040000, 1459444050000, 1459444060000].sort((a, b) =&amp;amp;gt; a - b)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Chronograf was dealing with timestamps like this in virtually all cases, explaining why it took a unique dataset for us to track down this particular bug.&lt;/p&gt;

&lt;p&gt;Voila! Another case in the books.&lt;/p&gt;
&lt;h2&gt;The Lesson&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;“History is not a burden on the memory but an illumination of the soul.”
— Lord Acton&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As a developer, this experience was fantastic. It was a fun, unique, mildly infuriating bug with no shortage of teaching potential. Here were my big takeaways:&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;A deep understanding of your tools will make you a better *insert thing here*. This idea spans all fields and disciplines, though it is especially important in software. The `sort` bug was able to bite us because of a gap in our knowledge, and it serves as inspiration for learning even more about how JavaScript, our most valuable tool, works. It will help inform decisions we make in the future, and maybe even prevent a few bugs.&lt;/li&gt;
 	&lt;li&gt;Critical bugs lurk beneath the surface, and often manifest themselves under the strangest of circumstances.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For us to finally see &lt;code&gt;sort&lt;/code&gt; behave in a way we didn’t expect, we needed a dataset that used a specific time format and spanned over two very specific years, 1970-1972. I’ve found that software never ceases to amaze with the sheer multitude of ways in which it can break. In this regard I have a begrudging respect for it’s raw and unbridled creativity.&lt;/p&gt;

&lt;p&gt;If you’re interested in a more in-depth look at how &lt;code&gt;sort&lt;/code&gt; works under the hood, &lt;a href="http://www.javascriptkit.com/javatutors/arraysort.shtml"&gt;this article from javascriptkit.com&lt;/a&gt; was invaluable.&lt;/p&gt;
&lt;h2&gt;What's next? Get Started With Chronograf!&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;Which now sorts numerical timestamps with aplomb!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;If you’d like to try Chronograf, the ‘C’ in the &lt;a href="https://www.influxdata.com/blog/introduction-to-influxdatas-influxdb-and-tick-stack/"&gt;TICK stack&lt;/a&gt;, you can download the latest version &lt;a href="https://w2.influxdata.com/downloads/"&gt;here&lt;/a&gt;. We love reading and appreciate any and all feedback, so let us know what you think. Whether it’s bug reports, feature requests, general experience improvements, or any other thoughts or ideas you have about the product, don’t hesitate to email the team: chronograf@influxdata.com.&lt;/p&gt;
</description>
      <pubDate>Tue, 05 Apr 2016 08:00:03 -0700</pubDate>
      <link>https://www.influxdata.com/blog/the-chronograf-files-the-curious-case-of-javascripts-sort/</link>
      <guid isPermaLink="true">https://www.influxdata.com/blog/the-chronograf-files-the-curious-case-of-javascripts-sort/</guid>
      <category>Product</category>
      <author>Will Faurot (InfluxData)</author>
    </item>
    <item>
      <title>Announcing Chronograf 0.10 GA</title>
      <description>&lt;p&gt;&lt;a href="/time-series-platform/chronograf/"&gt;Chronograf 0.10&lt;/a&gt; is here! A few quick housekeeping notes: Our last major release was 0.4, but we chose to bump our next major version to 0.10.0 to sync with the rest of the &lt;a href="/blog/tick-stack-update-influxdb-release-candidate-kapacitor-chronograf-v0-10/"&gt;TICK stack&lt;/a&gt;. We’ve also tightened up our release cycles, so keep an eye out for future release candidates on the InfluxData &lt;a href="/downloads/#chronograf"&gt;downloads page&lt;/a&gt;. In this post we’ll take a glance at a few of the new features and improvements, and finish up with a look at what’s in store for Chronograf as 2016 unfolds.&lt;/p&gt;

&lt;h2&gt;Smarter Query Builder&lt;/h2&gt;

&lt;p&gt;We’ve radically improved our ability to parse raw InfluxDB queries. This means you’ll now be able to paste a query directly into Chronograf, and the elements of your query (measurement, tags, etc.) will be parsed out and available for use in the builder:&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/legacy-uploads/smart-query-builder.gif" alt="smart query builder" width="1437" height="711" /&gt;&lt;/p&gt;

&lt;h2&gt;Template Variables&lt;/h2&gt;

&lt;p&gt;Template variables allow you to apply a value across multiple queries. 0.10.0 introduces a new concept to Chronograf: the &lt;code&gt;tmplTime()&lt;/code&gt; and &lt;code&gt;tmplTagValue()&lt;/code&gt; functions. These functions allow you to apply either a time or tag template to a query, and can be added via the UI as well as by manually editing the query text.&lt;/p&gt;
&lt;h2&gt;Time ranges&lt;/h2&gt;
&lt;p&gt;Use the clause &lt;code&gt;WHERE tmplTime()&lt;/code&gt; to apply the globally selected time range to a particular query. This works for queries that use the query builder as well as queries entered manually via copy/paste. Any new queries you add will use &lt;code&gt;tmplTime()&lt;/code&gt; by default.&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/legacy-uploads/tmplTime-resized.gif" alt="tmplTime" width="1425" height="806" /&gt;&lt;/p&gt;

&lt;h2&gt;Tags&lt;/h2&gt;

&lt;p&gt;Using template variables for tags prevents you from having to duplicate groups of visualizations across dashboards. Say you were running an application on multiple hosts and had a dashboard to monitor system metrics (cpu, memory, etc.). Instead of configuring a dashboard for each host via an API or by hand (neither option being ideal), you could use a template variable for the &lt;a href="https://docs.influxdata.com/influxdb/v0.9/concepts/glossary/#tag-key"&gt;tag key&lt;/a&gt; &lt;code&gt;host&lt;/code&gt;. Simply head to the query builder, select a tag key, and choose the ‘Make Variable’ option to turn that tag pair into a template variable:&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/legacy-uploads/tmpltag-1-img.gif" alt="tmpltag" width="1446" height="860" /&gt;&lt;/p&gt;

&lt;p&gt;Check out our full documentation around templating &lt;a href="https://docs.influxdata.com/chronograf/v0.10/introduction/templating/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;What's next?&lt;/h2&gt;

&lt;p&gt;Here are a few things in store for Chronograf down the road:&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;More tools for custom analytics&lt;/li&gt;
 	&lt;li&gt;New visualization types&lt;/li&gt;
 	&lt;li&gt;UI/Performance improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Resources&lt;/h2&gt;

&lt;ul&gt;
 	&lt;li&gt;Download &lt;a href="/downloads/"&gt;Chronograf 0.10.0&lt;/a&gt;&lt;/li&gt;
 	&lt;li&gt;Need help getting started? Check out the Chronograf &lt;a href="https://docs.influxdata.com/chronograf/v0.10/"&gt;docs&lt;/a&gt; or the &lt;a href="https://docs.influxdata.com/chronograf/v0.10/introduction/getting_started/"&gt;Getting Started guide&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Fri, 05 Feb 2016 09:15:10 -0700</pubDate>
      <link>https://www.influxdata.com/blog/announcing-chronograf-0-10-ga/</link>
      <guid isPermaLink="true">https://www.influxdata.com/blog/announcing-chronograf-0-10-ga/</guid>
      <category>Product</category>
      <author>Will Faurot (InfluxData)</author>
    </item>
    <item>
      <title>Announcing Chronograf 0.10 Release Candidate w/ Template Variables</title>
      <description>&lt;p&gt;We’re hard at work on 0.10.0, &lt;a href="/time-series-platform/chronograf/"&gt;Chronograf’s&lt;/a&gt; next major release. Plenty of new features and improvements are in store, and we wanted to give a quick preview of our take on an oft-requested feature: template variables.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Keep in mind that 0.10.0-rc1 still &lt;/em&gt;&lt;em&gt;has some rough edges as we move towards the final 0.10.0 release and shouldn’t be relied on in production.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;Template Variables&lt;/h2&gt;

&lt;p&gt;Template variables allow you to apply a value across multiple queries. 0.10.0-rc1 introduces support for templated time ranges and tags via the &lt;code&gt;tmplTime()&lt;/code&gt; and &lt;code&gt;tmplTagValue()&lt;/code&gt; functions.&lt;/p&gt;
&lt;h2&gt;Time ranges&lt;/h2&gt;
&lt;p&gt;Use the &lt;code&gt;tmplTime()&lt;/code&gt; function to apply the globally selected time range to a particular query. This works for queries that use the query builder as well as queries entered manually:&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/legacy-uploads/tmplTime-2.gif" alt="" width="1425" height="806" /&gt;&lt;/p&gt;

&lt;h2&gt;Tags&lt;/h2&gt;

&lt;p&gt;Using template variables for tags prevents you from having to duplicate groups of visualizations across dashboards. Say you were running an application on multiple hosts and had a dashboard to monitor system metrics (cpu, memory, etc.). Instead of configuring a dashboard for each host via an API or by hand (neither option being ideal), you could use a template variable for the &lt;a href="https://docs.influxdata.com/influxdb/v0.9/concepts/glossary/#tag-key"&gt;tag key&lt;/a&gt;&lt;code&gt;host&lt;/code&gt;. Simply head to the query builder, select a tag key, and choose the ‘Make Variable’ option to turn that tag pair into a templated variable:&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/legacy-uploads/tmpltag-updated.gif" alt="tmpltag" width="1446" height="860" /&gt;&lt;/p&gt;

&lt;h2&gt;What's next?&lt;/h2&gt;

&lt;ul&gt;
 	&lt;li&gt;Download the code and get started with [this RC](**placeholder for RC download link**) or with the &lt;a href="/downloads/"&gt;current stable version&lt;/a&gt;&lt;/li&gt;
 	&lt;li&gt;Need help getting started? Check out the Chronograf &lt;a href="https://docs.influxdata.com/chronograf/v0.4/"&gt;docs &lt;/a&gt;and &lt;a href="https://docs.influxdata.com/chronograf/v0.4/introduction/getting_started/"&gt;getting started&lt;/a&gt; tutorial.&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Wed, 27 Jan 2016 11:05:27 -0700</pubDate>
      <link>https://www.influxdata.com/blog/announcing-chronograf-0-10-release-candidate-w-template-variables/</link>
      <guid isPermaLink="true">https://www.influxdata.com/blog/announcing-chronograf-0-10-release-candidate-w-template-variables/</guid>
      <category>Product</category>
      <author>Will Faurot (InfluxData)</author>
    </item>
    <item>
      <title>Drill Baby Drill! Data Exploration in Chronograf</title>
      <description>&lt;h2&gt;Overview&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;First thing, download the latest version of Chronograf &lt;a href="/downloads/"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Will from Chronograf here! In this post we’ll take a look at a few of the ways Chronograf allows you to explore your data from InfluxDB. Before we get started, let’s take a look at InfluxDB, time series, and why data exploration is such an important feature in a visual tool like Chronograf.&lt;/p&gt;

&lt;p&gt;InfluxDB is optimized for time series data. More often than not, a whole lot of it. &lt;a href="/blog/influxdb-clustering-design-neither-strictly-cp-or-ap/"&gt;Scale is critical&lt;/a&gt; in the time series world. When you’re dealing with datasets in the gigabyte, terabyte, or even petabyte range, you could be navigating hundreds if not 1000+ different metrics as well as accompanying metadata. That’s a lot of things. From the beginning, Chronograf was designed with this idea of “drilling down” into data. We start with a large dataset, and filter down into smaller subsets based on selecting measurements and/or tags.&lt;!--more--&gt;&lt;/p&gt;
&lt;h2&gt;Building Blocks for Exploration: Measurements, and Tags&lt;/h2&gt;
&lt;p&gt;In this post we’ll focus on measurements and tags, but a full glossary of InfluxDB terms is available &lt;a href="https://docs.influxdata.com/influxdb/v0.9/concepts/glossary/"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Measurements and tags are two of the fundamental building blocks in InfluxDB, and likely where you’ll start when building out queries with Chronograf. Before getting to the examples let’s start with a good working definition of each concept:&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;&lt;strong&gt;Measurements -&lt;/strong&gt; these are your metrics. We're using &lt;a href="/time-series-platform/telegraf/"&gt;Telegraf&lt;/a&gt; in these examples, a plugin-driven server agent for reporting metrics into InfluxDB. It can track system metrics like cpu and disk usage, as well as services like Redis and ElasticSearch.&lt;/li&gt;
 	&lt;li&gt;&lt;strong&gt;Tags -&lt;/strong&gt; key/value pairs used to provide metadata (e.g. region=us-west, host=server01).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Drilling Down&lt;/h2&gt;
&lt;p&gt;We figure there are at least two common use cases for building queries within Chronograf:&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;You know what you're looking for. You have a query in mind and just want to see a visual representation of your data.&lt;/li&gt;
 	&lt;li&gt;You want to explore. Maybe you have 100+ measurements and want to see which metrics you're tracking in one region. Or it could be the inverse, and you want to see which regions are tracking what measurements. This use case is hugely important to us and is the focus of this post.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Querying for Fun and Profit&lt;/h2&gt;
&lt;p&gt;Here’s the gist:&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;&lt;em&gt;Choosing a measurement can reduce the list of available tags&lt;/em&gt;&lt;/li&gt;
 	&lt;li&gt;&lt;em&gt;Choosing tags can reduce the list of available measurements and subsequently available tags&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In these examples we’ll be focusing on the &lt;code&gt;Filter By&lt;/code&gt; pane in the query editor:&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/legacy-uploads/c1.png" alt="c1" width="1517" height="1018" /&gt;&lt;/p&gt;

&lt;p&gt;When you start building a query, you’ll have the all of your measurements and tags available in the ‘Filter By’ pane. In these examples I’m using Telegraf to track system metrics, where I have 31 measurements and 3 tag keys. Here we’ll pick the measurement &lt;code&gt;cpu_usage_idle&lt;/code&gt;. The list of available tag keys is reduced from 3 to 2, meaning &lt;code&gt;cpu&lt;/code&gt; and &lt;code&gt;host&lt;/code&gt; are the only tags associated with &lt;code&gt;cpu_usage_idle&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/legacy-uploads/c2.gif" alt="c2" width="500" height="298" /&gt;&lt;/p&gt;

&lt;p&gt;The inverse works as well - you don’t have to select a measurement to start exploring tags. Each tag key/value pair can potentially reduce the list of available measurements. Here we’ll take a look at the full list of tags and select the key &lt;code&gt;cpu&lt;/code&gt;. You can see this reduces the number of available measurements from 31 to 10, meaning we can more easily browse cpu-based metrics. Selecting a tag also filters subsequent tags. The number of tags to select shrinks from 3 to 2, meaning the tag key &lt;code&gt;host&lt;/code&gt; is the only other valid tag to exist alongside &lt;code&gt;cpu&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src="/images/legacy-uploads/c3.gif" alt="c3" width="488" height="267" /&gt;&lt;/p&gt;

&lt;p&gt;You’re not limited to picking one tag either. You’re free to keep selecting tags and Chronograf will continue to make smart decisions about what subsequent measurements and tags are still valid to explore.&lt;/p&gt;

&lt;h2&gt;In Closing&lt;/h2&gt;

&lt;p&gt;And that’s it! Chronograf is still under active development and we’d love to hear any and all feedback. Send the team an email at &lt;a href="mailto:chronograf@influxdata.com"&gt;chronograf@influxdata.com&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Tue, 15 Dec 2015 09:00:35 -0700</pubDate>
      <link>https://www.influxdata.com/blog/time-series-data-exploration-chronograf/</link>
      <guid isPermaLink="true">https://www.influxdata.com/blog/time-series-data-exploration-chronograf/</guid>
      <category>Product</category>
      <author>Will Faurot (InfluxData)</author>
    </item>
    <item>
      <title>Announcing Chronograf 0.3</title>
      <description>&lt;p&gt;&lt;img class="aligncenter size-full wp-image-8519" src="/images/legacy-uploads/dash_screenshot-1.png" alt="dash_screenshot" width="2868" height="1604" /&gt;&lt;/p&gt;

&lt;p&gt;Will from the &lt;a href="https://influxdb.com/chronograf/"&gt;Chronograf&lt;/a&gt; team here! We’ve been hard at work and are excited to introduce our next major feature: dashboards. Also part of this release are major UI/UX improvements, and improvements to the data exploration and query building experience.&lt;/p&gt;

&lt;h2 id="what-is-chronograf"&gt;What is Chronograf?&lt;/h2&gt;

&lt;p&gt;If you’re new to Chronograf, it’s a data visualization tool built specifically for InfluxDB. As a team, our goal is to build a product that is feature-rich, but also accessible. A tool for both developers AND non-developers. Using Chronograf should be seamless and intuitive, all the way from initially connecting to your InfluxDB instance to building meaningful visualizations. How quickly we can go from “zero to graphs” is one of our most important metrics.&lt;/p&gt;

&lt;h2 id="new-in-0-3-where-we-are-now"&gt;New in 0.3 - Where We Are Now&lt;/h2&gt;

&lt;p&gt;Here’s quick rundown of the features we’ll cover:&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;Ad-hoc visualizations in Chronograf&lt;/li&gt;
 	&lt;li&gt;Dashboards!&lt;/li&gt;
 	&lt;li&gt;Data exploration improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;Graphs and Dashboards&lt;/h2&gt;

&lt;p&gt;Early Chronograf development focused on polishing the ad-hoc data exploration and visualization experience via our query builder. As of 0.3 there are two major ‘things’ in Chronograf: graphs and dashboards. Dashboards mainly function as a collection of graphs, but graphs also exist as their own separate entity. Whether you already have a query in mind and want to paste it directly into the query builder, or you want to explore your measurements and tags, Chronograf is still a great choice for these kind of ad-hoc tasks. Simply create a new graph and start building your query:&lt;/p&gt;

&lt;p&gt;&lt;img class="aligncenter size-full wp-image-8520" src="/images/legacy-uploads/creating_a_graph-wp.gif" alt="creating a graph" width="1433" height="804" /&gt;&lt;/p&gt;

&lt;p&gt;Graphs being persisted separately from dashboards also gives you the ability to easily add a single graph to multiple dashboards.&lt;/p&gt;

&lt;h2&gt;Dashboards, Dashboards Everywhere…&lt;/h2&gt;

&lt;p&gt;We’re eager to get the first version of Chronograf dashboards out there so we can continue to build on user feedback and make improvements. Here’s a quick tour:&lt;/p&gt;

&lt;blockquote&gt;Note: In these examples, I'm building a dashboard for system metrics using data gathered by &lt;a href="https://github.com/influxdb/telegraf"&gt;Telegraf&lt;/a&gt;, a plugin-driven server agent for reporting metrics into InfluxDB.&lt;/blockquote&gt;

&lt;p&gt;Here we’re creating a new dashboard and adding graphs. You have the option to select from pre-existing graphs or create a new one:&lt;/p&gt;

&lt;p&gt;&lt;img class="aligncenter size-full wp-image-8521" src="/images/legacy-uploads/create_dash-wp-2.gif" alt="create dash" width="1433" height="802" /&gt;&lt;/p&gt;

&lt;p&gt;Dashboard layout is fully customizable:&lt;/p&gt;

&lt;p&gt;&lt;img class="aligncenter size-full wp-image-8522" src="/images/legacy-uploads/dash_layout-wp3.gif" alt="dash layout" width="1434" height="804" /&gt;&lt;/p&gt;

&lt;h2&gt;Improvements in Data Exploration&lt;/h2&gt;

&lt;p&gt;The larger your datasets become, the more important it becomes to have effective tools to navigate and explore your measurements and tags. Chronograf’s query builder is smart: selecting a measurement will mean only tags linked to that measurement will be available to choose, and vice versa.&lt;/p&gt;

&lt;p&gt;In this example I start with 30+ Telegraf measurements, only some of which are recording cpu usage. Selecting the tag key &lt;code&gt;cpu&lt;/code&gt; filters the list of measurements to only include CPU-based metrics:&lt;/p&gt;

&lt;p&gt;&lt;img class="aligncenter size-full wp-image-8523" src="/images/legacy-uploads/filtering-wp4.gif" alt="filtering" width="507" height="275" /&gt;&lt;/p&gt;

&lt;h2&gt;What's next?&lt;/h2&gt;

&lt;p&gt;That’s it for 0.3! Here are a few additional features already in the pipeline for future releases:&lt;/p&gt;

&lt;ul&gt;
 	&lt;li&gt;Templating&lt;/li&gt;
 	&lt;li&gt;Cloud integration - download pre-built dashboards and upload your own dashboards&lt;/li&gt;
 	&lt;li&gt;Different types of graphs (e.g. line graphs, histograms, etc.)&lt;/li&gt;
 	&lt;li&gt;New kinds of visualizations (e.g. counters)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Want to try it out? Chronograf is free to use, and without user or per server limits. You can &lt;a href="https://influxdb.com/download/index.html#chronograf"&gt;download Chronograf here&lt;/a&gt;. We’re still in active development and are eager to hear what you think! Contact the team at &lt;a href="mailto:chronograf@influxdata.com"&gt;chronograf@influxdata.com&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Wed, 18 Nov 2015 08:00:50 -0700</pubDate>
      <link>https://www.influxdata.com/blog/announcing-chronograf-0-3/</link>
      <guid isPermaLink="true">https://www.influxdata.com/blog/announcing-chronograf-0-3/</guid>
      <category>Product</category>
      <author>Will Faurot (InfluxData)</author>
    </item>
  </channel>
</rss>
