zabbix监控docker容器提示权限不够的问题

omg8684 omg8684     2023-01-04     632

关键词:

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

取得数据,问题解决。

 

总结

权限不足一般由两部分解决

  1. 文件权限 rwx
  2. SELinux文件上下文件

这次的问题是由于zabbix_agent_t对cgroup_t没有规则说明产生无法访问,添加规则问题解决。

zabbix自发现实时监控docker容器及容器中各个服务的状态线上业务展示(代码片段)

...的环境变量以及自己的服务路径(1)jdk环境:jdk1.8(2)zabbix版本:zabbix3.4.5(3)zabbix脚本存放路径:/data/zabbix/scripts/(4).conf文件存放路径:/data/zabbix/etc/zabbix_agentd.conf.d/2.配置脚本、key、模板首选,zabbix_agentd 查看详情

zabbix自定义key监控docker(代码片段)

...况。二、想法编写监控脚本,使用自定义key的方式添加到Zabbix中。三、实践1、编写服务监控脚本#!/bin/bashinterval_time=600service_port_file=/script/tmp/service_port.txt#Gener_service_p 查看详情

zabbix监控容器情况和磁盘io

1、从https://pypi.python.org/pypi/docker-py#downloads这里下载docker-py-xxx.tar.gz到本地再传进去linux系统里面进行解压pythonsetup.pyinstall2、在agentd那里加入自定义模块UserParameter=docker_low_discovery[],/bin/bash/etc/zabbix/scripts/ 查看详情

docker安装zabbix_proxy进行代理监控

使用docker安装非常方便,避免一步步的配置##查找包含zabbixproxysqlite的镜像dockersearchzabbix##下载镜像(使用sqlite3比较轻便,也可以使用mysql的)dockerpulldocker.io/zabbix/zabbix-proxy-sqlite3##启动一个容器(同时设置zabbix_server的地址)dockerr... 查看详情

docker搭建zabbix监控(代码片段)

1、创建目录[[email protected]script]#mkdir/usr/local/zabbix/etc/script2、编辑容器发现脚本[[email protected]script]#vimdocker_discovery.py#!/usr/bin/envpythonimportosimportsimplejsonasjsont=os.popen(" 查看详情

docker部署zabbix(代码片段)

docker部署zabbix1、zabbix入门:Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警,这样可以快速反馈服务器的问题。zabbix基... 查看详情

zabbix通过自定义脚本监控docker服务dockernginx容器,图文详细(代码片段)

搭建zabbix参考:docker用docker-compose快速搭建zabbix最新版环境介绍:服务端ubuntu:192.168.152.132客户端centos:192.168.152.1501:在客户端安装agentubuntu和centos都支持在线安装,目前,Ubuntu在线安装版本为4.7,... 查看详情

zabbix中自定义key执行时权限不够

...性进行测试。但在server端检测时出现权限不够的问题一.Zabbix-agent配置自定义key~]#vim/etc/zabbix/zabbix-agent.confUserParameter=baidu_network_status[*],/root/bin/baidu.sh$1脚本放置目录为/root 查看详情

zabbix在docker中的应用和监控(代码片段)

目录Zabbix在Docker中的应用和监控一.如何使Zabbix跑在Docker里1.Docker基础环境配置2.Docker-compose安装配置3.启动zabbixserver4.基本配置二.使用Zabbix监控Docker1.部署方式2.模块方式3.使用DockerAgent方式4.关联模版转载文档Zabbix在Docker中的应用... 查看详情

zabbix实战之故障处理篇zabbix监控中文乱码问题解决方法

【Zabbix实战之故障处理篇】Zabbix监控中文乱码问题解决方法一、问题展现1.查看Zabbix仪表盘2.问题分析二、检查Zabbix环境1.检查Zabbix监控主机2.检查Zabbix各组件状态三、在宿主机安装中文字体库1.安装中文字体2.查看字体文件四、安... 查看详情

zabbix去执行远程命令

...扫兴了!其实这种一两个命令就能搞定的问题就应该交给Zabbix自己去解决。我们这里就举一个“监控文件大小”的例子:假设我们把/mnt这个文件夹挂载到数据盘上,如果数据盘存储空间不够用,就要求zabbix远程 查看详情

zabbix监控界面状态一直显示为loading的解决方法

今天安装完Zabbix之后,第一次登录到监控界面,发现界面上的status状态都显示的是loading,等待了一会还是为改变,最后发现是nginx的问题。nginx在执行zabbixdashboard的jsLoader.php时由于fastcgi缓存不够用,会生成临时文件放到/var/lib/ngi... 查看详情

使用docker安装zabbix,并配置自定义监控项(代码片段)

使用Docker安装Zabbix,并配置自定义监控项一、Zabbix简介1.监控功能2.Zabbix工作原理3.Zabbix组件4.Zabbix进程二、使用Zabbix配置自定义监控项1.安装Zabbix2.开启自定义监控项3.编写Nginx自定义监控脚本一、Zabbix简介Zabbix可以用来监控各... 查看详情

centos下docker容器安装vim(代码片段)

背景使用docker来安装虚拟机可以提升安装效率和开发效率。本次在安装了jenkins之后,突然忘记密码了。需要修改config.xml文件来重新登录进去之后发现死活不能使用vim用yum安装发,发现yum也不能用。解决方案安装vim命令apt... 查看详情

centos下docker容器安装vim(代码片段)

背景使用docker来安装虚拟机可以提升安装效率和开发效率。本次在安装了jenkins之后,突然忘记密码了。需要修改config.xml文件来重新登录进去之后发现死活不能使用vim用yum安装发,发现yum也不能用。解决方案安装vim命令apt... 查看详情

zabbix自定义监控项没中没权限读取文件问题

zabbix自定义监控项没中没权限读取文件问题标题有点长,通是这个问题也让我卡了一会,因此在这里记录下!首先看看我的自定义监控项:编辑‘/etc/zabbix/zabbix_agentd.conf’在尾部添加下面的参数:UserParameter=kg_pv,awk‘!/favico... 查看详情

docker 容器中 PostgreSQL 的权限问题

】docker容器中PostgreSQL的权限问题【英文标题】:PermissionissuewithPostgreSQLindockercontainer【发布时间】:2019-10-0421:55:30【问题描述】:我正在尝试使用PostgreSQL运行一个docker镜像,该镜像配置了一个用于持久数据的卷。docker-compose.ymlver... 查看详情

zabbix上监控docker

说明第一种方案,借助docker的python版的api,然后通过自己封装自定义脚本来做,稍微麻烦点,但是可以达到个人自定义的效果。第二种借助国外的一位大神已经封装好的模板来做,简单省事情,不过功能有限,更多功能还是需要... 查看详情