<?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: Firman</title>
    <description>The latest articles on DEV Community by Firman (@mfirmanakbar).</description>
    <link>https://dev.to/mfirmanakbar</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%2F215955%2F4d88d6a1-a514-4ec6-8529-295fb5a5af62.JPG</url>
      <title>DEV Community: Firman</title>
      <link>https://dev.to/mfirmanakbar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mfirmanakbar"/>
    <language>en</language>
    <item>
      <title>Install ELK Stack &amp; Setup Spring Boot Logging with Filebeat</title>
      <dc:creator>Firman</dc:creator>
      <pubDate>Mon, 22 Dec 2025 01:26:03 +0000</pubDate>
      <link>https://dev.to/mfirmanakbar/install-elk-stack-setup-spring-boot-logging-with-filebeat-114i</link>
      <guid>https://dev.to/mfirmanakbar/install-elk-stack-setup-spring-boot-logging-with-filebeat-114i</guid>
      <description>&lt;p&gt;In this guide, I will show you how to install ELK stack (Elasticsearch, Logstash, Kibana) and send logs from a Spring Boot app using Logback and Filebeat.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe5egi5pkx0n7dx8bes9i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe5egi5pkx0n7dx8bes9i.png" alt="blek" width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Prepare Your System
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;sudo &lt;/span&gt;apt upgrade &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;apt-transport-https wget curl gnupg &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add the Elastic repository:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;wget &lt;span class="nt"&gt;-qO&lt;/span&gt; - https://artifacts.elastic.co/GPG-KEY-elasticsearch | &lt;span class="nb"&gt;sudo &lt;/span&gt;gpg &lt;span class="nt"&gt;--dearmor&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; /usr/share/keyrings/elasticsearch-keyring.gpg
&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main"&lt;/span&gt; | &lt;span class="nb"&gt;sudo tee&lt;/span&gt; /etc/apt/sources.list.d/elastic-8.x.list
&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Install ELK Stack
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Elasticsearch
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;elasticsearch &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;elasticsearch
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start elasticsearch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -k https://localhost:9200
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Kibana
&lt;/h3&gt;

&lt;p&gt;Install and start Kibana, Kibana shows dashboards and visualizations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;kibana &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;kibana
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start kibana
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit the config to allow access from outside:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/kibana/kibana.yml
&lt;span class="c"&gt;# change: server.host: "0.0.0.0"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open port and access:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;ufw allow 5601
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then visit &lt;a href="http://YOUR_SERVER_IP:5601" rel="noopener noreferrer"&gt;http://YOUR_SERVER_IP:5601&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Config Elasctic &amp;amp; Kibana&lt;br&gt;
Open Kibana in your browser &lt;a href="http://YOUR_SERVER_IP:5601" rel="noopener noreferrer"&gt;http://YOUR_SERVER_IP:5601&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Find the Elastic token :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token &lt;span class="nt"&gt;-s&lt;/span&gt; kibana
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Find Kibana Verification Code :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/share/kibana/bin/kibana-verification-code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reset the password where username is &lt;code&gt;elastic&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Logstash
&lt;/h3&gt;

&lt;p&gt;Install and start Logstash. Logstash processes logs and sends them to Elasticsearch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;logstash &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;logstash
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl start logstash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How to send Spring Boot Logs to Logstash
&lt;/h3&gt;

&lt;p&gt;How it works:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Spring Boot writes logs to file using Logback&lt;/li&gt;
&lt;li&gt;Filebeat reads the log files&lt;/li&gt;
&lt;li&gt;Filebeat sends logs to Logstash (or directly to Elasticsearch)&lt;/li&gt;
&lt;li&gt;Logstash (optional) parses logs&lt;/li&gt;
&lt;li&gt;Elasticsearch stores logs&lt;/li&gt;
&lt;li&gt;Kibana displays logs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Configure Spring Boot Logback
&lt;/h3&gt;

&lt;p&gt;In your Spring Boot project, create logback-spring.xml in &lt;code&gt;src/main/resources/&lt;/code&gt;, here the Example simple config that makes your app write logs to a file that Filebeat can read.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&amp;lt;configuration &lt;span class="nv"&gt;scan&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"true"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

    &amp;lt;property &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"LOG_DIR"&lt;/span&gt; &lt;span class="nv"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/var/log/taxes-backend"&lt;/span&gt;/&amp;gt;
    &amp;lt;property &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"APP_NAME"&lt;/span&gt; &lt;span class="nv"&gt;value&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"taxes-backend"&lt;/span&gt;/&amp;gt;

    &amp;lt;appender &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"CONSOLE"&lt;/span&gt; &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ch.qos.logback.core.ConsoleAppender"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &amp;lt;encoder&amp;gt;
            &amp;lt;pattern&amp;gt;%d&lt;span class="o"&gt;{&lt;/span&gt;HH:mm:ss&lt;span class="o"&gt;}&lt;/span&gt; %-5level &lt;span class="o"&gt;[&lt;/span&gt;%thread] %logger&lt;span class="o"&gt;{&lt;/span&gt;36&lt;span class="o"&gt;}&lt;/span&gt; - %msg%n&amp;lt;/pattern&amp;gt;
        &amp;lt;/encoder&amp;gt;
    &amp;lt;/appender&amp;gt;

    &amp;lt;appender &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"FILE"&lt;/span&gt; &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ch.qos.logback.core.rolling.RollingFileAppender"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &amp;lt;file&amp;gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LOG_DIR&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;APP_NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="nt"&gt;-app&lt;/span&gt;.log&amp;lt;/file&amp;gt;
        &amp;lt;rollingPolicy &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"ch.qos.logback.core.rolling.TimeBasedRollingPolicy"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
            &amp;lt;fileNamePattern&amp;gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;LOG_DIR&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;APP_NAME&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;.%d&lt;span class="o"&gt;{&lt;/span&gt;yyyy-MM-dd&lt;span class="o"&gt;}&lt;/span&gt;.gz&amp;lt;/fileNamePattern&amp;gt;
            &amp;lt;maxHistory&amp;gt;30&amp;lt;/maxHistory&amp;gt;
        &amp;lt;/rollingPolicy&amp;gt;
        &amp;lt;encoder&amp;gt;
            &amp;lt;pattern&amp;gt;%d&lt;span class="o"&gt;{&lt;/span&gt;yyyy-MM-dd HH:mm:ss&lt;span class="o"&gt;}&lt;/span&gt; %-5level &lt;span class="o"&gt;[&lt;/span&gt;%thread] %logger&lt;span class="o"&gt;{&lt;/span&gt;36&lt;span class="o"&gt;}&lt;/span&gt; - %msg%n&amp;lt;/pattern&amp;gt;
        &amp;lt;/encoder&amp;gt;
    &amp;lt;/appender&amp;gt;

    &amp;lt;root &lt;span class="nv"&gt;level&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"INFO"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
        &amp;lt;appender-ref &lt;span class="nv"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"CONSOLE"&lt;/span&gt;/&amp;gt;
        &amp;lt;appender-ref &lt;span class="nv"&gt;ref&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"FILE"&lt;/span&gt;/&amp;gt;
    &amp;lt;/root&amp;gt;

&amp;lt;/configuration&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure the log directory is available on both your local machine and the VM server where your Spring Boot JAR is deployed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo mkdir -p /var/log/myapp
sudo chmod 777 /var/log/myapp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install and Configure Filebeat
&lt;/h3&gt;

&lt;p&gt;Install Filebeat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;filebeat &lt;span class="nt"&gt;-y&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open filebeat config file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/filebeat/filebeat.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit &lt;code&gt;filebeat.yml&lt;/code&gt;, set input to read your Spring Boot log file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ============================== Filebeat inputs ===============================&lt;/span&gt;

filebeat.inputs:
  - &lt;span class="nb"&gt;type&lt;/span&gt;: log
    enabled: &lt;span class="nb"&gt;true
    &lt;/span&gt;paths:
      - /var/log/taxes-backend/taxes-backend-app.log

&lt;span class="c"&gt;# ============================== Filebeat modules ==============================&lt;/span&gt;

filebeat.config.modules:
  &lt;span class="c"&gt;# Glob pattern for configuration loading&lt;/span&gt;
  path: &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.config&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;/modules.d/&lt;span class="k"&gt;*&lt;/span&gt;.yml

  &lt;span class="c"&gt;# Set to true to enable config reloading&lt;/span&gt;
  reload.enabled: &lt;span class="nb"&gt;false&lt;/span&gt;

&lt;span class="c"&gt;# ======================= Elasticsearch template setting =======================&lt;/span&gt;

setup.template.settings:
  index.number_of_shards: 1

&lt;span class="c"&gt;# =================================== Kibana ===================================&lt;/span&gt;

setup.kibana:

&lt;span class="c"&gt;# ------------------------------ Logstash Output -------------------------------&lt;/span&gt;

output.logstash:
  hosts: &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"localhost:5044"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;

&lt;span class="c"&gt;# ================================= Processors =================================&lt;/span&gt;
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This &lt;code&gt;localhost:5044&lt;/code&gt; to tell Filebeat where to send logs (Logstash or Elasticsearch).&lt;/p&gt;

&lt;p&gt;Start Filebeat and it will read your log files and forward them:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl &lt;span class="nb"&gt;enable &lt;/span&gt;filebeat
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart filebeat
&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl status filebeat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Configure Logstash Pipeline
&lt;/h3&gt;

&lt;p&gt;Create a Logstash config, e.g., springboot-logstash.conf:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;nano /etc/logstash/conf.d/springboot.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Edit the config file :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;input &lt;span class="o"&gt;{&lt;/span&gt;
  beats &lt;span class="o"&gt;{&lt;/span&gt;
    port &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 5044
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

filter &lt;span class="o"&gt;{&lt;/span&gt;
  grok &lt;span class="o"&gt;{&lt;/span&gt;
    match &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; &lt;span class="s2"&gt;"message"&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} &lt;/span&gt;&lt;span class="se"&gt;\[&lt;/span&gt;&lt;span class="s2"&gt;%{DATA:thread}&lt;/span&gt;&lt;span class="se"&gt;\]&lt;/span&gt;&lt;span class="s2"&gt; %{DATA:logger} - %{GREEDYDATA:msg}"&lt;/span&gt; &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

  &lt;span class="nb"&gt;date&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
    match &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"timestamp"&lt;/span&gt;, &lt;span class="s2"&gt;"yyyy-MM-dd HH:mm:ss"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    timezone &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"UTC"&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;

  mutate &lt;span class="o"&gt;{&lt;/span&gt;
    remove_field &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"timestamp"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

output &lt;span class="o"&gt;{&lt;/span&gt;
  elasticsearch &lt;span class="o"&gt;{&lt;/span&gt;
    hosts &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://localhost:9200"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;
    user &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"elastic"&lt;/span&gt;
    password &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"ENTER_YOUR_ELASTIC_PASSWORD"&lt;/span&gt;
    ssl_verification_mode &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"none"&lt;/span&gt;
    index &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"springboot-%{+YYYY.MM.dd}"&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Test the Logstash config syntax:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/share/logstash/bin/logstash &lt;span class="nt"&gt;--config&lt;/span&gt;.test_and_exit &lt;span class="nt"&gt;-f&lt;/span&gt; /etc/logstash/conf.d/springboot.conf
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Start Logstash and this receives logs from Filebeat and sends them to Elasticsearch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;systemctl restart logstash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run this test command and make sure an index like springboot-2025 should appear in Elasticsearch.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; elastic:ENTER_YOUR_ELASTIC_PASSWORD &lt;span class="s2"&gt;"https://localhost:9200/_cat/indices?v"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  View Logs in Kibana
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open Kibana: &lt;a href="http://YOUR_SERVER_IP:5601" rel="noopener noreferrer"&gt;http://YOUR_SERVER_IP:5601&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Go to Stack Management&lt;/li&gt;
&lt;li&gt;Create an Index Pattern that matches your logs (e.g., springboot-logs-*)&lt;/li&gt;
&lt;li&gt;Use Discover to see logs&lt;/li&gt;
&lt;li&gt;Build Dashboards to visualize log levels, services, errors, etc.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>springboot</category>
      <category>elk</category>
      <category>filebeat</category>
      <category>java</category>
    </item>
  </channel>
</rss>
