tackeのブログ

コニチワ!!!

AWS AthenaでS3のログを集計してみた

業務でS3にあるログファイル(JSON行レコード)を集計するタスクをAWS Athenaでやってみたので備忘録。

実はこれ、すでにAWS EMR/Apache Pigで集計しているログファイルなのでPigスクリプトを修正してもよかったんですが実行環境やデプロイが面倒そうだったのと、 Athenaを今覚えたほうが今後の業務で役に立ちそうなのでチャレンジしてみることにしました。 (Pigスクリプトを書いたのは3年前くらいの自分なので頑張れば思い出せるのですが、古い技術を思い出すモチベーションはそんなにない・・・)

そもそもAthenaがSQLで簡単に集計できる、ってのも大きな判断要素ではありました。

というわけでどういう感じで学んでいったかをメモしておきます。

概要を把握

何事もまずは基礎基本から、というわけでまずはAthenaのドキュメントを読んで概要を把握します。

docs.aws.amazon.com

わかったこと

Athena使い方

  • テーブル、データベース、を定義する

次にチュートリアルをやってみます。 日本語の解説を見ながら進めたかったのでこの記事を参考にしました。 blog.serverworks.co.jp

これでざっくりと機能と使い方を把握できました。

というわけで今回の対応を進めていきます。 以下、チュートリアルをやったことある人向け。

テーブルの作成

まずはテーブル作成からです。

S3上のログのパスはだいたいこんなかんじ。 s3://bucket_name/path/to/logs/2018/08/01/00/

Athenaにはパーティション機能があり、Hive形式で s3://bucket_name/path/to/logs/year=2018/month=08/date=01/hour=00/ のようになっていればSQLパーティションを利用できて便利そうだったんですが、今回は単に年月日でディレクトリが切られているだけなので対応しておりません。

こういう場合でも手動でパーティションを作成すれば利用可能なのですが、8月1日のパーティション作成、8月2日のパーティション作成、、、 といった具合にひとつずつパーティションを作成しないといけないようです。

プログラムを作成してJDBCパーティション作成コマンドを一気に発行・・・とかやればいいみたいですが、 今回はアドホックな集計なのでS3パスの指定を対象の年月日を直接指定しパーティションを利用しないようにしました。

今回は以下のように指定しました。こうすると /2018/08/ 以下のすべてのログが集計対象になります。 s3://bucket_name/path/to/logs/2018/08/

ログの形式はJSONを指定します。 JSONだと次ステップのカラム定義の際にで正規表現でログをパースする必要がなくてかなり楽ちんでした。

カラム定義

JSONのプロパティ名をひとつずつカラムとして定義していきます。 JSONパースして一覧を出して選べたりすればかなり楽なのに手動入力なのでつらいです。 しかし、CSVなどの場合は正規表現でパース処理を書かなくてはいけないのでだいぶマシです。

というわけでこれはS3の実際のログを確認しつつ作業します。

ここで、必要ないカラムや値の型が不明なプロパティについては定義しないほうが楽です。 使わないうえによくわからないプロパティをわざわざ定義してパースに失敗するより、定義しないままにしておきましょう。 すべて定義しなくても無視されるだけなので問題ありません。

定義に問題なければプレビューを確認できるので確認しておきましょう。

SQL作成

ここは普通にSQLを書くだけなので特に書くことはありません。

予めS3のログサイズを調べておき実行時間やコストが想定外に膨らまないように注意しましょう。

最初はわざとすくないデーターでテーブルを作っておくといいかもしれません。 (こういう機能がAthenaにあれば簡単なのですが、無さそうです)

結果の確認

AthenaのHisotry、およびS3から確認&ダウンロード可能です。 極力Athena側でクエリに名前をつけて保存しておくと、あとあと再利用などしやすそうです。

所感など

S3のログを手軽にSQLで集計でき、かなり便利でした。 今回はWebコンソールから作業しましたがチュートリアルをやっておけば特に困ることがないぐらい簡単でした。 今後の業務で活用していきたいです。

イマイチなところとしては、SQLをSaveするときDescription入力時にEnterを押すと確定されてしまい、日本語が入力しづらい、というのがありました。。。 これはWebコンソールが日本語化されてないのでいろいろと対応してないところがあるのでしょう・・。まぁそんなに問題ないです。ちょっとつらいだけ。

以上!

Kalafinaブログを閉じました

Kalafina梶浦由記関連のブログを作っていたがはじめに2記事ぐらい書いてから1年ぐらい更新していなかったので記事をこのブログに統合して、ブログは削除しました。

というかKalafina自体がKeiko脱退以降、活動してないですし何書くっていうんだい、っていう・・・。

まぁそんな感じです。

たった2記事ですし、せっかくなのでリンクを貼っておきます。

tacke.hateblo.jp

tacke.hateblo.jp

「LINE Developers Meetup in Tokyo #44 -Agile2018 Conference 報告会-」に参加してきたメモ

「2018年08月28日(火) LINE Developers Meetup in Tokyo #44 -Agile2018 Conference 報告会-」に参加してきました。

line.connpass.com

当初ブログに書くつもりはなかったのでかなり雑なヌケモレだらけのメモですが、せっかくなので記録しておきます。

1) From Output to Outcome

伊藤 宏幸(LINE株式会社)

Agile 2018についての説明

今年、Metricsがカテゴリに昇格した DevOpsは減ったが、それは別でカンファレンスをやるようになったから

Topic

  1. Scaling Agile
  2. Business Agility
    • 正直ハズレだった、とのこと。まだ具体的なはなしがあまりない
    • Outcome
  3. Tech for Trial & Errors

-> Summary Outcome Business

Continuous Delivery

  • Scale teams
  • CD for DB

-> Outcome

Database DevOps

DBもDevOpsやっていく

Chaos Engineering

Metrics (Agile Data)

KeynoteでMetricsについて話していた。

Mob Programming

年がら年中コミュニケーションしてるから、、、 -> 見積もりやらない。 -> デイリーMTGがやらない。

Learning to Experiment

常に実験しながら改善していく。

週7時間、勉強会をやっている。チームのためなら内容は何でもいいし予算も確保している。

Tool

Portfolio Dashboard Poker

メトリクスを選ぶポーカー

Wisdom of Crowds

チームごとの考えをお互い見れるようにする

まとめ

Agile 2019 に応募しよう!

2) Data & Metrics in Agile2018

陶山 育男 様(株式会社サイバーエージェント

Metricsについて

Modern Data (Modern Agileのモジり)

  • Data is Beautiful
  • Data を安全に使う
  • 予測可能性の対価
  • 依存があるとタスクが間に合わない確率的がかなり高くなる!
    • 依存を減らしましょう

The impact of lean

  • SDPI
    • Software Development Performance Index
    • 4つのメトリクスでバランスよく・・・
    • これをつかってチームをはかる
    • WIPを減らすと不具合が減り、デリバリー速度があがる。しかし生産性は落ちる。

3) Making work visible

高橋 陽太郎 様 (株式会社リクルートジョブズ 兼 株式会社リクルートテクノロジーズ)

メトリクスをあえて手で取ってる。

  • 開発はアジャイルだぜー!と思ってたけどビジネス含めて全体では全然アジャイルじゃなかった
  • やろうとしたことを思いついて、着手してからビジネス的にリリースするまでのリードタイムを図ろう

感動したメトリクスの話し

よさそう。あとで。

著者や登壇者と雑談の話し

Christopher Lucian Hunter Industriesのディレクター モブプロの創始者の一人

モブは案件ごとにやり始めて最後までそのメンバーでやり続ける 途中から参加する人のコスト高いから基本的にやらない

モブプロは見積もりしないけど、計画は立ててないの? ビジネスは計画を立ててるけど、開発に強いることはないよ

4) 当たり前を当たり前に

横道 稔(LINE株式会社)

横道さんは Training, Teaching, Coaching にフォーカスしてた

みんな読んでるらしい本 https://www.amazon.co.jp/dp/B0062O7L7S/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1

アジャイルを教えるためのセッション

ゲームをするといいですよ、っと。 記憶にも残るし。 -> Communication Game

VARK 人間の学習特性4分類。Visual, AUidtory, Reading/Writing, Kinesthetic どれが強いか、を意識するといいかも

Cone of Learning てっぺんはDiscussion -> いますぐディスカッション隣の人とやりましょう!

Efficiency <-> Effectiveness

感想

運営スタッフ、登壇者、の皆様の発言やふるまいがものすごくオープンで話しやすく聞きやすかった。 これはなにげに、かなりすごいと思った。

メトリクスの話は面白いしやってみたいと思うが、スクラムマスター専任でないとそのための時間は取れなさそう。 現実的にスクラムマスターと開発者を兼任している現場も多そうだし。 ツールで解決できるといいのだが・・・。

自分のチームで依存を減らすのはやりたい。 フロントとサーバーサイドでペアを組んでみると依存は減るかも?(ジャストアイデア

モブプロもやってみたい。 しかしPO不在の状況が多いため難しいかも。

MacBook Pro 13" 2018を購入したのでセットアップメモ

メインマシンとして利用していた MacBook Pro 17" 2011 が故障したため新しいメインマシンとしてMacBook Pro 13" 2018 を購入しました。

せっかくなのでセットアップでやったことをメモしておきます。

やったこと

  • トラックパッド設定に全てチェックを入れる
  • トラックパッドカーソルスピードを最速に設定
  • App Storeで最新にアップデート
  • Chromeインストール
    • ログインしてブックマークや拡張などの設定を同期
  • ShiftItインストール
  • Dockの表示/非表示を有効化
  • Karabiner-Elementsインストール
    • 日本語向けの設定をImportして左右のコマンドキーを英数かなボタンに変更した
    • 左ControlキーとCaps Lockキーを入れ換え
  • Clipyをインストール
  • バッテリー表示の「割合を表示する」を有効化
  • 日付と時刻表示の「秒を表示」「時刻内の":"を点滅する」「日付を表示」にチェックを入れる
  • App StoreからLINEをインストール
  • 3本指ドラッグの有効化
  • キーリピートの速度を最速に設定、リピート入力認識までの時間を最短に設定
  • iTerm2をインストール
  • Xcodeをインストール。CLIも。
    • Homebrewのインストールの必須条件
  • Homebrewをインストール
    • fish shellとかgitとかgoとか適当に入れとく。後でも良い。
  • iStat Menusをインストール
  • JetBrains Toolboxをインストールし、IntelliJ IDEA Ultimateをインストール
    • キーボードショートカットを変更して、Ctrl+DをDeleteに割り当てる
  • Visual Studio Codeをインストール
  • Dropbox Appをインストール
  • Adobe Creative Cloudをインストール
    • Adobeアカウントでログインしてダウンロード&インストール
  • システム環境設定>共有>コンピューター名 を変更
  • Contextsをインストール
    • Ctrl + spaceの検索を無効化(IDEの補完とかぶる)
  • 環境設定>キーボード>ショートカット で「前の入力ソースを選択」に Ctrl + spaceが割り当てられているのでチェックをはずす

iTermを入れたりHomebrewを入れたり色々やることが残ってるけど一旦これで最低限かな。

ひとまずここまで。 何か設定したら追記するかも。

新しいMacBook Proの所感

まだ重い作業をしてないのですが、最新のキーボードは軽いタッチで入力できてかなり良いです。 トラックパッドも大きくなっていて使いやすいです。 Touch Barはまだ使い込んでないのでなんとも言えませんが、Touch IDは最高です。 あと、13インチというサイズは軽くて取り回しがしやすく非常に良いです。 USB Type-Cについてもこれから使ってみないとなんともいえません。 YouTubeで音楽を再生してみるとかなり音質が良いように感じました。低音もモリモリ出ます。 7年ぶりの新マシンなのでいろんなところがアップデートされていてかなり良さげです。

2018年07月18日(水) LINE DEVELOPER MEETUP でKubernetes運用の話を聞いてきた

Meetup in Tokyo #40 -Kubernetes- に行ってきました。

定員150名のところ倍以上の応募があったようで、運良く当選しました。

超ざっくりですが個人的メモを残しておきます。

() は私の感想です。

以下本文

アンケートタイム

来場者にk8sを使ってるかアンケート。

商用環境で使ってる人、使ってない人、興味ある人、トントンぐらいだった。

1) Rancher 2.0 Technical Deep Dive

西脇 雄基(LINE株式会社 / ITサービスセンタ Verda2 インフラエンジニア)

  • k8sの運用は開発者が片手間で出来る代物ではない!!!
  • 海外のチームもいるのでナレッジをためるべく自前で構築。
  • 今年の5月から着手。出遅れてるとのこと。
  • OSS活用していく。RANCHERとか。

(早口なのでメモはざっくりと。。。)

  • Rancher 2.0 良さそうらしい
    • 多くのユーザーに使われるのでダウンタイムを減らしたい
    • そのために内部を調べるお!
    • しかしドキュメントが充実してない
    • 1ヶ月ぐらいソースコードを読んだり動かしたりしてレポートを書いたらしい
      • (そういうことに業務で時間を割けるのは素晴らしい環境だなーと思った)
    • 後日slideshareで共有される予定
  • Rancherの詳細な話し
    • いろいろー
    • OSSを運用していくのに
    • k8sとかOSSソースコードレベルで読んだりいじりたい人は採用情報見てねー、とのこと

2) Kubernetes-as-a-Service in Yahoo! JAPAN Deep Dive

村田 俊哉(ゼットラボ株式会社 / ソフトウェアエンジニア)

  • 自己紹介
    • Yahoo! JAPANの 100% 子会社
    • インフラ周り
    • k8s as a Service(KaaS)をYahooむけに作ったりしてる
  • Y!のKaaSについて
    • K8s-as-a-Service on K8s
    • k8sの内部仕様の解説
    • K8sクラスタのダウンタイム無しアップグレードについて
    • アップグレードコストを下げることは重要
      • (これはかなり同意)

3) SpinnakerによるContinuous Delivery

中島 大一 @deeeet(株式会社メルカリ / Techlead at microservices platform team)

  • アーキテクチャーの変遷
    • monolith時代はさくら
    • microservicesはGCP
  • CDについて
    • GCP,k8s,spinnaker
    • kubectl apply をJenkinsで、、、みたいなことをしてたが・・・
      • デプロイが成功したか分からんし、Revertしたりカナリアリリースみたいなことができない!!
    • Spinnakerで解決!!
      • いろいろ連携できる
      • Manual Judgementといって手動でデプロイしていいかみたいなのを判断できるらしい。安全だなー。後で調べよ。
      • Notificationあるよ
      • CDにはSafegurdが超大事!
        • pipelineの同時実行を防止したり
        • Deploy Window: デプロイ禁止時間を設定できたりする
        • Deployがちゃんと終わった(podがreadyになってますか?serviceならLBがちゃんと動いてます?)か確認する機能もある
      • 1つのSpinnakerでUS、UK、ASIA全部管理。DEV、PRODも1つ。1つにしておくとpipelineでdevに出してテストOKだったらProdに、みたいなことが出来る。
      • いろんなJobをSpinnakerでやってる
        • DB Migrationも!
    • Spinnakerで良かったこと、悪かったこと
      • The Good
        • As Admin
          • Stageとしてベストプラクティスを提供できた
          • 1つになってるので問題があったときに見やすい
        • As Developer
          • いろいろ
      • The Bad
        • As Admin
          • 結構多い
          • とにかくめちゃくちゃ不安定
            • v1.7は最悪だったらしい
          • halyyard
          • 最新を使ってるのでドキュメントが少なくてしんどい
        • As Developer
          • GUIヘイト笑
            • どこいじればいいか、みたいなのがわからん
            • 変更レビューができない
            • コピペできない
            • ナレッジシェアがしづらい
          • Netflix
            • 9,000 pipeline以上をGUIでやってるらしい
              • しかも良かったとか言ってるらしい。どうやってるのまじで笑
    • 更に今後
      • Auto Canary deployみたいなのがあるらしい

4) Clovaにおける機械学習モジュールの配信&運用基盤の紹介

服部 圭悟 @keigohtr(LINE株式会社 / Clova開発室 ソフトウェアエンジニア)

  • Clovaの紹介
    • スキル開発はじめました
    • LINE BOOT AWARDS 2018
    • 本日3名にClovaもらえるらしい
  • ClovaにおけるK8s
    • 機械学習
      • ツールが出揃ってきた
      • 学習するためのツールは充実してるね
      • 実運用するツールはまだまだだね!
    • DruckerというOSSをつかってるらしい

所感

自分はKubernetesを『クーバネテス』と呼んでたけど『クバネテス』って言ってる人が多いなーと思った。

あと、自分はインフラエンジニアではないのでk8sの運用大変そうだし絶対にEKSやGKEを使っていきたいなーと思った。

zshからfishに移行した

同僚がfish便利だよー、と言ってるのを目にしてzshからfishに移行してみた。

ググっていくつかの記事を参考にして作業をすすめました。 参考にしたのは以下のあたり。

qiita.com

qiita.com

fish ユーザなら入れておきたいプラグイン 13 選 · Futurismo

github.com

qiita.com

やったこと

詳細な手順は前述の記事を参考にしたので割愛。 やったことのサマリだけメモしておく。

  • zshrcをfish.configに変換(手動)
  • fishを起動してエラーをひとつずつ直していく
    • エラーメッセージがかなり親切なので修正は簡単
  • fishermanを入れる
  • peco pluginを入れてhistoryをpecoで扱えるようにfish.configを修正
  • zshhistoryをfishhistoryに変換

以上!

所感

Good

  • デフォルトで補完がかなり便利
  • zshと比べてかなり起動が速くなった
    • これは単にzshの設定を盛りすぎてただけかも

Bad

  • スクリプトの記法がfish独自なのでWebで検索したコマンドやワンライナーを使う際に注意が必要
  • 業務で手順書を残す場合にもbash記法に直すのが面倒なのでそこはイマイチ
  • デフォルトシェルをfishに変えたのにtmuxで立ち上げるシェルがなぜかzshのまま
    • そのうち気が向いたら設定を直すかな
  • brew install {formula} でcompletionがインストールされるのがbashzshだけ
    • もしかしたらfishやhomebrewの設定かもしれない

シェル自体の操作は快適ですが、細かいところで困ることが多そうな印象。 ひとまず使い始めなのでしばらくこれでやっていってみます。

いじょ