Ganglia 监控数据恢复

由于公司gangliagmond leader角色需要更改区分,最近在一直在搞这个玩意,终于一切OK了,做个记录,遇到的一些问题以及解决方法share下

 

leader机器的更改很简单了,这里不做叙述。直接说下面的问题

  1. 更改leader后,新的角色下面的老数据丢失,显示开始时间为更改时间

举例说明:

比如之前有个redis队长名称,下面包含master和slave所有机器,没有区别开来,现在需要更改为redis_master和redis_slave,区分开来

问题来了,区分后,master和slave下的数据起始点为更改时间以及之后的数据,之前的老数据丢失了。。。。。

 

  1. 恢复数据

ganglia数据存储是以rrd文件形式存储的,rrd文件不能直接编辑查看,但是可以通过rrdtool工具查看,具体参考

rrdtool工具使用

http://oss.oetiker.ch/rrdtool/doc/rrdtool.en.html

rrd文件提取数据

http://wenku.baidu.com/link?url=Fm4fl5jyyGsG8ERXTk8S7HgCXCUpTB6iZBKqiFQl3ppFZiUdvA9kIFpv6tkmXjOhU2o9KI5h7zpNiqI_7u3qNHgAPfU4HtRvouTrvSnAyQ_

 

boottime.rrd 文件为例

rrdtool dump boottime.rrd | less

<database>

                        <!-- 2014-12-20 22:51:30 PST / 1419144690 --> <row><v>1.4083982160e+09</v></row>

                        <!-- 2014-12-20 22:51:45 PST / 1419144705 --> <row><v>1.4083982160e+09</v></row>

                        <!-- 2014-12-20 22:52:00 PST / 1419144720 --> <row><v>1.4083982160e+09</v></row>

                        <!-- 2014-12-20 22:52:15 PST / 1419144735 --> <row><v>1.4083982160e+09</v></row>

                        <!-- 2014-12-20 22:52:30 PST / 1419144750 --> <row><v>1.4083982160e+09</v></row>

                        <!-- 2014-12-20 22:52:45 PST / 1419144765 --> <row><v>1.4083982160e+09</v></row>

                        <!-- 2014-12-20 22:53:00 PST / 1419144780 --> <row><v>1.4083982160e+09</v></row>

                        <!-- 2014-12-20 22:53:15 PST / 1419144795 --> <row><v>1.4083982160e+09</v></row>

                        <!-- 2014-12-20 22:53:30 PST / 1419144810 --> <row><v>1.4083982160e+09</v></row>

                        <!-- 2014-12-20 22:53:45 PST / 1419144825 --> <row><v>1.4083982160e+09</v></row>


2014-12-20 22:51:30  表示数据时间

1419144690 数据时间记录,使用date -d '1970-1-1 1419144690 sec utc'可以转换为正常时间格式,其实是和前面的时间一致的

1.4083982160e+09  这就是真正的数据值,科学计数法记录,如果为空则为NaN

 

接下来我们就开始整合数据

思路:

找出新的rrd文件中数据位NaN的行,取出时间点A

然后在老的rrd文件中取出时间点A的数据

将取出的数据写入新文件中

在将修改后的文件rrdtool restore为rrd文件,放在数据存取目录,ganglia便可以读取到了。

脚本如下,根据适当更改即可

#!/bin/sh

 

HOME=/home/xxx

DIR=/home/xxx/redis-master

DIR_O=/home/xxx/redis

 

for FN in `ls $DIR/$1/`

do

filename=`echo $FN | cut -d. -f1`

mkdir $HOME/$1rrdfile

 

grep NaN $DIR/$1/$filename.xml | grep '[0~9]' |  awk '{for(i=1;i<NF;i++)printf $i" ";printf"\n"}' > $HOME/$1rrdfile/$filename.file

 

        cat $HOME/$1rrdfile/$filename.file | while read i

        do

                DATA=`grep "$i" $DIR_O/$1/$filename.xml | awk '{print $NF}'`

                for j in `echo $DATA`

                do

                        sed -i 's@'"$i"' <row><v>NaN</v></row>@'"$i"' '"$j"'@g ' $DIR/$1/$filename.xml

                done

                echo

        done

done

 

cd $DIR/$1

rm -rf $DIR/$1/*.rrd

for RF in `ls `

do

        filename=`echo $RF | cut -d. -f1`

        rrdtool restore $filename.xml $filename.rrd

done

rm -rf /var/lib/ganglia/rrds/redis-master/$1/*

cp $DIR/$1/*.rrd /var/lib/ganglia/rrds/redis-master/$1/

chown nobody.nobody /var/lib/ganglia/rrds/ -R 

因为我改为leader大概1周后才开始找回之前的数据,所以涉及到数据的整合,如果修改leader时直接拷贝之前的rrd文件,那么就不会丢失数据了,拷贝花费的几分钟时间数据忽略不计


你可能感兴趣的:(Ganglia 监控数据恢复)