☰
RockyLinux 9.6下ELK 7.17.10日志收集系统部署指南
2026/11/5 4:25:19 网站建设 项目流程

1. 日志收集方案整体设计

在RockyLinux 9.6环境下,我们需要构建一套完整的日志收集系统,用于处理Docker Compose部署的SpringBoot2+Vue3应用产生的各类日志。ELK 7.17.10版本作为成熟的日志解决方案,其组件兼容性和稳定性已经过长期验证。

1.1 技术栈选型考量

选择ELK 7.17.10版本主要基于以下考虑:

  • 与RockyLinux 9.6的内核版本(5.14.0-362)完美兼容
  • 对Java应用日志的解析支持成熟(SpringBoot2采用Logback默认配置)
  • 对前端Vue3的console日志收集有现成的Filebeat模块
  • 版本稳定性经过企业级验证,避免了最新版可能存在的兼容性问题

日志收集路径设计:

SpringBoot2应用日志 → Docker日志驱动 → Filebeat → Logstash Vue3前端日志 → Nginx访问日志 → Filebeat → Logstash 系统组件日志 → Journald → Filebeat → Logstash

1.2 环境准备清单

硬件建议配置:

  • 测试环境:4核CPU/8GB内存/100GB SSD(单节点部署所有组件)
  • 生产环境:建议3节点集群(8核CPU/16GB内存/500GB SSD ×3)

软件依赖:

  • RockyLinux 9.6基础系统(最小化安装)
  • Docker CE 24.0+(含Compose插件)
  • JDK11(SpringBoot2运行依赖)
  • Node.js 16+(Vue3构建依赖)

2. ELK组件部署与配置

2.1 Elasticsearch部署优化

docker-compose.yml关键配置片段:

services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.17.10 environment: - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms4g -Xmx4g" ulimits: memlock: soft: -1 hard: -1 volumes: - es_data:/usr/share/elasticsearch/data ports: - "9200:9200"

重要参数说明:

  • discovery.type=single-node:单节点模式简化部署
  • -Xms4g -Xmx4g:JVM堆内存设置为物理内存的50%
  • memlock:禁用内存交换以保证性能

注意:生产环境务必配置vm.max_map_count=262144内核参数,通过sysctl -w vm.max_map_count=262144设置

2.2 Logstash管道配置

处理SpringBoot日志的logstash.conf核心配置:

input { beats { port => 5044 } } filter { # 处理SpringBoot JSON日志 if [fields][log_type] == "springboot" { json { source => "message" target => "log_content" } date { match => ["log_content.timestamp", "ISO8601"] target => "@timestamp" } } # 处理Vue前端日志 if [fields][log_type] == "frontend" { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}" } } } } output { elasticsearch { hosts => ["elasticsearch:9200"] index => "%{[fields][log_source]}-%{+YYYY.MM.dd}" } }

2.3 Kibana可视化配置

建议创建的初始仪表板:

  1. 应用错误看板:过滤SpringBoot日志中ERROR级别记录
  2. 前端性能看板:统计Vue应用页面加载时间
  3. 系统健康看板:监控容器CPU/内存使用情况

关键索引模式命名规范:

  • springboot-*:后端应用日志
  • frontend-*:前端访问日志
  • infra-*:基础设施日志

3. 日志收集实现细节

3.1 SpringBoot日志收集方案

SpringBoot的logback-spring.xml配置示例:

<configuration> <appender name="JSON" class="ch.qos.logback.core.ConsoleAppender"> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <customFields>{"app":"${APP_NAME}","env":"${SPRING_PROFILES_ACTIVE}"}</customFields> </encoder> </appender> <root level="INFO"> <appender-ref ref="JSON" /> </root> </configuration>

对应的Filebeat配置:

- type: container paths: - '/var/lib/docker/containers/*/*.log' processors: - add_docker_metadata: ~ - decode_json_fields: fields: ["message"] target: "" - add_fields: fields: log_type: springboot log_source: my-springboot-app

3.2 Vue3日志收集方案

前端日志收集需要两步处理:

  1. Nginx配置增加日志格式化:
log_format json_combined escape=json '{' '"time_local":"$time_local",' '"remote_addr":"$remote_addr",' '"request":"$request",' '"status":$status,' '"body_bytes_sent":$body_bytes_sent,' '"http_referer":"$http_referer",' '"http_user_agent":"$http_user_agent",' '"http_x_forwarded_for":"$http_x_forwarded_for",' '"request_time":$request_time' '}'; access_log /var/log/nginx/access.log json_combined;
  1. Filebeat配置处理:
- type: log paths: - '/var/log/nginx/access.log' json.keys_under_root: true json.add_error_key: true processors: - timestamp: field: time_local layouts: - '02/Jan/2006:15:04:05 -0700' test: - '30/Apr/2023:13:45:28 +0800' - add_fields: fields: log_type: frontend log_source: my-vue-app

4. 运维监控与问题排查

4.1 常见问题速查表

问题现象可能原因解决方案
Filebeat无法连接Logstash防火墙阻止5044端口firewall-cmd --add-port=5044/tcp --permanent
Elasticsearch堆内存溢出JVM配置不合理调整ES_JAVA_OPTS为物理内存的50%
日志时间戳错误时区配置不一致所有容器统一设置TZ=Asia/Shanghai
Kibana无法创建索引模式索引未正确生成检查Logstash的output配置

4.2 性能监控指标

建议通过Prometheus收集的关键指标:

  1. Elasticsearch:
    • jvm_memory_usage:JVM内存使用率
    • indices_search_query_time_seconds:查询延迟
  2. Logstash:
    • pipeline_events_duration:事件处理耗时
    • pipeline_queue_size:积压事件数
  3. 系统层面:
    • 容器CPU使用率(通过cAdvisor采集)
    • 磁盘IOPS(特别是ES数据目录所在磁盘)

4.3 日志保留策略

通过Elasticsearch ILM(Index Lifecycle Management)设置:

PUT _ilm/policy/log_retention_policy { "policy": { "phases": { "hot": { "actions": { "rollover": { "max_size": "50GB", "max_age": "7d" } } }, "delete": { "min_age": "30d", "actions": { "delete": {} } } } } }

5. 安全加固措施

5.1 网络访问控制

建议的防火墙规则:

# 只允许内网IP访问ELK端口 firewall-cmd --permanent --zone=public --add-rich-rule=' rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="9200" accept'

5.2 Elasticsearch安全配置

启用基础认证的elasticsearch.yml配置:

xpack.security.enabled: true xpack.security.authc: anonymous: roles: anonymous authz_exception: false

创建用户命令示例:

bin/elasticsearch-users useradd log_viewer -p securepassword -r kibana_user

5.3 日志脱敏处理

在Logstash中配置敏感字段过滤:

filter { mutate { gsub => [ "message", "(password|token|auth)=[^&]*", "\1=[REDACTED]", "message", "\b\d{4}[ -]?\d{4}[ -]?\d{4}\b", "[CREDIT_CARD]" ] } }

6. 部署验证与调优

6.1 验证步骤清单

  1. 日志采集验证:

    # 查看Filebeat采集状态 journalctl -u filebeat --no-pager -n 50 # 检查Elasticsearch索引 curl -u elastic:password http://localhost:9200/_cat/indices?v
  2. 管道处理验证:

    # 测试Logstash配置 /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/ --config.test_and_exit # 查看处理错误 tail -f /var/log/logstash/logstash-plain.log
  3. 可视化验证:

    • 登录Kibana检查Discover页面是否有数据
    • 验证仪表板各图表数据准确性

6.2 性能调优参数

Filebeat优化参数(filebeat.yml):

queue.mem: events: 4096 flush.min_events: 512 flush.timeout: 5s output.logstash: worker: 4 bulk_max_size: 2048

Logstash JVM调优(jvm.options):

-Xms2g -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=100

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询