Zabbix获取进程数据异常:进程名被截断为10字符并以+结尾
问题原因及解决方案
核心原因
你的脚本大概率使用了ps命令的comm字段(默认显示进程名),这个字段在多数系统环境中会被截断到15字符以内(部分场景下为10字符),末尾加+标识截断状态。本地执行脚本时,因用户环境变量或ps默认参数差异,能显示完整进程名;但Zabbix Agent以系统用户(通常是zabbix用户)运行时,触发了ps的截断输出行为。
解决方案
1. 修改脚本中的ps命令,使用完整进程名字段
将脚本里获取进程名的ps参数从comm替换为args或cmd,这两个字段会输出完整的命令行/进程名:
- 示例替换:原命令
ps -p $PID -o comm=改为ps -p $PID -o args= - 或者直接用
ps -e -o pid,args | grep "kworker/85"匹配完整进程信息
2. 用pgrep精确匹配进程
如果脚本是通过进程名查找PID,改用pgrep -f参数匹配完整命令行,避免基于截断字符的错误匹配:
PID=$(pgrep -f "kworker/85")
3. 验证Zabbix Agent的执行环境
在Agent主机切换到zabbix用户手动执行脚本,确认输出是否与zabbix_get结果一致:
su - zabbix -s /bin/bash ./zabbix_proc.sh -j kworker/85
若此时输出同样被截断,说明是zabbix用户环境下ps的默认行为,按上述1、2步骤修改即可。
4. 清理脚本中的手动截断逻辑
检查脚本是否存在cut、awk等固定长度截取进程名的代码,直接删除这类逻辑,确保保留完整输出。
内容的提问来源于stack exchange,提问作者oxpy
相关产品推荐
相关产品推荐

