Promtail Permission Denied 问题处理

‘Promtail Permission Denied’问题处理

Promtail是Linux系统中一款常用的日志收集工具,它依赖于Loki进行日志索引和查询。实际使用过程中,可能会遇到Promtail无法访问Var/log路径下的日志文件的情况。本文将为您详细解析这个问题,并提供相应的解决方案。

复现场景

  • 业务端编排文件(docker compose v2)
1
2
3
4
5
6
7
8
9
version: "3"

services:
promtail:
image: grafana/promtail:2.9.4
volumes:
- ./config:/mnt/config
- /var/log:/var/log
command: -config.file=/mnt/config/promtail-config.yaml
  • 业务端配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
server:
http_listen_port: 9080
grpc_listen_port: 0

positions:
filename: /tmp/positions.yaml

clients:
- url: http://{monitor_ip}:3100/loki/api/v1/push

scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: master_syslog
__path__: /var/log/syslog

通过监控端Grafana控制台查询到以下报错信息:

Mar 8 13:24:39 * promtail[*]: level=error ts=2024-03-08T05:24:39.394865029Z caller=filetarget.go:371 msg="failed to start tailer" error="open /var/log/apport.log: permission denied" filename=/var/log/apport.log

IMG_3495-dama

操作步骤

执行以下命令

1
sudo adduser --system promtail
  • 启动promtail容器往往会在系统中自动创建promtail用户,可选择跳过。
1
2
3
4
cd /var
sudo setfacl -R -m u:promtail:rX log
sudo chown promtail /tmp/positions.yaml
sudo usermod -a -G systemd-journal promtail
  • 遇到setfacl command not found报错,需要手动安装acl工具,如执行 apt install acl

  • sudo setfacl -R -m u:promtail:rX log 这个命令设置/var/log目录的访问控制列表(ACL)。setfacl命令用于设置或改变文件或目录的ACL。这里,-R选项表示递归地应用ACL,-m选项用于添加或修改ACL,u:promtail:rX表示允许用户promtail读取(r)目录下的所有文件和子目录。

  • sudo chown promtail /tmp/positions.yaml 这个命令改变/tmp/positions.yaml文件的所有者到promtail。

  • sudo usermod -a -G systemd-journal promtail 这个命令将用户promtail添加到组systemd-journal中。-a选项表示添加到组而不会改变用户的主组。systemd-journal组通常与journald服务相关联,确保promtail用户能够正确地与系统日志(journal)交互。

修复结果

image-20240308140158432

image-20240308140243462

参考资源

[Promtail: “open /var/log/boot.log: permission denied”]