深入解析:ELK+Filebeat 集群详细部署文档(V7.8.1 版本

news/2026/1/17 9:59:08/文章来源:https://www.cnblogs.com/tlnshuju/p/19495251

深入解析:ELK+Filebeat 集群详细部署文档(V7.8.1 版本

2026-01-17 09:55  tlnshuju  阅读(0)  评论(0)    收藏  举报

一、部署环境说明

1.1 服务器基础信息

节点名称IP 地址部署组件建议硬件配置
node1192.168.10.26Elasticsearch(集群节点)、Kibana2C/4G 及以上
node2192.168.10.27Elasticsearch(集群节点)2C/4G 及以上
apache192.168.10.25Logstash、Apache(httpd)2C/2G 及以上
filebeat192.168.10.28Filebeat1C/1G 及以上

1.2 软件版本说明(统一为 7.8.1,确保兼容性)

  • Elasticsearch:7.8.1
  • Logstash:7.8.1
  • Kibana:7.8.1
  • Filebeat:7.8.1
  • Java:OpenJDK 1.8.0_131(7.8.1 兼容 Java 8/11,推荐 Java 8)
  • Apache:httpd 2.4(系统默认版本)

1.3 软件下载地址(官方源,自行下载后上传至各节点 /opt 目录)

  • Elasticsearch:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.1-x86_64.rpm
  • Logstash:https://artifacts.elastic.co/downloads/logstash/logstash-7.8.1.rpm
  • Kibana:https://artifacts.elastic.co/downloads/kibana/kibana-7.8.1-x86_64.rpm
  • Filebeat:https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.8.1-x86_64.rpm
  • 依赖工具包:
    • node-v8.2.1.tar.gz(head 插件依赖):https://nodejs.org/dist/v8.2.1/node-v8.2.1.tar.gz
    • phantomjs-2.1.1-linux-x86_64.tar.bz2:https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
    • elasticsearch-head.tar.gz:https://github.com/mobz/elasticsearch-head/archive/master.tar.gz(解压后重命名)

1.4 部署前提

  • 所有服务器为 CentOS 7/8 系统,已配置网络连接;
  • 软件包已上传至对应节点的 /opt 目录;
  • 全程使用 root 用户操作(或配置 sudo 权限)。

二、基础环境配置(所有节点执行)

2.1 关闭防火墙与 SELinux

bash

运行

# 关闭防火墙并禁用开机自启
systemctl stop firewalld
systemctl disable firewalld
# 关闭SELinux(临时+永久)
setenforce 0
sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
# 验证(输出 Permissive 或 Disabled 即为成功)
getenforce

2.2 配置主机名与域名解析

2.2.1 更改主机名

bash

运行

# node1节点(192.168.10.26)
hostnamectl set-hostname node1
# node2节点(192.168.10.27)
hostnamectl set-hostname node2
# apache节点(192.168.10.25)
hostnamectl set-hostname apache
# filebeat节点(192.168.10.28)
hostnamectl set-hostname filebeat
2.2.2 配置跨节点解析

所有节点编辑 /etc/hosts,添加以下内容:

bash

运行

vim /etc/hosts
192.168.10.26 node1
192.168.10.27 node2
192.168.10.25 apache
192.168.10.28 filebeat

2.3 安装 Java 环境与基础依赖

bash

运行

# 安装Java 8
yum -y install java
# 验证Java版本(输出1.8.x即为成功)
java -version
# 安装基础依赖工具
yum install -y gcc gcc-c++ make wget vim net-tools netstat-netlink

2.4 配置系统参数(Elasticsearch 必需,所有 ES 节点执行)

bash

运行

# 调整文件描述符和线程限制
cat >> /etc/security/limits.conf << EOF
* soft nofile 65535
* hard nofile 65535
* soft nproc 4096
* hard nproc 4096
EOF
# 调整虚拟内存(ES要求vm.max_map_count≥262144)
cat >> /etc/sysctl.conf << EOF
vm.max_map_count = 262144
EOF
# 使配置生效
sysctl -p

三、Elasticsearch 集群部署(node1、node2 节点操作)

3.1 安装 Elasticsearch 7.8.1

bash

运行

# 进入软件包目录
cd /opt
# 安装RPM包
rpm -ivh elasticsearch-7.8.1-x86_64.rpm
# 加载系统服务并设置开机自启
systemctl daemon-reload
systemctl enable elasticsearch.service

3.2 配置 Elasticsearch(7.8.1 版本适配)

3.2.1 备份并编辑配置文件

bash

运行

# 备份原始配置
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
# 编辑配置文件
vim /etc/elasticsearch/elasticsearch.yml
3.2.2 node1 节点(192.168.10.26)配置内容

yaml

# 集群名称(所有节点一致)
cluster.name: my-elk-cluster
# 节点名称(唯一)
node.name: node1
# 节点角色(7.x版本推荐用node.roles配置)
node.roles: [master, data, ingest]
# 数据存储路径
path.data: /data/elk_data
# 日志存储路径
path.logs: /var/log/elasticsearch/
# 禁用内存锁定
bootstrap.memory_lock: false
# 监听地址(允许所有访问)
network.host: 0.0.0.0
# HTTP端口(默认9200)
http.port: 9200
# 集群发现(单播模式,指定所有ES节点)
discovery.seed_hosts: ["node1", "node2"]
# 初始主节点候选(首次启动指定)
cluster.initial_master_nodes: ["node1", "node2"]
# 跨域配置(适配head插件和Kibana)
http.cors.enabled: true
http.cors.allow-origin: "*"
3.2.3 node2 节点(192.168.10.27)配置内容

仅节点名称不同,其余与 node1 一致:

yaml

node.name: node2
# 其余配置与node1完全相同

3.3 创建数据目录并授权

bash

运行

# 创建数据目录
mkdir -p /data/elk_data
# 赋予Elasticsearch用户权限
chown -R elasticsearch:elasticsearch /data/elk_data/
chown -R elasticsearch:elasticsearch /etc/elasticsearch/

3.4 启动 ES 集群并验证

bash

运行

# 启动服务
systemctl start elasticsearch.service
# 验证端口监听(9200端口启动即为成功)
netstat -antp | grep 9200
# 集群健康状态验证(浏览器访问,green为健康)
http://192.168.10.26:9200/_cluster/health?pretty

四、Elasticsearch-head 插件安装(node1 节点操作)

4.1 安装 node.js

bash

运行

cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install
# 验证(输出版本号即为成功)
node -v
npm -v

4.2 安装 phantomjs

bash

yum install bzip2 -y     安装解压bz2的工具

cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cp /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin/
# 验证
phantomjs -v

4.3 安装并启动 head 插件

bash

运行

cd /opt
# 解压head插件(若下载的是master包,重命名为elasticsearch-head)
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
# 安装依赖
npm install
# 后台启动(监听9100端口)
npm run start &
# 验证访问(浏览器访问,连接ES集群)
http://192.168.10.26:9100/

五、Logstash 部署(apache 节点:192.168.10.25 操作)

5.1 安装 Apache 服务

bash

运行

yum -y install httpd
systemctl start httpd
systemctl enable httpd
# 验证(访问默认页面)
curl http://192.168.10.25

5.2 安装 Logstash 7.8.1

bash

运行

cd /opt
rpm -ivh logstash-7.8.1.rpm
# 启动服务并设置开机自启(后续需重启,先初始化)
systemctl start logstash.service
systemctl enable logstash.service
# 创建软链接
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/

5.3 创建整合配置文件(同时采集 Apache+Filebeat 日志)

bash

运行

# 进入配置目录
cd /etc/logstash/conf.d
rm -f *.conf  # 清理原有配置
# 新建整合配置文件
vim all-log.conf

配置内容如下(7.8.1 语法兼容):

ruby

# 输入模块:Apache日志 + Filebeat日志
input {# 1. Apache访问日志file {path => "/var/log/httpd/access_log"type => "access"start_position => "beginning"}# 2. Apache错误日志file {path => "/var/log/httpd/error_log"type => "error"start_position => "beginning"}# 3. 接收Filebeat日志(监听5044端口)beats {port => "5044"}
}
# 输出模块:按日志类型分索引输出到ES集群
output {# Apache访问日志 → apache_access-日期if [type] == "access" {elasticsearch {hosts => ["192.168.10.26:9200", "192.168.10.27:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}# Apache错误日志 → apache_error-日期if [type] == "error" {elasticsearch {hosts => ["192.168.10.26:9200", "192.168.10.27:9200"]index => "apache_error-%{+YYYY.MM.dd}"}}# Filebeat日志 → filebeat-日期if [fields][service_name] == "filebeat" {elasticsearch {hosts => ["192.168.10.26:9200", "192.168.10.27:9200"]index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"}}# 控制台调试输出(可选,生产环境可注释)stdout {codec => rubydebug}
}

5.4 停止默认服务,启动整合配置

bash

运行

# 停止默认Logstash服务(避免冲突)
systemctl stop logstash
systemctl disable logstash
# 验证配置语法
logstash -f /etc/logstash/conf.d/all-log.conf --config.test_and_exit
# 后台启动(日志输出到nohup.out)
nohup logstash -f /etc/logstash/conf.d/all-log.conf &
# 查看启动日志
tail -f nohup.out

六、Kibana 部署(node1 节点:192.168.10.26 操作)

6.1 安装 Kibana 7.8.1

bash

运行

cd /opt
rpm -ivh kibana-7.8.1-x86_64.rpm

6.2 配置 Kibana

bash

运行

vim /etc/kibana/kibana.yml
# 配置内容
server.port: 5601                # 监听端口
server.host: "0.0.0.0"           # 允许外部访问
elasticsearch.hosts: ["http://192.168.10.26:9200"]  # 连接ES
kibana.index: ".kibana"          # ES中Kibana索引
i18n.locale: "zh-CN"             # 中文界面(7.8.1支持原生中文)

6.3 启动 Kibana 并验证

bash

运行

# 启动服务并设置开机自启
systemctl start kibana.service
systemctl enable kibana.service
# 验证端口(5601端口监听即为成功)
netstat -antp | grep 5601
# 浏览器访问
http://192.168.10.26:5601

6.4 创建 Kibana 索引模式

  1. 访问 Kibana → 【Management】→【索引模式】→【创建索引模式】;
  2. 分别创建 3 个索引模式:
    • apache_access-* → 时间字段选@timestamp
    • apache_error-* → 时间字段选@timestamp
    • filebeat-* → 时间字段选@timestamp
  3. 【Discover】中切换索引模式查看对应日志。

七、Filebeat 部署(filebeat 节点:192.168.10.28 操作)

7.1 安装 Filebeat 7.8.1(RPM 方式推荐)

bash

运行

cd /opt
rpm -ivh filebeat-7.8.1-x86_64.rpm
# 验证版本
filebeat version

7.2 配置 Filebeat(7.x 版本适配:filebeat.inputs 替代 prospectors)

bash

运行

# 备份原始配置
cp /etc/filebeat/filebeat.yml /etc/filebeat/filebeat.yml.bak
# 编辑配置文件
vim /etc/filebeat/filebeat.yml

配置内容如下(严格遵循 YAML 语法):

yaml

# ============================== Filebeat Inputs ===============================
filebeat.inputs:
- type: logenabled: truepaths:- /var/log/messages- /var/log/*.logfields:service_name: filebeatlog_type: system_logservice_id: 192.168.10.28fields_under_root: false
# ============================== Elasticsearch Output ===============================
output.elasticsearch:enabled: false  # 禁用直接输出到ES
# ============================== Logstash Output ===============================
output.logstash:enabled: truehosts: ["192.168.10.25:5044"]  # 指向Logstash节点
# ============================== Logging ===============================
logging.level: info
logging.to_files: true
logging.files:path: /var/log/filebeatname: filebeat.logkeepfiles: 7permissions: 0644

7.3 验证配置并启动 Filebeat

bash

运行

# 验证配置语法(无报错则通过)
filebeat test config -c /etc/filebeat/filebeat.yml
# 启动服务并设置开机自启
systemctl start filebeat
systemctl enable filebeat
# 查看启动日志
journalctl -u filebeat -f

八、整体验证(确保日志流转正常)

1. 生成测试日志

  • Apache 节点curl http://192.168.10.25(生成访问日志);
  • Filebeat 节点logger "filebeat 7.8.1 测试日志:$(date)"(生成系统日志)。

2. 验证 ES 索引

浏览器访问 http://192.168.10.26:9200/_cat/indices?v,可见 apache_access-*filebeat-* 索引。

3. Kibana 查看日志

访问 http://192.168.10.26:5601 → 【Discover】,切换对应索引模式,即可看到测试日志。

九、常见问题排查

1. ES 启动失败

  • 查看日志:tail -f /var/log/elasticsearch/my-elk-cluster.log
  • 常见原因:数据目录权限不足、虚拟内存参数未生效(重启服务器)、端口被占用。

2. Filebeat 语法错误

  • 核心原因:缩进用 Tab 键、冒号后未加空格;
  • 解决:用 sed -i 's/\t/ /g' /etc/filebeat/filebeat.yml 替换 Tab 为空格,严格按示例配置书写。

3. Logstash 进程冲突

  • 解决:systemctl stop logstash 停止默认服务,pkill -f logstash 清理残留进程,再启动整合配置。

十、部署总结

  • 所有组件统一为 7.8.1 版本,兼容性稳定;
  • Logstash 单实例整合多日志来源,资源占用低、维护简单;
  • Filebeat 轻量采集,适配 7.x 语法,避免配置报错;
  • Kibana 原生支持中文,可视化操作更便捷

ELK+Filebeat 扩展:采集 MySQL 与 Tomcat 日志(7.8.1 版本适配)

一、核心采集逻辑

新增日志采集遵循「Filebeat 轻量采集 → Logstash 解析过滤 → Elasticsearch 存储 → Kibana 可视化」流程:

  1. Filebeat 部署在 MySQL/Tomcat 所在节点(若部署在现有节点,直接复用;若新增节点,需在新节点安装 Filebeat 并配置域名解析);
  2. 配置 Filebeat 监听 MySQL/Tomcat 日志文件;
  3. Logstash 新增过滤规则(filter 模块),解析非结构化日志(如 MySQL 慢查询、Tomcat 访问日志);
  4. Kibana 创建对应索引模式,可视化展示日志。

二、前提说明

1. 确认 MySQL/Tomcat 部署节点与日志路径

假设 MySQL 和 Tomcat 部署在 filebeat 节点(192.168.10.28)(若部署在其他节点,只需在对应节点重复 Filebeat 配置步骤),常见日志路径如下:

应用日志类型常见路径(需根据实际部署调整)
MySQL慢查询日志/var/log/mysql/slow.log(RPM 安装)、/data/mysql/slow.log(二进制安装)
MySQL错误日志/var/log/mysql/error.log 或 /etc/my.cnf 中指定的 log-error 路径
Tomcat访问日志/usr/local/tomcat/logs/localhost_access_log.*.txt
Tomcat控制台日志/usr/local/tomcat/logs/catalina.out

2. 权限准备

确保 Filebeat 能读取日志文件(给日志目录授权):

bash

运行

# 以 MySQL 日志为例(根据实际路径调整)
chmod -R 755 /var/log/mysql/
chown -R root:root /var/log/mysql/  # Filebeat 默认以 root 运行(RPM安装)
# Tomcat 日志授权(假设 Tomcat 安装在 /usr/local/tomcat)
chmod -R 755 /usr/local/tomcat/logs/
chown -R root:root /usr/local/tomcat/logs/

三、采集 MySQL 日志(以慢查询日志为例,最具分析价值)

步骤 1:开启 MySQL 慢查询日志(若未开启)

  1. 编辑 MySQL 配置文件:

bash

运行

vim /etc/my.cnf  # RPM安装路径,二进制安装可能为 /etc/my.cnf.d/mysql-server.cnf
  1. 添加以下配置(开启慢查询日志):

ini

[mysqld]
slow_query_log = 1  # 开启慢查询日志
slow_query_log_file = /var/log/mysql/slow.log  # 慢查询日志路径(确保目录存在)
long_query_time = 2  # 执行时间超过 2 秒的查询记录为慢查询
log_queries_not_using_indexes = 1  # 记录未使用索引的查询
  1. 重启 MySQL 使配置生效:

bash

运行

systemctl restart mysqld
# 验证慢查询日志是否开启
mysql -u root -p -e "show variables like '%slow_query%';"
# 预期输出:slow_query_log = ON

步骤 2:配置 Filebeat 采集 MySQL 日志(filebeat 节点:192.168.10.28)

编辑 Filebeat 配置文件,新增 MySQL 日志采集规则:

bash

运行

vim /etc/filebeat/filebeat.yml

在 filebeat.inputs 中添加以下内容(与原有系统日志采集规则并列):

yaml

filebeat.inputs:
# 原有系统日志采集规则(保留)
- type: logenabled: truepaths:- /var/log/messages- /var/log/*.logfields:service_name: filebeatlog_type: system_logservice_id: 192.168.10.28fields_under_root: false
# 新增 MySQL 慢查询日志采集规则
- type: logenabled: truepaths:- /var/log/mysql/slow.log  # 替换为实际慢查询日志路径- /var/log/mysql/error.log  # 可选:同时采集错误日志fields:service_name: mysqllog_type: slow_query  # 慢查询日志标识service_id: 192.168.10.28fields_under_root: falsemultiline.pattern: '^# Time:'  # 处理慢查询日志多行记录(以 # Time: 开头为新日志)multiline.negate: truemultiline.match: after

步骤 3:配置 Logstash 解析 MySQL 慢查询日志(apache 节点:192.168.10.25)

编辑整合配置文件 all-log.conf,新增 filter 模块解析 MySQL 日志(非结构化 → 结构化):

bash

运行

vim /etc/logstash/conf.d/all-log.conf

完整配置如下(新增 filter 节点,针对 MySQL 日志解析):

ruby

# 输入模块(保留原有 Apache+Filebeat 配置,无需修改)
input {# Apache 日志(原有)file {path => "/var/log/httpd/access_log"type => "access"start_position => "beginning"}file {path => "/var/log/httpd/error_log"type => "error"start_position => "beginning"}# Filebeat 日志(原有)beats {port => "5044"}
}
# 新增:过滤模块(解析 MySQL 慢查询日志)
filter {# 匹配 MySQL 日志(根据 Filebeat 自定义字段 service_name: mysql)if [fields][service_name] == "mysql" {# 解析 MySQL 慢查询日志(grok 模式适配 MySQL 5.7+/8.0+)grok {match => { "message" => [# 慢查询日志格式:# Time: 2025-12-15T10:00:00.000000Z# # User@Host: root[root] @ localhost [127.0.0.1]  Id: 1234# # Query_time: 3.200000  Lock_time: 0.000000  Rows_sent: 1  Rows_examined: 1000# SELECT * FROM test WHERE id=1;"^# Time: %{TIMESTAMP_ISO8601:mysql_time}\n# User@Host: %{USER:mysql_user}\[%{USER:mysql_db_user}\] @ %{HOSTNAME:mysql_host} \[%{IP:mysql_client_ip}\]  Id: %{NUMBER:mysql_thread_id:int}\n# Query_time: %{NUMBER:mysql_query_time:float}  Lock_time: %{NUMBER:mysql_lock_time:float}  Rows_sent: %{NUMBER:mysql_rows_sent:int}  Rows_examined: %{NUMBER:mysql_rows_examined:int}\n%{GREEDYDATA:mysql_sql:sql}"]}add_field => { "log_source" => "mysql_slow_query" }  # 新增字段标识日志来源remove_field => "message"  # 移除原始消息字段(可选,简化日志)}# 转换时间格式(适配 ES 时间字段)date {match => ["mysql_time", "ISO8601"]target => "@timestamp"}}
}
# 输出模块(新增 MySQL 日志索引)
output {# Apache 日志(原有)if [type] == "access" {elasticsearch {hosts => ["192.168.10.26:9200", "192.168.10.27:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}if [type] == "error" {elasticsearch {hosts => ["192.168.10.26:9200", "192.168.10.27:9200"]index => "apache_error-%{+YYYY.MM.dd}"}}# 系统日志(原有)if [fields][service_name] == "filebeat" {elasticsearch {hosts => ["192.168.10.26:9200", "192.168.10.27:9200"]index => "filebeat_system-%{+YYYY.MM.dd}"}}# 新增:MySQL 日志输出(索引名:mysql_slow_query-日期)if [fields][service_name] == "mysql" {elasticsearch {hosts => ["192.168.10.26:9200", "192.168.10.27:9200"]index => "mysql_slow_query-%{+YYYY.MM.dd}"}}# 控制台调试(可选)stdout {codec => rubydebug}
}

步骤 4:重启 Filebeat 与 Logstash

bash

运行

# Filebeat 节点(192.168.10.28)
systemctl restart filebeat
journalctl -u filebeat -f  # 查看是否有报错
# Logstash 节点(192.168.10.25)
# 先停止原有进程
pkill -f logstash
# 重启整合配置
nohup logstash -f /etc/logstash/conf.d/all-log.conf &
tail -f nohup.out  # 查看解析是否正常

步骤 5:生成 MySQL 测试慢查询

bash

运行

# 登录 MySQL,执行一个慢查询(超过 2 秒)
mysql -u root -p
mysql> SELECT SLEEP(3);  # 模拟慢查询(执行时间 3 秒)
mysql> exit;
# 查看慢查询日志是否生成
cat /var/log/mysql/slow.log

四、采集 Tomcat 日志(访问日志 + catalina.out 控制台日志)

步骤 1:确认 Tomcat 日志配置(默认已开启,无需修改)

Tomcat 默认开启访问日志,日志格式为「组合日志格式(Common Log Format)」,路径:/usr/local/tomcat/logs/localhost_access_log.%Y-%m-%d.txt

步骤 2:配置 Filebeat 采集 Tomcat 日志(filebeat 节点:192.168.10.28)

编辑 Filebeat 配置文件,新增 Tomcat 日志采集规则:

bash

运行

vim /etc/filebeat/filebeat.yml

在 filebeat.inputs 中添加以下内容:

yaml

filebeat.inputs:
# 原有规则(系统日志、MySQL 日志)保留,新增以下:
# 新增 Tomcat 访问日志采集
- type: logenabled: truepaths:- /usr/local/tomcat/logs/localhost_access_log.*.txt  # 访问日志路径fields:service_name: tomcatlog_type: access_log  # 访问日志标识service_id: 192.168.10.28fields_under_root: false
# 新增 Tomcat catalina.out 控制台日志采集(可选)
- type: logenabled: truepaths:- /usr/local/tomcat/logs/catalina.outfields:service_name: tomcatlog_type: catalina_log  # 控制台日志标识service_id: 192.168.10.28fields_under_root: falsemultiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'  # 处理多行日志(以日期开头为新日志)multiline.negate: truemultiline.match: after

步骤 3:配置 Logstash 解析 Tomcat 日志(apache 节点:192.168.10.25)

编辑 all-log.conf,在 filter 模块新增 Tomcat 日志解析规则:

ruby

filter {# 原有 MySQL 解析规则保留,新增以下:# 解析 Tomcat 访问日志(组合日志格式)if [fields][service_name] == "tomcat" and [fields][log_type] == "access_log" {grok {match => { "message" => '%{IPORHOST:tomcat_client_ip} %{USER:tomcat_auth_user} %{USER:tomcat_remote_user} \[%{HTTPDATE:tomcat_access_time}\] "%{WORD:tomcat_method} %{URIPATH:tomcat_uri}(%{URIPARAM:tomcat_uri_params})? %{DATA:tomcat_protocol}" %{NUMBER:tomcat_status:int} %{NUMBER:tomcat_bytes_sent:int} "%{DATA:tomcat_referer}" "%{DATA:tomcat_user_agent}"' }add_field => { "log_source" => "tomcat_access" }remove_field => "message"}# 转换访问时间格式date {match => ["tomcat_access_time", "dd/MMM/yyyy:HH:mm:ss Z"]target => "@timestamp"}}# 解析 Tomcat catalina.out 日志(简单提取日期和级别,可选)if [fields][service_name] == "tomcat" and [fields][log_type] == "catalina_log" {grok {match => { "message" => '%{TIMESTAMP_ISO8601:tomcat_catalina_time} %{LOGLEVEL:tomcat_log_level} \[%{DATA:tomcat_thread}\] %{DATA:tomcat_class} : %{GREEDYDATA:tomcat_catalina_message}' }add_field => { "log_source" => "tomcat_catalina" }}date {match => ["tomcat_catalina_time", "ISO8601"]target => "@timestamp"}}# 原有 MySQL 解析规则...
}

步骤 4:更新 Logstash 输出模块(新增 Tomcat 索引)

在 output 节点添加以下内容:

ruby

output {# 原有输出规则(Apache、系统日志、MySQL)保留,新增:# Tomcat 访问日志 → 索引 tomcat_access-日期if [fields][service_name] == "tomcat" and [fields][log_type] == "access_log" {elasticsearch {hosts => ["192.168.10.26:9200", "192.168.10.27:9200"]index => "tomcat_access-%{+YYYY.MM.dd}"}}# Tomcat catalina 日志 → 索引 tomcat_catalina-日期if [fields][service_name] == "tomcat" and [fields][log_type] == "catalina_log" {elasticsearch {hosts => ["192.168.10.26:9200", "192.168.10.27:9200"]index => "tomcat_catalina-%{+YYYY.MM.dd}"}}# 原有输出规则...
}

步骤 5:重启 Filebeat 与 Logstash

bash

运行

# Filebeat 节点
systemctl restart filebeat
# Logstash 节点
pkill -f logstash
nohup logstash -f /etc/logstash/conf.d/all-log.conf &
tail -f nohup.out  # 确认无解析报错

步骤 6:生成 Tomcat 测试日志

bash

运行

# 启动 Tomcat(若未启动)
/usr/local/tomcat/bin/startup.sh
# 访问 Tomcat 首页,生成访问日志
curl http://192.168.10.28:8080
# 查看 Tomcat 日志是否生成
cat /usr/local/tomcat/logs/localhost_access_log.$(date +%Y-%m-%d).txt

五、Kibana 可视化 MySQL/Tomcat 日志

步骤 1:创建 Kibana 索引模式

  1. 访问 Kibana(http://192.168.10.26:5601)→ 【Management】→【索引模式】→【创建索引模式】;
  2. 分别创建以下索引模式(匹配 Logstash 输出的索引名):
    • MySQL 慢查询日志:mysql_slow_query-* → 时间字段选 @timestamp
    • Tomcat 访问日志:tomcat_access-* → 时间字段选 @timestamp
    • Tomcat 控制台日志:tomcat_catalina-* → 时间字段选 @timestamp
  3. 点击【创建】完成索引模式配置。

步骤 2:查看与分析日志

  1. 【Discover】→ 切换对应索引模式(如 mysql_slow_query-*);
  2. 可查看解析后的结构化字段(如 mysql_query_time 慢查询时间、mysql_sql 执行的 SQL 语句);
  3. 示例分析场景:
    • 筛选 mysql_query_time > 2 的慢查询,优化对应 SQL;
    • 统计 Tomcat 访问日志中 tomcat_status:500 的错误请求,定位接口问题;
    • 按 tomcat_method 分组,查看 GET/POST 请求占比。

六、常见问题排查

1. Filebeat 无法采集 MySQL/Tomcat 日志

  • 检查日志路径是否正确:filebeat test config -c /etc/filebeat/filebeat.yml 验证配置,确保 paths 字段与实际日志路径一致;
  • 检查权限:ls -l /var/log/mysql/slow.log 确认 Filebeat(root 用户)有读取权限;
  • 查看 Filebeat 日志:journalctl -u filebeat -f,排查「permission denied」等权限报错。

2. Logstash 解析日志失败(Kibana 无结构化字段)

  • 查看 Logstash 日志:tail -f nohup.out,排查 grok 解析报错(如「_grokparsefailure」);
  • 调整 grok 模式:若 MySQL/Tomcat 日志格式与示例不同,需修改 filter 中的 grok 匹配规则(可使用 Kibana 【Dev Tools】→【Grok Debugger】调试 grok 语法);
  • 验证日志格式:cat /var/log/mysql/slow.log 查看实际日志格式,适配 grok 模式。

3. Kibana 看不到索引

  • 检查 ES 索引是否生成:访问 http://192.168.10.26:9200/_cat/indices?v,确认 mysql_slow_query-*tomcat_access-* 索引存在;
  • 检查 Logstash 输出配置:确保 elasticsearch.hosts 指向正确的 ES 集群地址;
  • 等待日志采集:若刚生成测试日志,可能需要 10~30 秒同步到 ES,耐心等待后刷新 Kibana。

七、扩展建议

  1. 日志轮转:配置 MySQL/Tomcat 日志轮转(如 logrotate),避免日志文件过大;
  2. 索引生命周期管理(ILM):在 Kibana 中配置索引生命周期,自动删除过期日志(如保留 30 天),节省 ES 存储空间;
  3. 告警配置:针对 MySQL 慢查询(mysql_query_time > 5)、Tomcat 500 错误(tomcat_status:500)配置 Kibana 告警,及时发现问题;
  4. 多节点采集:若 MySQL/Tomcat 部署在多台服务器,只需在每台服务器安装 Filebeat,配置相同的 output.logstash 地址,即可统一采集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1172932.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET interview

.NET interview03:32 - Q3. What are the different types of Inheritance?07:36 - Q5. What is Polymorphism and what are its types?What is diff between overloading and override21:29 - Q13. What is the dif…

春季营销图片踩坑盘点:10个清新素材网站+3个避坑技巧

春季营销是品牌抢占用户注意力的黄金时期&#xff0c;一张清新自然的图片能瞬间抓住眼球&#xff0c;提升转化率。但很多人在找适合春季营销的清新图片资源时&#xff0c;容易踩坑——比如用了侵权图片导致法律纠纷&#xff0c;或者图片风格和品牌调性不符&#xff0c;浪费了营…

Generic and Reflecton

Generic and ReflectonConditional Resolving multiple implementation from generic interface base on types articles Generic type name inside the bracket can be treated as identity of the class Dependency …

Architect - Deployments

Architect - DeploymentsK8S resource monitoring and auto scale https://www.cnblogs.com/Mattcoder/p/11222684.html

YOLOv8 融合 InceptionNeNext 实战:提升小目标与大尺度特征检测能力的架构改进

文章目录 涨点王者:YOLOv8融合InceptionNeXt,小目标检测与大尺度特征捕捉双突破实战教程 一、InceptionNeXt核心:让特征提取“无死角”的架构革命 二、YOLOv8+InceptionNeXt的深度改造:从代码到落地的全流程 1. 自定义InceptionNeXt模块(修改`modules.py`) 2. 注册Incept…

2026年口碑好的GEO搜索优化公司推荐,专业服务全解析 - 工业品牌热点

在AI技术重构信息获取方式的当下,GEO(Generative Engine Optimization)作为连接企业与AI信息入口的关键纽带,正成为品牌抢占流量红利的核心武器。面对市场上良莠不齐的GEO搜索优化公司,如何选择正规GEO推广企业、…

YOLOv8-Pose 全栈部署实践:从模型训练到 RK3588 RKNN 端侧部署

文章目录 【YOLOv8-pose姿态识别部署至RK3588:模型训练到RKNN落地,让人体姿态分析精度与边缘推理速度双突破】 一、项目背景与技术选型:为何选择YOLOv8-pose+RK3588? 二、环境搭建:从代码仓库到硬件适配 1. 源码获取与工程结构 2. 依赖安装与硬件配置 三、YOLOv8-pose模型…

Git 提交后发现作者信息错了,如何安全修复已 push 的历史?

前言 提交并 push 完代码后,发现 Git 的 author name / email 设置错了,导致贡献记录、头像显示异常。 修复思路与步骤(已验证可行)永久修正本地配置(防后续出错) git config user.name "正确用户名" …

Architecture - Security

Architecture - Security

【9*】集合幂级数学习笔记

前言如果你不会集合幂级数,那你就进不了省队。骗你的,会了也不一定能进省队。 长文警告:本文一共 \(1467\) 行,请合理安排阅读时间。 此类知识点大纲中并未涉及,所以【9】是我自己的估计,后带星号表示估计,仅供…

IoU损失函数新突破!Inner-IoU 让 YOLOv11 检测精度显著提升 | 完整实现教程

文章目录 目标检测损失函数革新:Inner-IoU 助力 YOLOv11 精度飙升实战教程 一、Inner-IoU 核心原理:辅助边框如何打破 IoU 瓶颈? 1. 传统 IoU 损失的局限性 2. Inner-IoU 的创新设计:辅助边框的魔力 3. 实验效果:用数据说话 二、Inner-IoU 集成到 YOLOv11 全流程:从代码修…

.Net base software framework - pattern, configuration and tool

.Net base software framework - pattern, configuration and toolPage 21 Genric constraintC# generic constraint is a way to specify requirements on the type parameter of a generic class or method. It allo…

Cloud Connector and Plugin

Cloud Connector and PluginTelecom multi service operator business tool to organize job fullfillment of 10k field repair and install technician 3 self contain microservices - loosely coupling architectu…

YOLOv13 模块改造实战:从零集成 SFSConv 提升目标检测精度(保姆级教程)

零基础手把手教程:在 YOLOv13 中集成 SFSConv,让目标检测更上一层楼 文章目录 零基础手把手教程:在 YOLOv13 中集成 SFSConv,让目标检测更上一层楼 前言 目录 1. 为什么需要 SFSConv?传统 CNN 的局限与高级特征的需求 1.1 传统卷积的特点与不足 1.2 多尺度特征的重要性 1.…

UNet++MobileNetv2模型优化,RK3588部署效率飙升300%

文章目录【保姆级教程】基于UNet&MobileNetv2的语义分割模型从训练到RK3588部署&#xff1a;让边缘AI落地效率提升300%引读一、技术选型与场景价值二、环境搭建&#xff1a;从云端到边缘的工具链闭环1. 云端训练环境&#xff08;Python生态&#xff09;2. 模型转换工具链&a…

处理完ACPI!AcpiBuildRunMethodList链表后返回要检查acpi!AcpiBuildQueueList链表不空运行continue继续循环

处理完ACPI!AcpiBuildRunMethodList链表后返回要检查acpi!AcpiBuildQueueList链表不空运行continue继续循环0: kd> g Breakpoint 5 hit eax00000000 ebx00000000 ecx89906e40 edx00000001 esi89906e30 edi80b019f4 eipf73fb911 espf789ef68 ebpf789ef84 iopl0 nv up…

Angular Interview

Angular InterviewAngular.json just like csproj in c# to defined elements needed to build and run the angular app, it provides application entry point, first view landed, angular defined styles, ts->…

第二次运行ACPI!ACPIBuildProcessQueueList函数链表内的buildRequest->TargetListEntry都是ACPI!AcpiBuildRunMethodList

第二次运行ACPI!ACPIBuildProcessQueueList函数链表内的buildRequest->TargetListEntry都是ACPI!AcpiBuildRunMethodListVOID ACPIBuildDeviceDpc(IN PKDPC Dpc,IN PVOID DpcContext,IN PVOID SystemArgument1,IN PVOID SystemArgument2) {do {//// Assume that…

CSDN首页发布文章请输入文章标题(5~100个字) 还需输入5个字摘要:会在推荐、列表等场景外露,帮助读者快速了解内容,支持一键将正文前 256 字符键入摘要文本框0 / 256A

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

RDBMS interview questions

RDBMS interview questions