服务器日志监控是运维和DevOps的核心工作之一,主要通过收集、分析、告警和可视化来保障系统稳定运行,以下是完整的解决方案:
一、日志监控架构设计
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 日志收集层 │───▶│ 日志聚合层 │───▶│ 存储分析层 │
│ Filebeat │ │ Logstash/ │ │ Elasticsearch │
│ Fluentd │ │ Kafka/RabbitMQ │ │ Splunk │
│ Log agent │ │ │ │ ClickHouse │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │
▼ ▼
┌─────────────────┐ ┌─────────────────┐
│ 监控告警层 │ │ 可视化层 │
│ Prometheus │ │ Grafana │
│ ElastAlert │ │ Kibana │
│ AlertManager │ │ │
└─────────────────┘ └─────────────────┘二、具体实施步骤
常用工具选择:
- Filebeat:轻量级,适合文件日志
- Fluentd/Fluent Bit:云原生环境
- Logstash:功能强大,资源消耗较大
Filebeat配置示例(filebeat.yml):
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
- /var/log/nginx/error.log
fields:
log_type: nginx
output.elasticsearch:
hosts: ["elasticsearch:9200"]
Logstash管道配置(nginx.conf):
input {
beats {
port => 5044
}
}
filter {
if [fields][log_type] == "nginx" {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
}
geoip {
source => "clientip"
}
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "nginx-%{+YYYY.MM.dd}"
}
}| 存储方案 | 适用场景 | 优点 |
| Elasticsearch | 全文搜索、复杂查询 | 强大的搜索能力 |
| Loki | 云原生、成本低 | 轻量级,Grafana原生支持 |
| Splunk | 企业级监控 | 功能全面,企业级支持 |
| ClickHouse | 海量日志分析 | 查询性能极佳 |
Prometheus + Grafana方案
prometheus配置
scrape_configs:
- job_name: 'nginx_logs'
static_configs:
- targets: ['log-exporter:9100']
告警规则示例(prometheus.rules.yml):
groups:
- name: nginx_errors
rules:
- alert: HighErrorRate
expr: rate(nginx_http_requests_total{status=~"5.."}[5m]) > 0.05
for: 5m
labels:
severity: critical
annotations:
summary: "High error rate on {{ $labels.instance }}"
description: "Error rate is {{ $value }}"ELK Stack告警(ElastAlert)
elastalert规则示例
name: Too Many 500 Errors
type: frequency
index: nginx-*
num_events: 10
timeframe:
minutes: 5
filter:
- term:
response: "500"
alert:
- "email"
email:
- "ops@example.com"
{
"panels": [
{
"title": "请求速率",
"targets": [{
"expr": "rate(nginx_http_requests_total[5m])"
}]
},
{
"title": "错误率",
"targets": [{
"expr": "sum(rate(nginx_http_requests_total{status=~\"5..\"}[5m])) / sum(rate(nginx_http_requests_total[5m]))"
}]
}
]
}三、最佳实践建议
{
"timestamp": "2024-01-15T10:30:00Z",
"level": "ERROR",
"service": "api-gateway",
"message": "Connection refused",
"trace_id": "abc-123-xyz",
"user_id": "user123",
"request_id": "req-456",
"duration_ms": 150,
"metadata": {
"host": "server-01",
"environment": "production"
}
}
必须监控的核心指标
ESSENTIAL_METRICS = {
"error_rate": "错误请求比例",
"response_time": "响应时间百分位(P95/P99)",
"throughput": "请求吞吐量",
"slow_queries": "慢查询数量",
"resource_usage": "CPU/内存使用率",
"security_events": "安全事件(登录失败、暴力破解)"
}
logrotate配置示例(/etc/logrotate.d/nginx)
/var/log/nginx/*.log {
daily
rotate 30
compress
delaycompress
missingok
notifempty
create 644 www-data www-data
postrotate
[ ! -f /var/run/nginx.pid ] || kill -USR1cat /var/run/nginx.pid
endscript
}- 敏感信息脱敏(身份证、密码、token)
- 日志访问权限控制
- 日志加密存储
- 审计日志保留(满足合规要求)
四、云原生方案
使用Fluent Bit作为DaemonSet
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluent-bit
spec:
template:
spec:
containers:
- name: fluent-bit
image: fluent/fluent-bit:latest
volumeMounts:
- name: varlog
mountPath: /var/log
- name: config
mountPath: /fluent-bit/etc/
volumes:
- name: varlog
hostPath:
path: /var/log
- name: config
configMap:
name: fluent-bit-config五、故障排查流程
1、告警触发 → 查看告警详情 2、查看相关服务日志 → 定位异常时间段 3、分析错误模式 → 确定影响范围 4、查看关联指标 → CPU/内存/网络异常 5、检查上下游依赖 → 数据库/第三方服务 6、实施修复 → 验证解决 7、记录复盘 → 更新监控规则
六、推荐工具栈
轻量级:Loki + Promtail + Grafana
全能型:Elastic Stack(ELK/EFK)
高性能:ClickHouse + Vector
Splunk:企业级,功能全面
Datadog:一体化监控
New Relic:APM与日志结合
- AWS:CloudWatch Logs + OpenSearch
- Azure:Azure Monitor + Log Analytics
- GCP:Cloud Logging + BigQuery
七、成本优化建议
1、冷热数据分离:热数据存ES,冷数据存S3
2、采样策略:非关键日志按比例采样
3、日志分级存储:不同级别日志不同保留策略
4、压缩存储:使用高效压缩算法
这个方案可以根据实际业务规模和复杂度进行裁剪,对于小型团队,可以从Loki+Grafana开始;对于大型企业,建议采用完整的ELK Stack或商业解决方案。
文章摘自:https://idc.huochengrm.cn/fwq/21237.html
评论