多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

麒麟3.3探针安装卡死?从systemd到SELinux的排错全攻略

麒麟3.3探针安装卡死?从systemd到SELinux的排错全攻略 简介一份面向网络安全监测场景下麒麟系统实施运维人员的探针软件安装调试手册围绕Kylin 3.3环境下探针的部署、配置与维护展开适合承担装置上线、联调及后续运维工作的技术人员参考使用。资源为单个docx文档包体约1002KB共30页按实施流程编排为适用范围、总体目标与原则、作业前提条件、网络安全监测装置、程序安装、图形化界面配置、命令行配置、告警测试、程序卸载等章节。内容从系统版本信息核实、agent升级组件检查等准备工作写起逐一给出安装操作、图形化界面与命令行两种配置模式的参数设置方法并覆盖主机通讯地址、网络白名单、关键目录文件等安全相关配置项最后说明告警测试方式和卸载清理流程可直接对照现场环境逐步执行。已有1570人在CSDN学习下载整套指引结构清晰、步骤完整有助于减少现场摸索时间适合作为麒麟系统探针类装置实施与排错的桌面参考手册。1. 麒麟3.3 上装探针总是在最后一步卡住在麒麟3.3 上做探针软件部署十个现场有八个都卡在同一个地方进程起来了、端口也看了远端平台就是收不到数据。最典型的一次某开发者在 /opt/probe-agent 下解压安装包手工执行二进制能正常采集一旦交给 systemd 托管就疯狂重启日志只有一句 Operation not permitted。kylin 3.3探针软件安装调试手册 要解决的不是“下一步下一步”的点击流程而是从系统识别、依赖检查、服务托管到数据链路验证的完整闭环。适合刚接手国产化环境的新手也适合被这类问题反复磨过的实施工程师——你缺的往往不是安装命令而是排错顺序。2. 安装前先立规矩系统识别、依赖检查与探针包选型2.1 系统版本和内核识别三条命令先跑一遍拿到一台陌生的麒麟3.3 服务器我一般不会直接解压安装包。先跑三条命令确认系统身份、内核架构和硬件资源不然等到配置写错再排查代价高得多。cat /etc/os-release uname -a nproc free -h第一条命令输出系统名称、版本号和 ID用来确认这确实是麒麟 3.3 还是某个衍生版本。第二条命令uname -a给出内核版本和 CPU 架构比如 aarch64 还是 x86_64这直接决定探针安装包选哪一种。第三条命令nproc和free -h来快速看一眼 CPU 核数和内存很多探针软件在低于 2 核、2GB 内存的环境下启动后会自动降级或干脆拒绝运行。参数说明里有一个容易忽略的点uname -a里的架构信息要和安装包名称里的架构字段逐一对比。常见探针包会分 x86_64、aarch64、armv7hl 等变体拿错架构不会立刻报错而是启动后段错误退出。建议把三行输出直接保存到本地备忘后续写 systemd 服务时还要用到工作目录和用户信息。2.2 探针包类型与依赖静态编译还是动态编译麒麟3.3 作为国产化操作系统底层的 glibc 版本和生产环境里的软件包不一定完全匹配。探针软件通常有两种发布形态静态编译和动态编译。静态编译把运行库都打进二进制解压就能跑但体积偏大动态编译依赖系统的 libstdc、libcurl、libssl 等库需要现场逐一核对。ldd ./probe-agent | grep not found在解压后的目录里执行这条命令如果输出里出现libcrypto.so.10 not found或libstdc.so.6 not found说明系统缺库。参数说明ldd的作用是打印二进制依赖的动态库列表grep not found直接过滤出缺失项。看到缺失项后先用yum provides或apt-file search查库属于哪个包再决定安装补齐还是换静态包。这里有个血泪经验不要为了省事直接拷贝同版本系统上的 .so 文件到探针目录麒麟 3.3 的库路径和软链关系跟通用 Linux 发行版不完全一致手动拷库容易让探针运行时加载到不兼容的符号版本。正规做法是安装对应兼容包比如libstdc或openssl-libs。2.3 校验安装包md5 与解压前文件清单探针软件从传输到落盘中间可能经过多次拷贝。我拿到安装包后的第一件事是校验散列值而不是看压缩包大小。官方或项目组提供的 MD5 或 SHA256 校验值在任何情况下都不要跳过。md5sum probe-agent-2.1.0-rc5.tar.gz sha256sum probe-agent-2.1.0-rc5.tar.gz命令输出一个十六进制字符串和发布方给出的值逐字符对比。校验通过后再用tar -tzf查看包内文件列表确认路径前缀是不是版本号目录。参数说明里有一点要特别留意tar -tzvf能同时看到文件权限和属主如果探针主程序权限不是 0755解压后要先chmod否则后续 systemd 启动可能因执行权限不足而失败。这一步做完再解压能把一半的现场故障挡在外面。3. 安装实录从 tar 包到 systemd 服务的完整流程3.1 规划安装目录并解压探针探针软件不建议直接解压到 /tmp 或用户家目录我用得最多的目录是 /opt/probe-agent 和 /usr/local/probe-agent 两类。前者适合业务探针后者适合系统级采集探针。这里以 /opt/probe-agent 为例。mkdir -p /opt/probe-agent tar -zxvf probe-agent-2.1.0-rc5.tar.gz -C /opt/probe-agent cd /opt/probe-agent ls -l参数说明-C指定解压目标目录之后ls -l检查解压结果。有的探针包目录里自带 install.sh但我不建议直接跑这种脚本脚本里可能内置了固定的安装路径、用户和自启动策略未必适应当前环境。手工解压、手工放置、手工写服务文件每一步都看得见后续排错才好定位。解压后确认是否有conf、bin、logs三个目录这是大多数探针的标准布局。3.2 修改探针配置地址、令牌与采集间隔探针的配置文件一般叫 probe-agent.conf 或 config.yaml。这里以常见 key-value 格式为例核心要改四个参数上报服务器地址、端口、访问令牌、采集周期。vim /opt/probe-agent/conf/probe-agent.confserver_addr 192.168.10.20 server_port 8080 token a1b2c3d4e5f6 interval 30 log_level info参数说明里最容易翻车的是token。有的探针支持明文 token有的需要先服务端生成 token 文件再本地引用。如果配置后日志出现 “auth failed”优先检查 token 尾部是否有多余空格或者配置文件使用了 CRLF 换行符。麒麟 3.3 自带的 vim 默认不会显示换行符差异建议先用sed -n l查看特殊字符。interval30表示每 30 秒采集一次如果是 CPU 指标大于 60 秒会导致曲线太平如果小于 10 秒服务端可能因为入库压力大而拒收。完成修改后先手工执行一次探针主程序确认配置文件能被正确解析。/opt/probe-agent/bin/probe-agent -c /opt/probe-agent/conf/probe-agent.conf --check--check参数不是所有探针都有若你的版本不支持就直接前台运行几秒观察有没有报错输出。这一步很重要手工能跑起来才能进入下一步 systemd 托管。3.3 创建 systemd 服务开机自启与崩溃自动拉起手工运行探针只能解决眼前问题真要长期稳定运行必须在麒麟 3.3 上注册成 systemd 服务。这里写一个最常用的 service 单元配置。vim /etc/systemd/system/probe-agent.service[Unit] DescriptionProbe Agent Service Afternetwork-online.target Wantsnetwork-online.target [Service] Typesimple Userroot WorkingDirectory/opt/probe-agent ExecStart/opt/probe-agent/bin/probe-agent -c /opt/probe-agent/conf/probe-agent.conf Restarton-failure RestartSec5 KillModecontrol-group ProtectSystemfull [Install] WantedBymulti-user.target参数说明Typesimple表示 ExecStart 启动的进程就是主进程探针一般用这个类型。Restarton-failure让进程因错误退出时自动拉起RestartSec5是拉起的间隔防止频繁重启刷爆日志。KillModecontrol-group确保停服务时探针的子进程也能被清理。ProtectSystemfull是麒麟 3.3 上默认比较安全的文件系统保护策略但要注意如果配置里指定了写日志到 /var/log/probe-agent就可能导致权限拒绝这也是第 5 章要讲的坑之一。保存后执行systemctl daemon-reload systemctl enable probe-agent systemctl start probe-agentdaemon-reload必须执行否则 systemd 不识别新写的 service 文件。enable建立开机自启软链start启动服务。这三条命令一起跑是安装探针的常规动作缺一不可。3.4 验证启动结果进程、端口与状态启动后别急着离开至少从三个角度验证探针是否真的在正常工作。systemctl status probe-agent ps -ef | grep probe-agent | grep -v grep ss -lntp | grep 8080systemctl status输出里如果显示active (running)只是进程活着不代表数据链路通。ps -ef确认进程命令行带上了正确的配置文件路径排除默认配置干扰。ss -lntp则检查探针本地是否监听在配置的端口上。这里有个细节很多探针不会主动监听本地端口它只作为客户端向服务端主动上报所以看不到监听是正常的。看到这里进程层面算是通了。4. 调试数据链路日志、手工上报与远端连通性4.1 把日志级别从 info 切到 debug部署告警链路时最怕日志空洞。探针默认日志级别是 info只能看到启动成功、上报成功这类笼统信息。一旦遇到数据缺失需要把级别调到 debug 或 trace看看具体在哪个环节丢包。sed -i s/log_level info/log_level debug/ /opt/probe-agent/conf/probe-agent.conf systemctl restart probe-agentsleep 30后读取日志文件。tail -n 200 /opt/probe-agent/logs/probe-agent.logsed -i直接改配置文件比 vim 精准。debug级别会输出每条采集命令的完整参数、HTTP 请求头和响应码。如果日志里出现timeout或connection refused问题通常在网络层或服务端。在正式项目里我一般要求只调试时开 debug调完立刻改回 info否则日志量一天能上 GB 级。4.2 用探针自带命令手工触发一次采集探针装上后最快验证数据链路的方法是手工触发一次采集。很多探针带test或probe-cli这样的子命令我常用的格式是/opt/probe-agent/bin/probe-agent -c /opt/probe-agent/conf/probe-agent.conf --test--test会执行一轮完整采集并打印输出结果包括采集指标数量、上报耗时和 HTTP 状态码。如果输出里有指标名却迟迟不显示上报成功问题多半在服务端接口或 token 校验。如果你的探针版本没有--test可以临时把采集周期改成 1 秒观察服务端是否入库手工完成后再改回来。4.3 用 curl 和 nc 验证服务端端口连通性探针自身诊断只能证明本地采集正常还要确认到服务端 8080 端口的网络路径没问题。用 curl 模拟一次探针上报请求curl -X POST -H Authorization: Bearer a1b2c3d4e5f6 \ -d metriccpu_usagevalue42 \ http://192.168.10.20:8080/api/v1/push返回200 OK说明服务端接受上报返回401说明 token 错误返回403说明服务端 IP 白名单拦截连接超时说明网络或防火墙有问题。这个 curl 命令的 Key 是-X POST和Authorization头具体字段要以探针服务端要求为准。端口连通性也可以用 nc 快速探测nc -zv 192.168.10.20 8080-z表示只扫描不发送数据-v输出详情。麒麟 3.3 如果没有 nc可以用/dev/tcp一次验证timeout 3 bash -c echo /dev/tcp/192.168.10.20/8080 echo open5. 避坑指南麒麟3.3 上探针安装的 5 个常见现场5.1 解压后找不到 libcrypto.so.10现象探针二进制执行时报error while loading shared libraries: libcrypto.so.10: cannot open shared object file。原因探针是动态编译的依赖较老版本的 OpenSSL 库而麒麟 3.3 自带的 OpenSSL 版本更高不兼容旧库路径。解决先用ldd probe-agent确认缺失库再安装兼容库。常见做法是执行yum install openssl-libs-1.0.2k或通过yum provides libcrypto.so.10找到对应包。如果现场不能联网安装就找发布方要静态编译版本这是最省心的后悔药。不要从别的机器直接拷 .so 文件过来很容易因符号版本不一致再次翻车。5.2 systemd 启动失败但手工运行正常现象systemctl start probe-agent后立刻变failed但手工在 shell 里执行同一个命令却能正常运行。原因麒麟 3.3 系统启用了 SELinux且 systemd 服务带有沙箱保护参数。探针进程在手工环境有终端和完整权限但被 systemd 托管后没有获得 SELinux 允许域导致访问被拒。解决先看 SELinux 审计日志。ausearch -m avc -ts recent如果看到denied { read }或execute可以临时用setenforce 0验证确认后再逐步放行。更稳的做法是给探针写一个自定义 SELinux 策略或调整 service 文件中ProtectSystem、PrivateTmp等参数。看起来像是玄学实际上大多是被ProtectSystemfull挡住了写日志目录的权限。5.3 采集正常但远端收不到数据现象本地进程状态正常日志一直输出采集成功但服务端平台指标面板毫无数据。原因最常见是探针所在服务器时间与服务端相差超过 5 分钟服务端为了保证数据时序一致会直接丢弃超窗数据。解决检查当前时间。date timedatectl status如果偏差大用 chrony 或 ntpdate 同步。同步后重启探针并观察新日志时间戳。这个坑很隐蔽因为采集进程本身不依赖本地时间但网络协议里的时间戳会暴露偏差。5.4 探针端口被防火墙策略拦截现象curl 从本地访问服务端正常但从探针所在服务器访问时连接超时探针日志一直connection timed out。原因麒麟 3.3 默认启用 firewalld且探针上报端口不在默认放行列表里。解决查看当前防火墙区域及规则。firewall-cmd --state firewall-cmd --list-all临时放行探针端口firewall-cmd --add-port8080/tcp这个命令只对当前会话有效。要永久生效必须加--permanentfirewall-cmd --permanent --add-port8080/tcp firewall-cmd --reload如果公司在更上层还有安全组或网络策略还需要提工单放行端口这属于现场最容易漏的一步。排到这一步时确认探针上报是走 TCP 还是 UDP不要放错协议。5.5 日志文件把根分区写满现象根分区空间不足系统响应缓慢探针日志文件已经几个 GB 大小。原因探针默认日志轮转策略没开或轮转阈值设置过大加上 debug 级别持续运行把 / 盘挤爆。解决在探针配置文件里开启 max_size 轮转或者交给 logrotate 统一管理。我习惯在 /etc/logrotate.d/ 下写一个探针专用配置cat /etc/logrotate.d/probe-agent EOF /opt/probe-agent/logs/*.log { daily rotate 7 compress missingok notifempty copytruncate } EOF参数说明daily每天轮转一次rotate 7保留最近 7 份copytruncate解决探针进程一直持有文件句柄导致日志无法切分的问题。这条配置能避免大多数磁盘打满事故。配置完成后用logrotate -d /etc/logrotate.d/probe-agent做一次 dry-run 验证。6. 进阶给探针加上 systemd 看门狗与自检脚本调试稳定后探针最怕的不是崩溃而是半死不活地挂着进程在跑但线程卡死既不上报也不退出。systemd 的WatchdogSec能处理这种假死状态前提是探针实现支持 systemd 的 watchdog 通知接口。如果你的探针版本支持在 service 文件里增加两行WatchdogSec60 Restarton-failure探针每 60 秒内应调用sd_notify发送心跳否则 systemd 会强制杀掉并重启进程。不支持 sd_notify 的探针我一般写一个外部巡检脚本每分钟检查一次进程状态和最近日志写入时间超时则重启。#!/bin/bash last_line$(tail -n 1 /opt/probe-agent/logs/probe-agent.log) if ! grep -q $(date %Y-%m-%d %H:%M) $last_line; then systemctl restart probe-agent fi把这个脚本放进 crontab每 5 分钟执行一次能在数据断点出现前兜底。我曾经因为没加看门狗探针线程卡了两天服务端面板出现一条直线排查时才发现是探针本地线程池满了。现在每台麒麟 3.3 上线探针我都会顺手加一层自愈保护。这个习惯也让我后期的巡检省了不少心。希望这篇围绕探针安装调试的梳理能让你在下一个现场少走几步弯路。本文还有配套的精品资源点击获取
返回列表