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

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

相关推荐
悟天特斯35 分钟前
安防一体化:从“各管各的“到“全局联动“
java·大数据·网络·人工智能·物联网
70后写java的老码农44 分钟前
Spring Boot 3.x + ShardingSphere 5.x + MyBatis-Plus 3.x:订单分库分表实战(含两个踩坑记录)
java
霸道流氓气质1 小时前
AI 翻译插件:翻译记忆级联复用、术语混合检索与结构化质量门禁的 Vue3 + Spring AI 生产级实战
java·人工智能·spring
斯维赤1 小时前
OCR到底是接入第三方API 还是自己封装?
java·ocr
码智社1 小时前
Redis 哨兵模式详解:从原理到生产实践
java·redis
救救孩子把1 小时前
结构化输出为何“格式正确、答案错误”?JSON Schema 的能力边界
android·java·json·agent·agent服务
北冥you鱼2 小时前
Go 语言 GORM 使用 Preload:从关联查询到嵌套预加载的完整实践
开发语言·jvm·golang
silvamux_2 小时前
微头条爆款体平台适配实测:把交付要求变成可计算的指标
java·线性代数·算法·决策树·矩阵
论文复现现场2 小时前
DeepSeek V4.1 Flash 和 V4 Pro 有什么区别?API 价格、性能与迁移建议
java·服务器·人工智能·python·大模型api·deepseek·deepseek v4.1
郭小李2 小时前
转发与重定向
java·服务器·数据库