日志监控
日志监控是运维工作的核心,通过收集和分析应用日志,可以快速定位系统问题,分析业务趋势,提升系统可靠性。
📋 日志监控体系
🎯 ELK Stack
1. ELK Stack 架构
ELK Stack是最流行的日志监控解决方案,包含Elasticsearch、Logstash、Kibana三个核心组件。
架构图:
2. Elasticsearch
特点:
- 分布式搜索:分布式搜索引擎
- 全文检索:强大的全文检索能力
- 实时分析:实时数据分析
- 水平扩展:支持水平扩展
配置示例:
yaml
# elasticsearch.yml
cluster.name: logs-cluster
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["node-1", "node-2", "node-3"]
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]3. Logstash
功能:
- 日志收集:从各种来源收集日志
- 日志处理:过滤、转换日志
- 日志输出:输出到Elasticsearch
配置示例:
ruby
# logstash.conf
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{GREEDYDATA:message}" }
}
date {
match => [ "timestamp", "yyyy-MM-dd HH:mm:ss" ]
}
}
output {
elasticsearch {
hosts => ["http://elasticsearch:9200"]
index => "logs-%{+YYYY.MM.dd}"
}
}4. Filebeat
特点:
- 轻量级:资源占用少
- 高效收集:高效收集日志
- 自动发现:自动发现日志文件
配置示例:
yaml
# filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/app/*.log
fields:
app: user-service
env: production
output.logstash:
hosts: ["logstash:5044"]5. Kibana
功能:
- 日志查询:搜索和查询日志
- 可视化:创建图表和仪表板
- 告警:设置告警规则
- 分析:日志分析和统计
Kibana查询示例:
json
{
"query": {
"bool": {
"must": [
{ "match": { "level": "ERROR" } },
{ "range": { "@timestamp": { "gte": "now-1h" } } }
]
}
}
}🎯 其他日志监控方案
1. EFK Stack
架构:
- Elasticsearch:日志存储
- Fluentd:日志收集(替代Logstash)
- Kibana:日志可视化
Fluentd配置示例:
xml
<source>
@type tail
path /var/log/app/*.log
pos_file /var/log/fluentd/pos/app.log.pos
tag app.logs
format json
</source>
<match app.logs>
@type elasticsearch
host elasticsearch
port 9200
index_name logs
type_name _doc
</match>2. Loki + Grafana
架构:
- Loki:轻量级日志聚合系统
- Grafana:日志可视化(复用Grafana)
特点:
- 轻量级:比ELK Stack更轻量
- Grafana集成:与Grafana深度集成
- Prometheus集成:与Prometheus集成
配置示例:
yaml
# loki-config.yml
server:
http_listen_port: 3100
schema_config:
configs:
- from: 2024-01-01
store: boltdb
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
storage_config:
boltdb:
directory: /loki/index
filesystem:
directory: /loki/chunks3. ClickHouse
特点:
- 列式存储:高效的列式存储
- 查询性能:查询性能极好
- 压缩比:高压缩比
适用场景:
- 大规模日志存储
- 日志分析
- 时序数据
📋 日志收集最佳实践
1. 日志格式规范
结构化日志:
json
{
"timestamp": "2024-01-01T10:00:00Z",
"level": "INFO",
"service": "user-service",
"traceId": "abc123",
"message": "User login successful",
"userId": "12345",
"ip": "192.168.1.100"
}日志字段:
- timestamp:时间戳
- level:日志级别
- service:服务名
- traceId:链路追踪ID
- message:日志消息
- context:上下文信息
2. 日志级别使用
日志级别:
- DEBUG:调试信息
- INFO:一般信息
- WARN:警告信息
- ERROR:错误信息
- FATAL:致命错误
使用建议:
- DEBUG:开发环境使用
- INFO:关键业务流程
- WARN:潜在问题
- ERROR:错误和异常
- FATAL:系统级错误
3. 日志存储策略
存储策略:
- 热数据:最近7天的日志(SSD)
- 温数据:7-30天的日志(普通存储)
- 冷数据:30天以上的日志(对象存储)
索引策略:
- 按日期索引:
logs-2024-01-01 - 按服务索引:
user-service-logs - 按环境索引:
production-logs
📋 日志分析场景
1. 错误日志分析
分析内容:
- 错误频率统计
- 错误类型分布
- 错误时间趋势
- 错误影响范围
2. 性能日志分析
分析内容:
- 接口响应时间
- 慢查询分析
- 系统资源使用
- 性能趋势分析
3. 业务日志分析
分析内容:
- 用户行为分析
- 业务流程分析
- 业务指标统计
- 异常行为检测
📋 日志告警
1. 告警规则
告警规则示例:
yaml
# 错误日志告警
- alert: HighErrorRate
expr: rate(logs{level="ERROR"}[5m]) > 10
for: 5m
annotations:
summary: "错误日志频率过高"
description: "错误日志频率持续5分钟超过10次/秒"
# 慢接口告警
- alert: SlowAPI
expr: histogram_quantile(0.95, rate(api_duration_seconds_bucket[5m])) > 1
for: 5m
annotations:
summary: "接口响应时间过长"
description: "95%接口响应时间超过1秒"2. 告警通知
通知渠道:
- 邮件:错误汇总邮件
- 短信:紧急告警短信
- 钉钉/企业微信:实时告警通知
- 电话:严重告警电话
📖 学习资源
视频教程
书籍推荐
- 《Elasticsearch权威指南》 - Elasticsearch使用指南
- 《ELK Stack实战》 - ELK Stack最佳实践
- 《日志管理与分析》 - 日志管理方法论
- 《实时日志分析》 - 实时日志分析技术
网站资源
工具推荐
- 日志收集:Filebeat、Logstash、Fluentd、Fluent Bit
- 日志存储:Elasticsearch、ClickHouse、Loki
- 日志可视化:Kibana、Grafana
- 日志分析:Elasticsearch、Splunk
✅ 日志监控检查清单
- [ ] 日志格式已规范
- [ ] 日志级别使用正确
- [ ] 日志收集已配置
- [ ] 日志存储已建立
- [ ] 日志分析已配置
- [ ] 日志告警已设置
- [ ] 日志存储策略已制定
- [ ] 日志备份机制已建立