!!!!!!!
前回分析基盤のお話をしましたが、Digdagでembulkを使ってS3にあるログをBigqueryに飛ばす場合、
過去ログは以下のように、日付ごとに設定ファイルを作り、$ digdag runをしなければなりません。
1 2 3 4 5 6 7 8 9 |
s3_target_date: 2018-04-01 bq_target_date: 20180401 _error: sh>: export $(cat config/env | xargs) && /opt/redash-ops/digdag/xxxxxxxx.sh "[${session_time}][${session_id}] DigDag Fail adachin-server-lab-log-s3" +load: sh>: export $(cat config/env | xargs) && /usr/local/bin/embulk run -b $EMBULK_BUNDLE_PATH embulk/adachin-server-lab-access.yml.liquid |
さすがに3ヶ月前とかは手動でミスなどありそうで。。。
つらああああああああああああああああああああい!!
というわけでシェルスクリプトでv0.1作ってみましたぜ!
■digdag-run.sh
https://gist.github.com/RVIRUS0817/57ec1588ca7c253286a6392469033807
まず3行目はスクリプトで実行時にエラーが出るとそれ以下は処理しないようにしてます。(さすがにpushとかされたら困る…)5行目~20行目では日付を定義する場合は引数を使ってコマンドラインから渡してあげるといいとセンパイに指摘されたのでいい感じになりました。(指定の仕方が間違っているとエラーも出るように!!)基本今日から取るlogに関しては手動で作成して25行目のrunからのpushをすればスケジューリングされるので、ややこしくないですが!36行目からは過去ログを引数に渡す処理を書かないとあかんのでfor文でぶん回します。39行目では変数からのsedで正規表現をしてます。41行目からは上記に書いてあるdigdagファイルをぶち込んで、さらに日付ごとにファイル化してます。51行目はrunして日付ファイルを抹消しています。52行目で.digdag/status配下を消していますが、理由としては何回もrunするとエラーが出るのでキャッシュを消しているためです。
■run digdag-run.sh
とりあえず2018/05/01~2018/05/08までをぶち込んでみます。
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 |
$ ./digdag-run.sh 201805 01 08 adachin-server-lab-access === delete .digdag === === digdag run old === 2018-05-10 xx:xx:xx +0900: Digdag vx.x.xx ~省略~ Success. Task state is saved at xxxxxxxxxxxxx === delete old.dig === delete .digdag === === digdag run old === 2018-05-10 xx:xx:xx +0900: Digdag vx.x.xx ~省略~ Success. Task state is saved at xxxxxxxxxxxxx === delete old.dig === delete .digdag === === digdag run old === 2018-05-10 xx:xx:xx +0900: Digdag vx.x.xx ~省略~ Success. Task state is saved at xxxxxxxxxxxxx === delete old.dig === delete .digdag === === digdag run old === 2018-05-10 xx:xx:xx +0900: Digdag vx.x.xx ~省略~ Success. Task state is saved at xxxxxxxxxxxxx === delete old.dig === delete .digdag === === digdag run old === 2018-05-10 xx:xx:xx +0900: Digdag vx.x.xx ~省略~ Success. Task state is saved at xxxxxxxxxxxxx === delete old.dig === delete .digdag === === digdag run old === 2018-05-10 xx:xx:xx +0900: Digdag vx.x.xx ~省略~ Success. Task state is saved at xxxxxxxxxxxxx === delete old.dig === delete .digdag === === digdag run old === 2018-05-10 xx:xx:xx +0900: Digdag vx.x.xx ~省略~ Success. Task state is saved at xxxxxxxxxxxxx === delete old.dig === delete .digdag === === digdag run old === 2018-05-10 xx:xx:xx +0900: Digdag vx.x.xx ~省略~ Success. Task state is saved at xxxxxxxxxxxxx === delete old.dig |
BigQueryに入ってる!!?
■まとめ
v0.2では今日以降と過去分は関数化して別々にして、
getopts引数を使ってオプション対応からの日付範囲指定が
文字列判定になっているので日付として範囲指定できるように目指します!
むしろCircleCIで早期発見したほうがいいんじゃないの?
もっといい方法あったら教えてくだせえええ!
早速!!
こんにちは、有用な情報ありがとうございます。digdag pushを使われれているので、サーバーモードだと思いました。場合によってはdigdag backfillも使えるかもしれませんね。https://t.co/sbp9Gfr9WX https://t.co/tO1SOO7Bs1
— Hiroyuki Sato (@hiroysato) May 10, 2018
参考
https://shellscript.sunone.me/parameter.html
0件のコメント