当前位置: 首页 > 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.lryc.cn/news/576495.html

相关文章:

  • cocos creator 3.8 - 精品源码 -《文字大师》(移一笔变新字)
  • Insar 相位展开真实的数据集的生成与下载(随机矩阵放大,zernike 仿真包裹相位)
  • Cesium快速入门到精通系列教程十一:Cesium1.74中高性能渲染上万Polyline
  • SLAM中的非线性优化-2D图优化之零空间(十五)
  • 变长字节的数字表示法vb224
  • 互联网大厂Java求职面试实录
  • c# sugersql 获取子表数据排序
  • Java 识别和处理 HTML 标签内容
  • Spring MVC参数解析:深入剖析415异常与@RequestBody处理机制问题场景
  • Flutter基础(FFI)
  • pytorch中的几个概念
  • NLP中的同义词替换及我踩的坑
  • 《Python 实现 B 站视频信息爬虫:从批量获取到 CSV 保存》
  • 数字孪生技术引领UI前端设计新革命:实时交互与模拟预测
  • LINUX628 NFS 多web;主从dns;ntp;samba
  • 鸿蒙5:ArkTS基本介绍
  • VR训练美国服务器:高性能解决方案与优化指南
  • 【LeetCode 热题 100】438. 找到字符串中所有字母异位词——(解法三)不定长滑动窗口+数组
  • 构建 AI 系统的 4 大 Agentic AI 设计模式
  • 网关ARP防护的措施
  • qt和qtcreator版本关系
  • n8n-nodes-puppeteer截图中文变方块乱码解决方法
  • 在单片机中如何实现一个shell控制台
  • Launcher3中的CellLayout 和ShortcutAndWidgetContainer 的联系和各自职责
  • 前端react面试题之实现网页多选搜索框
  • 【学习笔记】深入理解Java虚拟机学习笔记——第12章 Java内存模型与线程
  • python中学物理实验模拟:瞬间推力与摩擦力作用下的物体运动
  • 力扣网C语言编程题:在数组中查找目标值位置之二分查找法
  • 解决cursor无法下载插件等网络问题
  • 深入详解:随机森林算法——概念、原理、实现与应用场景