ELK Stack 进阶指南:Kibana 与 Filebeat 部署实践
Kibana 部署与配置
Kibana 简介
- 开源可视化平台,为 Elasticsearch 集群提供友好的 Web 管理界面
- 支持日志数据的汇总、分析和搜索功能
文档路径: https://www.elastic.co/guide/en/kibana/current/setup.html
安装步骤
-
下载安装
bashwget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.2-x86_64.rpm rpm -ivh kibana-6.5.2-x86_64.rpm -
核心kibana配置 (
/etc/kibana/kibana.yml)yamlserver.port: 5601 # 端口 server.host: "0.0.0.0" # 监听所有,允许所有人能访问 elasticsearch.url: "http://10.1.1.12:9200" # ES集群的路径 logging.dest: /var/log/kibana.log # 这里加了kibana日志,方便排错与调试 -
服务管理
bash# 日志要自己建立,并修改owner和group属性 touch /var/log/kibana.log chown kibana.kibana /var/log/kibana.log systemctl start kibana systemctl enable kibana lsof -i:5601 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME node 10420 kibana 11u IPv4 111974 0t0 TCP *:esmagent (LISTEN) -
通过浏览器访问 http://kibana服务器IP:5601

kibana汉化配置
https://github.com/anbai-inc/Kibana_Hanization/
- 使用 GitHub 汉化项目:
anbai-inc/Kibana_Hanization - 需要 Python 环境,执行汉化脚本后重启服务
bash
wget https://github.com/anbaiinc/Kibana_Hanization/archive/master.zip
unzip Kibana_Hanization-master.zip -d /usr/local
cd /usr/local/Kibana_Hanization-master/
# 这里要注意:1,要安装python; 2,rpm版的kibana安装目录为/usr/share/kibana/
python main.py /usr/share/kibana/
# 汉化完后需要重启
systemctl stop kibana
systemctl start kibana
再次通过浏览器访问 http://kibana 服务器IP:5601

Kibana 数据可视化
核心功能模块
- Discover:数据探索
- Visualize:可视化图表
- Dashboard:数据仪表板
- DevTools:开发工具
- Management:系统管理

索引模式创建
- 定义索引模式 (如
test*) - 配置时间过滤字段(可选时间戳字段)
- 数据探索:通过 Discover 界面查看和分析数据




可视化图表制作
- 支持多种图表类型:柱状图、折线图、饼图等
- 基于时间序列的数据分析
- 可自定义时间间隔(如每30分钟统计)
- 支持保存和分享可视化结果








Filebeat 日志收集
Filebeat 优势
- 轻量级设计:相比 Logstash 资源消耗更低
- 高效采集:专为日志文件收集优化
- 简化部署:在应用服务器上部署更加便捷

Beats 家族
- Filebeat:文件(收集日志文件数据)
- Metricbeat:指标 (收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)
- Packetbeat:网络数据(收集网络流量数据)
- Winlogbeat:windows事件日志(收集 Windows 事件日志数据)
- Auditbeat:审计数据 (收集审计日志)
- Heartbeat:运行时间监控 (收集系统运行时的数据)
⚙️ Filebeat 部署实践
架构拓扑

tex
Filebeat (10.1.1.14) → Logstash (10.1.1.13) → Elasticsearch (10.1.1.12) → Kibana (10.1.1.11)
直接传输至 ES 集群配置
第1步: 下载并安装filebeat(再开一台虚拟机vm4模拟filebeat, 内存1G就够了, 安装filebeat)
bash
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.5.2-x86_64.rpm
rpm -ivh filebeat-6.5.2-x86_64.rpm
第2步: 配置filebeat收集日志/etc/filebeat/filebeat.yml
yaml
filebeat.inputs:
- type: log
enabled: true # 改为true
paths:
- /var/log/*.log # 收集的日志路径
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
setup.kibana:
output.elasticsearch: # 输出给es集群
hosts: ["10.1.1.12:9200"] # es集群节点ip
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
第3步: 启动服务
bash
systemctl start filebeat
systemctl enable filebeat
第4步: 验证
在es-head和kibana上验证
filebeat传输给logstash
第1步: Logstash 配置 /etc/logstash/conf.d/test.conf
shell
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["10.1.1.12:9200"]
index => "filebeat2-%{+YYYY.MM.dd}"
}
stdout {}
}
第2步:开放5044端口给filebeat连接,并重启logstash服务
bash
cd /usr/share/logstash/bin/
# 如果前面有使用后台跑过logstash实例的请kill掉先
pkill java
./logstash --path.settings /etc/logstash/ -r -f /etc/logstash/conf.d/test.conf
第3步:Filebeat 配置/etc/filebeat/filebeat.yml
yaml
filebeat.inputs:
- type: log
enabled: true # 改为true
paths:
- /var/log/*.log # 收集的日志路径
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
setup.kibana:
output.logstash: # 这两句非常重要,表示日志输出给logstash
hosts: ["10.1.1.13:5044"] # IP为logstash服务器的IP;端口5044对应logstash上的配置
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
第4步: 启动服务
bash
systemctl stop filebeat
systemctl start filebeat
第5步: 去ES-head上验证

第6步:在kibana创建索引模式(过程省略,参考上面的笔记操作),然后点发现验证

filebeat Nginx 日志收集实战
部署步骤
-
安装 Nginx
在filebeat这台服务器上安装nginx,启动服务。并使用浏览器访问刷新一下,模拟产生一些相应的日志 (强调: 我们在这里是模拟的实验环境,一定要搞清楚实际情况下是把filebeat安装到nginx服务器去收集日志)
bashyum install epel-release -y yum install nginx -y systemctl restart nginx systemctl enable nginx -
配置 Filebeat
/etc/filebeat/filebeat.ymlyamlfilebeat.inputs: - type: log enabled: true paths: - /var/log/*.log - /var/log/nginx/access.log # 只在这里加了一句nginx日志路径(按需求自定义即可) filebeat.config.modules: path: ${path.config}/modules.d/*.yml reload.enabled: false setup.template.settings: index.number_of_shards: 3 setup.kibana: output.logstash: hosts: ["10.1.1.13:5044"] processors: - add_host_metadata: ~ - add_cloud_metadata: ~ -
重启服务验证
bashsystemctl stop filebeat systemctl start filebeat -
验证(在kibana或es-head上查询)
实验中易产生的问题总结:
- filebeat配置里没有把output.elasticsearch改成output.logstash
- filebeat在收集/var/log/*.log日志时,需要对日志进行数据的改变或增加,才会传。当/var/log/yum.log增加了日志数据会传输,但不会触发配置里的其它日志传输。(每个日志的传输是独立的)
- filebeat收集的日志没有定义索引名称, 我这个实验是在logstash里定义的。(此例我定义的索引名叫filebeat2-%{+YYYY.MM.dd})
- es-head受资源限制可能会关闭了,你在浏览器上验证可能因为缓存问题,看不到变化的结果。
- 区分索引名和索引模式(index pattern)名
高级过滤功能
filebeat日志内容过滤/etc/filebeat/filebeat.yml
yaml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/yum.log
- /var/log/nginx/access.log
include_lines: ['Installed'] 表示收集的日志里有Installed关键字才会收集
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 3
setup.kibana:
output.logstash:
hosts: ["10.1.1.13:5044"]
processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
重启服务
bash
systemctl restart filebeat
测试方法:
通过 yum install 和 yum remove 产生日志,检验结果
结果为: yum install 安装可以收集, yum remove 卸载的不能收集
其它参数可以自行测试
- exclude_lines
- exclude_files
可用过滤参数
- include_lines:包含特定内容的行
- exclude_lines:排除特定内容的行
- exclude_files:排除特定文件
常见问题排查
部署注意事项
- 确保正确切换
output.elasticsearch与output.logstash - 日志文件需要实际产生新内容才会触发传输
- 每个日志文件的传输处理是独立的
- 区分索引名称与索引模式名称的概念
- 注意 ES-head 插件可能因资源限制自动关闭
验证方法
-
通过 Kibana 创建索引模式进行数据验证
-
使用 ES-head 查看索引状态
-
exclude_lines
-
exclude_files
可用过滤参数
- include_lines:包含特定内容的行
- exclude_lines:排除特定内容的行
- exclude_files:排除特定文件
常见问题排查
部署注意事项
- 确保正确切换
output.elasticsearch与output.logstash - 日志文件需要实际产生新内容才会触发传输
- 每个日志文件的传输处理是独立的
- 区分索引名称与索引模式名称的概念
- 注意 ES-head 插件可能因资源限制自动关闭
验证方法
- 通过 Kibana 创建索引模式进行数据验证
- 使用 ES-head 查看索引状态
- 通过系统命令测试日志产生和收集