LINEで送る
Pocket

Athenaを運用していると、S3にある圧縮されたログが破損して、
下記のようにRedash/Athena側にエラーが出ることがあります。

Error running query: HIVE_CURSOR_ERROR: Unexpected end of input stream

今回はその対処方法をブログしやす👍


■Athena vs BigQuery

AthenaはS3のgzipを全て展開して出力しているため、
クエリで日付け指定してもバケットにファイル破損しているものがあればエラーが出てしまいます。(ツラミ)
そのため上記のエラーはどこのファイルが破損しているか不明なため、全ファイルのエラーチェックをする必要があります。😭
(スキャンした容量により, 従量課金される課金方式)

※逆にBigQueryはembulkなどで展開されているため、実行時にコケるはず。

せっかくなので次はAthenaでログ収集のコツをまとめてみました。


■Athenaを使ってS3のログを検索できるようにしたら運用コストが改善されたお話

https://qiita.com/godgarden/items/69fc31b95d63200f2f3f

ちなみに我ら@g0dgardenさんのQiitaにて以下のような工夫と実装をしています。

  • アクセスログをLTSV形式にする⇛アクセスログを解析しやすく, 項目追加など変化に強い形になるため
  • S3へ保存するログファイルをtdでJSONにする
  • S3バケットのディレクトリ設計。HIVE形式にする⇛全ファイルを探索すると、その分課金されてしまうため必要な分のみ
  • パーティションを認識させる

これにより毎回サーバに入ってawkして加工することがなく、爆発的に運用コストが下がりました。
ということでエラー直していきやしょう!😇


■ログの容量を確認

ローカルにログをダウンロードしないといけないので、
Macの容量的に余裕があるか、毎月のログ容量はどんなもんなのか確認しましょう。

ざっと35GBもありました。。😇

・cyberduck

https://cyberduck.io/

この目が死んでいるアヒルを使ってローカルにダウンロードします。😑(意外と便利)


■Research

・check.sh

上記のスクリプトを使ってエラー(unexpected end of file)のみのファイルを標準出力してあげます。

・run check.sh

すると!!エラーは1つのファイルのみだったようです。

・fix log


■確認


■まとめ

今回破損しているところは削除しましたが、ログサーバ/本番にもあるか確認しましょう。
しかしファイル破損はtdが問題なのかな。(不明)

参考
https://qiita.com/makisyu/items/90bdb6b09ade3e283dcf

LINEで送る
Pocket

カテゴリー: AthenaAWSBlog

あだちん

1989年生まれ。 ランサーズ/SRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、他社インフラレスポンス改善、ランサーズでの副業、ansibleでのインフラコード化を推進し、未経験によるエンジニアのMENTAなども実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/広報/VulsRepo init file,chatwork通知のコントリビュータでもある。現在はDocker開発環境の提供,AWSで新サービスのインフラ構築,PHPバージョンアップ,分析基盤を担当しておりDigdag,embulk,BigQueryを使いこなし中。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください。