文本内容大致为:
exporter.log:
devops_monitor_prom_node-2 | CHANGED | rc=0 >>root 26417 26416 0 02:27 pts/1 00:00:00 /bin/sh -c ps -ef |grep node_exporterroot 26419 26417 0 02:27 pts/1 00:00:00 grep node_exportergerrit1 | CHANGED | rc=0 >>root 159753 159752 0 10:27 pts/4 00:00:00 /bin/sh -c ps -ef |grep node_exporterroot 159755 159753 0 10:27 pts/4 00:00:00 grep node_exporternode_ex+ 201401 1 0 Jan08 ? 00:00:34 /usr/sbin/node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collectorgerrit_mirror | CHANGED | rc=0 >>node_ex+ 120488 1 0 Jan08 ? 00:00:38 /usr/sbin/node_exporter --collector.textfile.directory /var/lib/node_exporter/textfile_collector
要找到安装了node_exporter的hosts
把段落转成一行,按>>符号分隔
while read line ;do last2=echo ${line:0-2};if [ “$last2” == “>>” ];then echo ;echo -n $line;else echo -n $line;fi;done < ./exporter.log > 1exporter.log
过滤需要的结果
more 1exporter.log |grep “/usr/sbin/node_exporter”|awk ‘{print $1}’ > installed.log
得到到是主机名,把主机名转为ip
while read line ;do grep $line /etc/hosts|awk ‘{print $1}’;done < ./installed.log
得到ip列表。
将过程写成shell script
$ cat findIpsFromAnsibleLog.sh#!/bin/sh#$1:input a ansible log file#$2:a key string to filter, only output hosts whose include key string.#$3:if == "i" , filter will be inverse , only output hosts whose not include key string.spliter=">>"tmpfile="/tmp/ansible`date +%s`.1"if [ "$1" == "" ];then #$1echo input an ansible log file to handle.else #$1while read line ;dolast2=`echo ${line:0-2}`;if [ "$last2" == "$spliter" ];thenecho ;echo -n $line;elseecho -n $line;fi;done < $1 > $tmpfileif [ "$2" == "" ];then #$2awk '{print $1}' $tmpfileelse #$2if [ "$3" == "" ];then #$3grep "$2" $tmpfile | awk '{print $1}'else #$3grep -v "$2" $tmpfile | awk '{print $1}'fi #$3fi #$2fi #$1rm $tmpfile
