如何通过Loki采集容器内自定义路径的应用日志
如何用Promtail同时采集默认容器日志和自定义路径应用日志
首先明确:日志采集由Promtail负责,Loki仅做存储和查询,所以你需要修改的是Promtail的配置文件(通常为promtail-config.yaml),而非Loki的配置。
以下是具体实现步骤:
1. 保留原有容器日志采集配置
默认容器日志采集一般通过docker_sd_configs或kubernetes_sd_configs发现容器,采集/var/log/containers/*.log路径的日志。确保这部分配置保留,示例如下:
scrape_configs: # 原有容器日志采集任务 - job_name: docker-containers docker_sd_configs: - host: unix:///var/run/docker.sock refresh_interval: 10s relabel_configs: - source_labels: ['__meta_docker_container_name'] regex: '/(.*)' target_label: 'container' - source_labels: ['__meta_docker_container_log_stream'] target_label: 'stream' pipeline_stages: - docker: {}
2. 添加自定义路径日志的采集配置
容器内应用的自定义日志路径需要先挂载到宿主机,再让Promtail采集宿主机上的挂载路径。
2.1 挂载容器内日志路径到宿主机
- Docker场景:启动容器时用
-v参数挂载
docker run -d \ -v /宿主机本地路径/app-logs:/容器内自定义日志路径 \ your-app-image:latest
- Kubernetes场景:在Deployment的
volumeMounts和volumes中配置挂载规则
2.2 在Promtail中新增采集任务
在scrape_configs下添加新的job_name,指定宿主机上的日志路径:
scrape_configs: # 原有容器日志采集任务(保留) - job_name: docker-containers ... # 省略原有配置内容 # 新增自定义应用日志采集任务 - job_name: custom-app-logs static_configs: - targets: ['localhost'] labels: job: custom-app __path__: /宿主机本地路径/app-logs/*.log # 替换为实际挂载路径 pipeline_stages: # 根据日志格式添加解析规则,比如JSON格式日志: - json: expressions: level: level message: msg ts: timestamp - labels: level:
3. 验证配置并重启Promtail
- 检查配置语法正确性:
promtail -config.file=promtail-config.yaml -check-config
- 重启Promtail服务,使新配置生效
4. 在Grafana中查询两类日志
重启后,在Grafana Explore界面通过标签筛选:
- 容器日志:
{job="docker-containers"} - 自定义应用日志:
{job="custom-app"}
内容的提问来源于stack exchange,提问作者ilavarasan M
相关产品推荐
相关产品推荐

