ELK Stack实战:Kibana与Filebeat部署指南

ELK Stack 进阶指南:Kibana 与 Filebeat 部署实践

Kibana 部署与配置

Kibana 简介

  • 开源可视化平台,为 Elasticsearch 集群提供友好的 Web 管理界面
  • 支持日志数据的汇总、分析和搜索功能

文档路径: https://www.elastic.co/guide/en/kibana/current/setup.html

安装步骤

  1. 下载安装

    bash 复制代码
    wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.2-x86_64.rpm
    rpm -ivh kibana-6.5.2-x86_64.rpm
  2. 核心kibana配置 (/etc/kibana/kibana.yml)

    yaml 复制代码
    server.port: 5601	 # 端口
    server.host: "0.0.0.0" 	# 监听所有,允许所有人能访问
    elasticsearch.url: "http://10.1.1.12:9200"	 # ES集群的路径
    logging.dest: /var/log/kibana.log	 # 这里加了kibana日志,方便排错与调试
  3. 服务管理

    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)
  4. 通过浏览器访问 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:系统管理

索引模式创建

  1. 定义索引模式 (如 test*
  2. 配置时间过滤字段(可选时间戳字段)
  3. 数据探索:通过 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 日志收集实战

部署步骤

  1. 安装 Nginx

    在filebeat这台服务器上安装nginx,启动服务。并使用浏览器访问刷新一下,模拟产生一些相应的日志 (强调: 我们在这里是模拟的实验环境,一定要搞清楚实际情况下是把filebeat安装到nginx服务器去收集日志)

    bash 复制代码
    yum install epel-release -y
    yum install nginx -y
    systemctl restart nginx
    systemctl enable nginx
  2. 配置 Filebeat /etc/filebeat/filebeat.yml

    yaml 复制代码
    filebeat.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: ~
  3. 重启服务验证

    bash 复制代码
    systemctl stop filebeat
    systemctl start filebeat
  4. 验证(在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.elasticsearchoutput.logstash
  • 日志文件需要实际产生新内容才会触发传输
  • 每个日志文件的传输处理是独立的
  • 区分索引名称与索引模式名称的概念
  • 注意 ES-head 插件可能因资源限制自动关闭

验证方法

  • 通过 Kibana 创建索引模式进行数据验证

  • 使用 ES-head 查看索引状态

  • exclude_lines

  • exclude_files

可用过滤参数

  • include_lines:包含特定内容的行
  • exclude_lines:排除特定内容的行
  • exclude_files:排除特定文件

常见问题排查

部署注意事项

  • 确保正确切换 output.elasticsearchoutput.logstash
  • 日志文件需要实际产生新内容才会触发传输
  • 每个日志文件的传输处理是独立的
  • 区分索引名称与索引模式名称的概念
  • 注意 ES-head 插件可能因资源限制自动关闭

验证方法

  • 通过 Kibana 创建索引模式进行数据验证
  • 使用 ES-head 查看索引状态
  • 通过系统命令测试日志产生和收集
相关推荐
枫叶梨花2 天前
实战:将 Nginx 日志实时解析并写入 MySQL,不再依赖 ELK
mysql·nginx·elk
旦沐已成舟4 天前
K8S搭建轻量级日志收集系统(EFK)
elk·kubernetes
有谁看见我的剑了?4 天前
Rocky 9 单机安装elastic-9.1.5
运维·elk
Gss7774 天前
ELK 日志管理系统相关内容总结
运维·elk
风清再凯9 天前
01-ELK安装ES,ES-head
大数据·elk·elasticsearch
霸气del13 天前
ELK搭建
elk
正怒月神17 天前
docker-compose 启动 elk
elk·docker·容器
故事很腻i17 天前
安装elk
运维·elk·jenkins