LINEで送る
Pocket

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

Error running query: HIVE_CURSOR_ERROR: Unexpected end of input stream

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


■Athena vs BigQuery

AthenaS3の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

カテゴリー: AthenaAWSawscliBlog

adachin

1989年生まれのSRE。 ホスティングから大規模なアドテクなどのインフラエンジニアとして携わり、AnsibleやTerraformでのインフラコード化を推進。未経験によるエンジニアのメンターなども実施している。また、「脆弱性スキャナVuls」のOSS活動もしており、自称エバンジェリスト/技術広報/テクニカルサポート/コントリビュータでもある。現在はサービスの信頼性向上、可用性、レイテンシ、パフォーマンス、モニタリング、緊急対応、インフラコード化、リファクタリング、セキュリティ強化、新技術の検証、Docker開発環境の提供、AWSでのインフラ構築、Wordpressによるコーポレートサイトの修正、メンター、分析基盤の運用を担当している。

0件のコメント

コメントを残す

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