<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Talks of Philipp Krenn: https://xeraa.net/talks/</title><link>https://xeraa.net/talks/</link><description>List of talks and their slides</description><language>en-us</language><lastBuildDate>Mon, 27 Nov 2023 00:00:00 +0000</lastBuildDate><atom:link href="https://xeraa.net/talks/index.xml" rel="self" type="application/rss+xml"/><item><title>Centralized Java Logging Patterns</title><link>https://xeraa.net/talks/centralized-java-logging-patterns/</link><pubDate>Wed, 02 Oct 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/centralized-java-logging-patterns/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/centralized-java-logging-patterns/title.png"/>
        <p>Tags: <strong>java, log, pattern, talk</strong></p>
        <p>Most organizations feel the need to centralize their logs — once you have more than a couple of servers or containers, SSH and tail will not serve you well any more. However, the common question or struggle is how to achieve that.</p>
<p>This talk presents a simple Java application and multiple logging patterns with with their advantages and disadvantages, so you can pick the one that fits your organization best:</p>
<ul>
<li>Parse: Take the log files of your applications and extract the relevant pieces of information.</li>
<li>Send: Add a log appender to send out your events directly without persisting them to a log file.</li>
<li>Structure: Write your events in a structured file, which you can then centralize.</li>
<li>Containerize: Keep track of short lived containers and configure their logging correctly.</li>
<li>Orchestrate: Stay on top of your logs even when services are short lived and dynamically allocated on Kubernetes.</li>
</ul>
<p>Each pattern has its own demo with the Elastic Stack (previously called ELK Stack), so you can easily try out the different approaches in your environment. Though the general patterns are applicable with any centralized logging system.</p>
<p><strong>Demo:</strong> Try out the <a href="https://github.com/xeraa/java-logging/">example code</a> of the talk.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/_iDVaVExnwE?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=_iDVaVExnwE --></p>

      ]]></description></item><item><title>Observability is More than Logs, Metrics &amp; Traces</title><link>https://xeraa.net/talks/observability-is-more-than-logs-metrics-traces/</link><pubDate>Thu, 19 Dec 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/observability-is-more-than-logs-metrics-traces/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/observability-is-more-than-logs-metrics-traces/title.png"/>
        <p>Tags: <strong>observability, devops, talk</strong></p>
        <p>You know the drill: DevOps is using tool(s) X. So obviously, observability can be solved by throwing some tools together as well; generally logs, metrics, and traces often called the pillars of observability.</p>
<p>But observability is not a tool — it is a property of a system. Moving from many small blackboxes to a more holistic view of your system. It includes tools, but not exactly three distinct features (especially if your solution happens to support those). For example, if half your user base cannot access your service because of some bad DNS settings and external health checks are not part of your pillars, you are none the wiser.</p>
<p>This is not (just) a rant, but a look at the actual value to be added and some approaches to it. Like turning your logs into richer events that align with your business. Which is not solved by fancy tools alone.</p>
<p><strong>Demo:</strong> If you are looking for the actual tools and where the Elastic Stack can help you, take a look at the slides <a href="/talks/more-observable-systems-with-the-elastic-stack/">More Observable Systems with the Elastic Stack</a>.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/utaGAUzkfM8?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=utaGAUzkfM8 --></p>
<p>



  
  
  

  
    
      
        
      
    

    
      
        
      
    
  

  <blockquote class="twitter">
    <p>these slides are fucking phenomenal. i love how <a href="https://twitter.com/xeraa" rel="noopener">@xeraa</a> draws the sharp comparison between observability and devops terminology, and how in both cases vendors are hawking what cannot be bought. 👏📈 <a href="https://twitter.com/dnsmichi/status/1339111875691356160"><a href="https://twitter.com/dnsmichi/status/1339111875691356160">https://twitter.com/dnsmichi/status/1339111875691356160</a></a></p>

    

    <p class="attribution">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-svgtwitter">
  <title>twitter</title>
  <path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path>
</svg>&nbsp;&nbsp;Charity Majors,
      <a href="https://twitter.com/mipsytipsy" rel="noopener">@mipsytipsy</a>&nbsp;—
      <a href="https://twitter.com/mipsytipsy/status/1340049842739924992" rel="noopener">2020-12-18</a>
    </p>
  </blockquote>

 <!-- https://twitter.com/mipsytipsy/status/1340049842739924992 -->




  
  
  

  
    
      
        
      
        
      
        
      
    

    
      
        
      
    
  

  <blockquote class="twitter">
    <p><p><a href="https://twitter.com/mipsytipsy" rel="noopener">@mipsytipsy</a> It is a great learning curve to go beyond logs, traces and metrics for observability💡</p>
<p>Next to your &amp; <a href="https://twitter.com/lizthegrey" rel="noopener">@lizthegrey</a> &rsquo;s insights, I highly recommend <a href="https://twitter.com/xeraa" rel="noopener">@xeraa</a> &rsquo;s talk: <a href="https://xeraa.net/talks/observability-is-more-than-logs-metrics-traces/">https://xeraa.net/talks/observability-is-more-than-logs-metrics-traces/</a> :)</p>
</p>

    

    <p class="attribution">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-svgtwitter">
  <title>twitter</title>
  <path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path>
</svg>&nbsp;&nbsp;Michael Friedrich 🌈,
      <a href="https://twitter.com/dnsmichi" rel="noopener">@dnsmichi</a>&nbsp;—
      <a href="https://twitter.com/dnsmichi/status/1339111875691356160" rel="noopener">2020-12-16</a>
    </p>
  </blockquote>

 <!-- https://twitter.com/dnsmichi/status/1339111875691356160 --></p>

      ]]></description></item><item><title>Full-Text Search Explained with Elasticsearch</title><link>https://xeraa.net/talks/full-text-search-explained-elasticsearch/</link><pubDate>Tue, 22 Oct 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/full-text-search-explained-elasticsearch/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/full-text-search-explained-elasticsearch/title.png"/>
        <p>Tags: <strong>search, elasticsearch, talk</strong></p>
        <p>Today’s applications are expected to provide powerful full-text search. But how does that work in general and how do I implement it on my site or in my application?</p>
<p>Actually, this is not as hard as it sounds at first. This talk covers:</p>
<ul>
<li>How <strong>full-text search</strong> works in general and what the differences to databases are.</li>
<li>How the <strong>score</strong> or quality of a search result is calculated.</li>
<li>How to handle languages, search for terms and phrases, run boolean queries, add suggestions, work with ngrams, and more <strong>with Elasticsearch</strong>.</li>
</ul>
<p>We will run all the queries live and explore the possibilities for your use-case.</p>

      ]]></description></item><item><title>From Containers to Kubernetes Operators</title><link>https://xeraa.net/talks/from-containers-to-kubernetes-operators/</link><pubDate>Fri, 04 Oct 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/from-containers-to-kubernetes-operators/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/from-containers-to-kubernetes-operators/title.png"/>
        <p>Tags: <strong>docker, kubernetes, helm, operator, talk</strong></p>
        <p>&ldquo;Containers are the new ZIP format to distribute software&rdquo; is a fitting description of today&rsquo;s development world. However, it is not always that easy and this talk highlights the development of Elastic&rsquo;s container strategy over time:</p>
<ul>
<li>Docker images: A new distribution model.</li>
<li>Helm Chart: Going from demo to production.</li>
<li>Kubernetes Operator: Full control with upgrades, scaling,&hellip;</li>
</ul>
<p>Besides the strategy we are also discussing specific technical details and hurdles that appeared during the development. Or why the future will be a combination of Helm Chart and Operator (for now).</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/BMQX9K1tqj4?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=BMQX9K1tqj4 --></p>

      ]]></description></item><item><title>Scale Your Auditing Events</title><link>https://xeraa.net/talks/scale-your-auditing-events/</link><pubDate>Tue, 24 Sep 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/scale-your-auditing-events/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/scale-your-auditing-events/title.png"/>
        <p>Tags: <strong>security, auditd, auditbeat, siem, talk</strong></p>
        <p>The Linux Audit daemon is responsible for writing audit records to the disk, which you can then access with ausearch and aureport. However, it turned out that parsing and centralizing these records is not as easy as you would hope. Elastic&rsquo;s new Auditbeat fixes this by keeping the original configuration, but ships them to a centralized location where you can easily visualize all events. You can also use Auditbeat to detect changes to critical files, like binaries and configuration files, and identify potential security policy violations.</p>
<p>This talk shows you what can you do to discover changes, events, and potential security breaches as soon as possible on interactive dashboards. Additionally, we are combining Auditd events with logs, which are security relevant, and explore them in Elastic&rsquo;s free SIEM.</p>
<p><strong>Demo:</strong> Take a look at the <a href="https://github.com/xeraa/auditbeat-in-action/">example code</a> for the talk.</p>

      ]]></description></item><item><title>Live Kubernetes Debugging with the Elastic Stack</title><link>https://xeraa.net/talks/live-kubernetes-debugging-elastic-stack/</link><pubDate>Fri, 27 Sep 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/live-kubernetes-debugging-elastic-stack/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/live-kubernetes-debugging-elastic-stack/title.png"/>
        <p>Tags: <strong>kubernetes, debug, elastic-stack, talk</strong></p>
        <p>Your Kubernetes app is down. Your users start ranting on Twitter. Your boss is standing right behind you. What do you do?</p>
<p>This talk walks you through a live debugging session without panicking:</p>
<ul>
<li>Where does your monitoring point you?</li>
<li>Is there anything helpful in the logs?</li>
<li>Can you get more details from your application&rsquo;s traces?</li>
<li>What do your health checks say?</li>
<li>What the heck is even deployed?</li>
</ul>
<p>We are using the Elastic Stack in this demo with a special focus on its Kubernetes integration with metadata enrichment and autodiscovery in combination with APM / tracing, metrics, logs, and health checks.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/LvhIMkr0rXg?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>


      ]]></description></item><item><title>Java under the Hood of Elasticsearch</title><link>https://xeraa.net/talks/java-under-the-hood-of-elasticsearch/</link><pubDate>Thu, 03 Nov 2022 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/java-under-the-hood-of-elasticsearch/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/java-under-the-hood-of-elasticsearch/title.webp"/>
        <p>Tags: <strong>elasticsearch, java, talk</strong></p>
        <p>Elasticsearch is one of the most widely used Java projects out there. While many people know the REST interface and how to use it, this talk takes a look under the hood and picks up some of the more interesting Java topics there:</p>
<ul>
<li>Why and how Elasticsearch is always bundling the latest JDK with the default binary; also what lessons can be learned from Docker to Java distributions issues.</li>
<li>What Java features is Elasticsearch (not) using; also what are the requirements for building / testing and running.</li>
<li>While the Java Security Manager served Elasticsearch extremely well for Log4Shell and other security issues, what are the next steps after its deprecation to replace it.</li>
<li>Elasticsearch&rsquo;s Gradle setup is a monster but a powerful one — how does it keep the developers productive and what are the most important changes around performance.</li>
</ul>

      ]]></description></item><item><title>Log4Shell from Exploit to Protection and How It Affects Products</title><link>https://xeraa.net/talks/log4shell-vulnerability-exploit-protection-elasticsearch/</link><pubDate>Tue, 24 May 2022 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/log4shell-vulnerability-exploit-protection-elasticsearch/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/log4shell-vulnerability-exploit-protection-elasticsearch/title.webp"/>
        <p>Tags: <strong>log4shell, log4j, talk</strong></p>
        <p>Looking behind the immediate pain of Java&rsquo;s now infamous logging library Log4j:</p>
<ul>
<li>How do the vulnerabilities work and how to exploit them? Also, how critical are they in reality?</li>
<li>Why is it relatively complex to detect and evaluate for both custom and off-the-shelf software?</li>
<li>What does it mean for a widely used product like Elasticsearch?</li>
<li>How can you monitor exploitation attempts?</li>
</ul>
<p><strong>PS:</strong> Full blog post for <a href="/blog/2021_mitigate-log4j2-log4shell-elasticsearch/">Log4Shell and Elasticsearch</a>.</p>

      ]]></description></item><item><title>Did Anyone Say SemVer?</title><link>https://xeraa.net/talks/did-anyone-say-semver/</link><pubDate>Thu, 25 Nov 2021 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/did-anyone-say-semver/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/did-anyone-say-semver/title.webp"/>
        <p>Tags: <strong>versioning, talk</strong></p>
        <p>Semantic Versioning seems to be THE solution every time you talk about releasing software. At least in theory. Because practice is often a lot more complex. Let’s cover the basics and complexities in five minutes!</p>
<ul>
<li>What is and isn’t covered by SemVer?</li>
<li>What’s the asymmetry in it?</li>
<li>What does the versioning schema of popular products like Java, Kubernetes, Terraform, Ansible, or MySQL look like?</li>
<li>What are widespread alternatives?</li>
</ul>

      ]]></description></item><item><title>What Is Great about Modern Monolithic Applications</title><link>https://xeraa.net/talks/what-is-great-about-modern-monolithic-applications/</link><pubDate>Wed, 18 Nov 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/what-is-great-about-modern-monolithic-applications/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/what-is-great-about-modern-monolithic-applications/title.png"/>
        <p>Tags: <strong>architecture, talk</strong></p>
        <p>You only have <strong>one</strong> repository, build artifact, deployment step, process, and version that you can run locally but still scale horizontally. Sounds too good to be true and you think it must be a theoretical example? Far from it — you might even be running one yourself. Though there are of course some tradeoffs that we are covering as well.</p>

      ]]></description></item><item><title>The State of OpenTelemetry</title><link>https://xeraa.net/talks/on-the-bleeding-edge-of-open-telemetry/</link><pubDate>Sat, 01 Aug 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/on-the-bleeding-edge-of-open-telemetry/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/on-the-bleeding-edge-of-open-telemetry/title.png"/>
        <p>Tags: <strong>opentelemetry, observability, talk</strong></p>
        <p>OpenTelemetry, or OTel for short, is taking over the observability world to uncover all kinds of performance problems or errors. Let’s look at that hands-on.</p>
<p>This talk dives into the background of OTel including the technologies it is building on (or replacing). It also takes a look at what auto-instrumentation can and cannot achieve. As well as the latest developments beyond tracing with metrics and the first steps toward logging.</p>
<p>This talk also takes a look at different approaches to integration — the Spring ecosystem is wrapping most of OTel into Micrometer while other frameworks are not. What are the pros and cons of these different integrations for the developers?</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/hLRFSsjt1a0?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=hLRFSsjt1a0 --></p>

      ]]></description></item><item><title>Elasticsearch Logs</title><link>https://xeraa.net/talks/elasticsearch-logs/</link><pubDate>Thu, 30 Jul 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/elasticsearch-logs/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/elasticsearch-logs/title.png"/>
        <p>Tags: <strong>elasticsearch, log, talk</strong></p>
        <p>When you hear Elasticsearch and logs, you probably assume we want to store some application or infrastructure logs in the Elastic Stack. But this talk focusses on the logs that Elasticsearch produces itself: How to configure and use server, slow, GC, deprecation, and audit logs.</p>
<p>We discuss log levels and hierarchies, the options for changing log levels in Elasticsearch, and where you can access them. Along with some tricks and best practices — for example are you already using <code>X-Opaque-Id</code>?</p>
<p>And of course we are going to store the logs in the Elastic Stack itself to close the loop.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/6vBSyfci7dA?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=6vBSyfci7dA --></p>

      ]]></description></item><item><title>Work from Home: Challenges &amp; Tips</title><link>https://xeraa.net/talks/work-from-home-challenges-tips/</link><pubDate>Tue, 17 Mar 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/work-from-home-challenges-tips/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/work-from-home-challenges-tips/title.png"/>
        <p>Tags: <strong>work, home, distributed, talk</strong></p>
        <p>You have never worked from home or only one day per week? Suddenly many of us are thrown into this and it is not without challenges. Elastic was founded in the &ldquo;work from anywhere&rdquo; style in 2012 and is still doing it with 2,000 employees; I have been working exclusively from home for four years now. Here are some tips and tricks and we will also have time for Q&amp;A:</p>
<ul>
<li>How do you <strong>structure</strong> a workday to stay efficient and motivated?</li>
<li>How do you handle <strong>coordination</strong>, <strong>meetings</strong>, and the <strong>social aspect</strong> of work?</li>
<li>What are some recommended <strong>tools</strong>?</li>
<li>How can you turn this into a <strong>strength</strong> for software projects?</li>
</ul>
<p>Once you have worked from home for a while it is hard to imagine going back to an office — if done the right way.</p>
<p><strong>PS:</strong> While this talk focuses on the perspective for individuals, <a href="/talks/scaling-distributed-teams/">Scaling Distributed Teams</a> looks more into the challenges around company growth and <a href="/talks/distributed-teams/">Building Distributed Systems in Distributed Teams</a> on how to get started as a company.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/bSDfamIRhYo?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=bSDfamIRhYo --></p>

      ]]></description></item><item><title>From Elasticsearch 101 to 102</title><link>https://xeraa.net/talks/from-elasticsearch-101-to-102/</link><pubDate>Thu, 09 Jan 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/from-elasticsearch-101-to-102/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/from-elasticsearch-101-to-102/title.png"/>
        <p>Tags: <strong>elasticsearch, intro, talk</strong></p>
        <p>So you want to get started with Elasticsearch? Let’s kick this off together. We are taking a quick look at:</p>
<ul>
<li><strong>Architecture:</strong> Cluster, nodes, shards — how does this even work?</li>
<li><strong>Full-text search:</strong> The foundation of all other features — what makes it different to databases and how to work with text analysis, relevance,&hellip;</li>
<li><strong>Going beyond:</strong> Search with aggregations, geo features, and where to look next.</li>
</ul>
<p>In the end you should have a general overview and enough pointers to dive further into specific areas with the help of the documentation.</p>

      ]]></description></item><item><title>More Observable Systems with the Elastic Stack</title><link>https://xeraa.net/talks/more-observable-systems-with-the-elastic-stack/</link><pubDate>Thu, 19 Dec 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/more-observable-systems-with-the-elastic-stack/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/more-observable-systems-with-the-elastic-stack/title.png"/>
        <p>Tags: <strong>observability, elastic-stack, talk</strong></p>
        <p>We are deepening the insights you can get from your application with the Elastic Stack with every release. Let&rsquo;s discuss some of the latest developments:</p>
<ul>
<li>ECS and the new ECS logging libraries.</li>
<li>Connecting your logs with APM / distributed tracing.</li>
<li>Monitoring your cloud infrastructure.</li>
<li>Better Kubernetes insights and health checks with a look into the future.</li>
</ul>

      ]]></description></item><item><title>Centralized PHP Logging Patterns</title><link>https://xeraa.net/talks/centralized-php-logging-patterns/</link><pubDate>Thu, 26 Sep 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/centralized-php-logging-patterns/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/centralized-php-logging-patterns/title.png"/>
        <p>Tags: <strong>php, log, pattern, talk</strong></p>
        <p>Most organizations feel the need to centralize their logs — once you have more than a couple of servers or containers, SSH and tail will not serve you well any more. However, the common question or struggle is how to achieve that.</p>
<p>This talk presents a simple PHP application and multiple logging patterns with with their advantages and disadvantages, so you can pick the one that fits your organization best:</p>
<ul>
<li>Parse: Take the log files of your applications and extract the relevant pieces of information.</li>
<li>Send: Add a log appender to send out your events directly without persisting them to a log file.</li>
<li>Structure: Write your events in a structured file, which you can then centralize.</li>
<li>Containerize: Keep track of short lived containers and configure their logging correctly.</li>
<li>Orchestrate: Stay on top of your logs even when services are short lived and dynamically allocated on Kubernetes.</li>
</ul>
<p>Each pattern has its own demo with the Elastic Stack (previously called ELK Stack), so you can easily try out the different approaches in your environment. Though the general patterns are applicable with any centralized logging system.</p>
<p><strong>Demo:</strong> Try out the <a href="https://github.com/xeraa/php-logging/">example code</a> of the talk.</p>

      ]]></description></item><item><title>Scale Your Elasticsearch Cluster</title><link>https://xeraa.net/talks/scale-elasticsearch-cluster/</link><pubDate>Wed, 05 Jun 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/scale-elasticsearch-cluster/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/scale-elasticsearch-cluster/title.png"/>
        <p>Tags: <strong>elasticsearch, scale, cluster, talk</strong></p>
        <p>Elasticsearch is highly scalable, but some recent additions make it easier to tie everything together. In this talk we discuss:</p>
<ul>
<li><strong>Lifecycle Management</strong> or how to automate having a multi-tier architecture as well as automated snapshots and how this actually works in the background.</li>
<li><strong>Cold Storage</strong> for much higher storage density per Elasticsearch node and beyond.</li>
<li><strong>Rollups</strong> or how to aggregate metrics over time.</li>
</ul>
<p>The goal of this talk is to make your cluster management less complex and more cost effective.</p>
<p><strong>Demo:</strong> The repository with the Docker Compose setup, configurations, and demo script for frozen indices are available on <a href="https://github.com/xeraa/scale-elasticsearch">GitHub</a>.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/nTCMq-FIecs?start=1666?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=nTCMq-FIecs&t=1666 --></p>

      ]]></description></item><item><title>Secure Your Code — Injections and Logging</title><link>https://xeraa.net/talks/secure-your-code-injections-and-logging/</link><pubDate>Sat, 12 Oct 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/secure-your-code-injections-and-logging/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/secure-your-code-injections-and-logging/title.png"/>
        <p>Tags: <strong>security, modsecurity, elastic-stack, talk</strong></p>
        <p>How do you protect against injections in your web application and how do you keep track of what attackers are trying to break in?</p>
<p>Security is a hard problem, especially when you are only running but not writing an application. The infamous comic &ldquo;This is fine&rdquo; is often the best description we have for this scenario. But it doesn’t have to be. This talks shows how to protect against injections and also how to monitor them.</p>
<p>This talk combines two of the OWASP top ten security risks:</p>
<ul>
<li><strong>Injections</strong> (A1:2017): We are using a simple application exploitable by injection and will then secure it with the Web Application Firewall (WAF) ModSecurity.</li>
<li><strong>Insufficient Logging &amp; Monitoring</strong> (A10:2017): We are logging and monitoring both the secured and the unsecured application with the open source Elastic Stack.</li>
</ul>
<p>To make it more interactive, the audience has to do the injections, which we are then live monitoring and mitigating with ModSecurity.</p>
<p><strong>Demo:</strong> Try out the <a href="https://github.com/xeraa/mod_security-log">example code</a> of the talk or just look at the configuration of ModSecurity and logging.</p>
<p><strong>PS:</strong> This is highly insecure and bad code — don&rsquo;t use it for anything except demoing the security problem.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/GvlIowD7g7c?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=GvlIowD7g7c --></p>

      ]]></description></item><item><title>Elasticsearch Query Language (ES|QL)</title><link>https://xeraa.net/talks/elasticsearch-piped-query-language-esql/</link><pubDate>Mon, 27 Nov 2023 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/elasticsearch-piped-query-language-esql/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/elasticsearch-piped-query-language-esql/title.webp"/>
        <p>Tags: <strong>elasticsearch, query, talk</strong></p>
        <p>Elasticsearch and Kibana added a brand new query language: ES|QL — coming with a new endpoint (<code>_query</code>) and a simplified syntax. It lets you refine your results one step at a time and adds new features like JOINs (yes, JOINs!), data enrichment, and processing right in your query. And you can use it across the Elastic Stack — from the Elasticsearch API to Discover and Alerting in Kibana. But the biggest change is behind the scenes: Using a new compute engine that was built with performance in mind.
Join us for an overview and a look at syntax and internals.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/ZWk2e6IIWMU?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=ZWk2e6IIWMU --></p>
<p><strong>Kibana Console sample queries</strong> you can run on <a href="https://esql.demo.elastic.co">https://esql.demo.elastic.co</a>.</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="cm">/**
</span></span></span><span class="line"><span class="cl"><span class="cm"> * See the documentation for a complete list of
</span></span></span><span class="line"><span class="cl"><span class="cm"> * features; we&#39;ll focus on the concepts and some
</span></span></span><span class="line"><span class="cl"><span class="cm"> * interesting examples.
</span></span></span><span class="line"><span class="cl"><span class="cm"> * Some queries will (intentionally) result in errors.
</span></span></span><span class="line"><span class="cl"><span class="cm"> */</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Let&#39;s get started with the equivalent of GET /
</span></span></span><span class="line"><span class="cl"><span class="c1">// Cover output formats, case sensitivity, KEEP, LIMIT
</span></span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO //Comment
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">json</span> <span class="c1">//But no comment here
</span></span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">csv</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    show info //Are keywords case sensitive?
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 1 //Removing the warning
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 1
</span></span></span><span class="line"><span class="cl"><span class="s2">    | KEEP version //Reducing the output
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 1
</span></span></span><span class="line"><span class="cl"><span class="s2">    | DROP hash //Reducing the output
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    /* Combining it all with a
</span></span></span><span class="line"><span class="cl"><span class="s2">     * multi-line comment */
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 1
</span></span></span><span class="line"><span class="cl"><span class="s2">    | KEEP version
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Where should you put the pipe?
</span></span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO | LIMIT 1 | KEEP version
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO |
</span></span></span><span class="line"><span class="cl"><span class="s2">    LIMIT 1 |
</span></span></span><span class="line"><span class="cl"><span class="s2">    KEEP version
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    SHOW INFO
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 1
</span></span></span><span class="line"><span class="cl"><span class="s2">    | KEEP version
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Use some actual data
</span></span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34; //Can you use GET as well?
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data METADATA _index, _id, _version
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;profile&#34;</span><span class="o">:</span> <span class="kc">true</span> <span class="c1">//This is undocumented for now but might come in handy; only works with JSON
</span></span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | KEEP @timestamp, message
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// A quick look at data types, comparisons and (optional) type-casting
</span></span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | WHERE client_ip = &#34;</span><span class="mf">172.21</span><span class="p">.</span><span class="mf">2.162</span><span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | WHERE client_ip == &#34;</span><span class="mf">172.21</span><span class="p">.</span><span class="mf">2.162</span><span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | WHERE client_ip == TO_IP(&#34;</span><span class="mf">172.21</span><span class="p">.</span><span class="mf">2.162</span><span class="s2">&#34;)
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | WHERE client_ip IS NOT NULL
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// And finally aggregations (with a query DSL example for comparison)
</span></span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS COUNT_DISTINCT(client_ip), AVG(event_duration)
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 1
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">sample_data</span><span class="o">/</span><span class="nx">_search</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;size&#34;</span><span class="o">:</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;aggs&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;distinct_client-ip&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;cardinality&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;field&#34;</span><span class="o">:</span> <span class="s2">&#34;client_ip&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;average_event-duration&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;avg&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;field&#34;</span><span class="o">:</span> <span class="s2">&#34;event_duration&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS AVG(event_duration), COUNT(*) BY client_ip
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS AVG(event_duration), COUNT(*) BY client_ip
</span></span></span><span class="line"><span class="cl"><span class="s2">    | SORT COUNT(*)
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS AVG(event_duration), mycount = COUNT(*) BY client_ip
</span></span></span><span class="line"><span class="cl"><span class="s2">    | SORT mycount
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS AVG(event_duration), COUNT(*) BY client_ip
</span></span></span><span class="line"><span class="cl"><span class="s2">    | SORT `count(*)` //Case sensitivity revisited — will this work?
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS AVG(event_duration), COUNT(*) BY client_ip
</span></span></span><span class="line"><span class="cl"><span class="s2">    | SORT `COUNT(*)` DESC
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Precedural queries as a core concept
</span></span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS AVG(event_duration), COUNT(*) BY client_ip
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS AVG(event_duration), COUNT(*) BY client_ip
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS AVG(event_duration), COUNT(*) BY client_ip
</span></span></span><span class="line"><span class="cl"><span class="s2">    | SORT `COUNT(*)` DESC
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 1
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS average_duration = AVG(event_duration), count = COUNT(*) BY client_ip
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS MAX(average_duration) BY count //A chained aggregation
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// More language features, using ROW for sample data
</span></span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    ROW a = &#34;</span><span class="nx">philipp</span><span class="err">@</span><span class="nx">elastic</span><span class="p">.</span><span class="nx">co</span><span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    | WHERE a RLIKE &#34;</span><span class="p">.</span><span class="o">*</span><span class="err">@</span><span class="nx">elastic</span><span class="p">.</span><span class="nx">co</span><span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    | KEEP a
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    ROW a = &#34;</span><span class="mi">2023</span><span class="o">-</span><span class="mi">01</span><span class="o">-</span><span class="mi">23</span><span class="nx">T12</span><span class="o">:</span><span class="mi">15</span><span class="o">:</span><span class="mf">00.000</span><span class="nx">Z</span> <span class="o">-</span> <span class="nx">some</span> <span class="nx">text</span> <span class="o">-</span> <span class="mf">127.0</span><span class="p">.</span><span class="mf">0.1</span><span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    | DISSECT a &#34;</span><span class="o">%</span><span class="p">{</span><span class="nx">date</span><span class="p">}</span> <span class="o">-</span> <span class="o">%</span><span class="p">{</span><span class="nx">msg</span><span class="p">}</span> <span class="o">-</span> <span class="o">%</span><span class="p">{</span><span class="nx">ip</span><span class="p">}</span><span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    | KEEP date, msg, ip
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 1
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    ROW a = &#34;</span><span class="mi">2023</span><span class="o">-</span><span class="mi">01</span><span class="o">-</span><span class="mi">23</span><span class="nx">T12</span><span class="o">:</span><span class="mi">15</span><span class="o">:</span><span class="mf">00.000</span><span class="nx">Z</span> <span class="mf">127.0</span><span class="p">.</span><span class="mf">0.1</span> <span class="nx">some</span><span class="p">.</span><span class="nx">email</span><span class="err">@</span><span class="nx">foo</span><span class="p">.</span><span class="nx">com</span> <span class="mi">42</span><span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    | GROK a &#34;</span><span class="o">%</span><span class="p">{</span><span class="nx">TIMESTAMP_ISO8601</span><span class="o">:</span><span class="nx">date</span><span class="p">}</span> <span class="o">%</span><span class="p">{</span><span class="nx">IP</span><span class="o">:</span><span class="nx">ip</span><span class="p">}</span> <span class="o">%</span><span class="p">{</span><span class="nx">EMAILADDRESS</span><span class="o">:</span><span class="nx">email</span><span class="p">}</span> <span class="o">%</span><span class="p">{</span><span class="nx">NUMBER</span><span class="o">:</span><span class="nx">num</span><span class="o">:</span><span class="kr">int</span><span class="p">}</span><span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    // Note the impact of switching KEEP and EVAL around
</span></span></span><span class="line"><span class="cl"><span class="s2">    | KEEP date, ip, email, num
</span></span></span><span class="line"><span class="cl"><span class="s2">    | EVAL date = DATE_EXTRACT(&#34;</span><span class="nx">year</span><span class="s2">&#34;, TO_DATETIME(date))
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 1
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    ROW first_name = &#34;</span><span class="nx">Philipp</span><span class="s2">&#34;, last_name = &#34;</span><span class="nx">Krenn</span><span class="s2">&#34;, height = 1.81
</span></span></span><span class="line"><span class="cl"><span class="s2">    | EVAL height_feet = height * 3.281, height_cm = height * 100
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    ROW height = 1.81, weight = 75
</span></span></span><span class="line"><span class="cl"><span class="s2">    | EVAL BMI = ROUND(weight / POW(height, 2), 1)
</span></span></span><span class="line"><span class="cl"><span class="s2">    | EVAL healthy = CASE(BMI &lt; 18.5, false, BMI &gt;= 25, false, true)
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Multivalued (arrays) fields can be read but functions on them
</span></span></span><span class="line"><span class="cl"><span class="c1">// return null (unless otherwise noted in the docs)
</span></span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    ROW a = 5, b = [ 1, 2 ]
</span></span></span><span class="line"><span class="cl"><span class="s2">    | EVAL a - 3, b + 2, a + b
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 1
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Enrich your data with lookups and JOINs
</span></span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">_enrich</span><span class="o">/</span><span class="nx">policy</span><span class="o">/</span><span class="nx">clientip_policy</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM clientips
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | KEEP @timestamp, client_ip, event_duration
</span></span></span><span class="line"><span class="cl"><span class="s2">    | EVAL client_ip = TO_STRING(client_ip)
</span></span></span><span class="line"><span class="cl"><span class="s2">    | ENRICH clientip_policy ON client_ip WITH env
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM sample_data
</span></span></span><span class="line"><span class="cl"><span class="s2">    | KEEP @timestamp, client_ip, event_duration
</span></span></span><span class="line"><span class="cl"><span class="s2">    | EVAL client_ip = TO_STRING(client_ip)
</span></span></span><span class="line"><span class="cl"><span class="s2">    | ENRICH clientip_policy ON client_ip WITH env
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS median_duration = MEDIAN(event_duration) BY env
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_query</span><span class="o">?</span><span class="nx">format</span><span class="o">=</span><span class="nx">txt</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;query&#34;</span><span class="o">:</span> <span class="s2">&#34;&#34;&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    FROM kibana_sample_data_logs | WHERE response.keyword != &#34;</span><span class="mi">200</span><span class="s2">&#34;
</span></span></span><span class="line"><span class="cl"><span class="s2">    | LOOKUP JOIN envs_lkp ON clientip
</span></span></span><span class="line"><span class="cl"><span class="s2">    | STATS COUNT(*) by response, environment
</span></span></span><span class="line"><span class="cl"><span class="s2">  &#34;&#34;&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
      ]]></description></item><item><title>Will ChatGPT Take Over My Job?</title><link>https://xeraa.net/talks/will-chatgpt-take-over-my-job/</link><pubDate>Thu, 09 Nov 2023 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/will-chatgpt-take-over-my-job/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/will-chatgpt-take-over-my-job/title.webp"/>
        <p>Tags: <strong>chatgpt, llm, talk</strong></p>
        <p>Of course not. But besides the provocative title, ChatGPT and other LLMs are changing — hopefully improving — our industry.
Generative AI is massively hyped right now but the concept of copilots makes a lot of sense. We are the pilot but can rely on tooling to make our jobs faster and more efficient; like explaining a Kubernetes error message and listing the most common causes and potential solutions.
So what is the state of the art of current copilots and what is not yet or soon° to be expected?</p>
<p>° to the best of our current knowledge</p>

      ]]></description></item><item><title>Reciprocal Rank Fusion (RRF)</title><link>https://xeraa.net/talks/reciprocal-rank-fusion/</link><pubDate>Wed, 20 Sep 2023 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/reciprocal-rank-fusion/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/reciprocal-rank-fusion/title.webp"/>
        <p>Tags: <strong>search, relevance, talk</strong></p>
        <p>Reciprocal Rank Fusion (RRF) combines multiple result sets with different relevance indicators — like lexical and dense or sparse vector search — into a single result set. One of the great attributes of RRF is that it requires no tuning, and the different relevance indicators do not have to be related to each other to achieve high-quality results. If you have been using boosting to combine different types of searches, this is the talk for you. We&rsquo;ll dive into the algorithm, how to use it, and how it might surprise you when coming from BM25 rankings.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/px4YBYrz0NU?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=px4YBYrz0NU --></p>

      ]]></description></item><item><title>Optimize Elasticsearch: Synthetic Source &amp; Time Series Data Stream</title><link>https://xeraa.net/talks/synthetic-source-elasticsearch/</link><pubDate>Sun, 27 Aug 2023 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/synthetic-source-elasticsearch/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/synthetic-source-elasticsearch/title.webp"/>
        <p>Tags: <strong>elasticsearch, talk</strong></p>
        <p>A recent improvement in Elasticsearch is the synthetic source mapping that can cut your storage needs in half. Let&rsquo;s dive into:</p>
<ul>
<li>What is the <code>_source</code> field, why do you need it, and what options did you have until now?</li>
<li>How does synthetic source work under the hood and what are its limitations and tradeoffs?</li>
<li>How much disk space can you save with the various mapping options?</li>
</ul>
<p>On top of that, there is the new Time Series Data Stream (or DataStore), TSDS in short, index type that pushes the optimizations even further by making the most out of co-locating related data.</p>

      ]]></description></item><item><title>Enriching Data in the Elastic Stack</title><link>https://xeraa.net/talks/enriching-data-elastic-stack/</link><pubDate>Tue, 04 Jul 2023 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/enriching-data-elastic-stack/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/enriching-data-elastic-stack/title.webp"/>
        <p>Tags: <strong>elasticsearch, ingest, talk</strong></p>
        <p>Make more out of your data by enriching it with metadata. But there are a couple of tradeoffs:</p>
<ul>
<li><strong>When</strong>: Index- vs runtime — while Elasticsearch has historically always favored index-time, you can do both now. Which has an impact on performance and sometimes also correctness.</li>
<li><strong>Where</strong>: Edge vs central vs in-cluster — having an impact both on performance and operational aspects.</li>
<li><strong>How</strong>: Logstash vs Beats vs Agent (with Fleet) vs OpenTelemetry Collector vs Elasticsearch ingest pipeline vs Elasticsearch runtime fields — you are spoilt for choice.</li>
</ul>
<p>AI / ML, &ldquo;de-richment&rdquo; for personal data, and more complex use-cases all also have their space in this talk.</p>

      ]]></description></item><item><title>Catch the Fraud — with Observability and Analytics</title><link>https://xeraa.net/talks/catch-the-fraud-observability-analytics/</link><pubDate>Fri, 23 Jun 2023 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/catch-the-fraud-observability-analytics/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/catch-the-fraud-observability-analytics/title.webp"/>
        <p>Tags: <strong>observability, analytics, talk</strong></p>
        <p>Elastic — the company behind Elasticsearch and Kibana — is running an annual competition to reward contributions like pull requests, blog posts, talks, etc. Once we started giving away MacBooks, we got a massive influx of fraud. This talk tells the tongue-in-cheek story of how people cheated and also how we caught them:</p>
<ul>
<li>Observability: Find the bots and trace everyone&rsquo;s actions to figure out what is a coincidence and what is not.</li>
<li>Analytics: See how people are trying to exploit the system through fake accounts, shady content, or bending the rules.</li>
</ul>
<p>While we initially hadn&rsquo;t planned for this scenario, having the power of search available across observability and analytics data let us do many interesting correlations to get a complete picture of the monster we had created.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/HKREN-aVg7U?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=HKREN-aVg7U --></p>

      ]]></description></item><item><title>Elasticsearch: Vector and Hybrid Search</title><link>https://xeraa.net/talks/elasticsearch-vector-hybrid-search/</link><pubDate>Wed, 17 May 2023 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/elasticsearch-vector-hybrid-search/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/elasticsearch-vector-hybrid-search/title.webp"/>
        <p>Tags: <strong>elasticsearch, talk</strong></p>
        <p>Search is not just traditional TF/IDF anymore but the current trend of machine learning and models has opened another dimension for search. This talk gives an overview of:</p>
<ul>
<li>&ldquo;Classic&rdquo; search and its limitation</li>
<li>What is a model and how can you use it</li>
<li>How to use vector search or hybrid search in Elasticsearch</li>
<li>Where OpenAI&rsquo;s ChatGPT or similar LLMs come into play with Elastic</li>
</ul>

      ]]></description></item><item><title>The Next Generation of Datastores: Hot Queries, Cold Storage</title><link>https://xeraa.net/talks/next-generation-datastores/</link><pubDate>Sat, 01 Apr 2023 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/next-generation-datastores/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/next-generation-datastores/title.webp"/>
        <p>Tags: <strong>datastore, serverless, talk</strong></p>
        <p>The architecture of datastores has recently added a new trick: relying on blob stores. It offers new possibilities in scale, cost, and operational simplicity by building on the current storage standard of our industry — AWS S3; and everyone has a compatible implementation. But of course, it comes with tradeoffs. This talk gives an overview of:</p>
<ul>
<li>How do blob stores fit into the trend of stateless, serverless, and cloud-native for datastores?</li>
<li>What options for S3 compatible blob stores do you have?</li>
<li>Who is using them and what are their tradeoffs or sweet spots?</li>
</ul>

      ]]></description></item><item><title>But Is It Web-Scale?</title><link>https://xeraa.net/talks/but-is-it-webscale/</link><pubDate>Tue, 07 Feb 2023 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/but-is-it-webscale/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/but-is-it-webscale/title.webp"/>
        <p>Tags: <strong>scale, talk</strong></p>
        <p>Do you still remember the infamous &ldquo;web-scale&rdquo; video about MongoDB?
It&rsquo;s been a while, so what is web-scale (not), how can it apply today, and is it still useful? Or will it always be stuck on its ironic use?</p>

      ]]></description></item><item><title>Open Policy Agent: Security for Cloud Natives and Everyone Else</title><link>https://xeraa.net/talks/open-policy-agent-opa/</link><pubDate>Tue, 07 Feb 2023 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/open-policy-agent-opa/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/open-policy-agent-opa/title.webp"/>
        <p>Tags: <strong>security, opa, talk</strong></p>
        <p>One of the emerging standards for cloud (native) security is OPA, the Open Policy Agent; an open source standard under the Cloud Native Computing Foundation.
This talk gives an overview of what OPA can do for you and how you can write declarative policies to check your APIs, Kubernetes, or applications. It&rsquo;s structured into three segments:</p>
<ol>
<li>Why do you want to add a continuous runtime checker to your APIs or applications and what gaps is it covering?</li>
<li>How do you write declarative policies with OPA?</li>
<li>What does it look like in hands-on examples against APIs, Kubernetes, and applications?</li>
</ol>
<p>



  
  
  

  
    

    
  

  <blockquote class="twitter">
    <p><p>TIL, there are three acronymous for security issues:</p>
<p>FYI: Low
WTF: Medium
OMG: High</p>
<p>#cfgmgmtcamp</p>
</p>

    

    <p class="attribution">
      <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon icon-svgtwitter">
  <title>twitter</title>
  <path d="M23 3a10.9 10.9 0 0 1-3.14 1.53 4.48 4.48 0 0 0-7.86 3v1A10.66 10.66 0 0 1 3 4s-4 9 5 13a11.64 11.64 0 0 1-7 2c9 5 20 0 20-11.5a4.5 4.5 0 0 0-.08-.83A7.72 7.72 0 0 0 23 3z"></path>
</svg>&nbsp;&nbsp;Willian Braga ❁,
      <a href="https://twitter.com/neverping" rel="noopener">@neverping</a>&nbsp;—
      <a href="https://twitter.com/neverping/status/1622611786334715905" rel="noopener">2023-02-06</a>
    </p>
  </blockquote>

 <!-- https://x.com/neverping/status/1622611786334715905 --></p>

      ]]></description></item><item><title>How to Benchmark ... Poorly</title><link>https://xeraa.net/talks/how-to-benchmark-poorly/</link><pubDate>Tue, 15 Nov 2022 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/how-to-benchmark-poorly/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/how-to-benchmark-poorly/title.webp"/>
        <p>Tags: <strong>performance, talk</strong></p>
        <p>After getting a bit of a bad reputation (&ldquo;benchmarketing&rdquo;) it looks as if vendor benchmarks are very much in fashion again. Let’s take a quick look at common mistakes and how to do them … poorly.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/v8DoZJKbZ7o?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=v8DoZJKbZ7o --></p>

      ]]></description></item><item><title>Elastic ❤️ Terraform</title><link>https://xeraa.net/talks/elastic-heart-terraform/</link><pubDate>Tue, 21 Jun 2022 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/elastic-heart-terraform/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/elastic-heart-terraform/title.webp"/>
        <p>Tags: <strong>elastic, terraform, talk</strong></p>
        <p>Elastic, the company behind Elasticsearch, has grown in popularity over the years and so have the configuration options. As of now, we are mostly focusing on Terraform.
This talk dives into the &ldquo;why&rdquo; and how we are splitting up our providers to give our large user-base the best possible experience.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/Beow6Z-pIKQ?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=Beow6Z-pIKQ --></p>

      ]]></description></item><item><title>Elasticsearch Under the Hood</title><link>https://xeraa.net/talks/elasticsearch-under-the-hood/</link><pubDate>Wed, 01 Jun 2022 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/elasticsearch-under-the-hood/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/elasticsearch-under-the-hood/title.webp"/>
        <p>Tags: <strong>elasticsearch, foundation, talk</strong></p>
        <p>Join for a deep-dive into the engine of Elasticsearch:</p>
<ul>
<li>Cluster, cluster state, and node types</li>
<li>Shards, primaries, and replicas</li>
<li>Lucene all the way down to segments</li>
<li>Node balancing and lifecycle management</li>
<li>Common settings like <code>refresh_interval</code> or heap size</li>
<li>Benchmarking and performance</li>
</ul>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/cpsgAQFkhCE?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=cpsgAQFkhCE --></p>

      ]]></description></item><item><title>Bootiful OpenTelemetry</title><link>https://xeraa.net/talks/bootiful-opentelemetry/</link><pubDate>Fri, 27 May 2022 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/bootiful-opentelemetry/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/bootiful-opentelemetry/title.webp"/>
        <p>Tags: <strong>opentelemetry, spring-boot, talk</strong></p>
        <p>OpenTelemetry, or OTel for short, is taking over the observability world. And with Spring Boot&rsquo;s widespread success, they work together very well to uncover all kinds of performance problems or errors. Let&rsquo;s look at that hands-on.</p>
<p>This talk dives into the background of OTel including the technologies its building on (or replacing). It also takes a look at what auto-instrumentation can and cannot achieve. As well as the latest developments beyond tracing with metrics and the first steps towards logging.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/0pml_By9Rhk?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=0pml_By9Rhk --></p>

      ]]></description></item><item><title>Why Is It Always DNS, TLS, and Bad Configs?</title><link>https://xeraa.net/talks/why-is-it-always-dns-tls-bad-configs/</link><pubDate>Thu, 28 Apr 2022 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/why-is-it-always-dns-tls-bad-configs/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/why-is-it-always-dns-tls-bad-configs/title.webp"/>
        <p>Tags: <strong>health, uptime, availability, talk</strong></p>
        <p>Sometimes it feels a bit like Harry Potter: &ldquo;Why is it always the three of you&rdquo; and then you end up hunting a Horcrux. Let&rsquo;s take a look at them and how we can counter them.
This talk dives into how well-structured health checks can detect our common foes early on. Looking at the failure patterns you can detect some of the signs straight away.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/_nVXysHrRtE?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=_nVXysHrRtE --></p>

      ]]></description></item><item><title>Log Management: From grep to Full-Text Search and Back</title><link>https://xeraa.net/talks/log-management-grep-full-text-search-back/</link><pubDate>Tue, 27 Apr 2021 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/log-management-grep-full-text-search-back/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/log-management-grep-full-text-search-back/title.png"/>
        <p>Tags: <strong>logs, tradeoffs, talk</strong></p>
        <p>Logs are everywhere. But they have gone through an interesting development over the years:</p>
<ul>
<li>grep: This works well as long as you have a single instance to search on. Once you need to SSH into many machines and try to piece together the results of multiple grep commands, things tend not to work that well anymore.</li>
<li>Splunk: Centralizing those logs and letting users search through them with a piped language in Splunk is the logical step to fix that issue. However, the more data you centralize, the slower this will get.</li>
<li>ELK: The solution to that idleness is using full-text search. Elasticsearch, in combination with Logstash and Kibana (plus Beats), gave logs a major performance boost. But at what cost?</li>
<li>Loki: Reducing the scope and going back to a smart data structure combined with grep gives Loki the possibility to reduce costs while still providing good performance.</li>
<li>Closing the gap: So what are the tradeoffs between the different systems, and are they potentially closing some gaps between performance, features, and cost?</li>
</ul>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/e-Kd7iMvD60?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=e-Kd7iMvD60 --></p>

      ]]></description></item><item><title>Debug a Kubernetes Operator</title><link>https://xeraa.net/talks/debug-a-kubernetes-operator/</link><pubDate>Fri, 13 Nov 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/debug-a-kubernetes-operator/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/debug-a-kubernetes-operator/title.png"/>
        <p>Tags: <strong>kubernetes, operator, talk</strong></p>
        <p>The goal of this live debugging session is to better understand how to work with a failing Kubernetes Operator and get used to some helpful Kubernetes commands.</p>
<p>Each of the three examples follows the same structure:</p>
<ul>
<li>Apply an invalid YAML manifest.</li>
<li>Figure out what is wrong and how to fix it.</li>
<li>Hints that may help solve the problem.</li>
<li>A detailed walkthrough to understand and solve the problem.</li>
</ul>
<p><strong>Demo:</strong> The <a href="https://github.com/xeraa/elastic-kubernetes-workshop/tree/master/templates/debug">broken YAML manifests</a> — don&rsquo;t use them unless you want to debug 😅</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/TII8mTy86E0?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=TII8mTy86E0 --></p>

      ]]></description></item><item><title>NoSQL Means No Security?</title><link>https://xeraa.net/talks/nosql-means-no-security/</link><pubDate>Sat, 20 Jun 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/nosql-means-no-security/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/nosql-means-no-security/title.png"/>
        <p>Tags: <strong>nosql, security, talk</strong></p>
        <p>New systems are always attractive targets since their security model couldn’t mature yet. NoSQL databases are no exception and had some bad press about their security, but how does their protection look like? We will take a look at three widely used systems and their unique approaches:</p>
<ul>
<li><strong>MongoDB</strong>: Widely criticized for publicly accessible databases and a frequent victim of ransomware. In reality, it provides an elaborate authentication and authorization system.</li>
<li><strong>Redis</strong>: Security through obscurity or how you can rename commands. And it features a unique tradeoff for binding to publicly accessible interfaces plus brand-new security features.</li>
<li><strong>Elasticsearch</strong>: Groovy scripting has been a constant headache, but the new, custom-built scripting language Painless tries to take the pain away literally. Plus, free TLS and role-based authentication to combat ransomware attacks.</li>
</ul>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/2THiDGDGKxs?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=2THiDGDGKxs --></p>

      ]]></description></item><item><title>Monitor Java Apps with the Elastic Stack: Logs, Metrics, Pings, and Traces</title><link>https://xeraa.net/talks/monitor-your-java-applications-with-the-elastic-stack/</link><pubDate>Mon, 13 Apr 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/monitor-your-java-applications-with-the-elastic-stack/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/monitor-your-java-applications-with-the-elastic-stack/title.png"/>
        <p>Tags: <strong>monitor, java, talk</strong></p>
        <p>“With microservices every outage is like a murder mystery” is a common complaint. But it doesn’t have to be! This talk gives an overview on how to monitor (distributed) applications. We dive into:</p>
<ul>
<li><strong>Uptime monitoring:</strong> Ping services and actively monitor their health and response time.</li>
<li><strong>Application logs:</strong> Collect structured logs in a central location.</li>
<li><strong>Network monitoring:</strong> Find out what is happening on the network.</li>
<li><strong>System metrics:</strong> Keep track of network traffic and system load.</li>
<li><strong>Security events:</strong> Collect who is doing what when to find malicious actors.</li>
<li><strong>Application metrics:</strong> Get the information from the application’s metrics and health endpoints via REST or JMX to see how your heap is filling up.</li>
<li><strong>Request tracing:</strong> Trace requests through a distributed system and show how long each call takes and where errors are happening.</li>
</ul>
<p>And we do all of that live, since it is so easy and much more interactive that way using Elasticsearch Service on Elastic Cloud.</p>
<p>
      <div
          style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
        <iframe
          src="https://player.vimeo.com/video/234068541?dnt=1"
            style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" allow="fullscreen">
        </iframe>
      </div>
 <!-- https://vimeo.com/234068541 --></p>

      ]]></description></item><item><title>Logging in Spring Boot with the Elastic Stack</title><link>https://xeraa.net/talks/logging-in-spring-boot-with-the-elastic-stack/</link><pubDate>Thu, 09 Apr 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/logging-in-spring-boot-with-the-elastic-stack/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/logging-in-spring-boot-with-the-elastic-stack/title.png"/>
        <p>Tags: <strong>spring-boot, log, talk</strong></p>
        <p>Let&rsquo;s look at the good parts of logging:</p>
<ul>
<li>How can you bring logging to production quickly?</li>
<li>How does this work with Spring Boot in as a practical example?</li>
<li>Do you want to add tracing and make the most of the combination?</li>
<li>How do you manage the data that you are collecting?</li>
</ul>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/zxvEHvKvGcc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=zxvEHvKvGcc --></p>

      ]]></description></item><item><title>Integration Tests with Containers</title><link>https://xeraa.net/talks/integration-tests-with-containers/</link><pubDate>Wed, 13 Nov 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/integration-tests-with-containers/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/integration-tests-with-containers/title.png"/>
        <p>Tags: <strong>test, elasticsearch, talk</strong></p>
        <p>How are you testing with your database?</p>
<ul>
<li>Mocking is not an option since you want to test the actual system.</li>
<li>In-memory databases, like H2 or HSQLDB, have subtle differences and not all datastores have in-memory cousins.</li>
<li>Managing and running tests in parallel against the actual datastore is a pain.</li>
</ul>
<p>So what is the solution? There are some very neat solutions based on containers, namely the Docker-Maven-Plugin and Testcontainers. From your tests you can start a lightweight, throwaway instance of your datastore and this talk will walk you through how to do that.</p>
<p><strong>Demo:</strong> The repository with the example tests are available on <a href="https://github.com/xeraa/integration-test-demo">GitHub</a>.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/DienPt38U0s?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=DienPt38U0s --></p>

      ]]></description></item><item><title>seccomp — Your Next Layer of Defense</title><link>https://xeraa.net/talks/seccomp-next-layer-defense/</link><pubDate>Fri, 13 Sep 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/seccomp-next-layer-defense/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/seccomp-next-layer-defense/title.png"/>
        <p>Tags: <strong>seccomp, security, talk</strong></p>
        <p>Why should you allow all possible system calls from your application when you know that you only need some? If you have ever wondered the same then this is the right talk for you. We are covering:</p>
<ul>
<li>What is seccomp in a nutshell and where could you use it.</li>
<li>Practical example with Elasticsearch and Beats.</li>
<li>How to collect seccomp violations with Auditd.</li>
</ul>
<p>Because your security approach can always use an additional layer of protection.</p>
<p><strong>Video</strong> of the talk at <a href="https://media.lugons.org/BalCCon2k19/BalCCon2k19_-_Philipp_Krenn_-_Seccomb_Your_next_Layer_of_defence.mp4">BalCCon</a>.</p>
<p><strong>PS:</strong> This talk is based on <a href="https://twitter.com/spinscale">Alexander Reelsen&rsquo;s</a> blog post <a href="https://www.elastic.co/blog/seccomp-in-the-elastic-stack">Seccomp in the Elastic Stack</a>.</p>

      ]]></description></item><item><title>Reaching Zen in Your Cluster Coordination</title><link>https://xeraa.net/talks/reaching-zen-in-your-cluster-coordination/</link><pubDate>Mon, 07 Oct 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/reaching-zen-in-your-cluster-coordination/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/reaching-zen-in-your-cluster-coordination/title.png"/>
        <p>Tags: <strong>elasticsearch, coordination, cluster, talk</strong></p>
        <p>Distributed systems are hard and unfortunately often less perfect than we would hope. This talk shows a concrete example: Elasticsearch&rsquo;s cluster coordination, called Zen Discovery, got a rewrite in version 7.0. Starting from a formal model, the coordination layer was rebuilt to address multiple issues discovered over the years. We discuss the main improvements of the new implementation: Master elections are much faster, the infamous minimum_master_nodes setting has been removed, growing and shrinking clusters becomes safer and easier, and leaves less room to misconfigure the system. Let us join the new, more Zen way of cluster coordination.</p>
<p><strong>Demo:</strong> Take a look at the <a href="https://github.com/xeraa/elastic-docker/tree/master/rolling_upgrade">demo code</a> for the talk.</p>

      ]]></description></item><item><title>Takeaways From 500 Virtual Talks</title><link>https://xeraa.net/talks/take-aways-from-500-virtual-talks/</link><pubDate>Thu, 25 Nov 2021 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/take-aways-from-500-virtual-talks/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/take-aways-from-500-virtual-talks/title.webp"/>
        <p>Tags: <strong>devrel, talk, talk</strong></p>
        <p>Virtual talks are the new norm. In theory, they are great — speakers and attendees can join from around the world, infrastructure is cheap and scalable, recordings are simple. But what is happening in reality with problems like Zoom fatigue? What is and what isn’t working? At Elastic, we have done more than <del>500</del> — by now more than 1,000 — virtual talks and meetups since the pandemic’s start.</p>
<p>This talk gives an overview of the development over time, specifics in regions, differences in tooling,&hellip; and adds some of my personal anecdotes.</p>

      ]]></description></item><item><title>Security Tradeoffs in Elasticsearch</title><link>https://xeraa.net/talks/security-tradeoffs-in-elasticsearch/</link><pubDate>Fri, 25 Oct 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/security-tradeoffs-in-elasticsearch/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/security-tradeoffs-in-elasticsearch/title.png"/>
        <p>Tags: <strong>security, tradeoff, talk</strong></p>
        <p>The NoSQL ecosystem thrived on combining scalability and simplicity. This talk focuses on some assumptions we built Elasticsearch on, which helped the ease of use initially, but turned out to be less than perfect for security in the long run:</p>
<ul>
<li>Binding to all interfaces and broadcasting join requests to the whole subnet makes clustering simple.</li>
<li>Running as root is the straightforward option.</li>
<li>Guessing the content-type of a request is fine.</li>
<li>Default passwords and clear-text password files are a reasonable tradeoff.</li>
<li>Docker and distributed systems play well with your security efforts.</li>
<li>Generating TLS certificates is easy.</li>
<li>Everyone will turn on security and defaults are easy.</li>
</ul>
<p><strong>Hypothesis:</strong> You need ease of use to grow initially, but switch to more secure settings for critical workloads over time.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/8ZZ6-hh7PRs?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=8ZZ6-hh7PRs --></p>

      ]]></description></item><item><title>Open Source as a Business</title><link>https://xeraa.net/talks/open-source-as-a-business/</link><pubDate>Tue, 22 Oct 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/open-source-as-a-business/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/open-source-as-a-business/title.png"/>
        <p>Tags: <strong>oss, business, talk</strong></p>
        <p>How do you build a lasting and successful company that also stays true to its open source roots?
This talk takes a look at why open source is important to business and three essential elements of this path:</p>
<ul>
<li><strong>Strategy:</strong> How can you monetize your open source product? Is it support, an open core approach, cloud services, or a combination of the three? And which ones are the features you can even commercialize without alienating your community?</li>
<li><strong>Struggle:</strong> &ldquo;You received a 100 million dollars in venture capital and yet you have so many open issues?!&rdquo; Once money is involved the dynamics often change. How can you manage expectations and still build on a flourishing open source community?</li>
<li><strong>Success:</strong> How do you balance open source and commercial success? How do you align engineering, product, and sales decisions?</li>
</ul>
<p>This talk takes the perspective of Elastic, the company behind Elasticsearch, Kibana, Beats, and Logstash, which makes its money with support, the commercial extensions, and cloud offerings. But we are also taking a look at how others are approaching this challenge, what worked, and what failed.</p>

      ]]></description></item><item><title>Make Your Data FABulous</title><link>https://xeraa.net/talks/make-your-data-fabulous/</link><pubDate>Mon, 14 Oct 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/make-your-data-fabulous/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/make-your-data-fabulous/title.png"/>
        <p>Tags: <strong>tradeoff, elasticsearch, cap, talk</strong></p>
        <p>The CAP theorem is widely known for distributed systems, but it&rsquo;s not the only tradeoff you should be aware of. For datastores there is also the FAB theory and just like with the CAP theorem you can only pick two:</p>
<ul>
<li>Fast: Results are real-time or near real-time instead of batch oriented.</li>
<li>Accurate: Answers are exact and don&rsquo;t have a margin of error.</li>
<li>Big: You require horizontal scaling and need to distribute your data.</li>
</ul>
<p>While Fast and Big are relatively easy to understand, Accurate is a bit harder to picture. This talk shows some concrete examples of accuracy tradeoffs Elasticsearch can take for terms aggregations, cardinality aggregations with HyperLogLog++, and the IDF part of full-text search. Or how to <strong>trade some speed or the distribution for more accuracy</strong>.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/G0XGv8GrhMk?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=G0XGv8GrhMk --></p>

      ]]></description></item><item><title>YAML Considered Harmful</title><link>https://xeraa.net/talks/yaml-considered-harmful/</link><pubDate>Wed, 18 Sep 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/yaml-considered-harmful/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/yaml-considered-harmful/title.png"/>
        <p>Tags: <strong>yaml, harmful, talk</strong></p>
        <p>We have all become <strong>YAML engineers</strong>, because everybody loves it, right?! Sometimes it can also burn you pretty badly and this is what this talk is about.</p>
<p>We dive into some <strong>common errors</strong> people encounter when working with YAML. These seem to be commonly accepted, which might be a form of the Stockholm Syndrome. And we are also taking a quick look at <strong>alternative formats</strong> and what they do (not) have to offer. Will you still love your YAML files after this talk? Let&rsquo;s see&hellip;</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/WQurEEfSf8M?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=WQurEEfSf8M --></p>

      ]]></description></item><item><title>Data Driven Dashboards</title><link>https://xeraa.net/talks/data-driven-dashboards/</link><pubDate>Tue, 17 Sep 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/data-driven-dashboards/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/data-driven-dashboards/title.png"/>
        <p>Tags: <strong>data, visualization, dashboard, kibana, talk</strong></p>
        <p>Kibana can do more than just logs and metrics — it can also be a tool for business analytics and your management. Especially when you want to integrate and correlate as many different data-sources as possible.</p>
<p>Based on a built-in sample dataset we look into:</p>
<ul>
<li>See the raw data in <em>Discover</em>.</li>
<li>Two kinds of data — entity-centric and timeseries.</li>
<li>Transform timeseries into entity-centric data with the (continuous) ML <em>Transformations</em>.</li>
<li><em>Visualizations</em> of timeseries with line charts, tag clouds, or the Visual Builder (including annotations).</li>
<li>Adding a more user-friendly and discoverable approach to visualizations with <em>Lens</em>.</li>
<li><em>Dashboards</em> and <em>Reports</em>.</li>
<li>The new features in <em>Maps</em>.</li>
<li>Pixel perfect presentations in <em>Canvas</em>.</li>
</ul>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/BhyneQ5n0?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=M-BhyneQ5n0 --></p>

      ]]></description></item><item><title>Scaling Distributed Teams</title><link>https://xeraa.net/talks/scaling-distributed-teams/</link><pubDate>Fri, 27 Mar 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/scaling-distributed-teams/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/scaling-distributed-teams/title.png"/>
        <p>Tags: <strong>distributed, team, talk</strong></p>
        <p>Working from home in distributed teams isn&rsquo;t exactly new. What is rarer though is how to scale it.
At Elastic we are now more than 2,000 and we have been in the <strong>work from anywhere</strong> mode when we were founded in 2012. This talk shares some things that have and have not worked out while we learned how to scale over the years:</p>
<ul>
<li><strong>Responsibilities</strong> from each one of us.</li>
<li>How to work with <strong>meetings</strong> — 1:1, team, and company-wide.</li>
<li>How your <strong>managers</strong> are essential in keeping the team together and everybody&rsquo;s sanity.</li>
<li>Why adding more teams and people will create <strong>bumps</strong> in your growth and how to overcome them.</li>
</ul>
<p><strong>PS:</strong> While this talk focuses on the scaling side, <a href="/talks/work-from-home-challenges-tips/">Work from Home: Challenges &amp; Tips</a> dives into the perspective for individuals and <a href="/talks/distributed-teams/">Building Distributed Systems in Distributed Teams</a> on how to get started as a company.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/4tgFGW9vESc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- <div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/4tgFGW9vESc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 --></p>

      ]]></description></item><item><title>GDPR Compliance for Your Datastore</title><link>https://xeraa.net/talks/gdpr-compliance-for-your-datastore/</link><pubDate>Mon, 09 Mar 2020 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/gdpr-compliance-for-your-datastore/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/gdpr-compliance-for-your-datastore/title.png"/>
        <p>Tags: <strong>gdpr, datastore, talk</strong></p>
        <p>The General Data Protection Regulation (GDPR) is changing how you can handle data in Europe. But what does this actually mean? The first part of this talk gives an overview about the implications of GDPR, which affects every software project with a European relation. That includes users&rsquo; right to see, edit, and export their data, the right to be forgotten,&hellip; The second part takes a look at what this means for actual software projects with the specific use-case of logging. The main focus here is how to stay GDPR compliant while still being able to use the data for security and operation aspects.</p>
<p><em>PS: This talk does not replace legal advice or a deeper examination of the topic. It gives you an overview and pointers to relevant techniques, but you need to discuss the implementation for your project with your own legal counsel.</em></p>

      ]]></description></item><item><title>Building Distributed Systems in Distributed Teams</title><link>https://xeraa.net/talks/distributed-teams/</link><pubDate>Sun, 02 Jun 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/distributed-teams/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/distributed-teams/title.png"/>
        <p>Tags: <strong>team, distributed, elastic, talk</strong></p>
        <p>Building distributed systems is notoriously hard. Building a distributed team, even more so. At Elastic — the company behind Elasticsearch, Kibana, Beats, and Logstash — everything is distributed; the company and our products. This talk dives into the details of how Elastic is <strong>thriving</strong> on its <strong>distributed model</strong>:</p>
<ul>
<li>How Elastic started to be distributed by design.</li>
<li>What our shared values are and what we have learned as we progressed and grew to our current size.</li>
<li>What the day of an Elastician can look like.</li>
<li>What we are using in terms of tooling.</li>
<li>How we hire and onboard new employees.</li>
</ul>
<p><strong>PS:</strong> While this talk focuses on how to build a distributed company, <a href="/talks/work-from-home-challenges-tips/">Work from Home: Challenges &amp; Tips</a> dives into the perspective for individuals and <a href="/talks/scaling-distributed-teams/">Scaling Distributed Teams</a> looks more into the challenges around company growth.</p>
<p><div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube-nocookie.com/embed/--6JU-hgvZ4?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>
 <!-- https://www.youtube.com/watch?v=- -6JU-hgvZ4 break up the double dash or it breaks the comment --></p>

      ]]></description></item><item><title>Elastic Stack 7 Highlights</title><link>https://xeraa.net/talks/elastic-stack-7-highlights/</link><pubDate>Sat, 01 Jun 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/elastic-stack-7-highlights/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/elastic-stack-7-highlights/title.png"/>
        <p>Tags: <strong>elasticsearch, kibana, elastic-stack, upgrade, talk</strong></p>
        <p>While you can find the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/release-notes-7.0.0.html">full list of changes</a> and especially the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/breaking-changes-7.0.html">breaking changes</a> in the release notes, we focus on some interesting ones and dive a little deeper into them.</p>
<p>If the slides alone are not providing enough context you can follow along with a more detailed description below.</p>
<h2 id="demo-environment">Demo Environment <a href="#demo-environment">&#35;</a></h2>
<p>Before we get started, we need to cover the demo environment — a <a href="https://github.com/xeraa/elastic-docker/tree/master/rolling_upgrade">simple three node cluster with Docker Compose</a>.</p>
<h2 id="live-upgrade">Live Upgrade <a href="#live-upgrade">&#35;</a></h2>
<p>Starting with a 6.7 cluster we are upgrading to 7.0 and then even prepare for the 8.0 migration 😉.</p>
<p>First, we check that everything is up, we have the right version, and a <a href="https://www.elastic.co/guide/en/elasticsearch/reference/6.7/cluster-health.html">green cluster</a>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">GET</span> <span class="o">/</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">_cat</span><span class="o">/</span><span class="nx">nodes</span><span class="o">?</span><span class="nx">h</span><span class="o">=</span><span class="nx">id</span><span class="p">,</span><span class="nx">version</span><span class="p">,</span><span class="nx">master</span><span class="p">,</span><span class="nx">name</span><span class="o">&amp;</span><span class="nx">v</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">_cluster</span><span class="o">/</span><span class="nx">health</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">test</span><span class="o">/</span><span class="nx">_doc</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;name&#34;</span><span class="o">:</span> <span class="s2">&#34;Elasticsearch 6.7&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p>Next, we check the upgrade assistant in Kibana (<code>/app/kibana#/management/elasticsearch/upgrade_assistant</code>) — since this is a fresh cluster nothing should need to change. We <a href="https://www.elastic.co/guide/en/elasticsearch/reference/6.7/shards-allocation.html">disable replica shard allocation</a> because the upgraded nodes will come back up quickly and this would just add unnecessary work. But we allow <code>new_primaries</code>, because Kibana 7 needs to create a new index and will not start up otherwise. Finally, we do a <a href="https://www.elastic.co/guide/en/elasticsearch/reference/6.8/indices-synced-flush.html">sync flush</a> to speed up recovery times of the nodes:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">PUT</span> <span class="nx">_cluster</span><span class="o">/</span><span class="nx">settings</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;transient&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;cluster.routing.allocation.enable&#34;</span><span class="o">:</span> <span class="s2">&#34;new_primaries&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">_flush</span><span class="o">/</span><span class="nx">synced</span></span></span></code></pre></div>
<p>We change the Elastic Stack version in the <code>.env</code> file and upgrade the first node with <code>docker-compose up -d --no-deps elasticsearch3</code>. We can check the cluster during the upgrade and still keep querying documents:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">_cat</span><span class="o">/</span><span class="nx">nodes</span><span class="o">?</span><span class="nx">h</span><span class="o">=</span><span class="nx">id</span><span class="p">,</span><span class="nx">version</span><span class="p">,</span><span class="nx">master</span><span class="p">,</span><span class="nx">name</span><span class="o">&amp;</span><span class="nx">v</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">test</span><span class="o">/</span><span class="nx">_search</span></span></span></code></pre></div>
<p>We follow the same procedure for <code>elasticsearch2</code>, <code>elasticsearch1</code>, and <code>kibana</code>. Once done we re-enable shard allocation, add a document, and see that everything is still working as expected:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">PUT</span> <span class="nx">_cluster</span><span class="o">/</span><span class="nx">settings</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;transient&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;cluster.routing.allocation.enable&#34;</span><span class="o">:</span> <span class="kc">null</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">test</span><span class="o">/</span><span class="nx">_doc</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;name&#34;</span><span class="o">:</span> <span class="s2">&#34;Elasticsearch 7.0&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">test</span><span class="o">/</span><span class="nx">_search</span></span></span></code></pre></div>
<p>Finally, we check the upgrade assistant again, reindex the <code>test</code> index since data can only be read from one version back, and see that everything is ready for our (very) future 8.0 upgrade:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">_cat</span><span class="o">/</span><span class="nx">indices</span>
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">_cat</span><span class="o">/</span><span class="nx">aliases</span><span class="o">?</span><span class="nx">v</span></span></span></code></pre></div>
<h2 id="zen2">Zen2 <a href="#zen2">&#35;</a></h2>
<p>Cluster coordination rethought and rebuilt. Read the <a href="https://www.elastic.co/blog/a-new-era-for-cluster-coordination-in-elasticsearch">blog post about Zen2</a> if you want a more detailed description than the slides.</p>
<h2 id="types-or-rather-no-types">Types or Rather No Types <a href="#types-or-rather-no-types">&#35;</a></h2>
<p>Both the past and the next steps in Elasticsearch&rsquo;s journey of getting rid of types. We create a simple mapping and notice the absence of a type. But will a query like <code>PUT no_type/2</code> work now?</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="err">#</span> <span class="nx">Types</span>
</span></span><span class="line"><span class="cl"><span class="nx">PUT</span> <span class="nx">no_type</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;mappings&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="s2">&#34;properties&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="s2">&#34;@timestamp&#34;</span><span class="o">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="s2">&#34;type&#34;</span><span class="o">:</span> <span class="s2">&#34;date&#34;</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">PUT</span> <span class="nx">no_type</span><span class="o">/</span><span class="nx">_doc</span><span class="o">/</span><span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;@timestamp&#34;</span><span class="o">:</span> <span class="s2">&#34;2019-05-08&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">no_type</span><span class="o">/</span><span class="nx">_search</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">PUT</span> <span class="nx">no_type</span><span class="o">/</span><span class="mi">2</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;@timestamp&#34;</span><span class="o">:</span> <span class="s2">&#34;2019-05-09&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p>No, this will not work and might be a surprise, but <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.0/removal-of-types.html#_typeless_apis_in_7_0">the documentation provides an answer</a>:</p>
<blockquote>
<p>In 7.0, <code>_doc</code> represents the endpoint name instead of the document type. The <code>_doc</code> component is a permanent part of the path for the document index, get, and delete APIs going forward, and will not be removed in 8.0.</p>
</blockquote>
<p>Additional details are available on the <a href="https://www.elastic.co/blog/moving-from-types-to-typeless-apis-in-elasticsearch-7-0">Elastic blog about going typeless</a>.</p>
<h2 id="optimizations">Optimizations <a href="#optimizations">&#35;</a></h2>
<p>For more details than in the slides see the <a href="https://www.elastic.co/blog/faster-retrieval-of-top-hits-in-elasticsearch-with-block-max-wand">faster retrieval of top hits blog post</a>, but the following demo shows how they work in practice. First, we add the flight demo data set in Kibana, so we have something to work with and then run through the following queries to see the differences in results:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">kibana_sample_data_flights</span><span class="o">/</span><span class="nx">_search</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">kibana_sample_data_flights</span><span class="o">/</span><span class="nx">_search</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;track_total_hits&#34;</span><span class="o">:</span> <span class="mi">10</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">kibana_sample_data_flights</span><span class="o">/</span><span class="nx">_search</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;track_total_hits&#34;</span><span class="o">:</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p><code>index.search.idle.after</code> should be relatively self explaining. The main caveat is that it will only work if you are using the default <code>index.search.idle.after</code> (one second). That is because skipping the refresh is cancelled on the next search and that search operation will block until the next refresh happens automatically. Blocking longer than one second is probably not what anybody wants, so that combination of settings is required.</p>
<h2 id="new-defaults">New Defaults <a href="#new-defaults">&#35;</a></h2>
<p>A single primary shard is the new default. The motivation is that over-sharding is a very common problem and a single shard will normally make most sense for beginners. Experts will know how shards work and will reconfigure them as needed.</p>
<p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.0/search.html#search-adaptive-replica">Adaptive Replica Selection</a> is now on by default.</p>
<h2 id="less-heap">Less Heap <a href="#less-heap">&#35;</a></h2>
<p><a href="https://www.elastic.co/guide/en/elasticsearch/reference/6.6/frozen-indices.html">Frozen indices were first released in 6.6</a>, but are still worth of being in the highlights. We run through the following queries to see frozen indices in action and while the <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.0/indices-forcemerge.html">force merge</a> is not required it is recommended:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_doc</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;name&#34;</span><span class="o">:</span> <span class="s2">&#34;Boaz&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_doc</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;name&#34;</span><span class="o">:</span> <span class="s2">&#34;Pablo&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_search</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_forcemerge</span><span class="o">?</span><span class="nx">max_num_segments</span><span class="o">=</span><span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_freeze</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_search</span></span></span></code></pre></div>
<p>Suddenly all our data seems to be gone, but this is for our protection. You need to be explicit about expensive queries:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_search</span><span class="o">?</span><span class="nx">ignore_throttled</span><span class="o">=</span><span class="kc">false</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">_cat</span><span class="o">/</span><span class="nx">indices</span><span class="o">/</span><span class="nx">frozen</span><span class="o">?</span><span class="nx">v</span><span class="o">&amp;</span><span class="nx">h</span><span class="o">=</span><span class="nx">health</span><span class="p">,</span><span class="nx">status</span><span class="p">,</span><span class="nx">index</span><span class="p">,</span><span class="nx">pri</span><span class="p">,</span><span class="nx">rep</span><span class="p">,</span><span class="nx">docs</span><span class="p">.</span><span class="nx">count</span><span class="p">,</span><span class="nx">store</span><span class="p">.</span><span class="nx">size</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">_cat</span><span class="o">/</span><span class="nx">thread_pool</span><span class="o">/</span><span class="nx">search_throttled</span><span class="o">?</span><span class="nx">v</span><span class="o">&amp;</span><span class="nx">h</span><span class="o">=</span><span class="nx">node_name</span><span class="p">,</span><span class="nx">name</span><span class="p">,</span><span class="nx">active</span><span class="p">,</span><span class="nx">rejected</span><span class="p">,</span><span class="nx">queue</span><span class="p">,</span><span class="nx">completed</span><span class="o">&amp;</span><span class="nx">s</span><span class="o">=</span><span class="nx">node_name</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_search</span><span class="o">?</span><span class="nx">ignore_throttled</span><span class="o">=</span><span class="kc">false</span><span class="o">&amp;</span><span class="nx">pre_filter_shard_size</span><span class="o">=</span><span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_doc</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;name&#34;</span><span class="o">:</span> <span class="s2">&#34;Daliya&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
<p>Adding new records will fail as long as the index is frozen. This is how to check and change it:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_settings</span><span class="o">?</span><span class="nx">flat_settings</span><span class="o">=</span><span class="kc">true</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_unfreeze</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_doc</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="s2">&#34;name&#34;</span><span class="o">:</span> <span class="s2">&#34;Daliya&#34;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">frozen</span><span class="o">/</span><span class="nx">_search</span></span></span></code></pre></div>
<p>Coming back to the flight demo set we can check this on a larger scale. First, we look at the dashboard for that and see that we need to enable querying of frozen indices there as well under Advanced Settings (<code>/app/kibana#/management/kibana/settings/?_g=()</code>) called <code>Search in frozen indices</code>. Then we look at the thread staticstics and how the dedicated thread pool is at work:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-js" data-lang="js"><span class="line"><span class="cl"><span class="nx">POST</span> <span class="nx">kibana_sample_data_flights</span><span class="o">/</span><span class="nx">_freeze</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">GET</span> <span class="nx">_cat</span><span class="o">/</span><span class="nx">thread_pool</span><span class="o">/</span><span class="nx">search_throttled</span><span class="o">?</span><span class="nx">v</span><span class="o">&amp;</span><span class="nx">h</span><span class="o">=</span><span class="nx">node_name</span><span class="p">,</span><span class="nx">name</span><span class="p">,</span><span class="nx">active</span><span class="p">,</span><span class="nx">rejected</span><span class="p">,</span><span class="nx">queue</span><span class="p">,</span><span class="nx">completed</span><span class="o">&amp;</span><span class="nx">s</span><span class="o">=</span><span class="nx">node_name</span></span></span></code></pre></div>
<p>Additional details in the <a href="https://www.elastic.co/blog/creating-frozen-indices-with-the-elasticsearch-freeze-index-api">related blog post</a>.</p>
<p>In addition, real-memory circuit breakers have landed and you can find more details than in the slides in the <a href="https://www.elastic.co/blog/improving-node-resiliency-with-the-real-memory-circuit-breaker">relevant blog post</a>.</p>
<h2 id="kibana">Kibana <a href="#kibana">&#35;</a></h2>
<p>The new look of Kibana is driven by the <a href="https://github.com/elastic/eui">Elastic UI Framework</a> while the de-Angularization is still in progress. While this is great for reuse, note the warning in the repository:</p>
<blockquote>
<p>🚨 While open source, the intended consumers of this repository are Elastic products. Read the FAQ for details.</p>
</blockquote>

      ]]></description></item><item><title>Scale Your Metrics with Elasticsearch</title><link>https://xeraa.net/talks/scale-metrics-elasticsearch/</link><pubDate>Wed, 08 May 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/scale-metrics-elasticsearch/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/scale-metrics-elasticsearch/title.png"/>
        <p>Tags: <strong>elasticsearch, scale, metrics, talk</strong></p>
        <p>&ldquo;Only accept features that scale&rdquo; is one of Elasticsearch&rsquo;s engineering principles. So how do we scale metrics stored in Elasticsearch? And is that even possible on a full-text search engine?</p>
<p>This talk explores:</p>
<ul>
<li>How are <strong>metrics stored</strong> in Elasticsearch? And how does this translate to disk use as well as query performance?</li>
<li>What does an efficient, <strong>multi-tier architecture</strong> look like that balances speed for today&rsquo;s data against density for older one?</li>
<li>How can you <strong>compress metrics</strong> and what does the mathematical model look like for that?</li>
</ul>
<p><strong>Demo:</strong> We are trying this hands-on during the talk since this has become much simpler recently. Follow along in the <a href="https://github.com/xeraa/scale-elasticsearch">GitHub project</a>.</p>

      ]]></description></item><item><title>Official Docker Images — Lessons Learned</title><link>https://xeraa.net/talks/official-docker-images-lessons-learned/</link><pubDate>Fri, 06 Sep 2019 00:00:00 +0000</pubDate><author>Philipp Krenn</author><guid>https://xeraa.net/talks/official-docker-images-lessons-learned/</guid><description><![CDATA[<img alt="First slide" src="https://xeraa.net/talks/official-docker-images-lessons-learned/title.png"/>
        <p>Tags: <strong>docker, image, experience, talk</strong></p>
        <p>If you want to be taken seriously, you need to provide containers to your users. It&rsquo;s easy — everybody is uploading containers to Docker Hub, right? Unfortunately, reality is never as easy as it sounds at first. This talk gives an overview of Elastic&rsquo;s ongoing journey to providing official Docker images:</p>
<ul>
<li>Docker Hub: What &ldquo;official&rdquo; really means and why we are using our own registry.</li>
<li>Base image: Just use Alpine — it is small and the perfect fit for containers. We tried that and reconsidered&hellip;</li>
<li>Release policy: What do you actually get in a specific tag and how are we releasing our images?</li>
<li>Support: Combine two complex systems like Elasticsearch and Docker — and you will get a lot of questions.</li>
<li>Orchestration: Our current approach for orchestration and how we are treating feature requests.</li>
</ul>

      ]]></description></item></channel></rss>