<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>InfluxData Blog - Jacob Marble</title>
    <description>Posts by Jacob Marble on the InfluxData Blog</description>
    <link>https://www.influxdata.com/blog/author/jacob-marble/</link>
    <language>en-us</language>
    <lastBuildDate>Fri, 05 May 2023 07:00:00 +0000</lastBuildDate>
    <pubDate>Fri, 05 May 2023 07:00:00 +0000</pubDate>
    <ttl>1800</ttl>
    <item>
      <title>OpenTelemetry Tutorial: Collect Traces, Logs &amp; Metrics with InfluxDB 3.0, Jaeger &amp; Grafana</title>
      <description>&lt;p&gt;Here at InfluxData, we recently announced &lt;a href="https://www.influxdata.com/products/influxdb-overview/"&gt;InfluxDB 3.0&lt;/a&gt;, which expands the number of use cases that are feasible with InfluxDB. One of the primary benefits of the new storage engine that powers InfluxDB 3.0 is its ability to store &lt;a href="https://www.influxdata.com/blog/tracing-influxdb-iox/"&gt;traces&lt;/a&gt;, metrics, events, and logs in a single database.&lt;/p&gt;

&lt;p&gt;Each of these types of time series data has unique workloads, which leaves some unanswered questions. For example:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;What schema should I follow?&lt;/li&gt;
  &lt;li&gt;How do I convert my traces to line protocol?&lt;/li&gt;
  &lt;li&gt;How does InfluxDB connect with the larger observability ecosystem?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Luckily this is where our work within OpenTelemetry comes into play. If you want to learn more about what OpenTelemetry is, we recommend this &lt;a href="https://www.influxdata.com/blog/getting-started-with-opentelemetry-observability/"&gt;blog&lt;/a&gt; by Charles Mahler. However, the aim of this blog is to take you through a working example of OpenTelemetry and InfluxDB 3.0.&lt;/p&gt;

&lt;h2 id="running-the-demo"&gt;Running the demo&lt;/h2&gt;

&lt;p&gt;Let’s start with the fun part by running the demo and then discussing the theory behind it. Here is the demo we are going to deploy:&lt;/p&gt;

&lt;p&gt;&lt;img src="//images.ctfassets.net/o7xu9whrs0u9/1T25wow8tiRPmZh57XHyTk/4b33a8870da3e5b7c5d84450ccb76381/hot-rod-demo.jpg" alt="hot-rod-demo" /&gt;&lt;/p&gt;

&lt;p&gt;This demo uses Hot R.O.D. to simulate traces, logs, and metrics. We then use OpenTelemetry Collector to collect that data and write it to InfluxDB 3.0. Finally, we use Grafana and Jaeger UI to visualize this data in a highly summarized view.&lt;/p&gt;

&lt;p&gt;To run the demo you can use &lt;a href="https://killercoda.com/influxdata/course/demos/otel"&gt;this KillerCoda demo environment&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Simply create an account and follow the tutorial to run through the demo without worrying about a local installation. For local installs, we have all the info you need in a GitHub repo, so check out the &lt;a href="https://github.com/InfluxCommunity/influxdb-observability"&gt;repository readme&lt;/a&gt; for up-to-date installation instructions.&lt;/p&gt;

&lt;h3 id="walkthrough"&gt;Walkthrough&lt;/h3&gt;

&lt;p&gt;Let’s run through the demo with Killercoda so you can see what to expect:&lt;/p&gt;

&lt;ol&gt;

&lt;li&gt;You will see the demo provisioning script ticking away on the first load. It shouldn’t take too long. You will know it finished loading once  &lt;code class="language-bash"&gt;InfluxDB OTEL Demo&lt;/code&gt; appears.

  &lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/5w9bPNn9LMsAUrt14O9wwa/817a92fc33e5ea4154237f37dd9122e3/influxdb-otel-demo.png" alt="influxdb-otel-demo" width="600" height="auto" /&gt;
&lt;/li&gt;

&lt;li&gt; If you don’t already have one, follow the steps to create &lt;a href="https://cloud2.influxdata.com/signup" target="_blank"&gt;a free InfluxDB 3.0 Cloud account&lt;/a&gt; for the demo.

  &lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/arrhP9hvGK0Pw0MuLPsTJ/7b6934b5c53678e2c0b286239e9bfa7e/free-InfluxDB-cloud-account.png" alt="free-InfluxDB-cloud-account" width="500" height="auto" /&gt;

Make sure to follow the instructions for creating a bucket in InfluxDB called &lt;code class="language-bash"&gt;otel&lt;/code&gt; and generating a read-and-write token for the new &lt;code class="language-bash"&gt;otel&lt;/code&gt; bucket.&lt;/li&gt;

&lt;li&gt;Next, we provide credentials for InfluxDB 3.0 so the demo can write and query from our &lt;code class="language-bash"&gt;otel&lt;/code&gt; bucket. To do this, select the &lt;code class="language-bash"&gt;Editor&lt;/code&gt; tab within Killercoda and navigate to &lt;code class="language-bash"&gt;influxdb-observability/.env&lt;/code&gt;. This is where we update our connection credentials.  
&lt;b&gt;Note: Make sure to update INFLUXDB_ADDR to point to your InfluxDB Cloud region. Also, remove any protocols from the address (e.g., HTTPS://).&lt;/b&gt;
&lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/5itr4AxKL5MZv8W8LtSQbu/65c76c99adac9326e775e680b540dcca/editor-killercoda.jpg" alt="editor-killercoda" width="900" height="auto" /&gt;
&lt;/li&gt;

&lt;li&gt;Once we finish updating the environment, we can start the demo. Simply click this command to spin up the demo:
&lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/1IQ7LpAYkoJZjd2s91Ryl9/0ffea76a7d5922d1ecb810d6fd52b2bb/Step-2.png" alt="Step-2-Run the Docker Composer" width="500" height="auto" /&gt;
  &lt;code class="language-bash"&gt;docker-compose --file demo/docker-compose.yml --project-directory&lt;/code&gt;
&lt;/li&gt;

&lt;li&gt;Now we get to the fun part! Let's generate some traces. First of all, let's open the HotROD application. Within a local installation, this runs via &lt;code class="language-bash"&gt;localhost:8080&lt;/code&gt;. To access this address in Killercoda, follow the hyperlinks provided in the screenshot below.
&lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/4b7q4Mu2Gj2iK1ajDx2Fc6/eeb18eb78514f0245296994732f0dabd/generate-trace-activity__1_.png" alt="generate-trace-activity" width="500" height="auto" /&gt;
&lt;/li&gt;

&lt;li&gt;From there we can start generating traces by clicking on the different buttons. Each one simulates ordering a car for the indicated task, which triggers the background service calls and creates the trace.
&lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/2ahxJLSyuwnenz8PhTAcih/6fbc7c6d2ec988732acd7ccbce29a896/Hot_R-O-D.png" alt="Hot R.O.D." width="900" height="auto" /&gt;
&lt;/li&gt;

&lt;li&gt;If you head over to your InfluxDB 3.0 Cloud instance, you can explore the &lt;code class="language-bash"&gt;otel&lt;/code&gt; bucket schema to see how we translate the OpenTelemtry data structure into InfluxDB’s line protocol, which consists of measurements, tags, and fields. (&lt;b&gt;Note: We will cover line protocol more in-depth in the next blog.&lt;/b&gt;)
  &lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/5MZKoAIWIipmjpz3nfMUwo/7875a2ad58557311a6dd7d1f46d6c1f5/otel-bucket-schema.png" alt="otel-bucket-schema" width="900" height="auto" /&gt;
&lt;/li&gt;

&lt;li&gt;If we head back to our Killercoda instance and open up Grafana, we can explore our OpenTelemetry dashboard and configuration.
  &lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/7GDmDpnhaHRr8FGpj4mQiF/890910139078ef3f953e912ba508a210/opentelemetry-dashboard.png" alt="opentelemetry-dashboard" width="900" height="auto" /&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id="grafana-explained"&gt;Grafana explained&lt;/h2&gt;

&lt;p&gt;This section breaks down some of the key features of the Grafana dashboard. Let’s start with the data sources.&lt;/p&gt;

&lt;p&gt;&lt;img src="//images.ctfassets.net/o7xu9whrs0u9/4iFhTjSvEU7VqlxQKJrUfs/7bf12e822e15751d86f5ca5c41ea9c08/grafana-dashboard-features.png" alt="grafana-dashboard-features" /&gt;&lt;/p&gt;

&lt;p&gt;As you can see, we connected to two data sources – &lt;a href="https://www.influxdata.com/glossary/apache-arrow-flight-sql/"&gt;Flight SQL&lt;/a&gt; and Jaeger. Both sources pull data directly from InfluxDB 3.0, but we will discuss how they work and their differences in more detail in the next blog. For now, you just need to know the following:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Flight SQL – This is the direct SQL query interface for InfluxDB 3.0. It is great for general-purpose time series-based queries and metrics summaries.&lt;/li&gt;
  &lt;li&gt;Jaeger – This functions as the bridging interface for metrics, logs, and traces between InfluxDB 3.0 and Grafana visualizations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s look at our dashboard again and map our data sources to the different panels.&lt;/p&gt;

&lt;p&gt;&lt;img src="//images.ctfassets.net/o7xu9whrs0u9/31nr4Re9RegRpQRgOGDyV1/3adb1def5087cb03726e8f91f4f42c75/map-data-sources.png" alt="map-data-sources" /&gt;&lt;/p&gt;

&lt;p&gt;We use Flight SQL to generate our general-purpose navigation and summary overviews:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
&lt;b&gt;Services&lt;/b&gt; queries InfluxDB for all unique services found within the &lt;code class="language-bash"&gt;otel&lt;/code&gt; bucket. We use the service names as data links for the rest of our visualization. For example, clicking &lt;code class="language-bash"&gt;redis&lt;/code&gt; filters my summary results and trace list to only include the service &lt;code class="language-bash"&gt;redis&lt;/code&gt;.
&lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/4dzV0d1gLpjD0vdxESdRLx/dfbe53b27ee6f200a4ae4c54cafe80dc/services-queries.png" alt="services-queries" width="400" height="auto" /&gt;
    &lt;/li&gt;

&lt;li&gt;
&lt;b&gt;Duration&lt;/b&gt; returns the duration in nanoseconds of each spanID over the selected time period. As part of our SQL query, we convert this value to seconds to improve readability.
&lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/4x2cho7z9khOOMhaKqpbUG/c51302bf3e1e3df1bf8420b3f38ff316/duration-nanoseconds.png" alt="duration-nanoseconds" width="900" height="auto" /&gt;
  &lt;/li&gt;

&lt;li&gt;
&lt;b&gt;Error Rate&lt;/b&gt; calculates the service error rate, as a percentage, based on the number of errors flagged in the &lt;code class="language-bash"&gt;otel.status&lt;/code&gt; column.
&lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/dI2CHADtLmwCZikmsG5SV/c6de8e322d3641ccfbaae9885e93cd1f/error-rate.png" alt="error-rate" width="350" height="auto" /&gt;  
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We use Jaeger to drill into our traces with the following visualizations:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;b&gt;Service Latency Histogram&lt;/b&gt; creates a histogram based on the latency of traces within the service. This panel groups trace spans based on their detected latency range.
    &lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/4aSjKEeRy5rMJcQfyaerdE/0688e5ca1b325212b4df20b59a265ccb/service-latency-histogram.png" alt="service-latency-histogram" width="900" height="auto" /&gt; &lt;/li&gt; 

&lt;li&gt;
  &lt;b&gt;Traces&lt;/b&gt; provides a table of traces associated with the selected service. The table includes trace name, start time, and duration. Users can select TraceID’s to generate the next two visualizations: Relationships and Trace.
  &lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/6sQB4XoVbg3qfPnudVJuPi/93543a64eb6c4a5ef600188ff8988b87/table-of-traces.png" alt="table-of-traces" width="550" height="auto" /&gt;
  &lt;/li&gt;

&lt;li&gt; &lt;b&gt;Relationships&lt;/b&gt;: After selecting a TraceID in the Traces panel, users can navigate span relationships within the trace using the span tree. We’ll have more on this in the next blog.
  &lt;img style="padding: 15px 0px;" src="//images.ctfassets.net/o7xu9whrs0u9/6xH33mOjVhBLV0NBOtOVo5/cb4cd816977d5d8e37610336f9d4d63c/traces-panel-relationships.png" alt="traces-panel-relationships" width="900" height="auto" /&gt;
&lt;/li&gt;

  &lt;li&gt;&lt;b&gt;Trace&lt;/b&gt;: This panel allows users to navigate raw trace data for the selected TraceID and its associated log data.
  &lt;img style="padding: 15px 0px;" src="///images.ctfassets.net/o7xu9whrs0u9/6Xyjs5YW2jCMVP6EJIldaM/83530418f27e0b30af2c4ef7a0701a7a/navigate-raw-trace-data.png" alt="navigate-raw-trace-data" width="900" height="auto" /&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id="conclusion"&gt;Conclusion&lt;/h2&gt;

&lt;p&gt;We hope this tutorial provides you with a solid foundation to learn more about OpenTelemetry and how InfluxDB 3.0 will play a pivotal role in future observability solutions. Stick around for the next blog where we will delve into the theory of OpenTelemtry, breaking down each component in the demo architecture and discussing data schemas. Until then play with the &lt;a href="https://killercoda.com/influxdata/course/demos/otel"&gt;demo&lt;/a&gt;, fork the &lt;a href="https://github.com/InfluxCommunity/influxdb-observability"&gt;repo&lt;/a&gt;, and see if you can apply these components to your own use case. If you have any questions please do not hesitate to reach out to us on &lt;a href="https://influxcommunity.slack.com/"&gt;Slack&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Fri, 05 May 2023 07:00:00 +0000</pubDate>
      <link>https://www.influxdata.com/blog/opentelemetry-tutorial-collect-traces-logs-metrics-influxdb-3-0-jaeger-grafana/</link>
      <guid isPermaLink="true">https://www.influxdata.com/blog/opentelemetry-tutorial-collect-traces-logs-metrics-influxdb-3-0-jaeger-grafana/</guid>
      <category>Use Cases</category>
      <category>Product</category>
      <author>Jay Clifford, Jacob Marble (InfluxData)</author>
    </item>
    <item>
      <title>Tracing with InfluxDB IOx</title>
      <description>&lt;p&gt;Tracing has always been a key use case for time series data. But admittedly, it’s also one that past versions of InfluxDB could not handle as well as we wanted. One of the roadblocks was the &lt;a href="https://www.influxdata.com/glossary/cardinality/"&gt;cardinality&lt;/a&gt; issue. Tracing data is, almost by definition, high cardinality data and prior to &lt;a href="https://www.influxdata.com/products/influxdb-engine/"&gt;InfluxDB IOx&lt;/a&gt;, high cardinality data could affect query performance.&lt;/p&gt;

&lt;p&gt;InfluxDB IOx removes limits on cardinality, opening up the InfluxDB platform to handle a wider range of use cases, like traces and logs, in a performant manner. So, let’s answer some basic questions about tracing and address how InfluxDB IOx makes them possible.&lt;/p&gt;

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

&lt;p&gt;When you have a distributed system, generally, you want to know how all the different components are functioning in relation to each other. Some processes and services may be dependent on other ones, so errors, delays, and bottlenecks can impact overall system performance.&lt;/p&gt;

&lt;p&gt;To understand how all these different pieces work in concert with each other we use a form of observability called tracing. A trace provides a view of a request, task, operation, job, or other useful unit of work, as it works its way through a distributed system. Any number of subtasks, (algorithms, network calls, database transactions, cache queries, etc) coordinate to satisfy the request. Each of these subtasks is a span.&lt;/p&gt;

&lt;p&gt;So, a trace is a collection of spans that provide timing information on the finer details of a request.&lt;/p&gt;

&lt;h2 id="how-does-tracing-work"&gt;How does tracing work?&lt;/h2&gt;

&lt;p&gt;Spans have zero to many sub-spans, called child spans, or children. A child span can have its own children, and so forth.&lt;/p&gt;

&lt;p&gt;A trace begins with a root span, and has no parent. Because the root span is the recursive parent of all other spans in the trace, the duration of the root span represents the total time of the trace.&lt;/p&gt;

&lt;p&gt;&lt;img src="//images.ctfassets.net/o7xu9whrs0u9/4yCX1xGyfTPUhOvAHaxPr6/b31981ac17282e482ce4539a676995c4/Tracing-with-InfluxDB-IOx-Diagram_11.08.2022v4.png" alt="Tracing-with-InfluxDB-IOx-Diagram 11.08.2022v4" /&gt;&lt;/p&gt;

&lt;p&gt;As indicated in the diagram, there are a lot of potential spans in a single trace.&lt;/p&gt;

&lt;p&gt;To construct a trace from all these spans, and to ensure that everything fits together properly, every span needs identifying information. To that end each span has a trace ID, a span ID, and, when applicable, a parent span ID.&lt;/p&gt;

&lt;p&gt;These building blocks create a hierarchical tree of subtasks that provide the key structure for building traces.&lt;/p&gt;

&lt;h2 id="what-does-this-have-to-do-with-cardinality"&gt;What does this have to do with cardinality?&lt;/h2&gt;

&lt;p&gt;Before IOx, InfluxDB’s time series merge tree (&lt;a href="https://www.influxdata.com/time-series-database/"&gt;TSM&lt;/a&gt;) stored data in &lt;a href="https://www.influxdata.com/glossary/column-database/"&gt;columns of series&lt;/a&gt;. A series is a unique combination of measurement, tags, and one field. In this model, cardinality is the total number of series, i.e., the number of columns stored on disk. So, if you have two series, your cardinality is two. High cardinality usually becomes troublesome because it correlates with slower query performance.&lt;/p&gt;

&lt;p&gt;To avoid runaway cardinality in pre-IOx InfluxDB, the quantity of series must be bounded. The challenge with tracing is that each trace and span generate a unique ID (for tracing, most database schemata consider these IDs to be tags), creating unbounded tag values. Combine this with the volume and velocity of tracing data and you get runaway cardinality.&lt;/p&gt;

&lt;h2 id="iox-solving-for-cardinality"&gt;IOx: Solving for cardinality&lt;/h2&gt;

&lt;p&gt;Previous versions of InfluxDB stored each series as a column, which could result in a lot of columns. With the introduction of InfluxDB IOx, the measurement timestamp, tags, and fields all get saved to a respective column, so a measurement with two tag keys and three fields is represented by six columns. This design drastically reduces the number of columns the database has to deal with.&lt;/p&gt;

&lt;p&gt;IOx stores the columns of a table in a &lt;a href="https://www.influxdata.com/glossary/apache-parquet/"&gt;Parquet&lt;/a&gt; file. When more data arrives, IOx writes those columns of the table to a new Parquet file. Parquet files compress columns of data very well, and IOx stores those files in object storage (S3), which is extremely scalable. The InfluxDB Cloud query tier automatically scales with your query workload.&lt;/p&gt;

&lt;p&gt;The Parquet file format also provides fantastic query performance. For example, when IOx writes columns of data to Parquet, it includes hints in the Parquet metadata to describe column contents. This way, the query engine can skip over entire Parquet files, and/or unhelpful portions of Parquet files, at query time.&lt;/p&gt;

&lt;p&gt;These updates to the InfluxDB storage engine, persistence format, and storage and query tiers combine to provide infinite cardinality and unlock use cases like tracing.&lt;/p&gt;

&lt;p&gt;To get started with InfluxDB IOx and see what unlimited cardinality can unlock for you, sign up for the &lt;a href="https://www.influxdata.com/influxdb-engine-beta/"&gt;InfluxDB IOx beta program&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Wed, 30 Nov 2022 07:00:00 +0000</pubDate>
      <link>https://www.influxdata.com/blog/tracing-influxdb-iox/</link>
      <guid isPermaLink="true">https://www.influxdata.com/blog/tracing-influxdb-iox/</guid>
      <category>Product</category>
      <category>Use Cases</category>
      <author>Jason Myers, Jacob Marble (InfluxData)</author>
    </item>
    <item>
      <title>Why I Joined InfluxData - Jacob Marble</title>
      <description>&lt;p&gt;My name is Jacob Marble, and I’m a new Influxer.&lt;/p&gt;

&lt;p&gt;In my short career as a software engineer, I’ve worked for both BigCo and Startup, and learned volumes from each. BigCo likes systems, processes, standards, tests, specialists, chain-of-command. Startup likes nimble, scrappy, curious, pragmatic, generalist, impact. My biggest lesson so far?&lt;/p&gt;

&lt;p&gt;I want to work with people who are (1) nice and (2) smart.&lt;/p&gt;
&lt;h2&gt;People&lt;/h2&gt;
&lt;p&gt;In my early programming days, I was impressed by the stereotypical programmer-in-a-closet. He (stereotype!) is brilliant, eats pizza, stays up late hacking, avoids people, and doesn’t care what other people think. This agrees strongly with my upbringing; my parents taught me to be independent, an attribute that I am proud of for myself and respect in others.&lt;/p&gt;

&lt;p&gt;However, the harder I try to be an independent-whiz-kid, the more I realize that I need and enjoy interaction with people. In fact, I learn more and get more work done as a member of a team than I do alone! When I interviewed with InfluxData, I wanted to know about the people I would be working with, so I asked my interviewers questions like:&lt;/p&gt;
&lt;ul&gt;
 	&lt;li&gt;Who do you like to work with?&lt;/li&gt;
 	&lt;li&gt;How often do you interact with people?&lt;/li&gt;
 	&lt;li&gt;What did you do before coming to InfluxData?&lt;/li&gt;
 	&lt;li&gt;What percentage of my prospective peers are remote like me?&lt;/li&gt;
 	&lt;li&gt;What are the relationships like between SWE, SRE, and PM?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the process of interviewing with InfluxData, I interacted with four software engineers. After each interview, I felt certain that this is someone I like, and that I can learn a lot from. Influxers are nice, outgoing, and smart!&lt;/p&gt;
&lt;h2&gt;Products&lt;/h2&gt;
&lt;p&gt;I used Telegraf, InfluxDB and Chronograf before joining InfluxData. My last employer uses InfluxDB and Grafana for service metrics (and they are excited for&lt;a href="https://w2.influxdata.com/resources/tsm_overviewinfluxdb/"&gt; TSI in InfluxDB 1.5&lt;/a&gt;) and I use InfluxDB as the central persistence engine in a side project. I’ve read a lot of the online documentation and found answers to my questions there. All this to say, I’m confident that the products are solid, and support is top-notch.&lt;/p&gt;

&lt;p&gt;As society continues to move into the age of Big Data, the relevance of &lt;a href="https://w2.influxdata.com/time-series-database/"&gt;time series&lt;/a&gt; will only continue to grow, and before I even considered InfluxData as an employer, I knew that InfluxData is my preferred solution for &lt;a href="https://w2.influxdata.com/modern-time-series-platform/"&gt;time series tools&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;Tech&lt;/h2&gt;
&lt;p&gt;The people and product meet the standard, but will my inner nerd find satisfaction?&lt;/p&gt;

&lt;p&gt;My background so far is strong with tools like Java, Golang, data pipeline frameworks, and building APIs. I look forward to working with the InfluxDB storage team to leverage, grow, and apply these skills to allow our users to reduce &lt;a href="https://w2.influxdata.com/about/"&gt;Time to Awesome&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;InfluxData uses Golang a lot. If you haven’t tried Golang yet, then you need to take a peek. For me, it’s everything good about Python (expressive syntax; small surface area; garbage collected), plus some massive advantages (no GIL; compiled).&lt;/p&gt;

&lt;p&gt;Some of the upcoming changes in 2.0 are really cool for anyone who has worked with data pipelines. IFQL is part of 2.0, and the language itself is interesting, but the implementation is where it gets really exciting.&lt;/p&gt;

&lt;p&gt;Most of InfluxData’s product code is open source, and most development work is open source. It isn’t always right for a business to operate like this, and it’s awesome that the model here is to give the community something useful (the TICK Stack) and let them decide when it’s time to upgrade from OSS user to SaaS customer.&lt;/p&gt;
&lt;h2&gt;Summary&lt;/h2&gt;
&lt;p&gt;I’m excited to be here at InfluxData, primarily due to the people, products and technology, in that order.&lt;/p&gt;

&lt;p&gt;Looking for a new challenge? &lt;a href="https://w2.influxdata.com/careers/"&gt;Drop us a line&lt;/a&gt;!&lt;/p&gt;
</description>
      <pubDate>Wed, 28 Mar 2018 06:00:27 -0700</pubDate>
      <link>https://www.influxdata.com/blog/why-i-joined-influxdata-jacob/</link>
      <guid isPermaLink="true">https://www.influxdata.com/blog/why-i-joined-influxdata-jacob/</guid>
      <category>Company</category>
      <author>Jacob Marble (InfluxData)</author>
    </item>
  </channel>
</rss>
