日志管理实战ELK与Loki对比选型与落地实践大家好我是迪哥。日志管理是运维工作的核心从 ELK 到 Loki从日志收集到分析从告警到可视化我们经历了多种方案的演进。今天就聊聊日志管理的选型和落地经验。日志管理方案对比方案适用场景特点ELK功能完善搜索能力强资源占用较高Loki轻量级与 Grafana 集成好搜索能力相对较弱EFK云原生场景基于 ElasticsearchSplunk企业级商业软件成本高ELK 实战架构┌─────────────────────────────────────────────────────────────┐ │ ELK Stack │ ├─────────────────────────────────────────────────────────────┤ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │ │ Filebeat │ │ Logstash │ │ Elasticsearch│ │ │ │ 日志收集 │ │ 日志处理 │ │ 日志存储 │ │ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │ │ │ │ │ │ └─────────────────┴─────────────────┘ │ │ │ │ │ ▼ │ │ ┌──────────────┐ │ │ │ Kibana │ │ │ │ 可视化 │ │ │ └──────────────┘ │ └─────────────────────────────────────────────────────────────┘Filebeat 配置filebeat.inputs: - type: log enabled: true paths: - /var/log/*.log - /var/log/app/*.log output.logstash: hosts: [logstash:5044]Logstash 配置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 配置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/*.logLoki 查询# 查询特定服务的错误日志 {apporder-service, levelERROR} | exception # 查询过去1小时的日志 {jobsystem} | time 1h # 统计错误数量 count_over_time({levelERROR}[1h])对比选型维度ELKLoki搜索能力强大支持全文搜索较弱基于标签匹配资源占用较高较低集成与 Kibana 集成与 Grafana 集成存储索引方式压缩存储适用场景需要复杂搜索云原生、轻量级最佳实践清单维度最佳实践选型需要全文搜索用 ELK轻量级场景用 Loki收集使用 Filebeat/Promtail 收集日志存储配置合理的保留策略查询使用结构化日志方便查询告警配置基于日志的告警规则说到日志管理我家那只叫 Docker 的哈士奇最近学会了日志记录——每次拆完家都会留下一些毛发作为日志让我能追踪它的行动轨迹这日志记录能力比我们的 ELK 还强 我是迪哥我们下期再见