系列导读:本篇将深入讲解日志平台的架构设计与核心实现。
文章目录
- 目录
- 一、日志平台概述
- 1.1 日志类型
- 1.2 日志平台功能
- 二、架构设计
- 2.1 整体架构
- 2.2 技术选型
- 三、ELK 实战
- 3.1 Filebeat 配置
- 3.2 Logstash 配置
- 3.3 Docker Compose 部署
- 四、最佳实践
- 4.1 日志规范
- 4.2 日志格式
- 4.3 告警配置
- 总结
目录
- 一、日志平台概述
- 二、架构设计
- 三、ELK 实战
- 四、最佳实践
- 总结
一、日志平台概述
1.1 日志类型
┌─────────────────────────────────────────────────────────────┐ │ 日志类型 │ ├─────────────────────────────────────────────────────────────┤ │ 📝 应用日志:业务逻辑日志 │ │ 🔧 系统日志:操作系统日志 │ │ 🌐 访问日志:HTTP 请求日志 │ │ 🐛 错误日志:异常堆栈日志 │ │ 📊 审计日志:操作审计日志 │ └─────────────────────────────────────────────────────────────┘1.2 日志平台功能
| 功能 | 说明 |
|---|---|
| 日志采集 | 收集各来源日志 |
| 日志存储 | 持久化存储 |
| 日志检索 | 快速查询 |
| 日志分析 | 统计分析 |
| 告警通知 | 异常告警 |
二、架构设计
2.1 整体架构
┌─────────────────────────────────────────────────────────────┐ │ 日志平台架构 │ ├─────────────────────────────────────────────────────────────┤ │ │ │ 应用服务 ──► Filebeat ──► Kafka ──► Logstash ──► ES │ │ │ │ │ │ Kibana ◄───────────────────────────────────────────────── │ │ │ └─────────────────────────────────────────────────────────────┘2.2 技术选型
| 组件 | 说明 |
|---|---|
| Filebeat | 轻量级日志采集 |
| Kafka | 消息队列缓冲 |
| Logstash | 日志处理转换 |
| Elasticsearch | 日志存储检索 |
| Kibana | 可视化分析 |
三、ELK 实战
3.1 Filebeat 配置
# filebeat.ymlfilebeat.inputs:-type:logenabled:truepaths:-/var/log/app/*.logfields:app:order-serviceenv:prodfields_under_root:trueoutput.kafka:hosts:["kafka1:9092","kafka2:9092"]topic:"logs"partition.round_robin:reachable_only:truerequired_acks:13.2 Logstash 配置
# logstash.confinput{kafka{bootstrap_servers=>"kafka1:9092"topics=>["logs"]group_id=>"logstash"}}filter{grok{match=>{"message"=>"%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:msg}"}}date{match=>["timestamp","ISO8601"]}if[level]=="ERROR"{mutate{add_tag=>["error"]}}}output{elasticsearch{hosts=>["es1:9200","es2:9200"]index=>"logs-%{[app]}-%{+YYYY.MM.dd}"}}3.3 Docker Compose 部署
version:'3'services:elasticsearch:image:elasticsearch:8.10.0environment:-discovery.type=single-node-xpack.security.enabled=falseports:-"9200:9200"volumes:-es-data:/usr/share/elasticsearch/datakibana:image:kibana:8.10.0ports:-"5601:5601"environment:-ELASTICSEARCH_HOSTS=http://elasticsearch:9200depends_on:-elasticsearchlogstash:image:logstash:8.10.0volumes:-./logstash.conf:/usr/share/logstash/pipeline/logstash.confdepends_on:-elasticsearchvolumes:es-data:四、最佳实践
4.1 日志规范
// 日志规范示例@Slf4j@ServicepublicclassOrderService{publicOrdercreateOrder(OrderDTOdto){// 入口日志log.info("创建订单开始, userId={}, items={}",dto.getUserId(),dto.getItems());try{Orderorder=doCreate(dto);// 成功日志log.info("创建订单成功, orderId={}",order.getId());returnorder;}catch(Exceptione){// 错误日志(包含关键参数)log.error("创建订单失败, userId={}, error={}",dto.getUserId(),e.getMessage(),e);throwe;}}}4.2 日志格式
{"timestamp":"2024-01-01T10:00:00.000+08:00","level":"INFO","traceId":"abc123","spanId":"def456","app":"order-service","host":"192.168.1.100","thread":"http-nio-8080-exec-1","class":"com.example.OrderService","message":"创建订单成功","context":{"userId":"1001","orderId":"2001"}}4.3 告警配置
# Kibana 告警规则rules:-name:"错误日志告警"type:"frequency"index:"logs-*"filter:-term:level:"ERROR"timeframe:minutes:5num_events:10alert:-"email"email:-"ops@example.com"总结
✅日志平台概述:日志类型、核心功能
✅架构设计:整体架构、技术选型
✅ELK 实战:Filebeat、Logstash、Docker 部署
✅最佳实践:日志规范、格式、告警
本系列完结
作者:刘~浪地球
系列:技术选型与实战(五)
更新时间:2026-04-25