<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pierre Besson</title>
    <description>The latest articles on DEV Community by Pierre Besson (@pierrebesson).</description>
    <link>https://dev.to/pierrebesson</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F327800%2F0929a9d5-7b1c-478a-ba9f-b899addb4c85.jpeg</url>
      <title>DEV Community: Pierre Besson</title>
      <link>https://dev.to/pierrebesson</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pierrebesson"/>
    <language>en</language>
    <item>
      <title>The missing guide to Scalyr - the cheap and efficient log aggregation service</title>
      <dc:creator>Pierre Besson</dc:creator>
      <pubDate>Sun, 22 Mar 2020 11:00:00 +0000</pubDate>
      <link>https://dev.to/pierrebesson/the-missing-guide-to-scalyr-the-cheap-and-efficient-log-aggregation-service-pb7</link>
      <guid>https://dev.to/pierrebesson/the-missing-guide-to-scalyr-the-cheap-and-efficient-log-aggregation-service-pb7</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_Xc6mYYO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pierre-besson.fr/images/covers/wood-1866642_1280.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Xc6mYYO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pierre-besson.fr/images/covers/wood-1866642_1280.jpg" alt="Log aggregation in the real world..."&gt;&lt;/a&gt; Obligatory picture of log aggregation… in the real world ! (Image by &lt;a href="https://pixabay.com/users/Pexels-2286921/?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=1866642"&gt;Pexels&lt;/a&gt; from &lt;a href="https://pixabay.com/?utm_source=link-attribution&amp;amp;utm_medium=referral&amp;amp;utm_campaign=image&amp;amp;utm_content=1866642"&gt;Pixabay&lt;/a&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Introducing Scalyr&lt;/li&gt;
&lt;li&gt;
Configuring log reporting for common use cases

&lt;ul&gt;
&lt;li&gt;Traditional server setup&lt;/li&gt;
&lt;li&gt;Docker-compose setup&lt;/li&gt;
&lt;li&gt;Kubernetes setup&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
Understanding how to efficiently use Scalyr UI

&lt;ul&gt;
&lt;li&gt;Viewing and searching logs&lt;/li&gt;
&lt;li&gt;Setting up a simple parser for Java applications&lt;/li&gt;
&lt;li&gt;How to monitor the volume of logs&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Introducing Scalyr
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.scalyr.com/product"&gt;Scalyr&lt;/a&gt; is a little known log aggregation service offered as a SaaS. It can be compared to ELK or other log management solutions (Splunk, Papertrail, Datadog logs). It does offer fewer features and reduced full-text search capabilities but it focuses instead on being cheap, easy to set up and fast to use.&lt;/p&gt;

&lt;p&gt;As of March 2020, the pricing of Scalyr is extremely interesting for small projects starting at &lt;strong&gt;35$ / month for 1GB / day of logs&lt;/strong&gt;. Moreover, Scalyr offers powerful tools to monitor the volume of logs you use and to keep your usage below the planned amount and prevent surcharge. When in need of scaling the volume of logs your applications produce, the pricing structure of Scalyr is set up such that the price you pay will increase linearly, ie. &lt;strong&gt;35$ / month for 1GB / day&lt;/strong&gt; then &lt;strong&gt;70$ / month for 2GB / day&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;All these considerations make Scalyr a compelling solution for log aggregation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Configuring log reporting for common use cases
&lt;/h2&gt;

&lt;p&gt;Let’s now see how to easily set up Scalyr in common scenarios. Please note that I’m using the Scalyr European server (&lt;em&gt;&lt;a href="https://upload.eu.scalyr.com"&gt;https://upload.eu.scalyr.com&lt;/a&gt;&lt;/em&gt;) in my examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Traditional server setup
&lt;/h3&gt;

&lt;p&gt;To install Scalyr on Linux machines, use the installer from the &lt;a href="https://www.scalyr.com/help/install-agent-linux-quick-start-1"&gt;official instructions&lt;/a&gt;. Then configure the agent in &lt;code&gt;/etc/scalyr-agent-2/agent.json&lt;/code&gt; as follows :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Configuration&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Scalyr&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Agent.&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;https://www.scalyr.com/help/scalyr-agent&lt;/span&gt;&lt;span class="mi"&gt;-2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;scalyr_server:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://upload.eu.scalyr.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;api_key:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;write_api_key&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="err"&gt;server_attributes:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;serverHost:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;server_name&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;env:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;environment_name&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;You&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;can&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;add&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;whatever&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;additional&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;fields&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;want&lt;/span&gt;&lt;span class="w"&gt;
       &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;set&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;metatadata&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;to&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;your&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;logs&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Disable&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;metrics&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;collection&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;as&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;it&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;will&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;increase&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;the&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;volume&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;of&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;logs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;you&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;pay&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;for&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;implicit_metric_monitor:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="err"&gt;implicit_agent_process_metrics_monitor:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="err"&gt;logs:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; 
            &lt;/span&gt;&lt;span class="err"&gt;path:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/path/to/file.log"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="err"&gt;rename_logfile:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;log_file_name&amp;gt;"&lt;/span&gt;&lt;span class="w"&gt;
            &lt;/span&gt;&lt;span class="err"&gt;attributes:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="err"&gt;parser:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"&amp;lt;parser_name&amp;gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="err"&gt;monitors:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Key&lt;/th&gt;
&lt;th&gt;Explanation&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;write_api_key&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;API key that can be created in Scalyr administration UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;serverHost_name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Metadata used in Scalyr query UI to locate the server your log originated from&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;logfile_name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Metadata used in Scalyr query UI to locate the logfile your log originated from&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;parser_name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The log parser to use, those can be defined in Scalyr administration UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;&amp;lt;environment_name&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Custom metadata that I use to index logs coming from different environments&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Docker-compose setup
&lt;/h3&gt;

&lt;p&gt;If you use docker-compose to orchestrate docker containers on a single host, the &lt;strong&gt;scalyr agent&lt;/strong&gt; is able to plug into the docker logging driver and forward the logs to Scalyr servers. To make it work, make sure to bind mount the docker socket and container volumes to the agent container as shown below so that it can access the relevant information from the docker daemon.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;3'&lt;/span&gt;

&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;hello-world&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;hello-world&lt;/span&gt;
    &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;com.scalyr.config.log.parser=&amp;lt;parser_name&amp;gt;"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;com.scalyr.config.log.serverAttributes.serverHost=&amp;lt;server_name&amp;gt;"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;com.scalyr.config.log.attributes.serverHost=&amp;lt;server_name&amp;gt;"&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;com.scalyr.config.log.attributes.env=&amp;lt;environment_name&amp;gt;"&lt;/span&gt;

  &lt;span class="na"&gt;scalyr-agent&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scalyr/scalyr-agent-docker-json:2.0.53&lt;/span&gt;
    &lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;SCALYR_SERVER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://upload.eu.scalyr.com"&lt;/span&gt;
      &lt;span class="na"&gt;SCALYR_API_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;write_api_key&amp;gt;"&lt;/span&gt;
      &lt;span class="na"&gt;SCALYR_LABELS_AS_ATTRIBUTES&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true"&lt;/span&gt;
      &lt;span class="na"&gt;SCALYR_IMPLICIT_METRIC_MONITOR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;false"&lt;/span&gt;
      &lt;span class="na"&gt;SCALYR_IMPLICIT_AGENT_PROCESS_METRICS_MONITOR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;false"&lt;/span&gt;
      &lt;span class="na"&gt;SCALYR_REPORT_CONTAINER_METRICS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;false"&lt;/span&gt;
      &lt;span class="s"&gt;// Environment variables configuration for the Scalyr Agent&lt;/span&gt;
      &lt;span class="s"&gt;// https://app.scalyr.com/help/scalyr-agent-env-aware&lt;/span&gt;
    &lt;span class="na"&gt;volumes&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/var/run/docker.sock:/var/scalyr/docker.sock&lt;/span&gt; 
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;/var/lib/docker/containers:/var/lib/docker/containers&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Note that this setup can work for any docker containers running on the host as long as you set the correct docker labels on the container, for example by using the &lt;code&gt;-l&lt;/code&gt;/&lt;code&gt;--label&lt;/code&gt; flag of the &lt;code&gt;docker container run&lt;/code&gt; command.&lt;/p&gt;

&lt;h3&gt;
  
  
  Kubernetes setup
&lt;/h3&gt;

&lt;p&gt;One of the areas where Scalyr shines the most is its ability to &lt;strong&gt;automatically capture logs&lt;/strong&gt; from applications running in a Kubernetes cluster by running an agent on all Kubernetes nodes through a &lt;strong&gt;DaemonSet&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Sadly, Scalyr does not yet offer an official Helm chart, so I suggest that you create one yourself based on the YAML configuration present in the &lt;a href="https://app.scalyr.com/help/install-agent-kubernetes"&gt;Scalyr Kubernetes installation documentation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here is the configuration you need (as of March 2020).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;scaly-agent-secret.yaml&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Secret&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scalyr-api-key&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scalyr-agent&lt;/span&gt;
&lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Opaque&lt;/span&gt;
&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;scalyr-api-key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;base64_encoded_scalyr_api_key&amp;gt;&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;em&gt;scaly-agent-configmap.yaml&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are the configuration settings that should produce the minimum volume of logs (but be aware that it will also disable a number of built-in dashboards). For more information, please refer to the &lt;a href="https://app.scalyr.com/help/scalyr-agent-k8s"&gt;Scalyr Kubernetes agent documentation&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ConfigMap&lt;/span&gt;
&lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;SCALYR_K8S_CLUSTER_NAME&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;&amp;lt;cluster_name&amp;gt;&lt;/span&gt;
  &lt;span class="na"&gt;SCALYR_SERVER&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://upload.eu.scalyr.com"&lt;/span&gt;
  &lt;span class="na"&gt;SCALYR_IMPLICIT_AGENT_LOG_COLLECTION&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;true&lt;/span&gt;
  &lt;span class="na"&gt;SCALYR_IMPLICIT_AGENT_PROCESS_METRICS_MONITOR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;SCALYR_IMPLICIT_METRICS_MONITOR&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;SCALYR_REPORT_CONTAINER_METRICS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;SCALYR_REPORT_K8S_METRICS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;SCALYR_K8S_EVENTS_DISABLE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;SCALYR_K8S_INCLUDE_ALL_CONTAINERS&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="no"&gt;false&lt;/span&gt;
  &lt;span class="na"&gt;SCALYR_K8S_EVENTS_DISABLE&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true"&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;scalyr-config&lt;/span&gt;
  &lt;span class="na"&gt;namespace&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;default&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;scalyr-agent-service-account.yaml&lt;/em&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Download the file from Scalyr github’s &lt;a href="https://raw.githubusercontent.com/scalyr/scalyr-agent-2/release/k8s/scalyr-service-account.yaml"&gt;scalyr-service-account.yaml&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;scalyr-agent-daemonset.yaml&lt;/em&gt;:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Download the file from Scalyr github’s &lt;a href="https://raw.githubusercontent.com/scalyr/scalyr-agent-2/release/k8s/scalyr-agent-2-envfrom.yaml"&gt;scalyr-agent-2-envfrom.yaml&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then you will need to add the following to the Kubernetes deployments for which you want to configure log reporting to Scalyr:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
   &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;log.config.scalyr.com/include"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true"&lt;/span&gt;
      &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;log.config.scalyr.com/attributes.parser"&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;parser_name&amp;gt;"&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  Understanding how to efficiently use Scalyr UI
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Viewing and searching logs
&lt;/h3&gt;

&lt;p&gt;When viewing logs in Scalyr UI, the first thing you need to check is the &lt;strong&gt;time picker&lt;/strong&gt;. It will let you choose the time range for which to view logs. It is very easy for beginners to forgot to use it so take some time to learn to use it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e2oiYIAi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pierre-besson.fr/images/scalyr/scalyr-1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e2oiYIAi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pierre-besson.fr/images/scalyr/scalyr-1.png" alt="Scalyr Time Picker" title="Scalyr Time Picker"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next thing you need to learn about Scalyr UI is the two very confusing drop-down boxes on the left. Be careful they do not do what you think they do! Naively you might think that those help you locate logs by cluster and application respectively but that’s not always true depending on your configuration. What those two boxes actually do is provide a shortcut for running a simple filter on the following fields:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;First box&lt;/th&gt;
&lt;th&gt;Second Box&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Server agent&lt;/td&gt;
&lt;td&gt;serverHost (as defined in agent.json)&lt;/td&gt;
&lt;td&gt;logfile (as defined in agent.json)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Docker agent&lt;/td&gt;
&lt;td&gt;serverHost (docker container id)&lt;/td&gt;
&lt;td&gt;logfile (&lt;code&gt;/docker/&amp;lt;user&amp;gt;_&amp;lt;docker_container_name&amp;gt;.log&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Kubernetes agent&lt;/td&gt;
&lt;td&gt;k8s-cluster&lt;/td&gt;
&lt;td&gt;k8s-deployment&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3RPnMIM---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pierre-besson.fr/images/scalyr/scalyr-2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3RPnMIM---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pierre-besson.fr/images/scalyr/scalyr-2.png" alt='Scalyr "Magic Boxes"' title="Scalyr 'Magic Boxes'"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have noticed a lot of confusion among our developers regarding those two magic boxes, especially on advanced setups combining different Scalyr deployment types. So I hope this explanation will be helpful for you and that Scalyr will improve their UX in the future to clear the confusion.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FcDv7fLh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pierre-besson.fr/images/scalyr/scalyr-3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FcDv7fLh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pierre-besson.fr/images/scalyr/scalyr-3.png" alt="Scalyr Query Interface" title="Scalyr Query Interface"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, you can use the section on the left to filter by field. Note that it is also possible to search with arbitrary text in the query bar but it does not always give good results so in my experience you should always filter using &lt;strong&gt;explicit fields&lt;/strong&gt; and eventually add wildcards (&lt;code&gt;*&lt;/code&gt; characters) in your queries.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setting up a simple parser for Java applications
&lt;/h3&gt;

&lt;p&gt;As an example, here is a simple Scalyr parser for a Java application. Note the use of a &lt;strong&gt;line grouper&lt;/strong&gt; which is used to group the stack trace and the preceding log together.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;lineGroupers:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;start:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^[^&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;s]"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;continueThrough:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"^[&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;s]+at"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;formats:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;id:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"java-logs"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="err"&gt;format:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"$date$ $time$ $severity$ &lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;[$className$&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;] $message_content$"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The keywords: &lt;strong&gt;date&lt;/strong&gt;, &lt;strong&gt;time&lt;/strong&gt; and &lt;strong&gt;severity&lt;/strong&gt; are actually Scalyr specific and will help your logs to be correctly indexed. The &lt;strong&gt;severity&lt;/strong&gt; keyword actually corresponds to what we call &lt;strong&gt;“log levels”&lt;/strong&gt; in the Java world and we have the following correspondence table:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Java log level&lt;/th&gt;
&lt;th&gt;Scalyr severity&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;TRACE&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DEBUG&lt;/td&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;INFO&lt;/td&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WARN&lt;/td&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ERROR&lt;/td&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FATAL&lt;/td&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This classification is actually very useful as it lets you run queries such as :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;$severity == 5&lt;/code&gt; : Show only ERROR logs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$severity != 1&lt;/code&gt; : Don’t show TRACE logs&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;$severity &amp;gt;= 3&lt;/code&gt; : Show logs of levels INFO and above&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  How to monitor the volume of logs
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Billing plan&lt;/strong&gt; administration page has everything you need to monitor the volume of logs received by Scalyr and to graphically set up email alerts. Recently they even added a &lt;strong&gt;Discard filter&lt;/strong&gt; option which allows dropping logs following a certain pattern to manage the sudden spikes of &lt;em&gt;“polluting” logs&lt;/em&gt; directly from the Scalyr console.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This post is an overview of everything you need to get started with log aggregation using Scalyr, however it falls short of more advanced subjects for which I will leave you to the official documentation if you want to learn more.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://app.scalyr.com/help/alerts"&gt;Setting up alerts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://app.scalyr.com/help/graphs"&gt;Creating graphs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://app.scalyr.com/help/dashboards"&gt;Building dashboard&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>scalyr</category>
      <category>logs</category>
      <category>aggregation</category>
      <category>cheap</category>
    </item>
  </channel>
</rss>
