日志管理实战: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 还强 😂

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

相关推荐
刘小八11 小时前
Spring AI Tool Calling 生产化:参数校验、权限控制与超时隔离
java·人工智能·spring
丈剑走天涯11 小时前
JVM(八) JDK8 Parallel GC
jvm
奶糖 肥晨11 小时前
一次Spring Boot编译报错排查:三元运算符与包装类型的“隐形陷阱”
java·spring boot·后端
谢栋_11 小时前
设计模式从入门到精通之(七)责任链模式
java·设计模式·责任链模式
愚公移码11 小时前
蓝凌EKP18产品:核心执行流程
java·流程引擎
VortMall11 小时前
全维度打磨细节体验,赋能商城稳定有序运营|VortMall 微服务商城 v1.3.11 版本发布
java·微服务·云原生·架构·商城系统·开源商城·vortmall
Tirzano11 小时前
java 精简使用ffmpeg
java·开发语言·ffmpeg
唐青枫12 小时前
Java Jersey 实战指南:用 JAX-RS 注解写清晰的 REST API
java
一只小小Java13 小时前
Naocs本地部署&安装3.2.3+Spring boot 3.2.0
java·spring boot·后端·nacos
JL1513 小时前
Spring Boot vs Gin:Java 人搭第一个 Go REST API
java·spring boot·gin