日志与监控(ELK / Prometheus 示例)
在生产环境中,对 Docker 容器的日志和运行指标进行实时监控,能够帮助快速排查问题和优化性能。
1. 使用 ELK 堆栈收集日志
ELK 组成:
- Elasticsearch:存储和搜索日志
- Logstash:收集、处理和转发日志
- Kibana:可视化日志数据
Docker Compose 示例:
yaml
version: "3.9"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.11.0
environment:
- discovery.type=single-node
ports:
- "9200:9200"
logstash:
image: docker.elastic.co/logstash/logstash:8.11.0
volumes:
- ./logstash.conf:/usr/share/logstash/pipeline/logstash.conf
ports:
- "5000:5000"
kibana:
image: docker.elastic.co/kibana/kibana:8.11.0
ports:
- "5601:5601"- 应用容器日志收集:
yaml
services:
app:
image: myapp
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"- Logstash 配置 (
logstash.conf):
txt
input {
tcp { port => 5000 }
}
output {
elasticsearch { hosts => ["elasticsearch:9200"] }
}2. 使用 Prometheus 监控容器
- Prometheus:收集容器指标(CPU、内存、网络等)
- Docker Compose 示例:
yaml
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"- Prometheus 配置 (
prometheus.yml):
yaml
scrape_configs:
- job_name: 'docker'
static_configs:
- targets: ['app:9100']- Node Exporter:在容器中暴露指标
yaml
node-exporter:
image: prom/node-exporter:latest
ports:
- "9100:9100"Grafana 可视化:
- 将 Prometheus 数据源添加到 Grafana
- 创建仪表盘监控 CPU、内存、磁盘和网络指标
3. 最佳实践
- 日志集中管理,避免容器内部日志丢失
- 配置日志轮转和存储限制,避免磁盘占满
- 使用 Prometheus + Grafana 实现实时监控
- 结合告警机制(Alertmanager)快速响应异常
- 对关键服务设置单独监控指标
通过 ELK 堆栈收集日志和 Prometheus 监控指标,开发者可以实现 Docker 容器化应用的全面监控,及时发现问题并优化系统性能。