Zabbix 监控 docker容器 提示权限不够的问题
Posted omg8684
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Zabbix 监控 docker容器 提示权限不够的问题相关的知识,希望对你有一定的参考价值。
Zabbix 监控 docker 提示权限不够的问题
背景
随着docker在项目中的应用越来越多,docker的运行状态成了需要关注的问题,使用zabbix对docker容器进行监控,不但可以关注容器本身的运行状态,还可以收集docker容器运行过程中使用的cpu,内存等情况,以供以后进行数据分析,对性能调优有所帮助。
Zabbix监控配置
参考
https://blog.csdn.net/yang00322/article/details/77895301
第二种方法
碰到的问题
监控项取值会报如下错误:
ZBX_NOTSUPPORTED: Cannot open memory.stat file
自定义了几个key,
UserParameter=docker.memusage[*],cat /sys/fs/cgroup/memory/system.slice/docker-$1.scope/memory.usage_in_bytes
UserParameter=docker.memlimit[*],cat /sys/fs/cgroup/memory/system.slice/docker-$1.scope/memory.limit_in_bytes
UserParameter=docker.memswusage[*],cat /sys/fs/cgroup/memory/system.slice/docker-$1.scope/memory.memsw.usage_in_bytes
UserParameter=docker.memswlimit[*],cat /sys/fs/cgroup/memory/system.slice/docker-$1.scope/memory.memsw.limit_in_bytes
以上key是直接读取文件里的值来获取内存数据。
在服务端用zabbix_get命令获取key值,结果如下:
cat:/sys/fs/cgroup/memory/system.slice/docker-xxx.scope/memory.usage_in_bytes: 权限不够
排错
在agent服务器上用命令
Sodu –u zabbix cat /sys/fs/cgroup/memory/system.slice/docker-xxx.scope/memory.usage_in_bytes
能够获取数据,证明文件权限是没有问题的。
由于以上问题在测试环境没有问题,在比较环境之后发现如下不同:
生产环境:
测试环境:
可能是由于SELinux的原因,查看SELinux启动状态
生产环境:
测试环境:
据此推断可能与SELinux规则有关。
查看SELinux
无规则,通过zabbix_agent进程读取文件的权限被制止了。
正确的应该是如下输出
NOTE:如提示没有sesearch ,需要安装setools,使用命令 yum install setools –y 进行安装。
到此可以确定SELinux引起了文件无法被zabbix读取。
解决
使用setroubleshoot对SELinux日志进行分析,在分析前要确定setroubleshoot已经安装,如没有安装,使用yum install setroubleshoot –y 进行安装即可。
1.提取audit日志
确认auditd服务启用
Systemctl status auditd 查看服务是否启用。
SELinux 缺省会通过 Linux 审计系统(auditd)将日志写在 /var/log/audit/audit.log 内,而这项务服缺省为启用的。假若 auditd 并未运行,信息将会被写进 /var/log/messages。SELinux 的日志都被标签有 AVC 这个关键字,方便它们从其它信息中过滤出来。
使用命令 sealert -a /var/log/audit/audit.log > /opt/audit_report 生成错误信息报告
查看报告
Cat /opt/audit_report
红色字体为报告中解决问题提出的方法,照方法执行命令即可。
SELinux is preventing /usr/bin/cat from read access on the 文件 memory.usage_in_bytes.
***** 插件 catchall (100. 置信度) 建议 ********************************************
If you believe that cat should be allowed read access on the memory.usage_in_bytes file by default.
Then 应该将这个情况作为 bug 报告。
可以生成本地策略模块以允许此访问。
Do
allow this access for now by executing:
# ausearch -c ‘cat‘ --raw | audit2allow -M my-cat
# semodule -i my-cat.pp
更多信息:
源环境 (Context) system_u:system_r:zabbix_agent_t:s0
目标环境 system_u:object_r:cgroup_t:s0
目标对象 memory.usage_in_bytes [ file ]
源 cat
源路径 /usr/bin/cat
端口 <Unknown>
主机 <Unknown>
源 RPM 软件包 coreutils-8.22-18.el7.x86_64
目标 RPM 软件包
策略 RPM selinux-policy-3.13.1-166.el7.noarch
Selinux 已启用 True
策略类型 targeted
强制模式 Enforcing
主机名 HIK-TMS-APP01
平台 Linux HIK-TMS-APP01 3.10.0-693.el7.x86_64 #1 SMP
Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64
警报计数 1
第一个 2018-09-30 16:10:50 CST
最后一个 2018-09-30 16:10:50 CST
本地 ID 978d7c52-3227-4020-a350-06f09ac92152
原始核查信息
type=AVC msg=audit(1538295050.838:128388): avc: denied { read } for pid=22685 comm="cat" name="memory.usage_in_bytes" dev="cgroup" ino=5333887 scontext=system_u:system_r:zabbix_agent_t:s0 tcontext=system_u:object_r:cgroup_t:s0 tclass=file
type=SYSCALL msg=audit(1538295050.838:128388): arch=x86_64 syscall=open success=no exit=EACCES a0=7ffda4b44f25 a1=0 a2=1fffffffffff0000 a3=7ffda4b42e30 items=0 ppid=3812 pid=22685 auid=4294967295 uid=996 gid=993 euid=996 suid=996 fsuid=996 egid=993 sgid=993 fsgid=993 tty=(none) ses=4294967295 comm=cat exe=/usr/bin/cat subj=system_u:system_r:zabbix_agent_t:s0 key=(null)
Hash: cat,zabbix_agent_t,cgroup_t,file,read
2.解决方法
根据autid日志中的方法执行如下
[[email protected] ~]# ausearch -c ‘cat‘ --raw | audit2allow -M my-cat
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i my-cat.pp
[[email protected] ~]# semodule -i my-cat.pp
执行zabbix_get 仍报权限不足问题。
ZBX_NOTSUPPORTED: cat: /sys/fs/cgroup/memory/system.slice/docker-05aa677af22b530429fc60d887c1776bae61362f61505d10f29dde87613aaf1b.scope/memory.usage_in_bytes: 权限不够
再次查看autid日志,有如下信息。
SELinux is preventing /usr/bin/cat from open access on the 文件 /sys/fs/cgroup/memory/system.slice/docker-05aa677af22b530429fc60d887c1776bae61362f61505d10f29dde87613aaf1b.scope/memory.usage_in_bytes.
***** 插件 catchall (100. 置信度) 建议 ********************************************
If you believe that cat should be allowed open access on the memory.usage_in_bytes file by default.
Then 应该将这个情况作为 bug 报告。
可以生成本地策略模块以允许此访问。
Do
allow this access for now by executing:
# ausearch -c ‘cat‘ --raw | audit2allow -M my-cat
# semodule -i my-cat.pp
更多信息:
源环境 (Context) system_u:system_r:zabbix_agent_t:s0
目标环境 system_u:object_r:cgroup_t:s0
目标对象 /sys/fs/cgroup/memory/system.slice/docker-05aa677a
f22b530429fc60d887c1776bae61362f61505d10f29dde8761
3aaf1b.scope/memory.usage_in_bytes [ file ]
源 cat
源路径 /usr/bin/cat
端口 <Unknown>
主机 <Unknown>
源 RPM 软件包 coreutils-8.22-18.el7.x86_64
目标 RPM 软件包
策略 RPM selinux-policy-3.13.1-166.el7.noarch
Selinux 已启用 True
策略类型 targeted
强制模式 Enforcing
主机名 HIK-TMS-APP01
平台 Linux HIK-TMS-APP01 3.10.0-693.el7.x86_64 #1 SMP
Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64
警报计数 7
第一个 2018-09-30 16:25:18 CST
最后一个 2018-09-30 16:39:16 CST
本地 ID 21376c49-d19a-4f16-a7f3-8d4844ca8bf0
原始核查信息
type=AVC msg=audit(1538296756.811:128402): avc: denied { open } for pid=24418 comm="cat" path="/sys/fs/cgroup/memory/system.slice/docker-05aa677af22b530429fc60d887c1776bae61362f61505d10f29dde87613aaf1b.scope/memory.usage_in_bytes" dev
="cgroup" ino=325467647 scontext=system_u:system_r:zabbix_agent_t:s0 tcontext=system_u:object_r:cgroup_t:s0 tclass=file
type=SYSCALL msg=audit(1538296756.811:128402): arch=x86_64 syscall=open success=no exit=EACCES a0=7ffde5de7ed7 a1=0 a2=1fffffffffff0000 a3=7ffde5de6100 items=0 ppid=23753 pid=24418 auid=4294967295 uid=996 gid=993 euid=996 suid=996 fsuid=
996 egid=993 sgid=993 fsgid=993 tty=(none) ses=4294967295 comm=cat exe=/usr/bin/cat subj=system_u:system_r:zabbix_agent_t:s0 key=(null)
Hash: cat,zabbix_agent_t,cgroup_t,file,open
type=MAC_POLICY_LOAD msg=audit(1538297325.807:128415): policy loaded auid=0 ses=7423
type=SYSCALL msg=audit(1538297325.807:128415): arch=c000003e syscall=1 success=yes exit=3783833 a0=4 a1=7f332ae68010 a2=39bc99 a3=7ffc7d665ad0 items=0 ppid=25055 pid=25064 auid=0 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=7423 comm="load_policy" exe="/usr/sbin/load_policy" subj=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 key=(null)
type=PROCTITLE msg=audit(1538297325.807:128415): proctitle="/sbin/load_policy"
再执行一次
[[email protected] ~]# ausearch -c ‘cat‘ --raw | audit2allow -M my-cat
******************** IMPORTANT ***********************
To make this policy package active, execute:
semodule -i my-cat.pp
[[email protected] ~]# semodule -i my-cat.pp
[[email protected]]# ./zabbix_get -s 10.1.11.239 -k docker.memusage[05aa677af22b530429fc60d887c1776bae61362f61505d10f29dde87613aaf1b]
1360359424
取得数据,问题解决。
总结
权限不足一般由两部分解决
- 文件权限 rwx
- SELinux文件上下文件
这次的问题是由于zabbix_agent_t对cgroup_t没有规则说明产生无法访问,添加规则问题解决。
以上是关于Zabbix 监控 docker容器 提示权限不够的问题的主要内容,如果未能解决你的问题,请参考以下文章
zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示