スマフォのカバーをつけてから2ヵ月ほど、既に傷だらけになっているので、そろそろ買い換えようかなと思っているところです。
スマフォ自体も劣化してる部分があるのですが、デザインは気に入っているので、中身だけ取り換えたいと思っています。あまりスペックのこだわりはないのですが、そういうところ考えもあってAraには期待しています。(Araで気に入るデザインが出てからの話になりますが)
はじめに
さて、前回はカスタムメトリクスのデータを送信するバッチ・シェルについて説明しました。今回は標準メトリクス・カスタムメトリクスからデータを収集するバッチ(バッチ2)と、データを整形するバッチ(バッチ3)について説明します。
おさらいになりますが、用意する全バッチは下表の通りです。
バッチ名 | 処理内容 | 実行周期 |
---|---|---|
バッチ1 | インスタンス内でデータを取得し、カスタムメトリクスとしてCloudWatchへ送信します。 | 1分ごと |
シェル1 | バッチ1のシェル版です。Linuxのカスタムメトリクスを取得・送信したい場合は、こちらを利用します。 | 1分ごと |
バッチ2 | 前日分の標準メトリクス・カスタムメトリクスのデータを取得します。 | 日次 |
バッチ3 | バッチ2で取得したデータをまとめ、OSSのEmbulkを利用して整形します。 | 月次 |
バッチ4 | バッチ3で整形されたデータから、レポートとしてExcelのグラフを作成します。 | 月次 |
バッチ2(メトリクスデータ収集)
処理概要
バッチ実行日の前日分のメトリクスデータを収集します。
なお、収集するメトリクスのデータは下記の7つです。
なお、収集するメトリクスのデータは下記の7つです。
- CPU使用率(%)
- 空メモリー容量(MByte)
- メモリー使用率(%)
- ロードアベレージ(個)
- 仮想メモリー使用率(%)
- ネットワーク受信バイト数(Byte)
- ネットワーク送信バイト数(Byte)
パラメータ
第1パラメータ (必須):リージョンコード
第2パラメータ (必須):インスタンスID
第3パラメータ (任意):ave:平均値(省略時デフォルト)
max:最大値
※CloudWatchでは、収集するメトリクスデータは平均値、最大値、最小値などから選択することができます。本バッチでは、maxかaveを指定します。
第2パラメータ (必須):インスタンスID
第3パラメータ (任意):ave:平均値(省略時デフォルト)
max:最大値
※CloudWatchでは、収集するメトリクスデータは平均値、最大値、最小値などから選択することができます。本バッチでは、maxかaveを指定します。
リターンコード
0 : 正常終了しました
1 : データが0件のメトリクスがありました
4 : パラメータの指定が不正
8 : メトリクスデータ収集に失敗しました
12: 収集したデータ出力に失敗しました
1 : データが0件のメトリクスがありました
4 : パラメータの指定が不正
8 : メトリクスデータ収集に失敗しました
12: 収集したデータ出力に失敗しました
サンプルバッチ
@echo off
rem input parameters
rem %1 region code
rem %2 instance id
rem %3 get metrics value (optional)
echo ### %date% %time% get metrics batch started. region=%1,instace id=%2,metrics value code=%3.
set REGION=%1
set INSTANCEID=%2
set METRICS_VALUE_CODE=%3
set RC=0
set PADDING_TIME=%time: =0%
set TMP_FILE=%~dp0sendMet_%INSTANCEID%_%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2%%PADDING_TIME:~0,2%%PADDING_TIME:~3,2%%PADDING_TIME:~6,2%%PADDING_TIME:~9,2%.txt
if "%REGION%"=="" goto PARAM_INVALID
if "%INSTANCEID%"=="" goto PARAM_INVALID
if "%METRICS_VALUE_CODE%"=="" (
set METRICSVALUE=Average
) else if "%METRICS_VALUE_CODE%"=="ave" (
set METRICSVALUE=Average
) else if "%METRICS_VALUE_CODE%"=="max" (
set METRICSVALUE=Maximum
) else (
goto PARAM_INVALID
)
rem CloudWatchAPI need environment variables
set AWS_CLOUDWATCH_HOME="C:\CloudWatch-1.0.20.0"
set PATH=%PATH%;%AWS_CLOUDWATCH_HOME%\bin
set JAVA_HOME="C:\Program Files\Java\jre1.8.0_25"
set AWS_CREDENTIAL_FILE="XXXXXXX\credentials"
rem from A-AUTO 50 variables
set vbsdir=C:\BSP\AUW\BIN
for /F "usebackq" %%d in (`"cscript //nologo %vbsdir%\GetDate.vbs %date% d -1"`) do set TARGET_DATE=%%d
rem 64bit version
rem for /F "usebackq" %%d in (`"C:\Windows\SysWOW64\cscript //nologo %vbsdir%\GetDate.vbs %date% d -1"`) do set TARGET_DATE=%%d
rem constants
set AWS_CLOUDWATCH_URL=http://monitoring.%REGION%.amazonaws.com
set IGNORE_STR="指定されたファイルが見つかりません。"
rem unit second(60 * 5)
set METRICS_PRIOD=300
set METRICS_START_TIME=%TARGET_DATE:~0,4%-%TARGET_DATE:~4,2%-%TARGET_DATE:~6,2%T00:00:00+09:00
for /F "usebackq" %%d in (`"cscript //nologo %vbsdir%\GetDate.vbs %date% d 0"`) do set TMP_END_TIME=%%d
rem 64bit version
rem for /F "usebackq" %%d in (`"C:\Windows\SysWOW64\cscript //nologo %vbsdir%\GetDate.vbs %date% d 0"`) do set TMP_END_TIME=%%d
set METRICS_END_TIME=%TMP_END_TIME:~0,4%-%TMP_END_TIME:~4,2%-%TMP_END_TIME:~6,2%T00:00:00+09:00
rem prefixs
set CPU_PREFIX=cpu
set NET_TRF_IN_PREFIX=network_in
set NET_TRF_OUT_PREFIX=network_out
set AVA_MEM_PREFIX=availablemem
set MEM_USAGE_PREFIX=memusage
set LOADAVE_PREFIX=loadave
set SWAPMEM_PREFIX=swap
rem export paths
set EXPORT_FOLDER=%AWS_CLOUDWATCH_HOME%\log\%TARGET_DATE:~0,6%
if not exist %EXPORT_FOLDER% mkdir %EXPORT_FOLDER%
set CPU_FILE=%EXPORT_FOLDER%\%CPU_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set NET_TRF_IN_FILE=%EXPORT_FOLDER%\%NET_TRF_IN_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set NET_TRF_OUT_FILE=%EXPORT_FOLDER%\%NET_TRF_OUT_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set AVA_MEM_FILE=%EXPORT_FOLDER%\%AVA_MEM_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set MEM_USAGE_FILE=%EXPORT_FOLDER%\%MEM_USAGE_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set LOADAVE_FILE=%EXPORT_FOLDER%\%LOADAVE_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set SWAPMEM_FILE=%EXPORT_FOLDER%\%SWAPMEM_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
rem main
rem get ec2 metrics
call :getMetrics AWS/EC2 CPUUtilization Percent %CPU_FILE%
call :getMetrics AWS/EC2 NetworkIn Bytes %NET_TRF_IN_FILE%
call :getMetrics AWS/EC2 NetworkOut Bytes %NET_TRF_OUT_FILE%
rem get a-auto metrics
call :getMetrics "A-AUTO Metrics" AvailableMemory Megabytes %AVA_MEM_FILE%
call :getMetrics "A-AUTO Metrics" MemoryUsage Percent %MEM_USAGE_FILE%
call :getMetrics "A-AUTO Metrics" SwapMemory Percent %SWAPMEM_FILE%
call :getMetrics "A-AUTO Metrics" LoadAverage Count %LOADAVE_FILE%
echo ### %date% %time% get metrics datas successful.
goto END
:getMetrics
rem %1 namespace
rem %2 metrics name
rem %3 unit
rem %4 export file name
call mon-get-stats %2 --start-time %METRICS_START_TIME% --end-time %METRICS_END_TIME% --period %METRICS_PRIOD% --namespace %1 --dimensions "InstanceId=%INSTANCEID%" --statistics %METRICSVALUE% --unit %3 --delimiter "," 1> %4 2> %TMP_FILE%
if exist %4 if exist %TMP_FILE% set EXPORT_SUCCESSFUL=TRUE
rem file io error
if not "%EXPORT_SUCCESSFUL%"=="TRUE" goto EXPORT_FAILED
rem mon-get-stats failed
for /F "usebackq" %%m in (`"findstr /X /V %IGNORE_STR% %TMP_FILE%"`) do (
type %TMP_FILE%
goto GET_METRICS_FAILED
)
rem export successful but data noting (not error)
for %%s in (%4) do if %%~zs==0 call :EXPORT_NO_DATA %2
goto :EOF
:EXPORT_NO_DATA
echo ### %date% %time% %1 metrics no data.
set RC=1
goto :EOF
:PARAM_INVALID
echo ### %date% %time% required param empty or param3 invalid.
set RC=4
goto END
:GET_METRICS_FAILED
echo ### %date% %time% get metrics datas failed.
set RC=8
goto END
:EXPORT_FAILED
echo ### %date% %time% export file failed.
set RC=12
goto END
:END
if exist %TMP_FILE% del %TMP_FILE%
echo ### %date% %time% get metrics batch ended(RC=%RC%).
exit %RC%
rem input parameters
rem %1 region code
rem %2 instance id
rem %3 get metrics value (optional)
echo ### %date% %time% get metrics batch started. region=%1,instace id=%2,metrics value code=%3.
set REGION=%1
set INSTANCEID=%2
set METRICS_VALUE_CODE=%3
set RC=0
set PADDING_TIME=%time: =0%
set TMP_FILE=%~dp0sendMet_%INSTANCEID%_%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2%%PADDING_TIME:~0,2%%PADDING_TIME:~3,2%%PADDING_TIME:~6,2%%PADDING_TIME:~9,2%.txt
if "%REGION%"=="" goto PARAM_INVALID
if "%INSTANCEID%"=="" goto PARAM_INVALID
if "%METRICS_VALUE_CODE%"=="" (
set METRICSVALUE=Average
) else if "%METRICS_VALUE_CODE%"=="ave" (
set METRICSVALUE=Average
) else if "%METRICS_VALUE_CODE%"=="max" (
set METRICSVALUE=Maximum
) else (
goto PARAM_INVALID
)
rem CloudWatchAPI need environment variables
set AWS_CLOUDWATCH_HOME="C:\CloudWatch-1.0.20.0"
set PATH=%PATH%;%AWS_CLOUDWATCH_HOME%\bin
set JAVA_HOME="C:\Program Files\Java\jre1.8.0_25"
set AWS_CREDENTIAL_FILE="XXXXXXX\credentials"
rem from A-AUTO 50 variables
set vbsdir=C:\BSP\AUW\BIN
for /F "usebackq" %%d in (`"cscript //nologo %vbsdir%\GetDate.vbs %date% d -1"`) do set TARGET_DATE=%%d
rem 64bit version
rem for /F "usebackq" %%d in (`"C:\Windows\SysWOW64\cscript //nologo %vbsdir%\GetDate.vbs %date% d -1"`) do set TARGET_DATE=%%d
rem constants
set AWS_CLOUDWATCH_URL=http://monitoring.%REGION%.amazonaws.com
set IGNORE_STR="指定されたファイルが見つかりません。"
rem unit second(60 * 5)
set METRICS_PRIOD=300
set METRICS_START_TIME=%TARGET_DATE:~0,4%-%TARGET_DATE:~4,2%-%TARGET_DATE:~6,2%T00:00:00+09:00
for /F "usebackq" %%d in (`"cscript //nologo %vbsdir%\GetDate.vbs %date% d 0"`) do set TMP_END_TIME=%%d
rem 64bit version
rem for /F "usebackq" %%d in (`"C:\Windows\SysWOW64\cscript //nologo %vbsdir%\GetDate.vbs %date% d 0"`) do set TMP_END_TIME=%%d
set METRICS_END_TIME=%TMP_END_TIME:~0,4%-%TMP_END_TIME:~4,2%-%TMP_END_TIME:~6,2%T00:00:00+09:00
rem prefixs
set CPU_PREFIX=cpu
set NET_TRF_IN_PREFIX=network_in
set NET_TRF_OUT_PREFIX=network_out
set AVA_MEM_PREFIX=availablemem
set MEM_USAGE_PREFIX=memusage
set LOADAVE_PREFIX=loadave
set SWAPMEM_PREFIX=swap
rem export paths
set EXPORT_FOLDER=%AWS_CLOUDWATCH_HOME%\log\%TARGET_DATE:~0,6%
if not exist %EXPORT_FOLDER% mkdir %EXPORT_FOLDER%
set CPU_FILE=%EXPORT_FOLDER%\%CPU_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set NET_TRF_IN_FILE=%EXPORT_FOLDER%\%NET_TRF_IN_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set NET_TRF_OUT_FILE=%EXPORT_FOLDER%\%NET_TRF_OUT_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set AVA_MEM_FILE=%EXPORT_FOLDER%\%AVA_MEM_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set MEM_USAGE_FILE=%EXPORT_FOLDER%\%MEM_USAGE_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set LOADAVE_FILE=%EXPORT_FOLDER%\%LOADAVE_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
set SWAPMEM_FILE=%EXPORT_FOLDER%\%SWAPMEM_PREFIX%_%INSTANCEID%_%TARGET_DATE%.csv
rem main
rem get ec2 metrics
call :getMetrics AWS/EC2 CPUUtilization Percent %CPU_FILE%
call :getMetrics AWS/EC2 NetworkIn Bytes %NET_TRF_IN_FILE%
call :getMetrics AWS/EC2 NetworkOut Bytes %NET_TRF_OUT_FILE%
rem get a-auto metrics
call :getMetrics "A-AUTO Metrics" AvailableMemory Megabytes %AVA_MEM_FILE%
call :getMetrics "A-AUTO Metrics" MemoryUsage Percent %MEM_USAGE_FILE%
call :getMetrics "A-AUTO Metrics" SwapMemory Percent %SWAPMEM_FILE%
call :getMetrics "A-AUTO Metrics" LoadAverage Count %LOADAVE_FILE%
echo ### %date% %time% get metrics datas successful.
goto END
:getMetrics
rem %1 namespace
rem %2 metrics name
rem %3 unit
rem %4 export file name
call mon-get-stats %2 --start-time %METRICS_START_TIME% --end-time %METRICS_END_TIME% --period %METRICS_PRIOD% --namespace %1 --dimensions "InstanceId=%INSTANCEID%" --statistics %METRICSVALUE% --unit %3 --delimiter "," 1> %4 2> %TMP_FILE%
if exist %4 if exist %TMP_FILE% set EXPORT_SUCCESSFUL=TRUE
rem file io error
if not "%EXPORT_SUCCESSFUL%"=="TRUE" goto EXPORT_FAILED
rem mon-get-stats failed
for /F "usebackq" %%m in (`"findstr /X /V %IGNORE_STR% %TMP_FILE%"`) do (
type %TMP_FILE%
goto GET_METRICS_FAILED
)
rem export successful but data noting (not error)
for %%s in (%4) do if %%~zs==0 call :EXPORT_NO_DATA %2
goto :EOF
:EXPORT_NO_DATA
echo ### %date% %time% %1 metrics no data.
set RC=1
goto :EOF
:PARAM_INVALID
echo ### %date% %time% required param empty or param3 invalid.
set RC=4
goto END
:GET_METRICS_FAILED
echo ### %date% %time% get metrics datas failed.
set RC=8
goto END
:EXPORT_FAILED
echo ### %date% %time% export file failed.
set RC=12
goto END
:END
if exist %TMP_FILE% del %TMP_FILE%
echo ### %date% %time% get metrics batch ended(RC=%RC%).
exit %RC%
バッチ2補足
1.環境変数
CloudWatch Command Line Toolsを利用するために、バッチ1と同様環境変数の設定が必要です。
実行する環境に合わせて、サンプルバッチ内の下記の環境変数の書き換えを行ってください。
•AWS_CLOUDWATCH_HOME :CloudWatch Command Line Toolsの配置先パス
•JAVA_HOME :Javaの配置先パス
•AWS_CREDENTIAL_FILE :CloudWatchの利用権限を持ったユーザのクレデンシャルファイル
※クレデンシャルファイルの作成方法については、前回のブログをご参照ください。
実行する環境に合わせて、サンプルバッチ内の下記の環境変数の書き換えを行ってください。
•AWS_CLOUDWATCH_HOME :CloudWatch Command Line Toolsの配置先パス
•JAVA_HOME :Javaの配置先パス
•AWS_CREDENTIAL_FILE :CloudWatchの利用権限を持ったユーザのクレデンシャルファイル
※クレデンシャルファイルの作成方法については、前回のブログをご参照ください。
2.メトリクスデータの収集方法
バッチ2では下記の要素で絞り込んだ結果を、メトリクスデータとして収集しています。
名前空間・メトリクス名
名前空間とメトリクス名はCloudWatchで保存されているデータの区分けです。
例えばインスタンスのCPU使用率であれば、名前空間は「AWS/EC2」、メトリクス名は「CPUUtilization」となっています。インスタンスのCPU使用率は標準メトリクスなので、名前空間とメトリクス名はあらかじめ決められており、変更することはできません。
カスタムメトリクスは、データの送信(記録)時に名前空間とメトリクス名も併せて送っているため、ユーザの任意の名称にすることができます。
なお、バッチ1(シェル1)では下記のような名前空間とメトリクス名で送信しているので、バッチ2ではそれらのカスタムメトリクスがあるものとして、固定値を利用しています。
リージョンコード・インスタンスID
メトリクスデータの収集対象となるインスタンスのリージョンコードおよびインスタンスIDです。
バッチ2ではパラメータで取得した値を利用しています。
メトリクスデータを収集する対象時間(開始)・メトリクスデータを収集する対象時間(終了)
メトリクスデータを収集する対象時間の範囲を決定します。
バッチ2では開始を実行日の前日0:00:00、終了を実行日の0:00:00としています。
なお、「実行日の前日」は別途提供するGetDate.vbsを利用して取得します。
メトリクスデータを収集する時間間隔
前述のメトリクスデータを収集する対象時間(開始)からメトリクスデータを収集する対象時間(終了)までで、メトリクスデータを収集する時間間隔を決定します。
バッチ2では5分間隔としています。
収集するメトリクスデータの値
パラメータにて説明していますが、最大値、最小値、平均値など、どんな値を収集するかを決定します。
バッチ2ではパラメータによって平均値もしくは最大値を収集するようにしています。
データの単位
メトリクスデータが複数の単位で送信されている場合、どの単位で収集するのかを決定します。
バッチ2では各メトリクスごとに固定の単位にしています。
- 名前空間
- メトリクス名
- リージョンコード
- インスタンスID
- メトリクスデータを収集する対象時間(開始)
- メトリクスデータを収集する対象時間(終了)
- メトリクスデータを収集する時間間隔
- 収集するメトリクスデータの値
- データの単位
名前空間・メトリクス名
名前空間とメトリクス名はCloudWatchで保存されているデータの区分けです。
例えばインスタンスのCPU使用率であれば、名前空間は「AWS/EC2」、メトリクス名は「CPUUtilization」となっています。インスタンスのCPU使用率は標準メトリクスなので、名前空間とメトリクス名はあらかじめ決められており、変更することはできません。
カスタムメトリクスは、データの送信(記録)時に名前空間とメトリクス名も併せて送っているため、ユーザの任意の名称にすることができます。
なお、バッチ1(シェル1)では下記のような名前空間とメトリクス名で送信しているので、バッチ2ではそれらのカスタムメトリクスがあるものとして、固定値を利用しています。
送信したカスタムメトリクス | 名前空間 | メトリクス名 |
---|---|---|
空メモリー容量 | A-AUTO Metrics | AvailableMemory |
メモリー使用率 | A-AUTO Metrics | MemoryUsage |
ロードアベレージ | A-AUTO Metrics | LoadAverage |
仮想メモリー使用率 | A-AUTO Metrics | SwapMemory |
リージョンコード・インスタンスID
メトリクスデータの収集対象となるインスタンスのリージョンコードおよびインスタンスIDです。
バッチ2ではパラメータで取得した値を利用しています。
メトリクスデータを収集する対象時間(開始)・メトリクスデータを収集する対象時間(終了)
メトリクスデータを収集する対象時間の範囲を決定します。
バッチ2では開始を実行日の前日0:00:00、終了を実行日の0:00:00としています。
なお、「実行日の前日」は別途提供するGetDate.vbsを利用して取得します。
メトリクスデータを収集する時間間隔
前述のメトリクスデータを収集する対象時間(開始)からメトリクスデータを収集する対象時間(終了)までで、メトリクスデータを収集する時間間隔を決定します。
バッチ2では5分間隔としています。
収集するメトリクスデータの値
パラメータにて説明していますが、最大値、最小値、平均値など、どんな値を収集するかを決定します。
バッチ2ではパラメータによって平均値もしくは最大値を収集するようにしています。
データの単位
メトリクスデータが複数の単位で送信されている場合、どの単位で収集するのかを決定します。
バッチ2では各メトリクスごとに固定の単位にしています。
3.出力ファイル
出力先:"環境変数「AWS_CLOUDWATCH_HOME」の指定先パス"\実行日の前日の年月
出力ファイル(リターンコードが0もしくは1の場合のみ出力します)
出力ファイル(リターンコードが0もしくは1の場合のみ出力します)
ファイル名 | ファイル内容 |
---|---|
cpu_インスタンスID_実行日の前日(年月日).csv | CPU使用率のメトリクスデータ |
availablemem_インスタンスID_実行日の前日(年月日).csv | 空メモリー容量のメトリクスのデータ |
memusage_インスタンスID_実行日の前日(年月日).csv | メモリー使用率のメトリクスのデータ |
loadave_インスタンスID_実行日の前日(年月日).csv | ロードアベレージのメトリクスのデータ |
swap_インスタンスID_実行日の前日(年月日).csv | 仮想メモリー使用率のメトリクスのデータ |
network_in_インスタンスID_実行日の前日(年月日).csv | ネットワーク送信バイト数のメトリクスのデータ |
network_out_インスタンスID_実行日の前日(年月日).csv | ネットワーク受信バイト数のメトリクスのデータ |
4.実行方法とタイミング
A-AUTO 50でバッチ2を日次で実行するため、下記の手順を踏んでください。
1.ジョブネットワーク情報の登録
登録方法に関しては、過去のブログをご参照ください。
バッチ2は下記の設定を行えば、日次で自動実行されます。
2.ネットワークスケジュールの作成
登録方法に関しては、過去のブログをご参照ください。
ネットワークネットワークIDとスケジュールIDを関連づけたスケジュールを作成します。前述の手順で登録したネットワークIDに、インストール時に用意されているスケジュールID「OPSDAILY」を関連づけてください。
1.ジョブネットワーク情報の登録
登録方法に関しては、過去のブログをご参照ください。
バッチ2は下記の設定を行えば、日次で自動実行されます。
- ネットワーク属性1
- ネットワークID:任意の入力が可能ですが、バッチ2を実行することが分かるような名前にすることをお勧めします。
- スタート時刻:バッチ2を実行する時刻を指定します。24:00~47:59の間で時刻を指定すると良いでしょう。
- ジョブ
- ジョブ番号:001~999の任意の入力が可能ですが、バッチ2のみを実行する場合は特に数字を気にする必要はありません。(複数のジョブ実行する場合の実行順序の設定です)
- ジョブコード:バッチ2のジョブ名を指定します。なお、8桁まで入力が可能です。例として、バッチ2を「getMet.bat」とした場合、「GETMET」と入力します。
- マックスリターンコード:「2」を指定します。ここで指定した数値未満の値であれば、正常終了と見なします。リターンコードが「1」となるパターンも異常としたい場合は、「1」に設定するなど、適宜設定してください。
- ノーマル実行時のジョブ引渡しパラメータ:バッチ2の実行時のパラメータを指定します。必要なパラメータは前述の「パラメータ」をご参照ください。
- リラン実行時のパラメータ :ノーマル実行時の引渡しパラメータと同様の入力をしてください。こちらは異常終了時からの再実行時の入力パラメータとなります。
2.ネットワークスケジュールの作成
登録方法に関しては、過去のブログをご参照ください。
ネットワークネットワークIDとスケジュールIDを関連づけたスケジュールを作成します。前述の手順で登録したネットワークIDに、インストール時に用意されているスケジュールID「OPSDAILY」を関連づけてください。
Embulk利用における準備
バッチ3ではデータを整形するために、OSSのEmbulkを利用しているので、そのために必要な準備をします。準備①:Embulkのダウンロード・exampleの実行
Git HubにてEmbulkのダウンロード方法や、exampleの実行方法が記載されているので、そちらをご参照ください。
Quick StartのTrying the exampleまで終わり、下記のような結果になっていれば、Embulkのダウンロードは正しく終えられています。
※Embulkのバージョンによって、表示が変わっている可能性があります。
※上記はEmbulk(V0.6.9)を「C:\Embulk」フォルダにダウンロードした表示例です。
Quick StartのTrying the exampleまで終わり、下記のような結果になっていれば、Embulkのダウンロードは正しく終えられています。
C:\embulk>embulk run config.yml
2015-05-29 18:03:03.766 +0900: Embulk v0.6.9
2015-05-29 18:03:08.891 +0900 [INFO] (transaction): Listing local files at directory 'C:\embulk\try1\csv' filtering filename by prefix 'sample_'
2015-05-29 18:03:08.899 +0900 [INFO] (transaction): Loading files [C:\embulk\try1\csv\sample_01.csv.gz]
2015-05-29 18:03:09.074 +0900 [INFO] (transaction): {done: 0 / 1, running: 0}
1,32864,2015-01-27 19:23:49,20150127,embulk
2,14824,2015-01-27 19:01:23,20150127,embulk jruby
3,27559,2015-01-28 02:20:02,20150128,Embulk "csv" parser plugin
4,11270,2015-01-29 11:54:36,20150129,NULL
2015-05-29 18:03:09.464 +0900 [INFO] (transaction): {done: 1 / 1, running: 0}
2015-05-29 18:03:09.497 +0900 [INFO] (main): Committed.
2015-05-29 18:03:09.511 +0900 [INFO] (main): Next config diff: {"in":{"last_path":"C:\\embulk\\try1\\csv\\sample_01.csv.gz"},"out":{}}
2015-05-29 18:03:03.766 +0900: Embulk v0.6.9
2015-05-29 18:03:08.891 +0900 [INFO] (transaction): Listing local files at directory 'C:\embulk\try1\csv' filtering filename by prefix 'sample_'
2015-05-29 18:03:08.899 +0900 [INFO] (transaction): Loading files [C:\embulk\try1\csv\sample_01.csv.gz]
2015-05-29 18:03:09.074 +0900 [INFO] (transaction): {done: 0 / 1, running: 0}
1,32864,2015-01-27 19:23:49,20150127,embulk
2,14824,2015-01-27 19:01:23,20150127,embulk jruby
3,27559,2015-01-28 02:20:02,20150128,Embulk "csv" parser plugin
4,11270,2015-01-29 11:54:36,20150129,NULL
2015-05-29 18:03:09.464 +0900 [INFO] (transaction): {done: 1 / 1, running: 0}
2015-05-29 18:03:09.497 +0900 [INFO] (main): Committed.
2015-05-29 18:03:09.511 +0900 [INFO] (main): Next config diff: {"in":{"last_path":"C:\\embulk\\try1\\csv\\sample_01.csv.gz"},"out":{}}
※Embulkのバージョンによって、表示が変わっている可能性があります。
※上記はEmbulk(V0.6.9)を「C:\Embulk」フォルダにダウンロードした表示例です。
準備②:embulk-filter-evalのインストール
データ整形を行うためのEmbulkのプラグインをインストールします。
下記のコマンドを実行します。
その後、次のような結果になっていれば、embulk-filter-evalのインストールは完了しています。
※Embulkおよびプラグインのバージョンによって、表示が変わっている可能性があります。
下記のコマンドを実行します。
C:\embulk>embulk gem install embulk-filter-eval
その後、次のような結果になっていれば、embulk-filter-evalのインストールは完了しています。
2015-05-29 18:11:25.931 +0900: Embulk v0.6.9
Fetching: embulk-filter-eval-0.1.0.gem (100%)
Successfully installed embulk-filter-eval-0.1.0
1 gem installed
Fetching: embulk-filter-eval-0.1.0.gem (100%)
Successfully installed embulk-filter-eval-0.1.0
1 gem installed
※Embulkおよびプラグインのバージョンによって、表示が変わっている可能性があります。
準備③:バッチ3用のymlファイルの配置
Embulkの実行には、インプットとなるファイルパスや、データの変換方法、出力先のパスを定義しているymlファイルが必要になります。
バッチ3では専用のymlファイルを利用してデータの整形を行うため、Embulkの配置先パスに「auto」フォルダを作成した後、下記のymlファイル2つを作成してください。
バッチ3では専用のymlファイルを利用してデータの整形を行うため、Embulkの配置先パスに「auto」フォルダを作成した後、下記のymlファイル2つを作成してください。
cloudwatch_config.ymlファイル
in:
type: file
path_prefix: XXX
parser:
charset: UTF-8
newline: CRLF
type: csv
delimiter: ','
quote: '"'
escape: ''
skip_header_lines: 0
columns:
- {name: date, type: string}
- {name: value, type: double}
- {name: unit, type: string}
filters:
- type: eval
eval_columns:
- date: str = value; day = Time.gm(str[0,4], str[5,2], str[8,2], str[11,2], str[14,2], str[17,2]).getlocal; day.strftime("%Y-%m-%d %H:%M:%S");
- value: value.round(2)
- unit: value
out_columns:
- date
- value
exec: {}
out:
type: file
path_prefix: YYY
sequence_format: ""
file_ext: .csv
formatter:
type: csv
header_line: false
charset: UTF-8
newline: CRLF
delimiter: ","
type: file
path_prefix: XXX
parser:
charset: UTF-8
newline: CRLF
type: csv
delimiter: ','
quote: '"'
escape: ''
skip_header_lines: 0
columns:
- {name: date, type: string}
- {name: value, type: double}
- {name: unit, type: string}
filters:
- type: eval
eval_columns:
- date: str = value; day = Time.gm(str[0,4], str[5,2], str[8,2], str[11,2], str[14,2], str[17,2]).getlocal; day.strftime("%Y-%m-%d %H:%M:%S");
- value: value.round(2)
- unit: value
out_columns:
- date
- value
exec: {}
out:
type: file
path_prefix: YYY
sequence_format: ""
file_ext: .csv
formatter:
type: csv
header_line: false
charset: UTF-8
newline: CRLF
delimiter: ","
cloudwatch_m_config.ymlファイル
in:
type: file
path_prefix: XXX
parser:
charset: UTF-8
newline: CRLF
type: csv
delimiter: ','
quote: '"'
escape: ''
skip_header_lines: 0
columns:
- {name: date, type: string}
- {name: value, type: double}
- {name: unit, type: string}
filters:
- type: eval
eval_columns:
- date: str = value; day = Time.gm(str[0,4], str[5,2], str[8,2], str[11,2], str[14,2], str[17,2]).getlocal; day.strftime("%Y-%m-%d %H:%M:%S");
- value: value.quo(1024).quo(1024).round(2)
- unit: value
out_columns:
- date
- value
exec: {}
out:
type: file
path_prefix: YYY
sequence_format: ""
file_ext: .csv
formatter:
type: csv
header_line: false
charset: UTF-8
newline: CRLF
delimiter: ","
type: file
path_prefix: XXX
parser:
charset: UTF-8
newline: CRLF
type: csv
delimiter: ','
quote: '"'
escape: ''
skip_header_lines: 0
columns:
- {name: date, type: string}
- {name: value, type: double}
- {name: unit, type: string}
filters:
- type: eval
eval_columns:
- date: str = value; day = Time.gm(str[0,4], str[5,2], str[8,2], str[11,2], str[14,2], str[17,2]).getlocal; day.strftime("%Y-%m-%d %H:%M:%S");
- value: value.quo(1024).quo(1024).round(2)
- unit: value
out_columns:
- date
- value
exec: {}
out:
type: file
path_prefix: YYY
sequence_format: ""
file_ext: .csv
formatter:
type: csv
header_line: false
charset: UTF-8
newline: CRLF
delimiter: ","
バッチ3(データ整形)
処理概要
バッチ2で出力したファイル群をメトリクスごとにまとめ、整形されたデータを出力します。
パラメータ
第1パラメータ(必須) :インスタンスID
第2パラメータ(必須) :ファイルの出力先パス(※)
※ブランクパスを指定する場合、パスの前後を「"」で括ってください。
また、ファイルの出力先パスとして、下記のパスは指定できません。
第2パラメータ(必須) :ファイルの出力先パス(※)
※ブランクパスを指定する場合、パスの前後を「"」で括ってください。
また、ファイルの出力先パスとして、下記のパスは指定できません。
- マルチバイトの含まれたパス
- 相対パス
リターンコード
0 : 正常終了しました
4 : パラメータの指定が不正
8 : 整形する元データが不足しています
12: バッチ3用のymlファイルが見つかりません
16: Embulkによるデータの整形および出力に失敗しました
4 : パラメータの指定が不正
8 : 整形する元データが不足しています
12: バッチ3用のymlファイルが見つかりません
16: Embulkによるデータの整形および出力に失敗しました
サンプルバッチ
@echo off
rem input parameters
rem %1 instance id
rem %2 export folder
echo ### %date% %time% format metrics batch started. instace id=%1,export folder=%2.
set INSTANCEID=%1
set EXPORT_FOLDER=%2
set RC=0
set PADDING_TIME=%time: =0%
set EXECUTE_TIME=%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2%%PADDING_TIME:~0,2%%PADDING_TIME:~3,2%%PADDING_TIME:~6,2%%PADDING_TIME:~9,2%
set TMP_CPU_FILE=""
set TMP_NET_TRF_IN_FILE=""
set TMP_NET_TRF_OUT_FILE=""
set TMP_AVA_MEM_FILE=""
set TMP_MEM_USAGE_FILE=""
set TMP_LOADAVE_READ_FILE=""
set TMP_SWAPMEM_FILE=""
set TMP_YML_FILE=""
if "%INSTANCEID%"=="" goto PARAM_INVALID
if "%~2"=="" goto PARAM_INVALID
rem target date
set vbsdir=C:\BSP\AUW\BIN
for /F "usebackq" %%d in (`"cscript //nologo %vbsdir%\GetDate.vbs %date% m -1"`) do set TAGRGET_MONTH=%%d
rem 64bit version
rem for /F "usebackq" %%d in (`"C:\Windows\SysWOW64\cscript //nologo %vbsdir%\GetDate.vbs %date% m -1"`) do set TAGRGET_MONTH=%%d
set TAGRGET_MONTH=%TAGRGET_MONTH:~0,6%
rem input foloder
set AWS_CLOUDWATCH_HOME="C:\CloudWatch-2010-08-01"
set INPUT_FOLDER=%AWS_CLOUDWATCH_HOME%\log\%TAGRGET_MONTH%
rem embulk path
set EMBULK_HOME=C:\embulk
set NOMAL_BASE_YML=%EMBULK_HOME%\auto\cloudwatch_config.yml
set CONVERT_MEGABYTE_BASE_YML=%EMBULK_HOME%\auto\cloudwatch_m_config.yml
set TMP_YML_FILE=%EMBULK_HOME%\auto\cloudwatch_config_%EXECUTE_TIME%.yml
set PATH=%PATH%;%EMBULK_HOME%
rem prefixs
set CPU_PREFIX=cpu
set NET_TRF_IN_PREFIX=network_in
set NET_TRF_OUT_PREFIX=network_out
set AVA_MEM_PREFIX=availablemem
set MEM_USAGE_PREFIX=memusage
set LOADAVE_PREFIX=loadave
set SWAPMEM_PREFIX=swap
rem input file name pattern
set CPU_FILES=%INPUT_FOLDER%\%CPU_PREFIX%_%INSTANCEID%_*.csv
set NET_TRF_IN_FILES=%INPUT_FOLDER%\%NET_TRF_IN_PREFIX%_%INSTANCEID%_*.csv
set NET_TRF_OUT_FILES=%INPUT_FOLDER%\%NET_TRF_OUT_PREFIX%_%INSTANCEID%_*.csv
set AVA_MEM_FILES=%INPUT_FOLDER%\%AVA_MEM_PREFIX%_%INSTANCEID%_*.csv
set MEM_USAGE_FILES=%INPUT_FOLDER%\%MEM_USAGE_PREFIX%_%INSTANCEID%_*.csv
set LOADAVE_FILES=%INPUT_FOLDER%\%LOADAVE_PREFIX%_%INSTANCEID%_*.csv
set SWAPMEM_FILES=%INPUT_FOLDER%\%SWAPMEM_PREFIX%_%INSTANCEID%_*.csv
rem export file name
set EXPORT_CPU_FILE=%EXPORT_FOLDER%\%CPU_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_NET_TRF_IN_FILE=%EXPORT_FOLDER%\%NET_TRF_IN_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_NET_TRF_OUT_FILE=%EXPORT_FOLDER%\%NET_TRF_OUT_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_AVA_MEM_FILE=%EXPORT_FOLDER%\%AVA_MEM_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_MEM_USAGE_FILE=%EXPORT_FOLDER%\%MEM_USAGE_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_LOADAVE_FILE=%EXPORT_FOLDER%\%LOADAVE_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_SWAPMEM_FILE=%EXPORT_FOLDER%\%SWAPMEM_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
rem tmp export file name
set TMP_CPU_FILE=%EXPORT_FOLDER%\%CPU_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_NET_TRF_IN_FILE=%EXPORT_FOLDER%\%NET_TRF_IN_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_NET_TRF_OUT_FILE=%EXPORT_FOLDER%\%NET_TRF_OUT_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_AVA_MEM_FILE=%EXPORT_FOLDER%\%AVA_MEM_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_MEM_USAGE_FILE=%EXPORT_FOLDER%\%MEM_USAGE_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_LOADAVE_READ_FILE=%EXPORT_FOLDER%\%LOADAVE_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_SWAPMEM_FILE=%EXPORT_FOLDER%\%SWAPMEM_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
rem main
rem gererate tmp export file
copy /b %CPU_FILES% %TMP_CPU_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %NET_TRF_IN_FILES% %TMP_NET_TRF_IN_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %NET_TRF_OUT_FILES% %TMP_NET_TRF_OUT_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %AVA_MEM_FILES% %TMP_AVA_MEM_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %MEM_USAGE_FILES% %TMP_MEM_USAGE_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %LOADAVE_FILES% %TMP_LOADAVE_READ_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %SWAPMEM_FILES% %TMP_SWAPMEM_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
rem export file
call :format %TMP_CPU_FILE% %EXPORT_CPU_FILE% %NOMAL_BASE_YML%
call :format %TMP_NET_TRF_IN_FILE% %EXPORT_NET_TRF_IN_FILE% %CONVERT_MEGABYTE_BASE_YML%
call :format %TMP_NET_TRF_OUT_FILE% %EXPORT_NET_TRF_OUT_FILE% %CONVERT_MEGABYTE_BASE_YML%
call :format %TMP_AVA_MEM_FILE% %EXPORT_AVA_MEM_FILE% %NOMAL_BASE_YML%
call :format %TMP_MEM_USAGE_FILE% %EXPORT_MEM_USAGE_FILE% %NOMAL_BASE_YML%
call :format %TMP_LOADAVE_READ_FILE% %EXPORT_LOADAVE_FILE% %NOMAL_BASE_YML%
call :format %TMP_SWAPMEM_FILE% %EXPORT_SWAPMEM_FILE% %NOMAL_BASE_YML%
echo ### %date% %time% format metrics successful.
goto END
:format
rem %1 input tmp file
rem %2 export file
rem %3 base yml
set INPUT_FILE=%1
set EXPORT_FILE=%2
set BASE_YML=%3
rem base yml not found
if not exist %BASE_YML% call :YML_NOT_FOUND %BASE_YML%
if exist %TMP_YML_FILE% del %TMP_YML_FILE%
setlocal ENABLEDELAYEDEXPANSION
rem tmp yml generate
for /f "usebackq delims=" %%f in (%BASE_YML%) do (
set line=%%f
set line=!line:XXX=%INPUT_FILE:"=%!
set line=!line:YYY=%EXPORT_FILE:"=%!
echo !line! >> %TMP_YML_FILE%
)
endlocal
rem export file
if exist %EXPORT_FILE% del %EXPORT_FILE%
call embulk run %TMP_YML_FILE%
if errorlevel 1 (
call :EXPORT_FAILD %EXPORT_FILE%
)
goto :EOF
:PARAM_INVALID
echo ### %date% %time% parameter invalid.
set RC=4
goto END
:TMP_FILES_GENERATE_FAILED
echo ### %date% %time% input file read or input folder write faild.
set RC=8
goto END
:YML_NOT_FOUND
echo ### %date% %time% %1 not found.
set RC=12
goto END
:EXPORT_FAILD
echo ### %date% %time% %1 export faild.
set RC=16
goto END
:END
rem delete tmp export files
if exist %TMP_CPU_FILE% del %TMP_CPU_FILE%
if exist %TMP_NET_TRF_IN_FILE% del %TMP_NET_TRF_IN_FILE%
if exist %TMP_NET_TRF_OUT_FILE% del %TMP_NET_TRF_OUT_FILE%
if exist %TMP_AVA_MEM_FILE% del %TMP_AVA_MEM_FILE%
if exist %TMP_MEM_USAGE_FILE% del %TMP_MEM_USAGE_FILE%
if exist %TMP_LOADAVE_READ_FILE% del %TMP_LOADAVE_READ_FILE%
if exist %TMP_SWAPMEM_FILE% del %TMP_SWAPMEM_FILE%
if exist %TMP_YML_FILE% del %TMP_YML_FILE%
echo ### %date% %time% format metrics batch ended(RC=%RC%).
exit %RC%
rem input parameters
rem %1 instance id
rem %2 export folder
echo ### %date% %time% format metrics batch started. instace id=%1,export folder=%2.
set INSTANCEID=%1
set EXPORT_FOLDER=%2
set RC=0
set PADDING_TIME=%time: =0%
set EXECUTE_TIME=%DATE:~-10,4%%DATE:~-5,2%%DATE:~-2%%PADDING_TIME:~0,2%%PADDING_TIME:~3,2%%PADDING_TIME:~6,2%%PADDING_TIME:~9,2%
set TMP_CPU_FILE=""
set TMP_NET_TRF_IN_FILE=""
set TMP_NET_TRF_OUT_FILE=""
set TMP_AVA_MEM_FILE=""
set TMP_MEM_USAGE_FILE=""
set TMP_LOADAVE_READ_FILE=""
set TMP_SWAPMEM_FILE=""
set TMP_YML_FILE=""
if "%INSTANCEID%"=="" goto PARAM_INVALID
if "%~2"=="" goto PARAM_INVALID
rem target date
set vbsdir=C:\BSP\AUW\BIN
for /F "usebackq" %%d in (`"cscript //nologo %vbsdir%\GetDate.vbs %date% m -1"`) do set TAGRGET_MONTH=%%d
rem 64bit version
rem for /F "usebackq" %%d in (`"C:\Windows\SysWOW64\cscript //nologo %vbsdir%\GetDate.vbs %date% m -1"`) do set TAGRGET_MONTH=%%d
set TAGRGET_MONTH=%TAGRGET_MONTH:~0,6%
rem input foloder
set AWS_CLOUDWATCH_HOME="C:\CloudWatch-2010-08-01"
set INPUT_FOLDER=%AWS_CLOUDWATCH_HOME%\log\%TAGRGET_MONTH%
rem embulk path
set EMBULK_HOME=C:\embulk
set NOMAL_BASE_YML=%EMBULK_HOME%\auto\cloudwatch_config.yml
set CONVERT_MEGABYTE_BASE_YML=%EMBULK_HOME%\auto\cloudwatch_m_config.yml
set TMP_YML_FILE=%EMBULK_HOME%\auto\cloudwatch_config_%EXECUTE_TIME%.yml
set PATH=%PATH%;%EMBULK_HOME%
rem prefixs
set CPU_PREFIX=cpu
set NET_TRF_IN_PREFIX=network_in
set NET_TRF_OUT_PREFIX=network_out
set AVA_MEM_PREFIX=availablemem
set MEM_USAGE_PREFIX=memusage
set LOADAVE_PREFIX=loadave
set SWAPMEM_PREFIX=swap
rem input file name pattern
set CPU_FILES=%INPUT_FOLDER%\%CPU_PREFIX%_%INSTANCEID%_*.csv
set NET_TRF_IN_FILES=%INPUT_FOLDER%\%NET_TRF_IN_PREFIX%_%INSTANCEID%_*.csv
set NET_TRF_OUT_FILES=%INPUT_FOLDER%\%NET_TRF_OUT_PREFIX%_%INSTANCEID%_*.csv
set AVA_MEM_FILES=%INPUT_FOLDER%\%AVA_MEM_PREFIX%_%INSTANCEID%_*.csv
set MEM_USAGE_FILES=%INPUT_FOLDER%\%MEM_USAGE_PREFIX%_%INSTANCEID%_*.csv
set LOADAVE_FILES=%INPUT_FOLDER%\%LOADAVE_PREFIX%_%INSTANCEID%_*.csv
set SWAPMEM_FILES=%INPUT_FOLDER%\%SWAPMEM_PREFIX%_%INSTANCEID%_*.csv
rem export file name
set EXPORT_CPU_FILE=%EXPORT_FOLDER%\%CPU_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_NET_TRF_IN_FILE=%EXPORT_FOLDER%\%NET_TRF_IN_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_NET_TRF_OUT_FILE=%EXPORT_FOLDER%\%NET_TRF_OUT_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_AVA_MEM_FILE=%EXPORT_FOLDER%\%AVA_MEM_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_MEM_USAGE_FILE=%EXPORT_FOLDER%\%MEM_USAGE_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_LOADAVE_FILE=%EXPORT_FOLDER%\%LOADAVE_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
set EXPORT_SWAPMEM_FILE=%EXPORT_FOLDER%\%SWAPMEM_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%
rem tmp export file name
set TMP_CPU_FILE=%EXPORT_FOLDER%\%CPU_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_NET_TRF_IN_FILE=%EXPORT_FOLDER%\%NET_TRF_IN_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_NET_TRF_OUT_FILE=%EXPORT_FOLDER%\%NET_TRF_OUT_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_AVA_MEM_FILE=%EXPORT_FOLDER%\%AVA_MEM_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_MEM_USAGE_FILE=%EXPORT_FOLDER%\%MEM_USAGE_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_LOADAVE_READ_FILE=%EXPORT_FOLDER%\%LOADAVE_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
set TMP_SWAPMEM_FILE=%EXPORT_FOLDER%\%SWAPMEM_PREFIX%_%INSTANCEID%_%TAGRGET_MONTH%_%EXECUTE_TIME%.csv
rem main
rem gererate tmp export file
copy /b %CPU_FILES% %TMP_CPU_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %NET_TRF_IN_FILES% %TMP_NET_TRF_IN_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %NET_TRF_OUT_FILES% %TMP_NET_TRF_OUT_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %AVA_MEM_FILES% %TMP_AVA_MEM_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %MEM_USAGE_FILES% %TMP_MEM_USAGE_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %LOADAVE_FILES% %TMP_LOADAVE_READ_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
copy /b %SWAPMEM_FILES% %TMP_SWAPMEM_FILE%
if errorlevel 1 goto TMP_FILES_GENERATE_FAILED
rem export file
call :format %TMP_CPU_FILE% %EXPORT_CPU_FILE% %NOMAL_BASE_YML%
call :format %TMP_NET_TRF_IN_FILE% %EXPORT_NET_TRF_IN_FILE% %CONVERT_MEGABYTE_BASE_YML%
call :format %TMP_NET_TRF_OUT_FILE% %EXPORT_NET_TRF_OUT_FILE% %CONVERT_MEGABYTE_BASE_YML%
call :format %TMP_AVA_MEM_FILE% %EXPORT_AVA_MEM_FILE% %NOMAL_BASE_YML%
call :format %TMP_MEM_USAGE_FILE% %EXPORT_MEM_USAGE_FILE% %NOMAL_BASE_YML%
call :format %TMP_LOADAVE_READ_FILE% %EXPORT_LOADAVE_FILE% %NOMAL_BASE_YML%
call :format %TMP_SWAPMEM_FILE% %EXPORT_SWAPMEM_FILE% %NOMAL_BASE_YML%
echo ### %date% %time% format metrics successful.
goto END
:format
rem %1 input tmp file
rem %2 export file
rem %3 base yml
set INPUT_FILE=%1
set EXPORT_FILE=%2
set BASE_YML=%3
rem base yml not found
if not exist %BASE_YML% call :YML_NOT_FOUND %BASE_YML%
if exist %TMP_YML_FILE% del %TMP_YML_FILE%
setlocal ENABLEDELAYEDEXPANSION
rem tmp yml generate
for /f "usebackq delims=" %%f in (%BASE_YML%) do (
set line=%%f
set line=!line:XXX=%INPUT_FILE:"=%!
set line=!line:YYY=%EXPORT_FILE:"=%!
echo !line! >> %TMP_YML_FILE%
)
endlocal
rem export file
if exist %EXPORT_FILE% del %EXPORT_FILE%
call embulk run %TMP_YML_FILE%
if errorlevel 1 (
call :EXPORT_FAILD %EXPORT_FILE%
)
goto :EOF
:PARAM_INVALID
echo ### %date% %time% parameter invalid.
set RC=4
goto END
:TMP_FILES_GENERATE_FAILED
echo ### %date% %time% input file read or input folder write faild.
set RC=8
goto END
:YML_NOT_FOUND
echo ### %date% %time% %1 not found.
set RC=12
goto END
:EXPORT_FAILD
echo ### %date% %time% %1 export faild.
set RC=16
goto END
:END
rem delete tmp export files
if exist %TMP_CPU_FILE% del %TMP_CPU_FILE%
if exist %TMP_NET_TRF_IN_FILE% del %TMP_NET_TRF_IN_FILE%
if exist %TMP_NET_TRF_OUT_FILE% del %TMP_NET_TRF_OUT_FILE%
if exist %TMP_AVA_MEM_FILE% del %TMP_AVA_MEM_FILE%
if exist %TMP_MEM_USAGE_FILE% del %TMP_MEM_USAGE_FILE%
if exist %TMP_LOADAVE_READ_FILE% del %TMP_LOADAVE_READ_FILE%
if exist %TMP_SWAPMEM_FILE% del %TMP_SWAPMEM_FILE%
if exist %TMP_YML_FILE% del %TMP_YML_FILE%
echo ### %date% %time% format metrics batch ended(RC=%RC%).
exit %RC%
バッチ3補足
1.環境変数
バッチ3ではEmbulkを利用することと、整形する元データとして、バッチ2で作成したパスを取得するため、2つの環境変数を設定します。
実行する環境に合わせて、サンプルバッチ内の下記の環境変数の書き換えを行ってください。
•AWS_CLOUDWATCH_HOME :CloudWatch Command Line Toolsの配置先パス
•EMBULK_HOME :Embulkの配置先パス
実行する環境に合わせて、サンプルバッチ内の下記の環境変数の書き換えを行ってください。
•AWS_CLOUDWATCH_HOME :CloudWatch Command Line Toolsの配置先パス
•EMBULK_HOME :Embulkの配置先パス
2.Embulkによるデータ整形内容
Embulkによって、下記のデータ整形を行います。
- 元データのメトリクスデータから小数点第2位以降のカット
- 元データの時間をGMT時間から現地時間へ変換
- 元データの単位がByteのメトリクスデータを、ByteからMByteに変換
- 元データの単位の情報を削除
3.出力ファイル
出力先:第二パラメータの指定先
出力ファイル(リターンコードが0の場合のみ出力します)
出力ファイル(リターンコードが0の場合のみ出力します)
ファイル名 | ファイル内容 |
---|---|
cpu_インスタンスID_実行日の前月(年月).csv | CPU使用率のメトリクスデータ(整形済・1ヵ月分) |
availablemem_インスタンスID_実行日の前月(年月).csv | 空メモリー容量のメトリクスのデータ(整形済・1ヵ月分) |
memusage_インスタンスID_実行日の前月(年月).csv | メモリー使用率のメトリクスのデータ(整形済・1ヵ月分) |
loadave_インスタンスID_実行日の前月(年月).csv | ロードアベレージのメトリクスのデータ(整形済・1ヵ月分) |
swap_インスタンスID_実行日の前月(年月).csv | 仮想メモリー使用率のメトリクスのデータ(整形済・1ヵ月分) |
network_in_インスタンスID_実行日の前月(年月).csv | ネットワーク送信バイト数のメトリクスのデータ(整形済・1ヵ月分) |
network_out_インスタンスID_実行日の前月(年月).csv | ネットワーク受信バイト数のメトリクスのデータ(整形済・1ヵ月分) |
4.実行方法とタイミング
A-AUTO 50によって、月次で実行するようにスケジューリングしてください。
注意点として、バッチ3は元データを"「CloudWatch Command Line Toolsの配置先パス」\実行日の前月の年月"から取得します。
例えば、2015年5月に実行した場合、"「CloudWatch Command Line Toolsの配置先パス」\201504"内のファイルを元データとして見なします。
実行イメージとして、1ヵ月分のメトリクスデータが"「CloudWatch Command Line Toolsの配置先パス」\201504"に保存されていて、2015年5月1日などに実行することで、2015年4月のメトリクスデータをまとめ・整形されたファイルが7ファイル(メトリクスの数)作成されます。
A-AUTO 50でバッチ3を月次で実行するためには、下記の手順を踏んでください。
1.スケジュール情報を作成する
登録方法に関しては、過去のブログをご参照ください。
「ホリデーID」にはインストール時に用意しているカレンダー「OPSHOLT1」を指定します。
月次で動かすため、「処理サイクル」は「月次」とし、「標準処理日」には毎月月末に実行するのであれば、「最終日」を指定してください。
2.ジョブ実行ユーザ切り替え機能の準備
バッチ3の実行は「embulk-filter-eval」をインストールしたユーザでのみ正常に動作します。
バッチ3を適切なユーザで実行するため、ジョブ実行ユーザ切り替え機能を利用する必要があります。
※A-AUTO 50では、ジョブを実行するユーザを指定していない場合、ローカルシステムアカウントでジョブが実行されます。
ジョブ実行ユーザ切り替え機能を利用するために、下記の手順で準備を行ってください。
※以降の説明では、ジョブ実行ユーザIDに「USER1」を用います
3.ジョブネットワーク情報の登録
登録方法に関しては、過去のブログをご参照ください。
バッチ3は下記の設定を行えば、月次で自動実行されます。
4.ネットワークスケジュールの作成
登録方法に関しては、過去のブログをご参照ください。
前述の手順で作成した「スケジュールID」と「ジョブネットワークID」を関連付けます。
次回はバッチ3で出力したメトリクスデータを元に、Excelレポートを作成します。注意点として、バッチ3は元データを"「CloudWatch Command Line Toolsの配置先パス」\実行日の前月の年月"から取得します。
例えば、2015年5月に実行した場合、"「CloudWatch Command Line Toolsの配置先パス」\201504"内のファイルを元データとして見なします。
実行イメージとして、1ヵ月分のメトリクスデータが"「CloudWatch Command Line Toolsの配置先パス」\201504"に保存されていて、2015年5月1日などに実行することで、2015年4月のメトリクスデータをまとめ・整形されたファイルが7ファイル(メトリクスの数)作成されます。
A-AUTO 50でバッチ3を月次で実行するためには、下記の手順を踏んでください。
1.スケジュール情報を作成する
登録方法に関しては、過去のブログをご参照ください。
「ホリデーID」にはインストール時に用意しているカレンダー「OPSHOLT1」を指定します。
月次で動かすため、「処理サイクル」は「月次」とし、「標準処理日」には毎月月末に実行するのであれば、「最終日」を指定してください。
2.ジョブ実行ユーザ切り替え機能の準備
バッチ3の実行は「embulk-filter-eval」をインストールしたユーザでのみ正常に動作します。
バッチ3を適切なユーザで実行するため、ジョブ実行ユーザ切り替え機能を利用する必要があります。
※A-AUTO 50では、ジョブを実行するユーザを指定していない場合、ローカルシステムアカウントでジョブが実行されます。
ジョブ実行ユーザ切り替え機能を利用するために、下記の手順で準備を行ってください。
※以降の説明では、ジョブ実行ユーザIDに「USER1」を用います
3.ジョブネットワーク情報の登録
登録方法に関しては、過去のブログをご参照ください。
バッチ3は下記の設定を行えば、月次で自動実行されます。
- ネットワーク属性1
- ネットワークID:任意の入力が可能ですが、バッチ3を実行することが分かるような名前にすることをお勧めします。
- ジョブ実行ユーザID:ジョブ実行ユーザ切り替え機能の準備で作成した、ジョブ実行ユーザIDを指定します。
- 先行ネットワーク
- バッチ2の手順で作成したジョブネットワークIDを選択します。
- ジョブ
- ジョブ番号:001~999の任意の入力が可能ですが、バッチ3のみを実行する場合は特に数字を気にする必要はありません。(複数のジョブ実行する場合の実行順序の設定です)
- ジョブコード:バッチ3のジョブ名を指定します。なお、8桁まで入力が可能です。例として、バッチ3を「forMet.bat」とした場合、「FORMET」と入力します。
- マックスリターンコード:「1」を指定します。ここで指定した数値未満の値であれば、正常終了と見なします。
- ノーマル実行時のジョブ引渡しパラメータ:バッチ3の実行時のパラメータを指定します。必要なパラメータは前述の「パラメータ」をご参照ください。
- リラン実行時のパラメータ :ノーマル実行時の引渡しパラメータと同様の入力をしてください。こちらは異常終了時からの再実行時の入力パラメータとなります。
4.ネットワークスケジュールの作成
登録方法に関しては、過去のブログをご参照ください。
前述の手順で作成した「スケジュールID」と「ジョブネットワークID」を関連付けます。
最後に付録として、バッチ2・バッチ3で利用している「GetDate.vbs」の内容を記載します。
「GetDate.vbs」は作成後、「A-AUTO 50のダウンロード先」\AUW\BINに配置してください。
※デフォルト設定でインストールした場合、「C:\BSP\AUW\BIN」になります。
GetDate.vbs
Set inputParams = Wscript.Arguments
baseDate = inputParams(0)
kind = inputParams(1)
value = inputParams(2)
res = Replace(DateAdd(kind, value, baseDate), "/", "")
WScript.Echo res
baseDate = inputParams(0)
kind = inputParams(1)
value = inputParams(2)
res = Replace(DateAdd(kind, value, baseDate), "/", "")
WScript.Echo res
0 件のコメント:
コメントを投稿