【資料名稱】:【XC原創(chuàng)】Unix Raid OSS數(shù)據(jù)自動提取工具
【資料作者】:ZengFang
【資料日期】:2012年1月
【資料語言】:中文
【資料格式】:DOC/DOCX
【資料目錄和簡介】:
Unix Raid數(shù)據(jù)提取腳本是早期為了解決項目組提取MRR、NCS數(shù)據(jù)效率低下的問題制作的,它是基于UNIX操作系統(tǒng)的腳本,腳本雖然簡單卻極大的提高了我們的取數(shù)工作效率,結合ActiveManagement更可以達到無人值守的效果,這個腳本比較適合大的地市,如廣州、東莞、深圳、佛山這種有上100個網元的地市。以下是腳本的詳細說明:
前言:基于系統(tǒng)安全性能、多用戶操作、進程資源分配等多方面因素考慮,很多廠家都是基于Unix平臺建立他們的維護終端,這里包括愛立信的OSS終端,Unix系統(tǒng)與我們常用的Windows系統(tǒng)相比,在操作界面、軟件應用及系統(tǒng)開發(fā)上都有很大的區(qū)別。
一、Unix Raid與OPS提取思路的區(qū)別
我們日常收取愛立信NCS、MRR、FAS時是采用OPS腳本定義、提取和轉存的,這里介紹的提取腳本主要是針對第三個步驟“轉存”而來的,如下圖為常用OPS數(shù)據(jù)轉存方法示意圖:
1.通過Unix系統(tǒng)下的OSS終端軟件訪問BSC并激活轉存數(shù)據(jù)指令;
2.接到轉存指令后,BSC將硬盤的數(shù)據(jù)上傳到Unix系統(tǒng)中的OSS文件夾;
[attach]312042[/attach]
OSS系統(tǒng)中自帶的OPS系統(tǒng)是采用逐條指令執(zhí)行方式,在提取數(shù)據(jù)時要等一個BSC的文件上傳完成后才能執(zhí)行下一個BSC文件上傳指令(紅色線流程所示),因此在數(shù)據(jù)轉存過程中存在一定的延時,若遇到BSC Function Busy或網絡連接故障時,就會出現(xiàn)后面指令無法執(zhí)行,從而導致大量BSC數(shù)據(jù)無法及時轉存的情況;
UnixRaid的解決方案是繞過愛立信OSS系統(tǒng),直接在Unix中訪問BSC硬盤,獲取文件列表并使用“Ctrl+C”和“Ctrl+V”完成數(shù)據(jù)上傳任務,將以上思路轉化成自動化腳本或程序便可完成數(shù)據(jù)自動提取到目標地址后完成數(shù)據(jù)轉存工作。這樣的操作不會受OSS的任何限制,即使無法連接BSC或BSC出現(xiàn)Function Busy也不會導致后面腳本無法執(zhí)行的情況,如下圖Unix Raid數(shù)據(jù)轉存方法示意圖:
[attach]312043[/attach]
1.通過Unix直接訪問BSC硬盤,獲取目標文件名稱列表;
2.將目標文件直接下載到指定OSS目錄下;
3.兩種方法相比,Unix Raid最大的特點在于:
測量文件提取速度快;
個別網元遇錯后不會影響其它網元的指令執(zhí)行;
單個腳本即可完成所有數(shù)據(jù)轉存任務;
二、Unix Raid核心模塊介紹
Unix Raid是基于Unix系統(tǒng)編寫的數(shù)據(jù)提取腳本,腳本分開三個模塊,分別是:引導模塊、關鍵模塊和訪問模塊,Unix Raid核心模塊工作流程如下圖所示:
[attach]312044[/attach]
Unix Raid核心的三個模塊工作流程如下:
根據(jù)啟動時間創(chuàng)建存放測量數(shù)據(jù)的文件夾;
循環(huán)引導每個BSC激活【關鍵模塊】;
根據(jù)啟動時間判斷所取數(shù)據(jù)類型并設置時間、日期門限值;
激活【訪問模塊】;
根據(jù)不同文件類型獲取遠端目錄文件的詳細列表;
返回【關鍵模塊】,根據(jù)相關時間、日期的門限從【訪問模塊】中獲取到的列表中索引符合條件的目標文件名稱;
根據(jù)文件名稱從遠端目錄下提取目標文件并存放到指定目錄下;
生成LOG信息,返回【引導模塊】執(zhí)行下一個BSC數(shù)據(jù)提;
三、Unix Raid工具架設方法
在架設Unix Raid工具之前首先要對當前的環(huán)境情況進行了解和分析,從而選擇正確的設置方法,需分析的相關信息如下:
整理所需提取數(shù)據(jù)類型及時間;
了解測量數(shù)據(jù)源文件存放位置;
若在BSC硬盤則需要APG網元的FTP登錄名稱及密碼;
若在OSS硬盤上則要了解具體的地址及文件排列方式;
本地OSS存放測量數(shù)據(jù)地址;
下面以廣州環(huán)境為例介紹架設Unix Raid的詳細設置方法:
[attach]312045[/attach]
廣州項目組每天需要分6個時段收集7份測量數(shù)據(jù),相關信息如以上圖表所示,以上數(shù)據(jù)的輸出時間各不相同,因此可以作為判斷輸出數(shù)據(jù)類型的依據(jù),具體的指令及解析如下:
(一)、 引導模塊相關指令設置及指令作用解釋:
#!/bin/sh
NOW_DATE=`date'+%Y-%m-%d_%p'` 【獲取當前日期并賦值給變量NOW_DATE】
Now_Time=`date '+%H'`【獲取當前時間,用為判斷采集數(shù)據(jù)類型】
if [ $Now_Time = 12];then【若當前時間為19時(小時),則提取早忙常規(guī)MRR&NCS】
FileName=`date'+%Y-%m-%d'`"_MRR&NCS_AM"【給變量FileName賦值為當前日期_MRR&NCS_AM】
cd /home/liu_yh2/cha/CopyMRFile【打開目錄/home/liu_yh2/cha/CopyMRFile】
mkdir $FileName 【創(chuàng)建FileName變量為內容的文件夾】
cd /home/liu_yh2/cha/CopyMRFile/$FileName【打開創(chuàng)建好的文件夾】
mkdir 'FileList' 【在新創(chuàng)建的文件夾下創(chuàng)建FileList文件夾】
mkdir 'MRR'【創(chuàng)建MRR文件夾存放MRR數(shù)據(jù)】
mkdir 'NCS'【創(chuàng)建NCS文件夾存放NCS數(shù)據(jù)】
elif
[ $Now_Time = 19 ];then【若當前時間為19時(小時),則提取下行質差MRR】
FileName=`date '+%Y-%m-%d'`"_DLRxqual_MRR_PM"【給FileName賦值】
cd /home/liu_yh2/cha/CopyMRFile【打開文件夾】
mkdir $FileName【創(chuàng)建FileName變量中的文件夾】
cd /home/liu_yh2/cha/CopyMRFile/$FileName【打開新創(chuàng)建的文件夾】
mkdir'FileList'【創(chuàng)建FileList存放Log文件】
elif
[ $Now_Time = 22 ]; then【若當前時間為22時(小時),則提取晚忙常規(guī)MRR】
FileName=`date'+%Y-%m-%d'`"_Normal_MRR_PM"【給FileName賦值】
cd /home/liu_yh2/cha/CopyMRFile【打開文件夾】
mkdir $FileName 【創(chuàng)建FileName變量中的文件夾】
cd /home/liu_yh2/cha/CopyMRFile/$FileName【打開新創(chuàng)建的文件夾】
mkdir 'FileList'【創(chuàng)建FileList存放Log文件】
elif
[ $Now_Time = 23 ]; then【若當前時間為23時(小時),則提取晚忙常規(guī)NCS】
FileName=`date'+%Y-%m-%d'`"_Normal_NCS_PM"【給FileName賦值】
cd /home/liu_yh2/cha/CopyMRFile【打開文件夾】
mkdir $FileName【創(chuàng)建FileName變量中的文件夾】
cd /home/liu_yh2/cha/CopyMRFile/$FileName【打開新創(chuàng)建的文件夾】
mkdir 'FileList'【創(chuàng)建FileList存放Log文件】
elif
[ $Now_Time = 01 ]; then【若當前時間為01時(小時),則提取晚忙上行質差MRR】
FileName=`date'+%Y-%m-%d'`"_ULRxqual_MRR_PM"【給FileName賦值】
cd /home/liu_yh2/cha/CopyMRFile【打開文件夾】
mkdir $FileName【創(chuàng)建FileName變量中的文件夾】
cd /home/liu_yh2/cha/CopyMRFile/$FileName【打開新創(chuàng)建的文件夾】
mkdir 'FileList'【創(chuàng)建FileList存放Log文件】
fi
#!/bin/csh【調取環(huán)境】
/home/liu_yh2/cha/CopyMRFile【打開目錄】
perl/home/liu_yh2/cha/CopyMRFile/No2_ftp_files.sh GZM01A
>>/home/liu_yh2/cha/CopyMRFile/$FileName/OutputFileLog_0.log【GZM01A網元調用“關鍵模塊”并將執(zhí)行結果記錄到OutputFileOlg_0.log文件中】
引導模塊主要作用在于根據(jù)啟動時間判斷所需提取的數(shù)據(jù)類型,并創(chuàng)建好存放數(shù)據(jù)的文件夾用于存放數(shù)據(jù),創(chuàng)建相應文件夾后如下圖所示:
[attach]312046[/attach]
最后再逐個讀取BCS并引起進入關鍵模塊完成數(shù)據(jù)提取工作;
(二)、 關鍵模塊相關指令設置及指令作用解釋:
#!/bin/sh 【調用環(huán)境】
BSC_NAME=$1【獲取BCS名稱】
NOW_DATE=`date'+%Y-%m-%d_%p'`【獲取當前日期】
DateLimt_Mon=`date '+%b'`【獲取當前月份】
DateLimt_Day=`date '+%d'`【獲取當前日期】
DateLimt_Day=`expr
$DateLimt_Day-0`【當前日期-0,用于讀取歷史數(shù)據(jù),-1代表為昨天、-2代表前天】
Now_Time=`date '+%H'`【獲取當前時間,作為判斷基礎】
if [ $Now_Time = 12];then【若當前時間(小時)為12時,則收取常規(guī)MRR、NCS文件】
FileName=`date'+%Y-%m-%d'`"_MRR&NCS_AM"【給變量FileName賦值】
LogFileLocal=$FileName"/FileList"【給變量LogFileLocal賦值,Log文件存放地址】
MrrFileLocal=$FileName"/MRR"【給變量MrrFileLocal賦值,MRR文件存放地址】
NcsFileLocal=$FileName"/NCS"【給變量NcsFileLocal賦值,NCS文件存放地址】
TimeLimt_UP="11:00"【給變量TimeLimt_UP賦值,時間門限:上門限】
TimeLimt_DM="13:00"【給變量TimeLimt_DM賦值,時間門限:下門限】
ReadMrr="True"【給變量ReadMrr賦值,是否讀取MRR數(shù)據(jù)】
ReadNcs="True"【給變量ReadNcs賦值,是否讀取NCS數(shù)據(jù)】
elif
[ $Now_Time = 19 ];then【若當前時間(小時)為19時,則收取下行質差MRR】
MrrFileLocal=`date'+%Y-%m-%d'`"_DLRxqual_MRR_PM" 【給變量MrrFileLocal賦值,MRR文件存放地址】
LogFileLocal=$MrrFileLocal"/FileList"【給變量LogFileLocal賦值,Log文件存放地址】
TimeLimt_UP="18:00"【給變量TimeLimt_UP賦值,時間門限:上門限】
TimeLimt_DM="20:00"【給變量TimeLimt_DM賦值,時間門限:下門限】
ReadMrr="True"【給變量ReadMrr賦值,是否讀取MRR數(shù)據(jù)】
ReadNcs="False"【給變量ReadNcs賦值,是否讀取NCS數(shù)據(jù)】
elif
[ $Now_Time = 22 ]; then【若當前時間(小時)為22時,則收取常規(guī)MRR、NCS文件】
MrrFileLocal=`date'+%Y-%m-%d'`"_Normal_MRR_PM"【給變量MrrFileLocal賦值,MRR文件存放地址】
LogFileLocal=$MrrFileLocal"/FileList"【給變量LogFileLocal賦值,Log文件存放地址】
TimeLimt_UP="21:00"【給變量TimeLimt_UP賦值,時間門限:上門限】
TimeLimt_DM="22:00"【給變量TimeLimt_DM賦值,時間門限:下門限】
ReadMrr="True"【給變量ReadMrr賦值,是否讀取MRR數(shù)據(jù)】
ReadNcs="False"【給變量ReadNcs賦值,是否讀取NCS數(shù)據(jù)】
elif
[ $Now_Time = 23 ]; then【若當前時間(小時)為23時,則收取常規(guī)NCS文件】
NcsFileLocal=`date'+%Y-%m-%d'`"_Normal_NCS_PM"【給變量NcsFileLocal賦值,Ncs文件存放地址】
LogFileLocal=$NcsFileLocal"/FileList"【給變量LogFileLocal賦值,Log文件存放地址】
TimeLimt_UP="23:00"【給變量TimeLimt_UP賦值,時間門限:上門限】
TimeLimt_DM="23:59"【給變量TimeLimt_DM賦值,時間門限:下門限】
ReadMrr="False"【給變量ReadMrr賦值,是否讀取MRR數(shù)據(jù)】
ReadNcs="True"【給變量ReadNcs賦值,是否讀取NCS數(shù)據(jù)】
elif
[ $Now_Time = 01 ]; then【若當前時間(小時)為01時,則收取上行質差MRR文件】
MrrFileLocal=`date'+%Y-%m-%d'`"_ULRxqual_MRR_PM" 【給變量NcsFileLocal賦值,Ncs文件存放地址】
LogFileLocal=$MrrFileLocal"/FileList"【給變量LogFileLocal賦值,Log文件存放地址】
TimeLimt_UP="00:00"【給變量TimeLimt_UP賦值,時間門限:上門限】
TimeLimt_DM="02:00"【給變量TimeLimt_DM賦值,時間門限:下門限】
ReadMrr="True"【給變量ReadMrr賦值,是否讀取MRR數(shù)據(jù)】
ReadNcs="False"【給變量ReadNcs賦值,是否讀取NCS數(shù)據(jù)】
Fi
/home/liu_yh2/cha/CopyMRFile/No3_dir_files.sh$BSC_NAME >/home/liu_yh2/cha/CopyMRFile/$LogFileLocal/$BSC_NAME"_MR_Filelist.log"【讀取BSC引導進入“訪問模塊”,并將相關數(shù)據(jù)存放到LOG文件夾下】
FILENAME=`tail-6000/home/liu_yh2/cha/CopyMRFile/$LogFileLocal/$BSC_NAME"_MR_Filelist.log"|awk'{if($6=="'$DateLimt_Mon'" && $7=="'$DateLimt_Day'"&& ($8>"'$TimeLimt_UP'" &&$8<"'$TimeLimt_DM'") ) print $9}'`【關鍵語句,解釋見下文】
echo"--------------------"$BSC_NAME"---------------------"【輸出文本信息】
for CopeFile in $FILENAME【循環(huán)讀取獲取到符合條件的文件列表】
do
MrrCheck=`echo $CopeFile|grep -c MRR`【篩選出MRR數(shù)據(jù),用于識別數(shù)據(jù)類型】
Ncs00Check=`echo $CopeFile|grep -cBARFIL00`【篩選出BAR00數(shù)據(jù),用于識別數(shù)據(jù)類型】
Ncs01Check=`echo $CopeFile|grep -cBARFIL01`【篩選出BAR01數(shù)據(jù),用于識別數(shù)據(jù)類型】
Fas00Check=`echo $CopeFile|grep -cRIRFIL00`【篩選出RIR00數(shù)據(jù),用于識別數(shù)據(jù)類型】
Fas01Check=`echo $CopeFile|grep -cRIRFIL01`【篩選出RIR01數(shù)據(jù),用于識別數(shù)據(jù)類型】
if [ $MrrCheck = 1 -a$ReadMrr="True" ];then【如果識別到MRR文件同時ReadMrr=TRUE,則運行】
cd /home/qiu_ln/RNODATA/$BSC_NAME/MRRTRQ【打開存放MRR數(shù)據(jù)的文件夾】
cp $CopeFile /home/liu_yh2/cha/CopyMRFile/$MrrFileLocal/$BSC_NAME"_"$CopeFile【將目標文件復制到新的目錄下,并重命名】
echo "OutputFile:"$CopeBARFIL00File"__[MRR_File]"【輸出LOG信息】
elif
[ $Ncs00Check = 1 -a $ReadNcs="True"];then【如果識別到BAR00文件同時ReadNcs=TRUE,則運行】
cd/home/qiu_ln/RNODATA/$BSC_NAME/BARTRQ【打開BAR存放地址】
cp $CopeFile /home/liu_yh2/cha/CopyMRFile/$NcsFileLocal/$BSC_NAME"_00_"$CopeFile
echo "OutputFile:"$CopeFile"__[BAR_00_File]"【輸出LOG信息】
elif
[ $Ncs01Check = 1 -a$ReadNcs="True" ];then【如果識別到BAR00文件同時ReadNcs=TRUE,則運行】
cd/home/qiu_ln/RNODATA/$BSC_NAME/BARTRQ【打開BAR存放地址】
cp $CopeFile /home/liu_yh2/cha/CopyMRFile/$NcsFileLocal/$BSC_NAME"_01_"$CopeFile【輸出文件】
echo "OutputFile:"$CopeFile"__[BAR_01_File]"【輸出LOG信息】
elif
[ $Fas00Check = 1 -a$ReadFas="True" ];then【如果識別到BAR00文件同時ReadNcs=TRUE,則運行】
cd/home/qiu_ln/RNODATA/$BSC_NAME/RIRTRQ【打開RIR存放地址】
cp$CopeFile /home/liu_yh2/cha/CopyMRFile/$FasFileLocal/$BSC_NAME"_00_"$CopeFile【輸出文件】
echo "Output File:"$CopeFile"__[RIR_00_File]"【輸出LOG信息】
elif
[ $Fas01Check = 1 -a $ReadFas="True"];then【如果識別到BAR00文件同時ReadNcs=TRUE,則運行】
cd/home/qiu_ln/RNODATA/$BSC_NAME/RIRTRQ【打開RIR存放地址】
cp$CopeFile/home/liu_yh2/cha/CopyMRFile/$FasFileLocal/$BSC_NAME"_01_"$CopeFile【輸出文件】
echo "OutputFile:"$CopeFile"__[RIR_01_File]"【輸出LOG信息】
fi done
echo"----------------------Done----------------------"【輸出LOG信息】
關鍵模塊的應用流程如下:
通過啟動時間來判斷數(shù)據(jù)類型;
設置相應的提取時間門限;
啟動訪問模塊獲取文件列表;
通過門限篩選出符合條件的文件列表;
二次過濾文件類型是NCS、MRR或是FAS數(shù)據(jù);
提取文件到指定目錄;
(三)、 訪問模塊相關指令設置及指令作用解釋:
#!/bin/sh 【調用環(huán)境】
BSC_NAME=$1【獲取BSC網元名稱】
cd /home/qiu_ln/RNODATA/$BSC_NAME/MRRTRQ【打開存放MRR數(shù)據(jù)地址,不同BSC的地址】
ls -l 【獲取文件列表】
cd /home/qiu_ln/RNODATA/$BSC_NAME/BARTRQ【打開存放MRR數(shù)據(jù)地址】
ls -l 【獲取文件列表】
cd /home/qiu_ln/RNODATA/$BSC_NAME/RIRTRQ【打開存放MRR數(shù)據(jù)地址】
ls -l 【獲取文件列表】
訪問模塊的主要作用是訪問遠程存放測量數(shù)據(jù)目錄,并獲取目錄下的所有文件列表并保存為LOG文件;
(四)、 關鍵模塊【AWK語句】指令詳解:
FILENAME=`tail -6000 /home/liu_yh2/cha/CopyMRFile/$LogFileLocal/$BSC_NAME"_MR_Filelist.log"|awk '{if($6=="'$DateLimt_Mon'" &&$7=="'$DateLimt_Day'" && ($8>"'$TimeLimt_UP'"&& $8<"'$TimeLimt_DM'") ) print $9}'`
藍色腳本:讀取從遠程獲取到的文件列表;
紅色腳本:篩選符合條件的文件;
訪問模塊從遠程獲取的文件列表格式如下圖所示:
數(shù)據(jù)共分9列,其中第6-9列分別是文件的月份、日期、時間和文件名稱,它們的代表公式分別為:$6、$7、$8和$9;
[attach]312047[/attach]
通過月份、日期和時間可以準確的篩選出我們所需要的數(shù)據(jù),如需要取1月29日,早忙10點至11點的數(shù)據(jù),腳本的相應設置如下:
|awk '{if($6=="'Jan" &&$7=="'27'" && ($8>"'10:00'" && $8<"'12:00") ) print $9}'`
運行結果則顯示為:MRRFIL00-0000001666,
BARFIL01-0000000749;
這時我們可以循環(huán)通過以下語句讀取以上結果,進行MRR、NCS、FAS文件的過濾識別操作:
MrrCheck=`echo $CopeFile|grep -c MRR`
若$CopeFile變量中包含“MRR”即MRRCheck為1
Ncs00Check=`echo $CopeFile|grep -c BARFIL00`
若$CopeFile變量中包含“BARFil00”即Ncs00Check為1
Ncs01Check=`echo $CopeFile|grep -c BARFIL01`
若$CopeFile變量中包含“BARFil01”即Ncs01Check為1
Fas00Check=`echo $CopeFile|grep -c RIRFIL00`
若$CopeFile變量中包含“RIRFil01”即Fas01Check為1
Fas01Check=`echo $CopeFile|grep -c RIRFIL01`
若$CopeFile變量中包含“RIRFil01”即Fas01Check為1
通過以上層層的篩選和過濾,我們的目標數(shù)據(jù)便可以準確的輸出,Unix Raid最大的特點在于繞過愛立信OSS系統(tǒng),直接訪問BSC硬盤(或遠端目錄)獲取文件列表,并通過列表提供的時間、日期、月份及文件名稱等信息進行定位和提取,成功解決OSS數(shù)據(jù)轉存慢的問題。
以下是詳細說明及腳本文件:
以下內容跟帖回復才能看到==============================
Unix Raid數(shù)據(jù)提取腳本工作原理說明.rar (328.94 KB)==============================
[
本帖最后由 Xcvip06 于 2014-6-15 23:42 編輯 ]