日志平台架构设计

系列导读:本篇将深入讲解日志平台的架构设计与核心实现。


文章目录

    • 目录
    • 一、日志平台概述
      • [1.1 日志类型](#1.1 日志类型)
      • [1.2 日志平台功能](#1.2 日志平台功能)
    • 二、架构设计
      • [2.1 整体架构](#2.1 整体架构)
      • [2.2 技术选型](#2.2 技术选型)
    • [三、ELK 实战](#三、ELK 实战)
      • [3.1 Filebeat 配置](#3.1 Filebeat 配置)
      • [3.2 Logstash 配置](#3.2 Logstash 配置)
      • [3.3 Docker Compose 部署](#3.3 Docker Compose 部署)
    • 四、最佳实践
      • [4.1 日志规范](#4.1 日志规范)
      • [4.2 日志格式](#4.2 日志格式)
      • [4.3 告警配置](#4.3 告警配置)
    • 总结

目录


一、日志平台概述

1.1 日志类型

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    日志类型                                 │
├─────────────────────────────────────────────────────────────┤
│  📝 应用日志:业务逻辑日志                                  │
│  🔧 系统日志:操作系统日志                                  │
│  🌐 访问日志:HTTP 请求日志                                 │
│  🐛 错误日志:异常堆栈日志                                  │
│  📊 审计日志:操作审计日志                                  │
└─────────────────────────────────────────────────────────────┘

1.2 日志平台功能

功能 说明
日志采集 收集各来源日志
日志存储 持久化存储
日志检索 快速查询
日志分析 统计分析
告警通知 异常告警

二、架构设计

2.1 整体架构

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    日志平台架构                             │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  应用服务 ──► Filebeat ──► Kafka ──► Logstash ──► ES      │
│                                                           │
│                                                           │
│  Kibana ◄───────────────────────────────────────────────── │
│                                                             │
└─────────────────────────────────────────────────────────────┘

2.2 技术选型

组件 说明
Filebeat 轻量级日志采集
Kafka 消息队列缓冲
Logstash 日志处理转换
Elasticsearch 日志存储检索
Kibana 可视化分析

三、ELK 实战

3.1 Filebeat 配置

yaml 复制代码
# filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/app/*.log
  fields:
    app: order-service
    env: prod
  fields_under_root: true

output.kafka:
  hosts: ["kafka1:9092", "kafka2:9092"]
  topic: "logs"
  partition.round_robin:
    reachable_only: true
  required_acks: 1

3.2 Logstash 配置

ruby 复制代码
# logstash.conf
input {
  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 部署

yaml 复制代码
version: '3'
services:
  elasticsearch:
    image: elasticsearch:8.10.0
    environment:
      - discovery.type=single-node
      - xpack.security.enabled=false
    ports:
      - "9200:9200"
    volumes:
      - es-data:/usr/share/elasticsearch/data

  kibana:
    image: kibana:8.10.0
    ports:
      - "5601:5601"
    environment:
      - ELASTICSEARCH_HOSTS=http://elasticsearch:9200
    depends_on:
      - elasticsearch

  logstash:
    image: logstash:8.10.0
    volumes:
      - ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch

volumes:
  es-data:

四、最佳实践

4.1 日志规范

java 复制代码
// 日志规范示例
@Slf4j
@Service
public class OrderService {
    
    public Order createOrder(OrderDTO dto) {
        // 入口日志
        log.info("创建订单开始, userId={}, items={}", dto.getUserId(), dto.getItems());
        
        try {
            Order order = doCreate(dto);
            // 成功日志
            log.info("创建订单成功, orderId={}", order.getId());
            return order;
        } catch (Exception e) {
            // 错误日志(包含关键参数)
            log.error("创建订单失败, userId={}, error={}", dto.getUserId(), e.getMessage(), e);
            throw e;
        }
    }
}

4.2 日志格式

json 复制代码
{
  "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 告警配置

yaml 复制代码
# Kibana 告警规则
rules:
  - name: "错误日志告警"
    type: "frequency"
    index: "logs-*"
    filter:
      - term:
          level: "ERROR"
    timeframe:
      minutes: 5
    num_events: 10
    alert:
      - "email"
    email:
      - "ops@example.com"

总结

日志平台概述 :日志类型、核心功能

架构设计 :整体架构、技术选型

ELK 实战 :Filebeat、Logstash、Docker 部署

最佳实践:日志规范、格式、告警

本系列完结


作者 :刘~浪地球
系列 :技术选型与实战(五)
更新时间:2026-04-25

相关推荐
玖笙&2 小时前
✨WPF编程进阶【9.1】:WPF资源完全指南(附源码)
c++·c#·wpf·visual studio
hhb_61813 小时前
Dylan 语言核心特性与工程实践深度解析
开发语言·c#
CSharp精选营14 小时前
最新.NET新手入门学习网站合集(2026更新版)
c#·学习资料·开发教程·.net 新手入门·开放资源·.net网站
hhb_61817 小时前
C#高性能异步编程实战与底层原理深度解析
开发语言·c#
beyond谚语18 小时前
反射、特性和依赖注入
c#
Tiger_shl19 小时前
C# 托管对象、非托管对象 讲解
开发语言·c#
LF男男19 小时前
Action- C# 内置的委托类型
java·开发语言·c#
2501_930707781 天前
使用C#代码在 PowerPoint 中创建组合图表
开发语言·c#·powerpoint
Full Stack Developme1 天前
Hutool DFA 教程
开发语言·c#