当前位置: 首页 > news >正文

COLT_CMDB_linux_zookeeperInfo_20250628.sh

#!/bin/bash
#IT_BEGIN
#IT_TYPE=1
#原型指标
#IT MIDWARE_ZK_IP|ip
#IT MIDWARE_ZK_HOSTNAME|hostname
#IT MIDWARE_ZK_PORT|port
#IT MIDWARE_ZK_VERSION|version
#IT MIDWARE_ZK_TICKTIME|tickTime
#IT MIDWARE_ZK_TIMEOUT|Timeout
#IT MIDWARE_ZK_INITLIMIT|initLimit
#IT MIDWARE_ZK_SYNCLIMIT|syncLimit
#IT MIDWARE_ZK_MAXCLIENTCNXNS|maxClientCnxns
#IT MIDWARE_ZK_PURGEINTERVAL|purgeInterval
#IT MIDWARE_ZK_DATADIR|dataDir
#IT MIDWARE_ZK_DATALOGDIR|dataLogDir
#IT MIDWARE_ZK_SNAPSHOTNUM|snapshot
#IT MIDWARE_ZK_CONFFILEDIR|conf
#IT MIDWARE_ZK_BIN|bin
#IT MIDWARE_ZK_ZKSERVERS|zkservers
#IT MIDWARE_ZK_installpath|installpath
#IT_ENDshname=`basename $0`
ATTR="_X(g=$shname,p=CMDB,t=script,f=0)"
tmpfile="/tmp/${shname}_${$}.tmp"# 检查Zookeeper进程是否存在
count=$(ps -eaf | grep -E 'org.apache.zookeeper.server.quorum.QuorumPeerMain|zookeeper.server.ZooKeeperServerMain' | grep -v grep | wc -l)
if [ $count -eq 0 ]; thenexit 0
fi# 获取第一个Zookeeper进程信息
zk_process=$(ps -eaf | grep -E 'org.apache.zookeeper.server.quorum.QuorumPeerMain|zookeeper.server.ZooKeeperServerMain' | grep -v grep | head -1)
pid=$(echo "$zk_process" | awk '{print $2}')
user=$(echo "$zk_process" | awk '{print $1}')# 获取安装路径和工作目录
installpath=$(ls -l /proc/$pid/cwd 2>/dev/null | awk '{print $11}')
[ -z "$installpath" ] && installpath="N/A"# 获取配置文件路径
conf_file=$(echo "$zk_process" | awk '{for(i=1;i<=NF;i++){if($i~/-config.file=/){sub(/-config.file=/,"",$i);print $i}}}')if [ -z "$conf_file" ]; then# 尝试从命令行参数中获取配置文件conf_file=$(echo "$zk_process" | awk '{for(i=1;i<=NF;i++){if($i~/.cfg$/||$i~/.conf$/||$i~/.properties$/){print $i}}}')# 如果还是找不到,尝试默认路径if [ -z "$conf_file" ] && [ "$installpath" != "N/A" ]; thenpossible_conf_files=("$installpath/conf/zoo.cfg""$installpath/conf/zookeeper.conf""$installpath/zookeeper/conf/zoo.cfg""/etc/zookeeper/zoo.cfg""/etc/zookeeper/conf/zoo.cfg")for file in "${possible_conf_files[@]}"; doif [ -f "$file" ]; thenconf_file="$file"breakfidonefi
fiif [[ $conf_file != /* ]] && [ -n "$conf_file" ] && [ "$installpath" != "N/A" ]; thenconf_file="$installpath/$conf_file"
fi# 获取IP地址
ip="N/A"
if command -v ip >/dev/null 2>&1; thenip=$(ip addr show 2>/dev/null | grep -w inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d '/' -f 1 | head -1)
elif command -v ifconfig >/dev/null 2>&1; thenip=$(ifconfig -a 2>/dev/null | grep -w inet | grep -v 127.0.0.1 | awk '{print $2}' | cut -d ':' -f 2 | head -1)
fi
[ -z "$ip" ] && ip="N/A"hostname=$(hostname 2>/dev/null || echo "N/A")# 初始化所有指标变量
tickTime="N/A"
initLimit="N/A"
syncLimit="N/A"
port="N/A"
maxClientCnxns="N/A"
purgeInterval="N/A"
dataDir="N/A"
dataLogDir="N/A"
zkservers="N/A"# 解析配置文件 - 专门优化maxClientCnxns的获取
if [ -f "$conf_file" ]; then# 使用更全面的方式获取配置项while IFS= read -r line; do# 跳过注释行和空行line=$(echo "$line" | sed 's/^[[:space:]]*//;s/[[:space:]]*$//')[[ "$line" =~ ^# ]] && continue[[ -z "$line" ]] && continue# 处理maxClientCnxns(考虑可能被注释的情况)if [[ "$line" =~ maxClientCnxns ]]; then# 去除行尾注释clean_line=$(echo "$line" | sed 's/#.*$//')if [[ "$clean_line" =~ maxClientCnxns[[:space:]]*=[[:space:]]*([0-9]+) ]]; thenmaxClientCnxns="${BASH_REMATCH[1]}"fifi# 处理其他配置项case "$line" intickTime=*)tickTime=$(echo "$line" | cut -d '=' -f 2 | sed 's/[[:space:]]*$//');;initLimit=*)initLimit=$(echo "$line" | cut -d '=' -f 2 | sed 's/[[:space:]]*$//');;syncLimit=*)syncLimit=$(echo "$line" | cut -d '=' -f 2 | sed 's/[[:space:]]*$//');;clientPort=*)port=$(echo "$line" | cut -d '=' -f 2 | sed 's/[[:space:]]*$//');;autopurge.purgeInterval=*)purgeInterval=$(echo "$line" | cut -d '=' -f 2 | sed 's/[[:space:]]*$//');;dataDir=*)dataDir=$(echo "$line" | cut -d '=' -f 2 | sed 's/[[:space:]]*$//');;dataLogDir=*)dataLogDir=$(echo "$line" | cut -d '=' -f 2 | sed 's/[[:space:]]*$//');;esacdone < "$conf_file"# 处理dataLogDir默认值[ "$dataLogDir" = "N/A" ] && dataLogDir="$dataDir"# 获取集群配置zkservers=$(grep '^server\.' "$conf_file" 2>/dev/null | tr '\n' ',' | sed 's/,$//')[ -z "$zkservers" ] && zkservers="N/A"# 处理相对路径if [[ $dataDir != /* ]] && [ "$dataDir" != "N/A" ] && [ "$installpath" != "N/A" ]; thendataDir="$installpath/$dataDir"fiif [[ $dataLogDir != /* ]] && [ "$dataLogDir" != "N/A" ] && [ "$installpath" != "N/A" ]; thendataLogDir="$installpath/$dataLogDir"fi
fi# 获取版本信息
jar_version="N/A"
if [ "$installpath" != "N/A" ]; thenjar_file=$(find "$installpath" -name "zookeeper-*.jar" 2>/dev/null | head -1)if [ -n "$jar_file" ]; thenjar_version=$(basename "$jar_file" | sed -E 's/zookeeper-([0-9]+\.[0-9]+\.[0-9]+).*\.jar/\1/')fi
fi# 获取快照数量
snapshot="N/A"
if [ "$dataDir" != "N/A" ]; thensnapshot_dir="$dataDir/version-2"[ ! -d "$snapshot_dir" ] && snapshot_dir="$dataDir"if [ -d "$snapshot_dir" ]; thensnapshot=$(ls "$snapshot_dir" 2>/dev/null | grep -c -E 'snapshot\.[0-9]+$' || echo "N/A")fi
fi# 获取bin目录
bin_dir="N/A"
if [ "$installpath" != "N/A" ]; thenbin_dir=$(find "$installpath" -name "*bin" -type d 2>/dev/null | head -1)[ -z "$bin_dir" ] && bin_dir="$installpath"
fi# 计算Timeout
Timeout="N/A"
if [[ "$tickTime" =~ ^[0-9]+$ ]] && [[ "$initLimit" =~ ^[0-9]+$ ]]; thenTimeout=$((tickTime * initLimit))
fi# 输出结果
echo "COL_DETAIL_START:"
echo "installpath[$ATTR]|+|${installpath:-N/A}"
echo "ip[$ATTR]|+|${ip:-N/A}"
echo "hostname[$ATTR]|+|${hostname:-N/A}"
echo "port[$ATTR]|+|${port:-N/A}"
echo "version[$ATTR]|+|${jar_version:-N/A}"
echo "tickTime[$ATTR]|+|${tickTime:-N/A}"
echo "Timeout[$ATTR]|+|${Timeout:-N/A}"
echo "initLimit[$ATTR]|+|${initLimit:-N/A}"
echo "syncLimit[$ATTR]|+|${syncLimit:-N/A}"
echo "clientPort[$ATTR]|+|${port:-N/A}"
echo "maxClientCnxns[$ATTR]|+|${maxClientCnxns:-N/A}"
echo "purgeInterval[$ATTR]|+|${purgeInterval:-N/A}"
echo "dataDir[$ATTR]|+|${dataDir:-N/A}"
echo "dataLogDir[$ATTR]|+|${dataLogDir:-N/A}"
echo "snapshot[$ATTR]|+|${snapshot:-N/A}"
echo "conf[$ATTR]|+|${conf_file:-N/A}"
echo "bin[$ATTR]|+|${bin_dir:-N/A}"
echo "zkservers[$ATTR]|+|${zkservers:-N/A}"
echo "COL_DETAIL_END:"# 清理临时文件
[ -f "$tmpfile" ] && rm -f "$tmpfile"

补充默认值设置:zookeeper的默认值未-N/A 

10.14.1.5执行结果如下:

[root@hadoopkfk01 ~]# sh COLT_CMDB_agent_linux_zookeeper.sh 
COL_DETAIL_START:
installpath[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|/home/ntciom/zookeeper
ip[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|10.14.1.5
hostname[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|hadoopkfk01
port[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|2181
version[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|3.6.4
tickTime[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|2000
Timeout[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|60000
initLimit[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|30
syncLimit[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|30
clientPort[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|2181
maxClientCnxns[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|N/A
purgeInterval[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|N/A
dataDir[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|/home/ntciom/zookeeper/zk_data_dir
dataLogDir[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|/home/ntciom/zookeeper/zk_data_dir
snapshot[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|1
conf[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|/home/ntciom/zookeeper/apache-zookeeper-3.6.4-bin/bin/../conf/zoo.cfg
bin[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|/home/ntciom/zookeeper/apache-zookeeper-3.6.4-bin
zkservers[_X(g=COLT_CMDB_agent_linux_zookeeper.sh,p=CMDB,t=script,f=0)]|+|N/A
COL_DETAIL_END:

http://www.lqws.cn/news/557623.html

相关文章:

  • JavaScript正则表达式之正向先行断言(Positive Lookahead)深度解析
  • MCPA2APPT:基于 A2A+MCP+ADK 的多智能体流式并发高质量 PPT 智能生成系统
  • 数字孪生技术赋能UI前端:实现虚拟与现实的无缝对接
  • InfluxDB 3 Core数据库管理指南:从概念到实操的完整流程
  • 单元测试和集成测试的区别
  • 正交视图三维重建 笔记 2d线到3d线
  • 【Python练习】017. 导入math模块并使用其sqrt函数计算平方根
  • ReactNative【实战系列教程】我的小红书 2 -- 快捷登录、手机号密码登录
  • 一站式了解SPI机制
  • NVIDIA 开源高性能语音识别模型:Parakeet TDT 0.6B V2 登顶 OpenASR 榜单
  • 【算法深练】单调栈:有序入栈,及时删除垃圾数据
  • 代理与反射
  • 基于LQR控制器的六自由度四旋翼无人机模型simulink建模与仿真
  • 微软人工智能证书AI-102 | 如何快速通过?
  • 桌面小屏幕实战课程:DesktopScreen 16 HTTP
  • 【软考--软件设计师】11 关系型数据库
  • WebRTC(十二):DTLS
  • 关于前端页面上传图片检测
  • 暑假复习篇之运算与逻辑
  • UI前端大数据可视化创新:利用AR/VR技术提升用户沉浸感
  • 什么是集中刷新,分散刷新,和异步刷新
  • 从 AJAX 到 axios:前端与服务器通信实战指南
  • 2023国赛linux的应急响应-wp
  • Re--攻防世界-基础android
  • C++ vector 完全指南:从入门到精通
  • 源码运行效果图(六)
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十八) -> 构建HAR
  • 基于springboot的海产品交易系统
  • 【数据标注师】3D标注
  • JWT认证性能优化实战指南