随着系统架构的不断扩展和业务规模的迅猛增长,传统的日志管理方式已经难以应对海量分布式系统中的日志收集、查询和告警需求。为此,越来越多的企业开始引入成熟的日志系统方案,Elastic Stack(即 ELK + Beats) 便是其中最流行的一种。
本文将从日志系统的必要性讲起,深入剖析 ELK 各组件的工作原理、使用方式以及实际部署方式,帮助你全面理解并快速上手这一强大的日志平台。
在现代微服务架构下:
因此,集中式日志系统 成为刚需,不仅能统一采集和处理日志,还能提升故障排查和运维效率。
Elastic Stack 是一套开源的日志采集、处理、分析和可视化平台,通常包含以下几个核心组件:
组件 | 功能简介 |
---|---|
Elasticsearch | 分布式搜索与分析引擎,负责存储和查询日志数据 |
Logstash | 日志收集、解析、清洗、转换的处理管道 |
Kibana | 可视化分析平台,提供丰富的 Web 仪表盘和搜索能力 |
Beats | 边缘代理,负责从数据源中轻量级采集日志并发送到Logstash或ES |
Beats 是 Elastic 提供的一组用于不同场景的数据采集工具,常用的包括:
Beats 类型 | 功能描述 |
---|---|
Filebeat | 读取日志文件,适合应用日志场景 |
Metricbeat | 采集系统、进程、磁盘、CPU 等指标数据 |
Packetbeat | 网络数据包监控工具,监控应用之间通信流量 |
Winlogbeat | 专门用于收集 Windows 事件日志 |
Auditbeat | 审计相关数据,如用户登录、文件更改等 |
Heartbeat | 用于服务存活状态的监测 |
Elastic Stack 作为日志平台,具备以下优势:
Filebeat 是最常用的日志采集工具,主要负责将日志文件数据发送到 Logstash 或 Elasticsearch。
/var/lib/filebeat/registry
文件中;这一机制保证了日志不会漏传,但有可能会重复(可通过后续处理规避)。
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
output.logstash:
hosts: ["localhost:5044"]
./filebeat -e -c filebeat.yml
或使用 Docker 部署,参考:官方文档
Logstash 的处理流程包括:
file
:从文件系统读取(支持类似 tail -f
);syslog
:监听系统日志;beats
:接收来自 Filebeat 的数据。grok
插件是日志结构化处理的核心,语法如下:
%{SYNTAX:SEMANTIC}
举例:
%{LOGLEVEL:log_level} %{GREEDYDATA:log_message}
它会将日志分解为结构化字段,非常适合后续索引和搜索。
http://localhost:5601/
进入 kibana 页面,点击左上角的 DiscoverCreate index pattern
Next step
填写索引匹配规则
Create index pattern
这里,我提供了 elk 的 docker-compose.yml 示例,以供你参考。如果你感兴趣,可以访问 https://github.com/pudongping/polyglot-script-box/tree/master/elk
获取完整的 docker-compose 配置信息。
services:
elasticsearch:
image: elasticsearch:7.9.3
ports:
- "9200:9200"
- "9300:9300"
volumes:
#配置目录
- ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
#数据目录
- ./elasticsearch/data:/usr/share/elasticsearch/data
#插件目录
- ./elasticsearch/plugins:/usr/share/elasticsearch/plugins
environment:
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
# 设置为单节点(非集群模式)
discovery.type: single-node
# 账号
#ELASTIC_USERNAME: ""
# 密码
#ELASTIC_PASSWORD: ""
network.publish_host: _eth0_
networks:
- elk-network
logstash:
image: logstash:7.9.3
ports:
- "5044:5044"
- "5001:5000"
- "9600:9600"
volumes:
- ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
- ./logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
environment:
LS_JAVA_OPTS: "-Xms512m -Xmx512m"
networks:
- elk-network
kibana:
image: kibana:7.9.3
ports:
- "5601:5601"
volumes:
- ./kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
environment:
#ELASTICSEARCH_USERNAME: ""
#ELASTICSEARCH_PASSWORD: ""
ELASTICSEARCH_HOSTS: "http://elasticsearch:9200"
networks:
- elk-network
# 网络配置
networks:
elk-network: # 定义一个名为 elk-network 的网络
driver: bridge
Elastic Stack 在日志收集、集中分析和可视化上提供了一套非常强大的方案,适合分布式系统中的复杂场景。我的经验是:
通过这篇文章,相信你已经掌握了 ELK 的核心组件、工作流程及实战部署方式。如果你正面临日志混乱、排查困难的问题,不妨试试 ELK,它或许正是你理想的解决方案!
如需更进一步的使用指南或实战部署脚本,也欢迎留言交流~
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。