Athenaを使ってS3のログファイルを検索してみる


AWSのサービスにS3のログ解析ツール「Athena」について書かせて頂きます。

Athenaとは?

https://aws.amazon.com/jp/athena/

Amazon Web ServiceのS3にある大量のログをSQLのクエリを書いて抽出できるサービスです。
大量のファイルが分割されていると解析するのが大変なのですが、

これらのファイルの入っているパケットを指定してAthenaの設定を完了すると、
以下のようにSQLクエリを実行するだけで検索できてしまいます。

SQLクエリは業務で良く書きますので、データベースを触っていたサーバーサイドエンジニアでも使いやすいのではと思いました。

Athenaの設定方法

1、データベースを作成する

2、データフォーマットを指定する


※CSVやJSONのデータフォーマットも指定できます。

3、カラムを指定する

4、パーティションを指定する


※CreateTableを押すとAthenaで利用するデータベースの完成です。

Athenaを使ってやってみたかったこと

json形式でファイル出力されたS3のログをキーベースで検索して、簡単にS3のファイルからデータを抽出したかったのですが、結果できませんでした。
なぜかというと、ファイル転送を挟んだログファイルだったためにファイル自体がtsv形式だったので、json形式のデータフォーマットに適用できなかったためです。
カラム型にjson型があると嬉しいなと思いました。

TSV形式での検索

LIKE検索ができますので、ログ自体の検索はできましたし、レスポンスも遅いわけでもなく使い勝手は良かったです。

下記、簡単なクエリ例です。SQLと変わらないですね。
SELECT * FROM table_name WHERE column_name LIKE '%xxxxx%' LIMIT 100;

まとめ

AWSを使ってS3に溜まっているログをAthenaを使うだけで抽出できるので、今後も使っていきたいと思います。
導入も簡単なので、まだ使ったことのない方は試してみるとどうでしょうか。

最後に

リンクバルではエンジニアの採用を募集しています。採用はこちら


JMeterによるもっとも簡単な負荷テスト方法


リンクバルの井上です。
今回はJMeterで誰でもできるもっとも簡単な負荷テストをやってみます

JMeterの起動

まずJMeterを起動してみますすると下記のような画面が表示されるかと思います

テストは基本的にはこのテスト計画に対して作成していきます。

 

スレッドグループ設定

まずテスト計画を選択した状態で「編集」を押下し「追加」の「Threads」と見て行くと下記のようにスレッドグループが表示されますのでスレッドグループを選択しましょう

 

スレッドグループを追加すると下記のような画面が表示されます

ここではどのくらいの負荷をかけるか設定をします。

例えば「10のスレッドを20秒の時間をかけて処理開始し、スレッド毎にシナリオを1回だけ実行する」だと下記のようになるのでこの辺をいじれば基本的な負荷は大丈夫です

スレッド数: 10
Ramp-Up期間(秒): 20
ループ回数: 1 (無限ループのチェックボックスはオフにしてください)

 

GETリクエストの設定

次にスレッドグループを選択した状態で「編集」から「追加」、「サンプラー」と見て行くと下記のようにHTTPリクエストが表示されるので追加します。

 

追加したHTTPリクエストに下記のように今回は自分のローカルアプリケーションの設定をしていきます

今回は単純なページアクセスの負荷をかけるのでサーバ名、メソッド、パスのみ設定します

 

 

試験結果の表示

そして負荷をかけたら当然結果を見たいかと思いますので結果表示の設定をします。

また同じ手順でスレッドグループを選択した状態で「追加」、「リスナー」と見ていくと下記のように表示されるので「結果を表で表示」を追加します

 

 

さてようやく準備が整ったので負荷試験を実行します

実行する際は上のメニューにあるので緑の再生ボタンのようなボタンを押下すると実行されます。

すると結果は「結果を表で表示」で以下のように表示されるかと思います。

いかがでしたでしょうか?簡単な負荷試験ならこんなに簡単にテストが作れるんです!

リンクバルではエンジニアを積極募集中です。興味のある方は、こちらまでご応募ください。もちろん、社内の人間と面識があるのでしたら、直接にご連絡いただいてもかまいません。


【WordPress】投稿を集計するただひとつのプラグイン「Site Posts Stats」


社会人2年目エンジニアの関です。

WordPressの開発で、テーマとかプラグインを自作しているとなんだか上級者っぽい感じしませんか?かっこよくないですか?
ということで、私もかっこいい上級者に一歩でも近づきたいのでプラグインを自作してみました。

今回の制作物は以下で公開しています。
概要や画面説明などはREADME.mdを見てください。
https://github.com/hseki-luckey/site-posts-stats
続きを読む


踏み台サーバを用いてTableauに外部のMySQLサーバを接続する


こんにちは、リンクバルの佐藤です。

最近BIツールのTableauを導入し始めたのですが、Tableau単体では外部サーバーのMySQLに接続できません。

開発用DBはAWS上にあるので、接続するには踏み台サーバーを経由する必要があります。

なのでSSH ポートフォワーディング(SSHトンネルともいう)で踏み台サーバーを経由する方法を備忘録的に書いておきます。

一度踏み台にアクセスしてしまえば、あとは放置で大丈夫です。

お膳立て

以下のコマンドを打ってsshポートフォワーディングしましょう。 参考URLはこちらです。

ssh -f -N -L 10000:localhost:3306 ユーザー名@サーバーホスト名 -p 22

これでSSHポートフォワーディングが完了しました。 一応接続できているかをtelnetを使って確認しましょう。 飛ばしても問題ありませんが念のため。

telnet サーバーのホスト名 10000

10000はローカルの10000ポートを指定しています。 先ほど接続先の3306ポートにマッピングしたものと同じポートを指定しています。

Connected to localhost.とターミナルに表示されれば接続されています。 明記してませんでしたが、ここまですべてMacです。Windowsではtelnetはデフォルトでは使えないので、有効化してあげる必要があります。

さてここまでお膳立てしてあげてから、Tableauを起動します。

Tableau起動後

サーバーへMySQLといって、

  • サーバーホスト名
  • ローカルポート番号
  • ユーザー名
  • パスワード

をぽちぽちしてサインインしてください。ここまでの設定で接続できるでしょう。

設定が終わったらググってTableauを存分に使い倒してやりましょう。 Tableauの作図方法は次回書くことにします。 では。


Packerでマシンイメージを管理する

packer

リンクバル技術部の川畑です。サーバの構成管理はどこの会社でも課題になっていると思われます。このあたり構成管理ツールをつかってコードをGitHubとかで管理していきたいですね。構成管理ツールでもマシンイメージ・ミドルウェア・デプロイツールなどいくつかの階層によって適用できるツールがあると思われるのですが、今回はマシンイメージを管理する「Packer」を検証してみました。

1.Packer設定ファイル

  • json形式で記載
  • 「builder」でマシン環境を定義
  • 「provisioners」でサーバ上の動作を定義
  • ここでは「digitalocean.json」で保存

続きを読む


リンクバルの”お菓子ちゃん”のこだわり(お菓子支給制度について)~ITアレルギーな私の技術部奮闘記~


こんにちは。
リンクバルの山本(♀)です。25歳です。

リンクバルの看板商品「街コン」のイベントプランナーでしたが、ひょんな事からリンクバルのシステム系の部署である技術部に異動となり、
今はシステム開発のディレクターになるべく修行中です。
「~入門」「初心者でも分かる~」が読めないぐらいITアレルギーな私のWEB部での奮闘をお楽しみください。

皆さんは覚えているだろうか。

前回の私の記事の最後のコメント・・・

プログラミングに苦手意識を持っていた私だったけれど、ようやく第1歩を踏み出した記念のブログ。

「そして今日も、エラーと戦っている私なのです」
エラー箇所を探し、修正し、の繰り返し。
私の苦労が滲み出ている・・・ちょっと感動的な文章。

ところがつい先日、夫(ちょっとだけプログラミングできるらしい)からズバット言われたわ。

は?

確かにエラー箇所に小さな”レ点”のようなものが見える。
夫いわく、エラーがでたからって、そんなに四苦八苦する事でもないらしい。

気がつかなかった。不覚。
今までエラーを1から探していた時間を返せ!

という事で、

「そして今日も、エラーと戦っている私なのです。」改め、
「そして今日も、”レ点”しかでない私なのです。」
に変更します。はい。

ココからが本題、株式会社リンクバルの”お菓子支給”制度

全ての社会人の皆さん共通の悩み。それは仕事中の空腹。
仕事中は例えガンマGDPの数値がアレでも空腹なんて我慢してられない。そんな時・・・
リンクバル社員は動きだす。

お菓子があるこの場所へ。
中はこんな感じ。

欲しい味がここにある、それがリンクバルの”お菓子支給制度”

「あーお菓子支給ね。」と楽観視したそこのアナタ。
うちの”お菓子支給制度”を侮るべからず。
不思議と「この味が欲しい」と思ったときに、必ずここにある。
まるで私たちの心を見透かしているように。

例えばこんな感じ、ある日のお菓子事情

ある日の朝、その日は胃が元気が無くて、ちょっと軽めなものが欲しいと思ったの。
すると見て!私の心を見透かすように煎餅が。
さらに、中にサクサク系の何かが入ったチョコレートもある。
胃にやさしい組み合わせだ。

朝一でお菓子エリアに行ったのに、もう誰かが煎餅を持っていった痕跡が見える。
もうお気づきかもしれないが、社員同士で熾烈なお菓子争奪戦が勃発している・・・多分。

午後、少しお疲れぎみ。
こんな時は変り種が欲しいところ・・・と思ったら見て!

こ、これは、中にチョコレートが入ったマシュマロと、ウ〇イ棒ではないか。
中にチョコレートが入ったマシュマロは私の好物なの。
チョコの分量が極めて少ないのに、甘くて美味しいから、(多分)太らないし、満足感がある。

変り種と言えば、旅行のお土産なんかが置かれていて、
”ボーナス”菓子が支給されることもある。

お菓子ちゃんに突撃取材

このお菓子をいつもコーディネートしてくれる通称”お菓子ちゃん”を突撃取材しました。
ちょうどお菓子補充中。

山本「組み合わせの工夫は?」
お菓子ちゃん「まず煎餅とチョコレートは必須。これは代々お菓子ちゃんが受け継いでいるシキタリです。
それ以外はその時のお菓子ちゃんのセンスです。」

なるほど。色々考えながら組み合わせているのですな。

さて、今日のお菓子は

今日はお菓子から素敵なメッセージをもらったわ。
最近は新しい仕事もいただけて更に頑張ったので、誰かからやさしい言葉が欲しかったの。

ありがとう。
でもやっぱり・・・私はこっちをいただくわ。

 

”お菓子支給”のある株式会社リンクバルで
一緒に働くエンジニアを募集中です!
新しい事にチャレンジしたい、もっともっと成長したい、そんな
フロンティアスピリットをお持ちの方が生き生きと働ける会社です。
詳細はコチラ

最後まで読んでくださり、ありがとうございました。


開発者必見!Slackカスタム絵文字でコミュニケーションが楽しくなる。


リンクバル技術部エンジニアの中村です。リンクバル技術部では、Slackを活用してコミュニケーションをとることで、日々の開発業務を進めています。

関連リンク:リンクバル新規サービス開発チームにおけるSlack活用事例

リモートで働く社外の開発パートナー様とのやりとりもSlackを活用しています。

Slackが無い開発は考えられないと思う利用頻度です。

そんなSlackには、コミュニケーションが円滑になる、絵文字機能があり、Slackを使っているチームであれば利用していると思いますが、オリジナルの絵文字を追加できるのをご存知ですか?

自社で保有しているキャラクターのアイコンやアプリアイコンを、カスタム絵文字(Custom Emoji)として追加することで、コミュニケーションが楽しくなり、プロジェクトの雰囲気も良くなると思いますよ

この記事では、Slackのカスタム絵文字の登録の仕方を説明致します。

カスタム絵文字登録手順

Customize Slack

  • Slackを開き、チーム名の横の「∨」アイコンをクリック
  • 続いて、「Customize Slack」をクリック

customize_slack

Customoize Your Team 画面へ遷移します。

アイコン画像のアップロード

「Customoize Your Team」画面で、下記の手順でアイコンを登録します。

  1. 「Chose a name」で、アイコンに名前をつける
  2. 「Chose an emoji」で、アイコン画像をアップロードする。
  3. Saveボタンをクリック

ここでは、自社サービス「カップリンク」のアプリアイコンを登録しました。

登録完了

「Custom Emoji」一覧に、登録したアイコンが表示されます。これで登録完了です!

カスタム絵文字の利用方法

デフォルトで登録されている絵文字と同様に利用することができます。

おわりに

この記事では、プロジェクトが楽しくなり、コミュニケーションが円滑になる、Slackのカスタム絵文字の登録方法をご紹介しました。

リンクバルでは、自社サービスを一緒に開発するエンジニアを募集しておりますので、興味を持っていただきましたら、ぜひお問い合わせください!


国勢調査のデータと R を使って結婚について考える


未婚のアラフォー、堀内(♂)です。

弊社は恋愛をテーマとする会社であるためか、我ら技術部のメンバーも既婚だったり、同棲していたり、恋人持ちだったりする割合が多いようです。僕が新卒で入った技術100%みたいな会社の壊滅的な状況と比べると異次元です。まあ、技術部は30代が多いですしね。みな結婚を考える時期です。

部署の外に目をやると、イベント系の方々がたくさんいます。弊社は基本的にイベント会社なのです。新卒でも恋人持ちが多いらしく(伝聞:あまり話したことがない)、そのリア充ぶりに卒倒しそうです。そんな中で、僕に恋人がいないのは日本の政治が悪いに違いなかろうと、国勢調査のデータを調べてみることにしました。ツールは R です。

まず、「国勢調査の配偶関係データを R で取得する」で作成した、都道府県別の婚姻状況データを読み込みます。このデータは、15歳以上の日本の居住者を、都道府県毎、年齢毎、性別毎に、「未婚」「離別」「死別」「配偶関係不詳」「有配偶」に分けて記載しています。一般的には未婚、既婚の2分類を使いますが、国勢調査では婚姻関係を結んだ後の離別(離婚)と死別(配偶者の死亡)も区別しています。

census <- read.csv('prefs.csv')
attach(census)
census$age <- as.integer(sub('歳.*', '', age))
census$area_code <- as.factor(area_code)
census$area <- ordered(area, levels=unique(area))
census$marital_status <- ordered(
  marital_status,
  levels=rev(c('未婚', '離別', '死別', '配偶関係「不詳」', '有配偶'))
)
detach()

このデータは、全人口と、日本人の人口の両方を持っているので、外国人比率も参考までに押さえておきましょう。

num_of_all <- sum(census[census$nationality=='総数(国籍)',]$value, na.rm=T)
num_of_japanese <- sum(census[census$nationality=='日本人',]$value, na.rm=T)
print(sprintf(
  '全人口は %s 人、外国人居住者は %s 人で、全体の %f %% を占める。',
  prettyNum(num_of_all, big.mark=','),
  prettyNum(num_of_all - num_of_japanese, big.mark=','),
  (num_of_all - num_of_japanese) / num_of_all * 100)
)
=> [1] "全人口は 109,754,177 人、外国人居住者は 2,129,711 人で、全体の 1.940437 % を占める。"

全人口1.1億というのは少ないと思われるでしょうが、このデータには15才未満が含まれていないのです。婚姻関係を追うものですから。

15歳で結婚

参考までに、15〜18才の婚姻状態を調べてみましょう。

census %>%
  dplyr::filter(age <= 18, nationality == '総数(国籍)', marital_status == '有配偶') %>%
  na.omit() %>%
  group_by(gender, age) %>%
  summarize(population=sum(value)) %>%
  spread(gender, population)

15歳の女性が144人、男性が86人も配偶者を持っているのですね。民法では女性16歳、男性18歳から婚姻が認められますが、国勢調査の「有配偶」は、届出の有無に関係なく、実態を表しています。事実上、周囲から夫婦であると認められている状態です。一般的な言葉で言えば「事実婚」です。

続きを読む


国勢調査の配偶関係データを R で取得する


平成27年国勢調査のうち、配偶関係(婚姻関係)のデータを R で取得します。ここでは estatapi パッケージを使います。appId は、e-statのサイトで事前に取得しておきましょう。

library(estatapi)
statslist %>%
  dplyr::filter(grepl('平成27年.*配偶', STATISTICS_NAME)) %>%
  select(`@id`, TITLE) %>%
  mutate(TITLE=substr(TITLE, 0, 50))

求めるデータの @id が 0003149791 であることがわかったので、メタ情報を取得します。

metainfo <- estat_getMetaInfo(appId='xxxxx', statsDataId='0003149791')
metainfo
metainfo$cat04
# A tibble: 10 × 3
@code @name @level

1 0000 総数(配偶関係) 1
2 0010 未婚 1
3 0020 有配偶 1
4 0040 死別 1
5 0050 離別 1
6 0070 配偶関係「不詳」 1
7 0080 (配偶関係別割合(%)) 未婚 1
8 0090 (配偶関係別割合(%)) 有配偶 1
9 0110 (配偶関係別割合(%)) 死別 1
10 0120 (配偶関係別割合(%)) 離別 1

メタ情報には、様々な「コード」が入っています。上記はカテゴリ04(cat04)のコードの例。

データ取得時間短縮のため、メタ情報の @code を用いて絞り込んだデータを取得します。データ取得には数分かかります。

census <- estat_getStatsData(
  appId='xxxxx',
  statsDataId='0003149791',
  cdCat02=c('0010', '0020'), # 男、女
  cdCat04=c('0010', '0020', '0040', '0050', '0070'), # 未婚、有配偶、死別、離別、配偶関係「不詳」
  cdCat05='00710' # 全域
)
census$tab_code <- NULL
census$表章項目 <- NULL
census$cat01_code <- NULL
census$cat02_code <- NULL
census$cat03_code <- NULL
census$cat04_code <- NULL
census$cat05_code <- NULL
census$`全域・人口集中地区(2015)` <- NULL
census$time_code <- NULL
census$`時間軸(年次)` <- NULL
names(census) <- c('nationality', 'gender', 'age', 'marital_status', 'area_code', 'area', 'value')
census <- census[!grepl('総数|平均|再掲', census$age),]
census <- census[!grepl('市部$|郡部$', census$area),]
attach(census)
census$nationality <- as.factor(nationality)
census$gender <- as.factor(gender)
census$age <- ordered(age, levels=c(paste(15:99, '歳', sep=''), '100歳以上'))
census$marital_status <- as.factor(marital_status)
census$area_code <- as.factor(area_code)
census$area <- as.factor(area)

都道府県別、都市別のデータを取り出します。

census_prefs <- census %>%
  dplyr::filter(
    area_code != '00000',
    as.numeric(levels(area_code))[area_code] %% 1000 == 0
  )

census_cities <- census %>%
  dplyr::filter(as.numeric(levels(area_code))[area_code] %% 1000 != 0)

今後の利用のために CSV で保存しておきます。

write.csv(census_prefs, 'prefs.csv', row.names=F)
write.csv(census_cities, 'cities.csv', row.names=F)

この中に入っているデータは、こんな形式のものです。


リンクバルでは、Ruby と React と R を使って世の中をハッピーにしたいエンジニアを募集中です。この記事にピンと来た方は、是非ご応募ください。


【プログラミングやりたいけど・・・的な人を元気にするお話】アメリカ旅行中の飛行機の中で、プログラミングに全く触ったことない私がPythonをさわってみた!~ITアレルギーな私の技術部奮闘記~


こんにちは。
リンクバルの山本(♀)です。25歳です。

リンクバルの看板商品「街コン」のイベントプランナーでしたが、ひょんな事からリンクバルのシステム系の部署である技術部に異動となり、
今はシステム開発のディレクターになるべく修行中です。
「~入門」「初心者でも分かる~」が読めないぐらいITアレルギーな私のWEB部での奮闘をお楽しみください。

突然ですが。新婚旅行に行ってきました!

場所はニューヨーク。
img_20161222_153433-1

NYといえば、最近巷で”オシャレなNYファッション”的な雑誌をよく見るので、流行にのって私のNYファッションを紹介します。
img_1590
耳がキーンとなる氷点下のニューヨークで、オシャレも〇ソもあったもんじゃない。

暇な飛行機内で・・・そうだ!Pythonやろう!

行きの飛行機はウキウキ間で乗り切れるけど、帰りの飛行機って結構つらかったりする。
しかも今回は時差の調整がうまくいかず、飛行機で寝れなそうな雰囲気。
という事で、Pythonやってみることにした。

備考:何でよりによってPython?

分かりやすそうな本がPythonしかなかったから。

Pythonやる前に、まず下準備から。

荷物を重くしたくなかったので、iPadにPythonのアプリを入れてもっていきました。
img_1612
ただコードを書くだけなら、Wifiもいらないから準備が簡単。

いざ!機内でPython

取り合えず、本の導くままに打ってみた。
img_1613

ふむふむ。順調順調。
img_1617

あれ?エラーになった。
img_1614

四苦八苦が続く・・・あ!
オヤツの時間♪
img_1610

エラーの原因が分からないまま四苦八苦が続く・・・あ!
ご飯の時間♪
img_1611

更に四苦八苦が続き・・・あ!
もうちょっとで着陸の時間♪
img_1618

さ、iPadしまって着陸だ。(←よくも悪くも諦めが早い)

ITアレルギーでしたが、やってみて変化が起こった。

プログラミングに対して苦手意識をもっていた私ですが、今、自主的にサイトを使って練習するようになっています。
きっとエンジニアの方から、「こんなのやったうちに入らん!」とお叱りを受けそうですが、私にとっては次につながる大きな一歩でした。
プログラミング系の本を読んで幾度となく戦線離脱してきた私ですが、ちょっと打ってみて「出来た!」と少しですが感じたことで、次のモチベーションにつながりました。
そして、少しずつ練習していくうちに、初心者系の本も読めるようになり始めています。
初めの1歩、ようやく踏み出せました。

そして今日も、エラーと戦っている私なのです。

株式会社リンクバルで
一緒に働くエンジニアを募集中です!
新しい事にチャレンジしたい、もっともっと成長したい、そんな
フロンティアスピリットをお持ちの方が生き生きと働ける会社です。
詳細はコチラ

最後まで読んでくださり、ありがとうございました。