关于Loki中promtail组件收集日志的几点思考
promtail组件是采用docker方式运行的,配置文件也是在docker容器中,宿主机中没有挂载点,这就有问题了。
宿主机中没有挂载配置文件,也就没法修改,登录promtail的docker容器中后,没法使用nano,vi或vim修改这个配置文件
在进一步延伸就是监控的是promtail的docker容器中/var/log/*log的文件,没法监控容器中的其他文件或者宿主机中的文件。
不过倒是可以通过修改docker-compose.yaml文件把宿主机的存放日志的目录给挂载到容器中的/var/log/路径下,从而实现监控宿主机日志文件的办法
但是这种办法也是只能监控宿主机/var/log/目录下文件是log的文件,根据容器中配置文件来决定的:/var/log/*log
不通过挂载的方式有没有办法能监控宿主机中的其他文件?
或者有啥办法能修改容器中的/etc/promtail/config.yml配置文件?
暂时想到两种办法:
- docker-compose.yaml文件中设置挂载容器使用的config.yml配置文件
延伸一下,除了挂载容器使用的配置文件外,还需要挂载宿主机中的日志路径
promtail使用的配置文件,在宿主机中:/tmp/config.yml
注意:这个文件内容,只修改scrape_configs中labels.job和__path__
,其他部分跟promtail容器中原来使用的保持一致。
当然scrape_configs可以添加多个,这里就添加一个作为示例
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: message
__path__: /var/log/messages
docker-compose.yaml 文件内容:
version: "3"
networks:
loki:
services:
loki:
image: grafana/loki:2.0.0
ports:
- "3100:3100"
command: -config.file=/etc/loki/local-config.yaml
networks:
- loki
promtail:
image: grafana/promtail:2.0.0
volumes:
- /tmp/config.yml:/etc/promtail/config.yml # 挂载宿主机中的指定文件作为promtail容器的配置文件
- /var/log/messages:/var/log/messages # 挂载宿主机中的日志文件,这个要跟/tmp/config.yml文件中的__path__中的这个保持一致,否则无法吧宿主机日志挂载到promtail容器中,当然也就检测不到这个文件,虽然配置文件中有配置
command: -config.file=/etc/promtail/config.yml
networks:
- loki
grafana:
image: grafana/grafana:latest
ports:
- "3000:3000"
networks:
- loki
启动后查看效果,正好跟/tmp/config.yml文件中配置的一样
采用这种办法可以解决上述问题
- 不采用docker容器方式部署了,采用二进制方式,启动的时候指定使用的配置文件
参考地址:https://www.cnblogs.com/sanduzxcvbnm/p/14234953.html
采用这种办法也能解决上述问题