站长资讯网
最全最丰富的资讯网站

linux-监控查询mongo索引片键脚本

  #!/bin/bash  #file name      :watch_dog.sh  #function       :1、查看mongodb数据库集合;2、查看各个集合索引;3、查看各个集合片键  #version        :V 1.0    #配置参数  #base_data_path='../data/'  #mongodb_url='172.20.72.42:20000'  #mongodb_config_url='172.20.72.42:20000'  #mysql_host_ip="10.40.66.184"  #mysql_host_port="3306"  #mysql_user="root"  #mysql_pwd="Ab123456"  #mysql_database_name="XXXX"  ################################    PATH="$PATH:/data/mongodb/bin/"    #配置脚本需要的参数  if [ $# -ne 1  ] ;then    echo "Warn:请输入使用的配置参数名称,如local,pro等,在路径../conf中配置的参数文件名"    echo    exit 1  fi      source_url="/data/mongodb/watch_mongoDb/conf/$1.conf"  if [ ! -e  "$source_url" ];then    echo "Warn:配置文件不存在"    echo     exit 1  fi    source $source_url  ###############################        #提醒信息  warn_info(){    echo "$(date +"%Y-%m-%d %T"):$1"  }    #获取路径  data_path(){     if [ $# -eq 1  ] ;then        echo "${base_data_path}/data/"$1.$$     else        warn_info "Warn:路径有问题"        warn_info        exit 1     fi  }    #执行mysql存储过程  handler_sql(){    warn_info 'B:handler shard sql,begin'    mysql -u${mysql_user} -p${mysql_pwd} -h${mysql_host_ip} -P${mysql_host_port}  ${mysql_database_name} < $(data_path sql)    warn_info 'F:handler shards sql success,finish'  }    #打包语句成sql语句  package_sql(){    warn_info "B:package sql execute,begin,M:${1},DB:${2},DATA:${3}"    database=${2%.*}    collection=${2#*.}    #赋值    warn_info "===>database:${database}==>collection:${collection}==>value:${3}"    echo "call mongo_collection_handler(${1},${3},"${collection}","${database}");" >> $(data_path "sql")    warn_info "F:package sql execute,finish,M:${1},DB:${2},DATA:${3}"  }    #处理片键文件信息  handler_shards(){    warn_info "B:handler shards execute,begin,DB:$1"      while read line    do      my_id=$(echo "$line" | jq --compact-output  ._id |sed 's/"//g')      mykey=$(echo "$line" | jq --compact-output  .key |sed -e 's/"/\"/g'  -e 's/{/"{/g' -e 's/}/}"/g')      #database=${my_id%.*}      #collection=${my_id#*.}      package_sql 2 "$my_id" "$mykey"        done < $(data_path "shard.$1")    warn_info "F:handler shards execute,finish,DB:$1"  }    #查询片键信息  search_shard(){    warn_info "B:search shard execute,begin,DB:$1,URL:$2"    collection_count=$(jq '.|length' $(data_path "col.$1"))    warn_info "=>${1} collection count :$collection_count"        for (( i=0; i< ${collection_count}; i=i+1 ));     do       collection_name=`jq .[$i] $(data_path "col.$1") | sed 's/"//g'`;       result=`mongo --quiet $2/config --eval "printjson(db.collections.findOne({'_id':'$1.$collection_name'},{'key':1}))"`       #打印原始信息       #echo $result >> $(data_path "raw.shard.$1")        if [[ $result != "null" || $(echo $result | jq .key) != "null"  ]] ;then  	#echo "{ "_id" : "AAAA_XXXX.${collection_name}", "key" :null}" >> $(data_path "shard.$1")          #else  	echo $result >> $(data_path "shard.$1")       fi    done    #删除null的一行数据    sed -i '/null/d' $(data_path "shard.$1")     warn_info "F:search shard execute,finsh,DB:$1,URL:$2"  }    #处理集合索引信息  handler_indexes(){    warn_info "B:handler indexes,begin,DB:$1"         while read line     do      #获取索引信息      indexes=""$(echo $line | jq --compact-output .[].key | sed 's/"/\"/g')""      #获取db-集合信息      db_collection_name=$(echo $line | jq --compact-output .[0].ns|sed 's/"//g')      #打包成sql语句      #echo "<<<<<<========="      #echo "---->$(echo $indexes)---->"      #echo "++++> ${indexes}"      #echo "=====>>>>>>>>>"      package_sql 1 "$db_collection_name" "$(echo $indexes)"        done < $(data_path "index.$1")      warn_info "F:handler indexes,finish,DB:$1"  }    #查询集合索引信息  search_index(){    warn_info "search collection index,begin,DB:$1,URL:$2"    collection_count=$(jq '.|length' $(data_path "col.$1"))    warn_info "collection_count:${collection_count}"    for (( i=0; i< ${collection_count}; i=i+1 ));    do       collection=$(jq --compact-output .[$i] $(data_path "col.$1") | sed 's/"//g');       temp_indexes=$(mongo --quiet "$2/$1" --eval "printjson(db.getCollection("${collection}").getIndexes())")       echo $temp_indexes | jq --compact-output . >> $(data_path "index.$1")    done      warn_info "search collection index,finish,DB:$1,URL:$2"  }    #查询所有表集合  search_collection(){   warn_info "B:searh collection executed,begin,DB:$1,URL:$2"   mongo --quiet "$2/$1"  --eval "printjson(db.getCollectionNames())" > $(data_path "col.${1}")   warn_info "F:search collection execute,finish,DB:S1,URL:$2"  }    #集合从mysql数据库中查,原因是只显示mysql中的列出的集合信息  #search_collection2(){  #  warn_info "B:search collection2 executed,begin,DB:$1"  #  collection_sql="SELECT collection_name from mongo_collection_info where enabled_flag=1 and database_name="${1}";"  #  warn_info "===execute sql=>${collection_sql}=>"  #  mysql  -u${mysql_user} -p${mysql_pwd} -h${mysql_host_ip} -P${mysql_host_port}  ${mysql_database_name} -e "${collection_sql}" > $(data_path "col.${1}")  #  #数据封装成数组,兼容search_collection的结果  #  sed -i  -e 's/^/"&/g' -e 's/$/&",/g' -e "1i [" -e '$s/.$//' $(data_path "col.${1}")  #  echo "]" >> $(data_path "col.${1}")  #  warn_info "F:search collection2 executed,fi:nish,DB:$1"  #}      #程序执行  watch_dog2_work(){   warn_info "B:watch dog starts woring data"     search_collection "AAAA_XXXX" "$mongodb_url"   search_collection "BBBB_XXXX" "$mongodb_url"     search_index "AAAA_XXXX" "$mongodb_url"   search_index "BBBB_XXXX" "$mongodb_url"     search_shard "AAAA_XXXX" "$mongodb_config_url"   search_shard "BBBB_XXXX" "$mongodb_config_url"     handler_indexes "mapper_XXXX"   handler_indexes "BBBB_XXXX"     handler_shards "AAAA_XXXX"   handler_shards "BBBB_XXXX"     #执行sql语句   handler_sql   warn_info "F:watch dog finishes work"  }    echo   warn_info "==============================="  #开始工作  watch_dog2_work
赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号