日志管理实战:ELK与Loki对比选型与落地实践

日志管理实战:ELK与Loki对比选型与落地实践

大家好,我是迪哥。日志管理是运维工作的核心,从 ELK 到 Loki,从日志收集到分析,从告警到可视化,我们经历了多种方案的演进。今天就聊聊日志管理的选型和落地经验。

日志管理方案对比

方案 适用场景 特点
ELK 功能完善,搜索能力强 资源占用较高
Loki 轻量级,与 Grafana 集成好 搜索能力相对较弱
EFK 云原生场景 基于 Elasticsearch
Splunk 企业级 商业软件,成本高

ELK 实战

架构

复制代码
┌─────────────────────────────────────────────────────────────┐
│                         ELK Stack                           │
├─────────────────────────────────────────────────────────────┤
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐    │
│  │   Filebeat   │  │  Logstash    │  │ Elasticsearch│    │
│  │  日志收集    │  │  日志处理    │  │  日志存储    │    │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘    │
│         │                 │                 │              │
│         └─────────────────┴─────────────────┘              │
│                           │                                │
│                           ▼                                │
│                  ┌──────────────┐                         │
│                  │   Kibana     │                         │
│                  │   可视化      │                         │
│                  └──────────────┘                         │
└─────────────────────────────────────────────────────────────┘

Filebeat 配置

yaml 复制代码
filebeat.inputs:
  - type: log
    enabled: true
    paths:
      - /var/log/*.log
      - /var/log/app/*.log

output.logstash:
  hosts: ["logstash:5044"]

Logstash 配置

conf 复制代码
input {
  beats {
    port => 5044
  }
}

filter {
  grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{DATA:logger} - %{GREEDYDATA:message}" }
  }
  
  date {
    match => [ "timestamp", "ISO8601" ]
  }
  
  mutate {
    remove_field => [ "host", "agent", "ecs" ]
  }
}

output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "logs-%{+YYYY.MM.dd}"
  }
}

Loki 实战

架构

复制代码
┌─────────────────────────────────────────────────────────────┐
│                         Loki Stack                          │
├─────────────────────────────────────────────────────────────┤
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐    │
│  │   Promtail   │  │    Loki      │  │   Grafana    │    │
│  │  日志收集    │  │  日志存储    │  │   可视化      │    │
│  └──────┬───────┘  └──────┬───────┘  └──────┬───────┘    │
│         │                 │                 │              │
│         └─────────────────┴─────────────────┘              │
└─────────────────────────────────────────────────────────────┘

Promtail 配置

yaml 复制代码
server:
  http_listen_port: 9080
  grpc_listen_port: 0

positions:
  filename: /tmp/positions.yaml

clients:
  - url: http://loki:3100/loki/api/v1/push

scrape_configs:
  - job_name: system
    static_configs:
      - targets:
          - localhost
        labels:
          job: system
          __path__: /var/log/*.log

Loki 查询

logql 复制代码
# 查询特定服务的错误日志
{app="order-service", level="ERROR"} |= "exception"

# 查询过去1小时的日志
{job="system"} | time > 1h

# 统计错误数量
count_over_time({level="ERROR"}[1h])

对比选型

维度 ELK Loki
搜索能力 强大,支持全文搜索 较弱,基于标签匹配
资源占用 较高 较低
集成 与 Kibana 集成 与 Grafana 集成
存储 索引方式 压缩存储
适用场景 需要复杂搜索 云原生、轻量级

最佳实践清单

维度 最佳实践
选型 需要全文搜索用 ELK,轻量级场景用 Loki
收集 使用 Filebeat/Promtail 收集日志
存储 配置合理的保留策略
查询 使用结构化日志,方便查询
告警 配置基于日志的告警规则

说到日志管理,我家那只叫 Docker 的哈士奇最近学会了"日志记录"------每次拆完家都会留下一些毛发作为"日志",让我能追踪它的行动轨迹,这日志记录能力比我们的 ELK 还强 😂

我是迪哥,我们下期再见!

相关推荐
YDS82923 分钟前
DeepSeek RAG&MCP + Agent智能体项目 —— 集成ELK日志管理系统和Prometheus监控系统
java·elk·ai·springboot·agent·prometheus·deepseek
骄马之死7 小时前
SpringMVC + SpringBoot 核心知识点总结
java·spring boot·后端
郑洁文9 小时前
基于Spring Boot的流浪动物救助网站
java·spring boot·后端·毕设·流浪动物救助
J-Tony119 小时前
【JVM】编译&&解释
jvm
螺丝钉code10 小时前
JAVA项目 Claude code CLAUDE.md 到底应该怎么写
java·人工智能·claude code
摇滚侠11 小时前
Maven 入门+高深 单一架构案例 54-59
java·架构·maven·intellij-idea
VidDown11 小时前
Webhook 调试器:让第三方回调“原形毕露”
java·开发语言·javascript·编辑器·postman
折哥的程序人生 · 物流技术专研11 小时前
Java 23 种设计模式:从踩坑到精通 | 原型模式 —— 克隆对象,深拷贝与浅拷贝的坑你踩过吗?
java·设计模式·架构·原型模式·单一职责原则
装不满的克莱因瓶12 小时前
基于 OpenResty 扩展开发实现动态服务注册与发现能力
java·开发语言·架构·openresty
程序员小羊!12 小时前
06Java 异常机制与常用类
java