安装 ELK Stack 并使用 Filebeat 设置 Spring Boot 日志

发布: (2025年12月22日 GMT+8 09:26)
5 min read
原文: Dev.to

Source: Dev.to

请提供您希望翻译的完整文本(除代码块和 URL 之外的内容),我将把它翻译成简体中文并保持原有的 Markdown 格式。谢谢!

准备你的系统

sudo apt update && sudo apt upgrade -y
sudo apt install apt-transport-https wget curl gnupg -y

添加 Elastic 仓库

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | \
  sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] \
https://artifacts.elastic.co/packages/8.x/apt stable main" | \
  sudo tee /etc/apt/sources.list.d/elastic-8.x.list

sudo apt update

安装 ELK Stack

Elasticsearch

sudo apt install elasticsearch -y
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

检查它是否正在运行:

curl -k https://localhost:9200

Kibana

sudo apt install kibana -y
sudo systemctl enable kibana
sudo systemctl start kibana

编辑 Kibana 配置以允许外部访问:

sudo nano /etc/kibana/kibana.yml
# change (or add) the line:
# server.host: "0.0.0.0"

打开所需端口并访问 UI:

sudo ufw allow 5601

在浏览器中访问 http://YOUR_SERVER_IP:5601

Kibana 与 Elasticsearch 配置

  1. 为 Kibana 生成注册令牌

    sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
  2. 获取 Kibana 验证码

    sudo /usr/share/kibana/bin/kibana-verification-code
  3. 重置 elastic 用户密码

    sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

Logstash

sudo apt install logstash -y
sudo systemctl enable logstash
sudo systemctl start logstash

如何将 Spring Boot 日志发送到 Logstash

工作流程

  1. Spring Boot 将日志写入文件(Logback)。
  2. Filebeat 读取日志文件。
  3. Filebeat 将日志转发到 Logstash(或直接转发到 Elasticsearch)。
  4. Logstash(可选)解析日志。
  5. Elasticsearch 存储日志。
  6. Kibana 可视化日志。

配置 Spring Boot Logback

src/main/resources/ 下创建 logback-spring.xml

    
    

    
        
            %d{HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n
        
    

    
        ${LOG_DIR}/${APP_NAME}-app.log
        
            ${LOG_DIR}/${APP_NAME}.%d{yyyy-MM-dd}.gz
            30
        
        
            %d{yyyy-MM-dd HH:mm:ss} %-5level [%thread] %logger{36} - %msg%n
        
    

    
        
        
    

在开发机器和运行 JAR 的虚拟机上创建日志目录:

sudo mkdir -p /var/log/taxes-backend
sudo chmod 777 /var/log/taxes-backend   # 根据需要调整权限

安装并配置 Filebeat

sudo apt install filebeat -y

编辑 Filebeat 配置文件:

sudo nano /etc/filebeat/filebeat.yml

添加(或修改)输入部分,使其指向你的 Spring Boot 日志文件:

# ============================== Filebeat inputs ===============================

filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/taxes-backend/taxes-backend-app.log

(根据需要继续编辑 filebeat.yml 的其余部分,例如输出到 Logstash。)

下一步

  1. Configure Logstash pipelines 用于解析传入的日志(例如,使用 Grok)。
  2. Set up Filebeat output 指向 Logstash(output.logstash: 部分)。
  3. Create Kibana dashboards 用于可视化你的 Spring Boot 日志。

现在,你已经拥有一个功能完整的 ELK 堆栈,Spring Boot 日志通过 Filebeat → Logstash → Elasticsearch → Kibana 进行传输。祝日志记录愉快!

Source:

Filebeat 与 Logstash 配置指南

1. Filebeat 配置 (filebeat.yml)

# Set to true to enable config reloading
reload.enabled: false

# ======================= Elasticsearch template setting =======================
setup.template.settings:
  index.number_of_shards: 1

# =================================== Kibana ================================
setup.kibana:

# ------------------------------ Logstash Output ----------------------------
output.logstash:
  hosts: ["localhost:5044"]

# ================================= Processors ==============================
processors:
  - add_host_metadata:
      when.not.contains.tags: forwarded
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - add_kubernetes_metadata: ~

localhost:5044 条目告诉 Filebeat 将日志发送到哪里(Logstash 或 Elasticsearch)。

启动 Filebeat

sudo systemctl enable filebeat
sudo systemctl restart filebeat
sudo systemctl status filebeat

2. 配置 Logstash Pipeline

创建 Logstash 配置文件,例如 springboot-logstash.conf

sudo nano /etc/logstash/conf.d/springboot.conf

编辑配置文件

input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} \[%{DATA:thread}\] %{DATA:logger} - %{GREEDYDATA:msg}" }
  }

  date {
    match => ["timestamp", "yyyy-MM-dd HH:mm:ss"]
    timezone => "UTC"
  }

  mutate {
    remove_field => ["timestamp"]
  }
}

output {
  elasticsearch {
    hosts => ["https://localhost:9200"]
    user => "elastic"
    password => "ENTER_YOUR_ELASTIC_PASSWORD"
    ssl_verification_mode => "none"
    index => "springboot-%{+YYYY.MM.dd}"
  }
}

测试 Logstash 配置语法

sudo /usr/share/logstash/bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/springboot.conf

启动 Logstash

sudo systemctl restart logstash

验证索引是否创建

curl -k -u elastic:ENTER_YOUR_ELASTIC_PASSWORD "https://localhost:9200/_cat/indices?v"

3. 在 Kibana 中查看日志

  1. 打开 Kibana。
  2. 进入 Stack ManagementIndex Patterns
  3. 创建与日志匹配的索引模式(例如 springboot-logs-*)。
  4. 前往 Discover 查看已导入的日志。
  5. 构建仪表板,以可视化日志级别、服务、错误等信息。

ENTER_YOUR_ELASTIC_PASSWORD 替换为您为 elastic 用户设置的密码。

Back to Blog

相关文章

阅读更多 »