运维相关指标数据采集并ES入仓 - 运维笔记
https://www.cnblogs.com/kevingrace/articles/11044716.html
为了进行数字化IT治理,需要对一些应用进程相关指标进行采集并入库。收集到的应用指标数据最好要进行ES入仓,入到Kafka里面,并通过Kibana可视化展示。
需要进行采集的应用进程相关指标如下:

ES入库的规范如下:
| 中文名 | 英文名 | 类型 | 是否必填 | 说明 | 
| 指标名称 | indexName | CHAR | 是 | 
 | 
| 指标值 | indexValue | CHAR | 是 | 支持批量 | 
| 指标类别 | indexType | CHAR | 是 | 安全 测试 运行 应用 环境 | 
| 指标描述 | indexDesc | VARCHAR | 是 | 指标说明,指标采集数据源(zbx、dota、legao……) | 
| 采集时间 | collectTime | TIMESTAMP | 是 | 支持批量 | 
| 应用名称 | appName | CHAR | 是 | 以AIOPS的3位编码为准 | 
| 主机名 | hostName | CHAR | 否 | 
 | 
| 发送数据源主机 | dataSource | CHAR | 是 | 脚本路径@主机IP | 
下面是应用指标数据进行ES入仓的请求说明
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | 测试区接口说明:访问链接:http://192.168.10.10:10222/haha/heiheiAPI/test_1_kafka请求header:Content-Type:application/json请求方法:POST请求参数,token中填入示例中的128位token即可,data的值是一个数组,数组中的每个元素是一个json对象(对应会插入ES中的1个document),给出具体信息:{    "token": "bd1df2b11111111112222222222222222333333333333333333yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy",    "data": [        {            "type": "英文字符,最长不超过10位",            "desc": "指标的中文描述, 可为空",            "@timestamp": "时间戳,以标准unix时间戳为准,下面会给出shell和python的生成示例",            "appname": "应用系统编码,以aiops上的信息为准",            "hostname": "主机名",            "value": "采集的指标值, 由于各系统需求不一致, 此处统一使用string类型, 否则可能会造成mapping冲突, 但某些功能需要int/float,再讨论",            "checker": "发送数据的脚本路径或IP, 可为空"        }    ]}==============================================================================================# python生成时间戳示例importdatetimetimestamp = datetime.datetime.strftime(datetime.datetime.now(), '%s') ==============================================================================================# python请求示例importurllib2   # 这里是python2,根据各人使用有不同,总之是构建http requestimporthashlibimportjsonurl = 'http://192.168.10.10:10222/haha/heiheiAPI/test_1_kafka'data = {    'token': 'bd1df2b11111111112222222222222222333333333333333333yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy',    'data': [        {}    ]}headers = {'Content-Type': 'application/json'}req = urllib2.Request(url, json.dumps(data), headers = headers)res = urllib2.urlopen(req).read()=============================================================================================# bash shell生成时间戳示例date+'%s'# bash shell请求示例curl -s -XPOST -H "Content-Type:application/json"-d 请求数据 http://192.168.10.10:10222/haha/heiheiAPI/test_1_kafka | 
这里使用了两个脚本:
1)shell脚本进行指标数据采集(最终使用脚本:20_app_process_index.sh)
2)python脚本进行ES入仓请求提交,请求方法:POST。 在python脚本里调用shell脚本,调取shell脚本执行结果。(最终使用脚本:20_app_process_index_es.py)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [root@kevin_test app_process_index]# pwd/root/100_app_index/app_process_index[root@kevin_test app_process_index]# lltotal 120-rwxr-xr-x 1 root root   783 Jun 20 18:16 20_app_process_index_es.py-rwxr-xr-x 1 root root   290 Jun 20 18:16 20_app_process_index.py2-rwxr-xr-x 1 root root 15398 Jun 20 18:19 20_app_process_index.sh-rwxr-xr-x 1 root root 10414 Jun 20 18:16 20_app_process_index_shell.sh[root@kevin_test ~]# df -hFilesystem      Size  Used Avail Use% Mounted on/dev/vda120G  4.8G   14G  26% /tmpfs           2.9G   12K  2.9G   1% /dev/shm/dev/vdb29.8G  458M  8.8G   5% /software/dev/vdb330G   21G  7.2G  75% /opt/bobo/dev/vdb438G  6.9G   29G  20% /var/log/bobo其中,/opt/cbd为应用程序所在空间,/var/log/bobo是日志所在空间 | 
一、shell脚本 (执行结果要时JSON格式的,这里在shell脚本里拼出来的JSON样式)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | [root@kevin_test app_process_index]# cat 20_app_process_index_shell.sh#!/bin/bashsource/etc/profilehostName=$(hostname)IP=$(ifconfigeth0| sed-nr '2s/(^[^0-9]+)([0-9.]+)+( .*$)/\2/gp')appName=$(echo${hostName:3:3})collectTime=`date+'%s'`dataSource=$(echo"`pwd`/$0@${IP}")indexType="应用进程相关指标"echo"指标类型: ${indexType}"echo"指标采集时间: ${collectTime}"echo"主机名: ${hostName}"echo"应用名称: ${appName}"echo"发送数据源主机: ${dataSource}"echo-e "\n此次采集应用进程相关指标情况如下:"echo-e "---------------------------------------------------"###########应用进程占内存百分比###########indexName1="应用进程占内存百分比"psauxw|grepbxapp|awk'{if (NR>1){print $4}}'> /tmp/mem_listNUM1=`cat/tmp/mem_list|wc-l`if[ $NUM1 -eq0 ];then   echo"${indexName}为0"else   MEM_PER_SUM=$(awk'{MEM_PER+=$1}END{print MEM_PER}'/tmp/mem_list)   echo"${indexName1}:"${MEM_PER_SUM}%fiecho-e "---------------------------------------------------"###########应用进程占CPU百分比###########indexName2="应用进程占CPU百分比"psauxw|grepbxapp|awk'{if (NR>1){print $3}}'> /tmp/cpu_listNUM2=`cat/tmp/cpu_list|wc-l`if[ $NUM2 -eq0 ];then   echo"${indexName2}为0"else   CPU_PER_SUM=$(awk'{CPU_PER+=$1}END{print CPU_PER}'/tmp/cpu_list)   echo"${indexName2}:"${CPU_PER_SUM}%fiecho-e "---------------------------------------------------"###########应用进程run最长时间及其进程###########indexName3="应用进程run最长时间"PID=$(ps-eo user,pid,etime|grepbxapp|sort-k 3 -rn|head-1|awk'{print $2}')RUN_TIME=$(ps-eo user,pid,etime|grepbxapp|sort-k 3 -rn|head-1|awk'{print $3}')PROCESS=$(ps-ef|grep${PID}|grep-vgrep|awk'{print $8}')echo-e "${indexName3}: ${RUN_TIME} \n进程: ${PROCESS}"echo-e "---------------------------------------------------"###########应用进程TIME-WAIT连接数###########indexName4="应用进程TIME-WAIT连接数"NUM3=$(ss -a|grep-w "TIME_WAIT"|wc-l)echo"${indexName4}: ${NUM3}"echo-e "---------------------------------------------------"###########应用进程ESTABLISHED连接数###########indexName5="应用进程ESTABLISHED连接数"NUM4=$(ss -a|grep-w "ESTAB"|wc-l)echo"${indexName5}: ${NUM4}"echo-e "---------------------------------------------------"###########应用进程FIN_WAIT2连接数###########indexName6="应用进程FIN_WAIT2连接数"NUM5=$(ss -a|grep-w "FIN_WAIT2"|wc-l)echo"${indexName6}: ${NUM5}"echo-e "---------------------------------------------------"###########日志空间使用率###########indexName7="日志空间使用率"LOG_SPACE_USER=$(df-h|grep"/var/log"|awk'{print $5}')echo"${indexName7}: ${LOG_SPACE_USER}"echo-e "---------------------------------------------------"###########应用程序空间使用率###########indexName8="应用程序空间使用率"APP_SPACE_USER=$(df-h|grep"/opt"|awk'{print $5}')echo"${indexName8}: ${APP_SPACE_USER}"echo-e "---------------------------------------------------"###########应用所在磁盘读速率(Blk/s)###########indexName9="应用所在磁盘读速率(Blk/s)"DISK=$(df-h|grep"/opt/${appName}"|awk'{print $1}')DEVICE=$(df-h|grep"/opt/${appName}"|awk'{print $1}'|awk-F"/"'{print $3}')READ=$(iostat ${DISK}|grep-w ${DEVICE}|awk'{print $3}')echo"${indexName9}: ${READ}"echo-e "---------------------------------------------------"###########应用所在磁盘写速率(Blk/s)###########indexName10="应用所在磁盘写速率(Blk/s)"DISK=$(df-h|grep"/opt/${appName}"|awk'{print $1}')DEVICE=$(df-h|grep"/opt/${appName}"|awk'{print $1}'|awk-F"/"'{print $3}')WRITE=$(iostat ${DISK}|grep-w ${DEVICE}|awk'{print $4}')echo"${indexName10}: ${WRITE}"echo-e "---------------------------------------------------"###########应用所在磁盘TPS###########indexName11="应用所在磁盘TPS"DISK=$(df-h|grep"/opt/${appName}"|awk'{print $1}')DEVICE=$(df-h|grep"/opt/${appName}"|awk'{print $1}'|awk-F"/"'{print $3}')TPS=$(iostat ${DISK}|grep-w ${DEVICE}|awk'{print $2}')echo"${indexName11}: ${TPS}"echo-e "---------------------------------------------------"###########TOMCAT分配最小内存 ###########indexName12="TOMCAT分配最小内存"NUM6=$(ps-ef|grep-w tomcat|grep-vgrep|wc-l)if[ ${NUM6} -eq0 ];then   echo"当前没有Tomcat进程,${indexName12}: 0"else    forTOMCAT in$(find/opt/${appName}/ -name *tomcat* -typed)    do      NUM7=$(ps-ef|grep${TOMCAT}|grep-vgrep|wc-l)      if[ ${NUM7} -eq0 ];then        echo"not ${TOMCAT}">> /dev/null2>&1      else        XMS=$(ps-ef|grep${TOMCAT}/|grep"\-Xms"|awk-F"-Xms"'{print $2}'|cut-d" "-f1)        echo-e "${indexName12}: ${XMS}  (实例名:${TOMCAT})"      fi    donefiecho-e "---------------------------------------------------"###########TOMCAT分配最大内存 ###########indexName13="TOMCAT分配最大内存"NUM8=$(ps-ef|grep-w tomcat|grep-vgrep|wc-l)if[ ${NUM8} -eq0 ];then   echo"当前没有Tomcat进程,${indexName13}: 0"else    forTOMCAT in$(find/opt/${appName}/ -name *tomcat* -typed)    do      NUM9=$(ps-ef|grep${TOMCAT}|grep-vgrep|wc-l)      if[ ${NUM9} -eq0 ];then        echo"not ${TOMCAT}">> /dev/null2>&1      else        XMX=$(ps-ef|grep${TOMCAT}/|grep"\-Xmx"|awk-F"-Xmx"'{print $2}'|cut-d" "-f1)        echo-e "${indexName13}: ${XMX}  (实例名:${TOMCAT})"      fi    donefiecho-e "---------------------------------------------------"###########TOMCAT分配年轻代空间 ###########indexName14="TOMCAT分配年轻代空间"NUM10=$(ps-ef|grep-w tomcat|grep-vgrep|wc-l)if[ ${NUM10} -eq0 ];then   echo"当前没有Tomcat进程,${indexName14}: 0"else    forTOMCAT in$(find/opt/${appName}/ -name *tomcat* -typed)    do      NUM11=$(ps-ef|grep${TOMCAT}|grep-vgrep|wc-l)      if[ ${NUM11} -eq0 ];then        echo"not ${TOMCAT}">> /dev/null2>&1      else        XMN=$(ps-ef|grep${TOMCAT}/|grep"\-Xmn"|awk-F"-Xmn"'{print $2}'|cut-d" "-f1)        echo-e "${indexName14}: ${XMN}  (实例名:${TOMCAT})"      fi    donefiecho-e "---------------------------------------------------"###########TOMCAT每个线程的堆栈大小 ###########indexName15="TOMCAT每个线程的堆栈大小"NUM12=$(ps-ef|grep-w tomcat|grep-vgrep|wc-l)if[ ${NUM12} -eq0 ];then   echo"当前没有Tomcat进程,${indexName15}: 0"else    forTOMCAT in$(find/opt/${appName}/ -name *tomcat* -typed)    do      NUM13=$(ps-ef|grep${TOMCAT}|grep-vgrep|wc-l)      if[ ${NUM13} -eq0 ];then        echo"not ${TOMCAT}">> /dev/null2>&1      else        XSS=$(ps-ef|grep${TOMCAT}/|grep"\-Xss"|awk-F"-Xss"'{print $2}'|cut-d" "-f1)        echo-e "${indexName15}: ${XSS}  (实例名:${TOMCAT})"      fi    donefiecho-e "---------------------------------------------------"###########TOMCAT-GC时长占比 ###########indexName16="TOMCAT-GC时长占比"NUM14=$(ps-ef|grep-w tomcat|grep-vgrep|wc-l)if[ ${NUM14} -eq0 ];then   echo"当前没有Tomcat进程,${indexName16}: 0"else    forTOMCAT in$(find/opt/${appName}/ -name *tomcat* -typed)    do      NUM15=$(ps-ef|grep${TOMCAT}|grep-vgrep|wc-l)      if[ ${NUM15} -eq0 ];then        echo"not ${TOMCAT}">> /dev/null2>&1      else        GC=$(ps-ef|grep${TOMCAT}/|grep"\GCTimeRatio"|awk-F"GCTimeRatio"'{print $2}'|cut-d" "-f1|awk-F"="'{print $2}')        echo-e "${indexName16}: ${GC}  (实例名:${TOMCAT})"      fi    donefiecho-e "---------------------------------------------------"###########Zookeeper分配最小内存 ###########indexName17="Zookeeper分配最小内存"#zookeeper安装时没有手动定义内存配置,默认为系统内存的四分之一NUM16=$(ps-ef|grepzookeeper|grep-vgrep|wc-l)if[ ${NUM16} -eq0 ];then   echo"当前没有zookeeper进程,${indexName17}: 0"else   MEM_TOTAL=$(free-m|grep"Mem"|awk'{print $2}')   ZK_MEM_MAX=`expr${MEM_TOTAL} / 4`   echo"${indexName17}: ${ZK_MEM_MAX}M"fiecho-e "---------------------------------------------------"###########Zookeeper分配最大内存 ###########indexName18="Zookeeper分配最大内存"#zookeeper安装时没有手动定义内存配置,默认为系统内存的四分之一NUM17=$(ps-ef|grepzookeeper|grep-vgrep|wc-l)if[ ${NUM17} -eq0 ];then   echo"当前没有zookeeper进程,${indexName18}: 0"else   MEM_TOTAL=$(free-m|grep"Mem"|awk'{print $2}')   ZK_MEM_MAX=`expr${MEM_TOTAL} / 4`   echo"${indexName18}: ${ZK_MEM_MAX}M"fiecho-e "---------------------------------------------------"###########KAFKA分配最小内存 ###########indexName19="KAFKA分配最小内存"NUM18=$(ps-ef|grepkafka|grep-vgrep|wc-l)if[ ${NUM18} -eq0 ];then    echo"当前没有KAFKA进程,${indexName19}: 0"else    cd/opt/${appName}/    forKAFKA in$(find/opt/${appName}/ -name *kafka* -typed)    do    NUM19=$(ps-ef|grep${KAFKA}|grep-vgrep|wc-l)       if[ ${NUM19} -eq0 ];then          echo"not this ${KAFKA}">/dev/null2>&1       else          FILE=${KAFKA}/bin/kafka-server-start.sh          KAFKA_MEM_MIN=$(cat${FILE}|grep"Xmx"|awk-F'"''{print $2}'|awk'{print $2}'|awk-F"Xms" '{print $2}')          echo"${indexName19}: ${KAFKA_MEM_MIN}"       fi    donefiecho-e "---------------------------------------------------"###########KAFKA分配最大内存 ###########indexName20="KAFKA分配最大内存"NUM20=$(ps-ef|grepkafka|grep-vgrep|wc-l)if[ ${NUM20} -eq0 ];then    echo"当前没有KAFKA进程,${indexName20}: 0"else    cd/opt/${appName}/    forKAFKA in$(find/opt/${appName}/ -name *kafka* -typed)    do    NUM21=$(ps-ef|grep${KAFKA}|grep-vgrep|wc-l)       if[ ${NUM21} -eq0 ];then          echo"not this ${KAFKA}">/dev/null2>&1       else          FILE=${KAFKA}/bin/kafka-server-start.sh          KAFKA_MEM_MAX=$(cat${FILE}|grep"Xmx"|awk-F'"''{print $2}'|awk'{print $1}'|awk-F"Xmx" '{print $2}')          echo"${indexName20}: ${KAFKA_MEM_MAX}"       fi    donefiecho-e "---------------------------------------------------"###########应用系统进程数量 ###########indexName21="应用系统进程数量"NUM22=$(ps-eo user,pid,cmd|awk'{if($1=="bxapp")print}'|wc-l)echo"${indexName21}:"${NUM22} | 
执行这个脚本:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | [root@kevin_test app_process_index]# sh 20_app_process_index_shell.sh指标类型: 应用进程相关指标指标采集时间: 1561029337主机名: kevin_test应用名称: bobo发送数据源主机: /root/100_app_index/app_process_index/20_app_process_index_shell.sh@192.168.10.99此次采集应用进程相关指标情况如下:---------------------------------------------------应用进程占内存百分比: 69.7%---------------------------------------------------应用进程占CPU百分比: 13.8%---------------------------------------------------应用进程run最长时间: 609-08:33:26进程: ../src/redis-sentinel---------------------------------------------------应用进程TIME-WAIT连接数: 0---------------------------------------------------应用进程ESTABLISHED连接数: 455---------------------------------------------------应用进程FIN_WAIT2连接数: 0---------------------------------------------------日志空间使用率: 20%---------------------------------------------------应用程序空间使用率: 75%---------------------------------------------------应用所在磁盘读速率(Blk/s): 2.30---------------------------------------------------应用所在磁盘写速率(Blk/s): 16.41---------------------------------------------------应用所在磁盘TPS: 1.31---------------------------------------------------当前没有Tomcat进程,TOMCAT分配最小内存: 0---------------------------------------------------当前没有Tomcat进程,TOMCAT分配最大内存: 0---------------------------------------------------当前没有Tomcat进程,TOMCAT分配年轻代空间: 0---------------------------------------------------当前没有Tomcat进程,TOMCAT每个线程的堆栈大小: 0---------------------------------------------------当前没有Tomcat进程,TOMCAT-GC时长占比: 0---------------------------------------------------Zookeeper分配最小内存: 1459M---------------------------------------------------Zookeeper分配最大内存: 1459M---------------------------------------------------当前没有KAFKA进程,KAFKA分配最小内存: 0---------------------------------------------------当前没有KAFKA进程,KAFKA分配最大内存: 0---------------------------------------------------应用系统进程数量:10 | 
注意:上面是还没有转化JSON格式的脚本。下面是转化为JSON格式后的脚本(实际用的就是下面这个脚本)
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 | [root@kevin_test app_process_index]# cat 20_app_process_index.sh#!/bin/bashsource/etc/profilehostName=$(hostname)IP=$(ifconfigeth0| sed-nr '2s/(^[^0-9]+)([0-9.]+)+( .*$)/\2/gp')appName=$(echo${hostName:3:3})collectTime=$(date+'%s')dataSource=$(echo"$0@${IP}")indexType="app_process"###########应用进程占内存百分比###########psauxw|grepbxapp|awk'{if (NR>1){print $4}}'> /tmp/mem_listNUM1=`cat/tmp/mem_list|wc-l`if[ $NUM1 -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用进程占内存百分比\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有进程\",   \"checker\":\"${dataSource}\"   }+"else   MEM_PER_SUM=$(awk'{MEM_PER+=$1}END{print MEM_PER}'/tmp/mem_list)   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用进程占内存百分比\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${MEM_PER_SUM}%\",   \"checker\":\"${dataSource}\"   }+"fi###########应用进程占CPU百分比###########psauxw|grepbxapp|awk'{if (NR>1){print $3}}'> /tmp/cpu_listNUM2=`cat/tmp/cpu_list|wc-l`if[ $NUM2 -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用进程占CPU百分比\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有进程\",   \"checker\":\"${dataSource}\"   }+"else   CPU_PER_SUM=$(awk'{CPU_PER+=$1}END{print CPU_PER}'/tmp/cpu_list)   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用进程占CPU百分比\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${CPU_PER_SUM}%\",   \"checker\":\"${dataSource}\"   }+"fi###########应用进程run最长时间及其进程###########PID=$(ps-eo user,pid,etime|grepbxapp|sort-k 3 -rn|head-1|awk'{print $2}')RUN_TIME=$(ps-eo user,pid,etime|grepbxapp|sort-k 3 -rn|head-1|awk'{print $3}')PROCESS=$(ps-ef|grep${PID}|grep-vgrep|awk'{print $8}')   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用进程run最长时间及其进程\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${RUN_TIME}, ${PROCESS}\",   \"checker\":\"${dataSource}\"   }+"###########应用进程TIME-WAIT连接数###########NUM3=$(ss -a|grep-w "TIME_WAIT"|wc-l)   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用进程TIME-WAIT连接数\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${NUM3}\",   \"checker\":\"${dataSource}\"   }+"###########应用进程ESTABLISHED连接数###########NUM4=$(ss -a|grep-w "ESTAB"|wc-l)   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用进程ESTABLISHED连接数\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${NUM4}\",   \"checker\":\"${dataSource}\"   }+"###########应用进程FIN_WAIT2连接数###########NUM5=$(ss -a|grep-w "FIN_WAIT2"|wc-l)   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用进程FIN_WAIT2连接数\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${NUM5}\",   \"checker\":\"${dataSource}\"   }+"###########日志空间使用率###########LOG_SPACE_USER=$(df-h|grep"/var/log"|awk'{print $5}')   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"日志空间使用率\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${LOG_SPACE_USER}\",   \"checker\":\"${dataSource}\"   }+"###########应用程序空间使用率###########APP_SPACE_USER=$(df-h|grep"/opt"|awk'{print $5}')   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用程序空间使用率\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${APP_SPACE_USER}\",   \"checker\":\"${dataSource}\"   }+"###########应用所在磁盘读速率(Blk/s)###########DISK=$(df-h|grep"/opt/${appName}"|awk'{print $1}')DEVICE=$(df-h|grep"/opt/${appName}"|awk'{print $1}'|awk-F"/"'{print $3}')READ=$(iostat ${DISK}|grep-w ${DEVICE}|awk'{print $3}')   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用所在磁盘读速率(Blk/s)\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${READ}\",   \"checker\":\"${dataSource}\"   }+"###########应用所在磁盘写速率(Blk/s)###########DISK=$(df-h|grep"/opt/${appName}"|awk'{print $1}')DEVICE=$(df-h|grep"/opt/${appName}"|awk'{print $1}'|awk-F"/"'{print $3}')WRITE=$(iostat ${DISK}|grep-w ${DEVICE}|awk'{print $4}')   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用所在磁盘写速率(Blk/s)\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${WRITE}\",   \"checker\":\"${dataSource}\"   }+"###########应用所在磁盘TPS###########DISK=$(df-h|grep"/opt/${appName}"|awk'{print $1}')DEVICE=$(df-h|grep"/opt/${appName}"|awk'{print $1}'|awk-F"/"'{print $3}')TPS=$(iostat ${DISK}|grep-w ${DEVICE}|awk'{print $2}')   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用所在磁盘TPS\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${TPS}\",   \"checker\":\"${dataSource}\"   }+"###########TOMCAT分配最小内存 ###########NUM6=$(ps-ef|grep-w tomcat|grep-vgrep|wc-l)if[ ${NUM6} -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"TOMCAT分配最小内存\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有Tomcat进程\",   \"checker\":\"${dataSource}\"   }+"else    forTOMCAT in$(find/opt/${appName}/ -name *tomcat* -typed)    do      NUM7=$(ps-ef|grep${TOMCAT}|grep-vgrep|wc-l)      if[ ${NUM7} -eq0 ];then        echo"not ${TOMCAT}">> /dev/null2>&1      else        XMS=$(ps-ef|grep${TOMCAT}/|grep"\-Xms"|awk-F"-Xms"'{print $2}'|cut-d" "-f1)          echo-e "{          \"type\":\"${indexType}\",          \"desc\":\"TOMCAT分配最小内存\",          \"@timestamp\":\"${collectTime}\",          \"appname\":\"${appName}\",          \"hostname\":\"${hostName}\",          \"value\":\"${XMS}  (实例名:${TOMCAT})\",          \"checker\":\"${dataSource}\"          }+"      fi    donefi###########TOMCAT分配最大内存 ###########NUM8=$(ps-ef|grep-w tomcat|grep-vgrep|wc-l)if[ ${NUM8} -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"TOMCAT分配最大内存\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有Tomcat进程\",   \"checker\":\"${dataSource}\"   }+"else    forTOMCAT in$(find/opt/${appName}/ -name *tomcat* -typed)    do      NUM9=$(ps-ef|grep${TOMCAT}|grep-vgrep|wc-l)      if[ ${NUM9} -eq0 ];then        echo"not ${TOMCAT}">> /dev/null2>&1      else        XMX=$(ps-ef|grep${TOMCAT}/|grep"\-Xmx"|awk-F"-Xmx"'{print $2}'|cut-d" "-f1)          echo-e "{          \"type\":\"${indexType}\",          \"desc\":\"TOMCAT分配最大内存\",          \"@timestamp\":\"${collectTime}\",          \"appname\":\"${appName}\",          \"hostname\":\"${hostName}\",          \"value\":\"${XMX}  (实例名:${TOMCAT})\",          \"checker\":\"${dataSource}\"          }+"      fi    donefi###########TOMCAT分配年轻代空间 ###########NUM10=$(ps-ef|grep-w tomcat|grep-vgrep|wc-l)if[ ${NUM10} -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"TOMCAT分配年轻代空间\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有Tomcat进程\",   \"checker\":\"${dataSource}\"   }+"else    forTOMCAT in$(find/opt/${appName}/ -name *tomcat* -typed)    do      NUM11=$(ps-ef|grep${TOMCAT}|grep-vgrep|wc-l)      if[ ${NUM11} -eq0 ];then        echo"not ${TOMCAT}">> /dev/null2>&1      else        XMN=$(ps-ef|grep${TOMCAT}/|grep"\-Xmn"|awk-F"-Xmn"'{print $2}'|cut-d" "-f1)          echo-e "{          \"type\":\"${indexType}\",          \"desc\":\"TOMCAT分配年轻代空间\",          \"@timestamp\":\"${collectTime}\",          \"appname\":\"${appName}\",          \"hostname\":\"${hostName}\",          \"value\":\"${XMN}  (实例名:${TOMCAT})\",          \"checker\":\"${dataSource}\"          }+"      fi    donefi###########TOMCAT每个线程的堆栈大小 ###########NUM12=$(ps-ef|grep-w tomcat|grep-vgrep|wc-l)if[ ${NUM12} -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"TOMCAT每个线程的堆栈大小\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有Tomcat进程\",   \"checker\":\"${dataSource}\"   }+"else    forTOMCAT in$(find/opt/${appName}/ -name *tomcat* -typed)    do      NUM13=$(ps-ef|grep${TOMCAT}|grep-vgrep|wc-l)      if[ ${NUM13} -eq0 ];then        echo"not ${TOMCAT}">> /dev/null2>&1      else        XSS=$(ps-ef|grep${TOMCAT}/|grep"\-Xss"|awk-F"-Xss"'{print $2}'|cut-d" "-f1)          echo-e "{          \"type\":\"${indexType}\",          \"desc\":\"TOMCAT每个线程的堆栈大小\",          \"@timestamp\":\"${collectTime}\",          \"appname\":\"${appName}\",          \"hostname\":\"${hostName}\",          \"value\":\"${XSS}  (实例名:${TOMCAT})\",          \"checker\":\"${dataSource}\"          }+"      fi    donefi###########TOMCAT-GC时长占比 ###########NUM14=$(ps-ef|grep-w tomcat|grep-vgrep|wc-l)if[ ${NUM14} -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"TOMCAT-GC时长占比\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有Tomcat进程\",   \"checker\":\"${dataSource}\"   }+"else    forTOMCAT in$(find/opt/${appName}/ -name *tomcat* -typed)    do      NUM15=$(ps-ef|grep${TOMCAT}|grep-vgrep|wc-l)      if[ ${NUM15} -eq0 ];then        echo"not ${TOMCAT}">> /dev/null2>&1      else        GC=$(ps-ef|grep${TOMCAT}/|grep"\GCTimeRatio"|awk-F"GCTimeRatio"'{print $2}'|cut-d" "-f1|awk-F"="'{print $2}')          echo-e "{          \"type\":\"${indexType}\",          \"desc\":\"TOMCAT-GC时长占比\",          \"@timestamp\":\"${collectTime}\",          \"appname\":\"${appName}\",          \"hostname\":\"${hostName}\",          \"value\":\"${GC}  (实例名:${TOMCAT})\",          \"checker\":\"${dataSource}\"          }+"      fi    donefi###########Zookeeper分配最小内存############zookeeper安装时没有手动定义内存配置,默认为系统内存的四分之一NUM16=$(ps-ef|grepzookeeper|grep-vgrep|wc-l)if[ ${NUM16} -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"Zookeeper分配最小内存\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有Zookeeper进程\",   \"checker\":\"${dataSource}\"   }+"else   MEM_TOTAL=$(free-m|grep"Mem"|awk'{print $2}')   ZK_MEM_MIN=`expr${MEM_TOTAL} / 4`   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"Zookeeper分配最小内存\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${ZK_MEM_MIN}M\",   \"checker\":\"${dataSource}\"   }+"fi###########Zookeeper分配最大内存############zookeeper安装时没有手动定义内存配置,默认为系统内存的四分之一NUM17=$(ps-ef|grepzookeeper|grep-vgrep|wc-l)if[ ${NUM17} -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"Zookeeper分配最大内存\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有Zookeeper进程\",   \"checker\":\"${dataSource}\"   }+"else   MEM_TOTAL=$(free-m|grep"Mem"|awk'{print $2}')   ZK_MEM_MAX=`expr${MEM_TOTAL} / 4`   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"Zookeeper分配最大内存\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${ZK_MEM_MAX}M\",   \"checker\":\"${dataSource}\"   }+"fi###########KAFKA分配最小内存 ###########NUM18=$(ps-ef|grepkafka|grep-vgrep|wc-l)if[ ${NUM18} -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"KAFKA分配最小内存\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有KAFKA进程\",   \"checker\":\"${dataSource}\"   }+"else    cd/opt/${appName}/    forKAFKA in$(find/opt/${appName}/ -name *kafka* -typed)    do    NUM19=$(ps-ef|grep${KAFKA}|grep-vgrep|wc-l)       if[ ${NUM19} -eq0 ];then          echo"not this ${KAFKA}">/dev/null2>&1       else          FILE=${KAFKA}/bin/kafka-server-start.sh          KAFKA_MEM_MIN=$(cat${FILE}|grep"Xmx"|awk-F'"''{print $2}'|awk'{print $2}'|awk-F"Xms" '{print $2}')          echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"KAFKA分配最小内存\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${KAFKA_MEM_MIN}\",   \"checker\":\"${dataSource}\"   }+"       fi    donefi###########KAFKA分配最大内存 ###########NUM20=$(ps-ef|grepkafka|grep-vgrep|wc-l)if[ ${NUM20} -eq0 ];then   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"KAFKA分配最大内存\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"当前没有KAFKA进程\",   \"checker\":\"${dataSource}\"   }+"else    cd/opt/${appName}/    forKAFKA in$(find/opt/${appName}/ -name *kafka* -typed)    do    NUM21=$(ps-ef|grep${KAFKA}|grep-vgrep|wc-l)       if[ ${NUM21} -eq0 ];then          echo"not this ${KAFKA}">/dev/null2>&1       else          FILE=${KAFKA}/bin/kafka-server-start.sh          KAFKA_MEM_MAX=$(cat${FILE}|grep"Xmx"|awk-F'"''{print $2}'|awk'{print $1}'|awk-F"Xmx" '{print $2}')          echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"KAFKA分配最大内存\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${KAFKA_MEM_MAX}\",   \"checker\":\"${dataSource}\"   }+"       fi    donefi###########应用系统进程数量 ###########NUM22=$(ps-eo user,pid,cmd|awk'{if($1=="bxapp")print}'|wc-l)   echo-e "{   \"type\":\"${indexType}\",   \"desc\":\"应用系统进程数量\",   \"@timestamp\":\"${collectTime}\",   \"appname\":\"${appName}\",   \"hostname\":\"${hostName}\",   \"value\":\"${NUM22}\",   \"checker\":\"${dataSource}\"   }" | 
执行这个脚本(JSON字段跟上面ES入仓要求的字段匹配):
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 | [root@kevin_test app_process_index]# sh 20_app_process_index.sh{   "type":"app_process",   "desc":"应用进程占内存百分比",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"69.7%",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"应用进程占CPU百分比",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"13.8%",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"应用进程run最长时间及其进程",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"609-08:36:42, ../src/redis-sentinel",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"应用进程TIME-WAIT连接数",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"0",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"应用进程ESTABLISHED连接数",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"454",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"应用进程FIN_WAIT2连接数",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"0",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"日志空间使用率",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"20%",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"应用程序空间使用率",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"75%",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"应用所在磁盘读速率(Blk/s)",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"2.30",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"应用所在磁盘写速率(Blk/s)",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"16.41",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"应用所在磁盘TPS",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"1.31",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"TOMCAT分配最小内存",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"TOMCAT分配最大内存",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"TOMCAT分配年轻代空间",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"TOMCAT每个线程的堆栈大小",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"TOMCAT-GC时长占比",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"Zookeeper分配最小内存",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"1459M",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"Zookeeper分配最大内存",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"1459M",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"KAFKA分配最小内存",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有KAFKA进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"KAFKA分配最大内存",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有KAFKA进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }+{   "type":"app_process",   "desc":"应用系统进程数量",   "@timestamp":"1561029533",   "appname":"bobo",   "hostname":"kevin_test",   "value":"10",   "checker":"20_app_process_index.sh@192.168.10.99"   } | 
二、然后使用python调用shell脚本,调取shell脚本的执行结果
下面三个脚本都可以使用,区别在于:
第一个脚本:默认就是在当前路径下调用shell脚本,shell和python两个脚本是放在统一目录下的
第二个脚本和第三个脚本:先获取当前脚本所在目录路径,然后在python脚本里调用shell脚本时,使用的是shell脚本全路径
这里推荐使用第三个脚本,但是注意:
使用第二或第三个脚本时,shell脚本里的dataSource要写成:dataSource=$(echo "$0@${IP}")
而使用第一个脚本时,shell脚本里的dataSource要写成:dataSource=$(echo "`pwd`/$0@${IP}")
区别就是:
第一或第二个脚本,在输出的JSON格式的结果中,checker不会带上`pwd`
第三个脚本,在输出的JSON格式的结果中,checker会带上`pwd`,所以就不需要在shell脚本里再加上`pwd`,否则路径就多了~
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | 第一个脚本==================================================================[root@kevin_test app_process_index]# cat 20_app_process_index.py#!/usr/bin/python# -*- coding: UTF-8 -*-importosimportjson#默认就在当前路径下执行20_app_process_index.shjson_set = os.popen("sh 20_app_process_index.sh").read().split('+')forjson_str injson_set:    print json_str第二个脚本==================================================================[root@kevin_test app_process_index]# cat 20_app_process_index.py1#!/usr/bin/python# -*- coding: UTF-8 -*-importosimportjson#获取当前路径,调用shell脚本, 执行时跟全路径now_path=os.path.abspath('.')index_script="sh %s/20_app_process_index.sh"% (now_path)json_set = os.popen(index_script).read().split('+')forjson_str injson_set:    print json_str第三个脚本================================================================[root@kevin_test app_process_index]# cat 20_app_process_index.py2#!/usr/bin/python# -*- coding: UTF-8 -*-importosimportjson#获取当前路径,调用shell脚本, 执行时跟全路径now_path=os.path.abspath(__file__)now_path=os.path.dirname(now_path)index_script="sh %s/20_app_process_index.sh"% (now_path)json_set = os.popen(index_script).read().split('+')forjson_str injson_set:    print json_str | 
来看看几个脚本结果:
如下第一个脚本的"checker" 字段,由于shell脚本里的"dataSource"没有带"pwd",所以"checker"字段中的脚本路径不全
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | [root@kevin_test app_process_index]# python 20_app_process_index.py{   "type":"app_process",   "desc":"应用进程占内存百分比",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"69.7%",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用进程占CPU百分比",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"13.8%",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用进程run最长时间及其进程",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"609-08:46:50, ../src/redis-sentinel",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用进程TIME-WAIT连接数",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"0",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用进程ESTABLISHED连接数",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"455",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用进程FIN_WAIT2连接数",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"0",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"日志空间使用率",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"20%",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用程序空间使用率",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"75%",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用所在磁盘读速率(Blk/s)",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"2.30",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用所在磁盘写速率(Blk/s)",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"16.41",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用所在磁盘TPS",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"1.31",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"TOMCAT分配最小内存",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"TOMCAT分配最大内存",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"TOMCAT分配年轻代空间",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"TOMCAT每个线程的堆栈大小",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"TOMCAT-GC时长占比",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"Zookeeper分配最小内存",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"1459M",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"Zookeeper分配最大内存",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"1459M",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"KAFKA分配最小内存",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有KAFKA进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"KAFKA分配最大内存",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有KAFKA进程",   "checker":"20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用系统进程数量",   "@timestamp":"1561030141",   "appname":"bobo",   "hostname":"kevin_test",   "value":"11",   "checker":"20_app_process_index.sh@192.168.10.99"   } | 
第二或第三个脚本执行结果一样,"checker"字段中的脚本路径是完整路径
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | [root@kevin_test app_process_index]# python 20_app_process_index.py{   "type":"app_process",   "desc":"应用进程占内存百分比",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"70.8%",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用进程占CPU百分比",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"144.8%",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用进程run最长时间及其进程",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"609-08:51:53, ../src/redis-sentinel",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用进程TIME-WAIT连接数",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"0",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用进程ESTABLISHED连接数",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"456",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用进程FIN_WAIT2连接数",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"0",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"日志空间使用率",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"20%",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用程序空间使用率",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"75%",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用所在磁盘读速率(Blk/s)",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"2.30",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用所在磁盘写速率(Blk/s)",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"16.41",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用所在磁盘TPS",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"1.31",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"TOMCAT分配最小内存",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"TOMCAT分配最大内存",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"TOMCAT分配年轻代空间",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"TOMCAT每个线程的堆栈大小",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"TOMCAT-GC时长占比",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有Tomcat进程",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"Zookeeper分配最小内存",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"1459M",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"Zookeeper分配最大内存",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"1459M",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"KAFKA分配最小内存",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有KAFKA进程",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"KAFKA分配最大内存",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"当前没有KAFKA进程",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   }{   "type":"app_process",   "desc":"应用系统进程数量",   "@timestamp":"1561030444",   "appname":"bobo",   "hostname":"kevin_test",   "value":"10",   "checker":"/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99"   } | 
最后将上面的第三个脚本整合到"20_app_process_index_es.py"脚本里,作为ES入仓请求的脚本
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | [root@kevin_test app_process_index]# cat 20_app_process_index_es.py#!/usr/bin/python# -*- coding: UTF-8 -*-importurllib2 importhashlibimportjsonimportosnow_path=os.path.abspath(__file__)now_path=os.path.dirname(now_path)index_script="sh %s/20_app_process_index.sh"% (now_path)json_set = os.popen(index_script).read().split('+')app_index = []forjson_str injson_set:    app_index.append(json.loads(json_str))url = 'http://192.168.10.10:10222/haha/heiheiAPI/test_1_kafka'data = {    'token': 'bd1df2b11111111112222222222222222333333333333333333yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy',    'data': app_index}headers = {'Content-Type': 'application/json'}req = urllib2.Request(url, json.dumps(data), headers = headers)res = urllib2.urlopen(req).read()print res#print app_index | 
执行这个请求脚本
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | [root@kevin_test app_process_index]# python 20_app_process_index_es.py{"retCode": 200}将脚本中的最后一行注释打开(即"#print app_index"),测试下入仓的数据:[root@kevin_test app_process_index]# python 20_app_process_index_es.py{"retCode": 200}[{u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname': u'kevin_test', u'value': u'69.7%', u'checker':u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type': u'app_process', u'desc': u'\u5e94\u7528\u8fdb\u7a0b\u5360\u5185\u5b58\u767e\u5206\u6bd4'}, {u'appname': u'bobo', u'@timestamp': u'1561030595',u'hostname': u'kevin_test', u'value': u'13.8%', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99',u'type': u'app_process', u'desc': u'\u5e94\u7528\u8fdb\u7a0b\u5360CPU\u767e\u5206\u6bd4'}, {u'appname': u'bobo', u'@timestamp': u'1561030595',u'hostname': u'kevin_test', u'value': u'609-08:54:24, ../src/redis-sentinel', u'checker':u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type': u'app_process', u'desc':u'\u5e94\u7528\u8fdb\u7a0brun\u6700\u957f\u65f6\u95f4\u53ca\u5176\u8fdb\u7a0b'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname':u'kevin_test', u'value': u'0', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type': u'app_process',u'desc': u'\u5e94\u7528\u8fdb\u7a0bTIME-WAIT\u8fde\u63a5\u6570'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname': u'kevin_test',u'value': u'458', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type': u'app_process', u'desc':u'\u5e94\u7528\u8fdb\u7a0bESTABLISHED\u8fde\u63a5\u6570'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname': u'kevin_test',u'value': u'0', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type': u'app_process', u'desc':u'\u5e94\u7528\u8fdb\u7a0bFIN_WAIT2\u8fde\u63a5\u6570'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname': u'kevin_test',u'value': u'20%', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type': u'app_process',u'desc': u'\u65e5\u5fd7\u7a7a\u95f4\u4f7f\u7528\u7387'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname': u'kevin_test',u'value': u'75%', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type': u'app_process', u'desc':u'\u5e94\u7528\u7a0b\u5e8f\u7a7a\u95f4\u4f7f\u7528\u7387'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname': u'kevin_test',u'value': u'2.30', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type': u'app_process', u'desc':u'\u5e94\u7528\u6240\u5728\u78c1\u76d8\u8bfb\u901f\u7387\uff08Blk/s\uff09'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname':u'kevin_test', u'value': u'16.41', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type': u'app_process',u'desc': u'\u5e94\u7528\u6240\u5728\u78c1\u76d8\u5199\u901f\u7387\uff08Blk/s\uff09'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname':u'kevin_test', u'value': u'1.31', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type': u'app_process',u'desc': u'\u5e94\u7528\u6240\u5728\u78c1\u76d8TPS'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname': u'kevin_test', u'value':u'\u5f53\u524d\u6ca1\u6709Tomcat\u8fdb\u7a0b', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', u'type':u'app_process', u'desc': u'TOMCAT\u5206\u914d\u6700\u5c0f\u5185\u5b58'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname': u'kevin_test',u'value': u'\u5f53\u524d\u6ca1\u6709Tomcat\u8fdb\u7a0b', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99',u'type': u'app_process', u'desc': u'TOMCAT\u5206\u914d\u6700\u5927\u5185\u5b58'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname':u'kevin_test', u'value': u'\u5f53\u524d\u6ca1\u6709Tomcat\u8fdb\u7a0b', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99',u'type': u'app_process', u'desc': u'TOMCAT\u5206\u914d\u5e74\u8f7b\u4ee3\u7a7a\u95f4'}, {u'appname': u'bobo', u'@timestamp': u'1561030595', u'hostname':u'kevin_test', u'value': u'\u5f53\u524d\u6ca1\u6709Tomcat\u8fdb\u7a0b', u'checker': u'/root/100_app_index/app_process_index/20_app_process_index.sh@192.168.10.99', | 
======================================================
上面涉及到python的当前路径调用问题(即上面讨论的第一、二、三的python脚本)
这里对python获取当前目录路径和文件的方法做个记录:
一、获取当前路径
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 1)使用sys.argv[0]importsysprint sys.argv[0]#输出#本地路径     2)os模块importosprint os.getcwd()                     #获取当前工作目录路径print os.path.abspath('.')            #获取当前工作目录路径print os.path.abspath('test.txt')     #获取当前目录文件下的工作目录路径print os.path.abspath('..')           #获取当前工作的父目录 !注意是父目录路径print os.path.abspath(os.curdir)      #获取当前工作目录路径3)改变当前目录使用: os.chdir(path)。4)组合路径返回os.path.join('file1','file2','file3')合并得到路径 file1/file2/file3 | 
二、获得当前目录下所有文件
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 1)os.walk() 用于在目录树种游走输出目录中的文件名字,向上或下;语法os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])参数:top-- 根目录下的每一个文件夹(包含它自己), 产生3-元组 (dirpath, dirnames, filenames)【文件夹路径,       文件夹名字, 文件名】。topdown --可选,为True或者没有指定, 一个目录的的3-元组将比它的任何子文件夹的3-元组先产生 (目录自上而下)。          如果topdown为 False, 一个目录的3-元组将比它的任何子文件夹的3-元组后产生 (目录自下而上)。onerror -- 可选,是一个函数; 它调用时有一个参数, 一个OSError实例。报告这错误后,继续walk,或者抛出exception终止walk。followlinks -- 设置为 true,则通过软链接访问目录。2)importosroot = os.getcwd()def file_name(file_dir):    forroot, dirs, files inos.walk(file_dir):        print "-----------"        print root    #os.walk()所在目录        print dirs#os.walk()所在目录的所有目录名        print files   #os.walk()所在目录的所有非目录文件名        print " "file_name(root) | 
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号