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
采用這種辦法也能解決上述問題