umegusa's blog

備忘録

ログ解析勉強会に参加してきました!

勉強会レポートです

お久しぶりです。
今回はこちらの勉強会に行ってきたので議事録的なメモを残します。
ログ分析勉強会 vol.1loganalytics.connpass.com

最近は勉強会に積極的に参加して何か持って帰れないかなーと毎回思ってます。
ただわりと土日はゆっくりしているのでたまには

発表枠

今回のテーマは「セキュリティを中心としたログ分析」でした。
アクセスログ、syslog、DBクエリログなど様々なログを分析し、
何かしらの要因の特定や攻撃者の行動を特定する、などに利用します。

ただ、永遠と流れるログを目grepでやるには辛すぎる!ということで
分析ツールを使用してわかりやすくカスタマイズしたり
独自の可視化環境を作ったりして、分析しやすい環境を作りましょうというお話です。
また、可視化することで今まで気づけなかったログやユーザーパターン、
攻撃者の行動を読み取ることもできるようになっていました。

ログ分析ツール

ログ分析ツールは大きく分けて3種類です。

各フォーマットにより、必要な情報をパースし、特定の場所にログを投げる役割をするツールです

収集したログに対して何らかの条件で抽出する全文検索ツールです

検索されたログや、特定条件に合ったログをグラフなどで可視化するツールです

上記をうまく組み合わせて(もしくはすべてをサポートしているものを使用して)ログの可視化を行います。

ツール

自分が軽く調べた & 勉強会で知ったツールとは下記のようになります。

ツール 役割 備考
fluentd ログ収集 今流行りのログ収集ツール。今回の勉強会でも結構使っているところが目立った。
Logstash ログ収集 Elastic社が作成したログ収集ツール。Elasticsearchやkibanaと同じところで作られてるので親和性が高い。
Log Parser ログ収集 ログをパースする古き良きログ分析ツール
Elasticsearch 全文検索 全文検索エンジン。ELK*1環境やEFK*2環境が最近の流行り。プラグインなどの拡張も可能。
Kibana 可視化 ログの可視化。簡単な設定で様々な形態に可視化できる。
Splunk すべてをサポート ログの収集・全文検索・可視化まですべてやってくれるリッチなツール。ただし有償。

個人的にはEFK環境で十分いろいろなことができるなという印象でした。
Splunkはリッチですが、その分使い方の勉強などが必要なので(ただしできることは相当多い)、
ライトな感じでとりあえず可視化だけ、、ということならそれで充分かなという印象です。
がっつりやるならSplunkの導入も普通にありだと思えるクオリティの高さでした。

最後に

ログの可視化、結構注目されている技術ですね。
実際に稼働させている会社さんも多いみたいです。
(connpassのページに記載してある会社も実際に導入されているそうです)

ログ分析勉強会は近々vol.2も開催されるようですので、もし日程が合いそうならまた参加してみたいです。
それでは、またどこかで!

*1:Elasticsearch + Logstash + Kibana

*2:Elasticsearch + fluentd + Kibana

POH6 そうめんが当たりました!!

POH6

お久しぶりです。
いつの間にかPOH6が来てたんですね。paiza.jp

もちろん挑戦してました!
ブログ更新をさぼっていただけです、ごめんなさい。。。。
今回もRubyを使用して回答しました。
ソースコードはこちら。github.com

問題もそんなに難しくなかったので結構さっくり解けたイメージです。

最後に

揖保乃糸最高級黒帯18束に当選しました!やったぜ(パチパチ
本当に当たるんですね!自分でもびっくりしております。

POHは本当に息抜きにちょうどいいのでこれからも続けていけたらなーと思います。

ABC2015Summerに参加してきました

書くネタはない訳ではないです、お久しぶりです。
近いうちにためてたネタはきっと書きます。
とても暑い、そんな夏のイベントの中でAndroid Bazzar and Conference略してABCという熱いイベントが開催されました。

abc.android-group.jp
発表やLTについては配信動画があるのでそこから見てみてください!

とりあえず戦利品

とりあえず戦利品をドーン
f:id:umegusa:20150720220216j:plain

一部購入品ですが、大体もらいもの。
カンファレンス自体の参加は無料です。
内容は上記山椒ですが、Android関連の発表・講演のほかに、企業やAndroidのコミュニティが出しているブースが展開されていました。
また、ハンズオンなど様々なイベント盛りだくさんでした。

自分は今回講演聞いて懇親会行って帰ってきた感じではあります。

講演を聴いて

MicrosoftさんやGoogleさんのお話を聞いたのですが、一つのソフトで完結させたいんだなーという印象が一つありました。

最近のMicrosoftさんはクロスプラットフォームが大変熱いです。
今回のお話もWindows 10、Windows Phone、Visual Studioのお話がメインでした。
Visual Studioを入れるとAndroid SDKGoogle ChromeiTunesなど入れてくれるみたいです。
また、VS2015はクロスプラットフォームなプロジェクトテンプレートを用意していて、すぐにアプリ開発ができる状態を提供しているそうです。
また、一つのプラットフォームで作れば全てのプラットフォームに対応するUWP(Universal Windows Platform)のお話をされていました。

VS2015も本日発売だったような気がします。
開発中のステータスからどんどん製品化されてどう変るかが楽しみであります。

Android Mのお話もありました。
かなりの新機能を提供しているようなのですが、中でも実行時パーミッションと省電力モードを押していました。

パーミッション、、というよりはセキュリティのお話は結構盛んでした。
Androidはストアで承認したパーミッションは変えられないという問題がありましたが、実行時パーミッションはアプリを使用時、必要な機能に応じてパーミッションを聞かれるという仕様みたいです。

実行時パーミッションのサンプルなどもお話されており、Android Mの製品版にも期待が高まる内容でした。

最後にLT大会があったのですが、皆さん個性豊かな内容でとても楽しめました。
みんなでわいわい楽しめたので一体感ありますね!

終わりに

簡単ですが、内容についてはそのうちスライドなども公開されると思うので気長に待ちましょう。

内容としてはとても濃いセッションが多かったです。
次回もABC参加してハンズオンとか参加してみたいですね。
ドローンとかUnityのセッションも聞きたかった。。
カンファレンスは難しい内容が多いと思われがちですが、参加してみるといろんな人と話せるので結構楽しい場だと思います。
ゆるくてみんなで楽しめる感じ、とてもいいですね!

資料ここにあります!とか言うネタもあったら教えて頂きたいです!
それでは

LINE DEVELOPER DAY_2015 Tokyoに参加してきました!

タイトル通りです。
今回はこれに参加してきました。linedevday.linecorp.com
会場エアコンガンガン聞いててめっちゃ寒かったみたいですね(ちょうどいい温度とは言えず

参加したセッションは2つのホールに分かれていたのと、電源がない関係で一部は参加していません。
自分が参加したのは以下のセッションです(午後のみリストアップ

  • LINEのiOS対応、新しい技術チャレンジ 〜LINE の Apple Watch アプリ開発とSwift導入による開発チームの変化〜
  • グローバルなネットワーク環境と複数OSに対応するための LINE Game Client Platform 開発戦略
  • ビッグデータを活用するための分析プラットフォーム 〜データ集計した先に求められる分析技術〜
  • ベイズ推定とDeep Learningを使用したレコメンドエンジン開発

めっちゃ長いので詳細のほうは続きを読むから見てください。
ちなみにスライド、発表内容に関しては後ほどWebに公開するとのことでした。

続きを読む

POH5に挑戦しました!

Paizaオンラインハッカソンvol5が出たので挑戦!paiza.jp

回答をブログ等に書いていただいても問題ありません。

とのことなので自分の回答を載せちゃいます。
言語はrubyで二人攻略済みです。
kaisou4537/POH5 · GitHub

今までの(といってもまともに解いたの2つしかないけど)に比べるとだいぶ簡単だった気がしますね・・・!
興味ある人は挑戦してみては?

Arduino欲しい・・・!

dotNetConf 2015 Japan with JXUGに参加してきました!

3/19 - 3/20にusでdotNetConf 2015の日本版が先日マイクロソフト社で行われたので遊びに行ってみました。
dotnetConf - The .NET Community Virtual Conference
そのレポートとかメモとか。(めっちゃ長くなっちゃった・・)
参加したのはこちら。atnd.org

Opening

.NETの全体像についてと今日のカンファレンスのアジェンダとか。
.NETFramework 4.6, .NET Core 5の話はもちろん、C# 6, Roslynについて、クロスプラットフォーム対応についての概要についてこのセッションでお話いただきました。
.NET Core5は、すべてがコンポーネント化され、Nugetからインストールできるようになるみたいです。
また、オープンソースとして、github上にすべてのソースコードが公開されています。
github上で討論なども積極的に行われているみたいですよ。
ちなみに隣の部屋ではXamarinのお話も・・・そっちもちょっと聞きたかった感はありましたね!


ASP.NET 5 (MVC, Web API, Web Pages, SignalR)

ASP.NET 5のWebFrameworkについてのセッションです。
ASP.NET 5はまだプレビュー版で今回の内容は変更される可能性があるということです。
.NET Framework 4.6 + .NET Core = ASP.NET 5
ということらしいです。

Visual Studio 2015

3月にbeta3がリリースされました。(もうすぐbeta4になるらしい?
もともとProject kという名目で走っていたプロジェクトらしく、プロジェクトファイルなども
.csproj -> .kproj
また、コマンドラインから実行する際も "k サブコマンド" というような形になっていましたが
.kproj -> .xproj
などxという文字に変わりました。
kコマンドはDNX(後述)という名前に変わっていたり、kという文字がxに変わっていたり、
この辺はまだ全然変わる可能性があるみたいです。

DNはdotnet、Xはクロスプラットフォームという意味があり、いたるところにxという名前がちらほら見えるのがうかがえました。

Web Framework

MVC, Web Pages WebAPIを含めてMVC6ということらしいです。
また、MVC6は.NET Framework 4.6にも対応するとのことです。
.NET Core 5の上ではSignal R3というフレームワークも対応しするみたいです。

VS2015によるデモ

プロジェクト構成など。
今まで.csprojファイルなどで設定していたファイルはjsonのファイルによって設定できるようになるみたいです。
参照設定も設定できるjsonがあり、そこに設定を記述するとgithub上のソースコードをそのままソリューションエクスプローラーに乗せてくれるみたいです。
そして、独自実装して拡張したものを読み込むのもよし、デバッグしてプルリクエスト生成するもよし、ということです。
オープンソースの恩恵を結構受けられるような、また、それを便利にできるような機能が提供されているように思えました。
ソリューションがあるエクスプローラーの中にファイルを置くと自動的に同期されるような細かいところでの動きの違いみたいなのもありました。

ASP.NET 5のプロジェクトファイルには、構成するファイルのパスはなく、存在するファイルはソリューションにリアルタイムに反映されるらしく、
ソリューションファイル内のhtmlファイルなどは、そのまま読み込むことはできず、
wwwrootという場所に格納することで表示できるようになります。
プロジェクトに表示されているwwwrootの中に配置することでWebページとして表示できるので
動的/静的ファイルで完全に住み分けができる、というお話でした。

今まではSystem.Webに依存していたのでMVC6は各ミドルウェアに乗せられるともお話しておりました。
一つのソリューションに複数のアプリケーションを乗せて各設定が可能、みたいな感じなんでしょうか?

MVC6, WebForms

MVC6は先ほどお話した通り、Web Pages/ Web aPI/ MVC統一したものです。
Routingの話などもあり、HTTP Methodの制限がRoutingからなくなったみたいで、
HTTP Method, URLとかは属性ベースで記述するように変更されたみたいです。
ActionResult 戻り値はIActionResult型でViewだけでなくJson, PartialView, StatusCodeなどいろいろ返せるようです。
ViewComponentsという機能を使ったサンプルがデモとしてあげられました。
こちらにデモで使用されたサンプルアプリケーションを貼っておきます。www.asp.net

WebFormsは.NWET Framework4.6に対応するらしく、Roslynがデフォルトで組み込まれる、ということでした。

.NET Core 5 & ASP.NET 5 Open Source

1時間で全部話すのは無理ってことで、今回のセッションでは.NET CoreとDNX(.NET Execution Environmet)についてのお話。

ほぼスライド通りのお話だったのでとりあえず気になった点だけ。
.NET Coreも.NETFrameworkもNuGetベースになるということ、
BLCもCoreCLRもNuGetベースになるということ。
大体NuGetを使えば環境が整えられるみたいです。

.NET Coreは.NET FrameworkCLR部分をOSS化したものです(CoreCLR)。
最近はやりのRyuJITやCGの実装も含み、OSS化したことで他のプラットフォーム環境でも動かすことができます。
Visual SudioをインストールしなくてもC#の開発が進められるのでいろいろはかどりそうですね!

ただし開発状況はWindows x64環境のみらしく、
動きはするけど保障はしない、というステータスです。
デモではCoreCLRをMacで動かしてC#を動かしていました。
ここでDNXの登場です。
DNXは.NETの実行コマンドでNuGetのパッケージ取得とか実行とかいろいろできるみたいです。

Windowsは.NEt 4.6 + CoreCLR、 LinuxOS XはMono + CoreCLR
その上にDNX(.NET Execution Environment)
その上にASP.NET 5と.NET Core 5がのっかる
というレイヤー構造みたいですすよ。

MacではHomebrewでインストールできるみたいなので試してみてはいかがでしょう!
スライドとかは最後にまとめてはります。

C# 6

ufcpp.netの中の人のお話。
こちらもスライドありました。

C#6.0はRoslynの開発の間潜伏していて最近発表されたみたいです。
同時にC# 7.0の提案も始まっていて、VS2015でC#6.0がリリースされます!

.NET Framework2.0でもC# 6.0は動いていて、一つだけ.NET 4.5が求められるFormattableStringというクラスのみ使えないですが問題なく使えるみたいですよ。

C# 6.0の新機能はサンプルコードも載っていてとても分かりやすかったです。
getter-onlyとかnameof演算子とかオブジェクト初期化子でプロパティ混ぜられたりとかとても夢広がりました。
今よりもかなりコードを減らせそうな気はしていて、
デモでは無駄なコードをかなり削減できた、というお話をいただけました。

今回言語的な変更はあまり大きなものはなく、
C# 7.0に繋がる機能拡張、という面が大きいようでした。
あとRoslyn化したことでその恩恵をかなり受けられるみたいです!
ちなみにC# 6.0のテーマは Just-do-it!

Roslyn

最後はRoslynについて!プレゼンでStanding Ovationが起こるくらい盛り上がりました!w
Roslynとは.NET Compiler Platformのことで、こちらもオープンソースで公開されています。

既存のコンパイラC++で書かれているのですが、RoslynはC#で実装しなおしたコンパイラで、インラインコンパイラらしいです。
コンパイル時に生成される内部解析結果にアクセスできたり、開発環境に組み込んで拡張したりできる夢広がりんぐなコンパイラでした。
.NET Framework4.5以上という条件ですが、VS2013でRoslynは使用できるとのことで、こちらもNuGetで取得できます。

デモでは既存のコンパイルとRoslynによるコンパイル複数回コンパイルした実行速度の比較などがありました。
Roslynによる実行は既存の約2~3倍ほどで、インラインコンパイラに夢を感じました。
もう一つのデモはASTでRoslynを組み込み、実行してみるというもの。

プレゼン自体も盛り上がっていてとても楽しかったです!w

終わりに

最後のほうちょっと疲れて内容の密度に誤差ありますが、
スライドも公開されているので他の記事やTogetterの情報とか見ながら追いかけてもらえればなーと思ったり。

ただし、全て開発中というステータスでこれから変更はまだまだ追いかけなければならないステータス、ということも忘れないようにしなければ!という感じですね。

とはいえ、とても夢広がるお話が伺えてとても有意義な時間をすごさせて頂きました!
仕事とかで使ってる人は今すぐ導入というのは難しいですが、
クロスプラットフォーム化など新しい試みにチャレンジしていて環境の変化を楽しんでいけてこそ、だと思います!

関連情報

dotNET関係

ASP.NET | The ASP.NET Site
ASP.NETのページ。
ASP.NET vNext | The ASP.NET Site
ASP.NET 5。
ASP.NET 5 Community Standup - YouTube
ASP.NET 5に関する議論内容をyoutube上に公開しているみたいです。
dotnetConf 2015 | Channel 9
USフォーラム。

github

.NET Foundation
.NETのオープンソース一覧。

ASP.NET MVC / Web API / Web Pages - Home
aspnet/Mvc · GitHub
MVC
aspnet · GitHub
SignalR-3関係のリポジトリ
Core部分はSignalR-Server。

aspnet/dnx · GitHub
DNX。
dotnet/coreclr · GitHub
CoreCLR。colneしてビルドすればOS X環境でも動きます。
Developer Guide · dotnet/coreclr Wiki · GitHub
CoreCLRの開発状況。

dotnet/roslyn · GitHub
Roslyn。
Roslyn Overview · dotnet/roslyn Wiki · GitHub
Roslynのドキュメント。

スライド

.NET Core と DNX は本当に未来なのか
.NET CoreとDNX

Deep Dive C# 6.0
Deep Dive C# 6.0

Platon.io
Roslyn

サンプル集

View components and Inject in ASP.NET MVC 6 | The ASP.NET Site
MVC6のサンプルアプリケーション。(TODOアプリ)
ufcpp/UfcppSample · GitHub
C# 6.0で使用されたサンプル。
takepara/MvcVpl · GitHub
Roslynセッションでのデモ。

golang revelフレームワークをnginxで動かす!

さくらで借りてるサーバがCentOSなんですが、そこでnginx + golangフレームワーク revelフレームワークを使っていろいろ作業をして何とか動かせたので残しておきます。

revelフレームワークを入れる

golangの設定は以前お話しましたね。umegusa.hatenablog.jp
で、revelフレームワークのお話もしました。umegusa.hatenablog.jp

# cat /etc/redhat-release
CentOS release 6.6 (Final)

それでも詰まったので書きます。。。
※ 下記はrootで行ってください

revelフレームワークを入れる

Welcome to Revel, the Web Framework for Go!
ここです。よく見るとgolang v1.3以上というお話。
自分の環境は1.2.2だったのでアップデートします。
アップデートするには既存の/usr/local/go を削除して書き込む必要があるみたいです・・・
ということで既存のgolangを削除、golangの1.4をダウンロードし、解凍してもろもろ設定しました。
Go言語のインストール - golang.jp

# rm -r /usr/local/go
# wget https://storage.googleapis.com/golang/go1.4.2.linux-amd64.tar.gz
# tar -C /usr/local/go -xzf go1.4.2.linux-amd64.tar.gz

新しくなったところでrevelフレームワークをインストールします。

# go get github.com/revel/revel

全く動きません。。。。
verboseコマンド付けてみてみます

# go get -v github.com/revel/revel
github.com/robfig/config (download)
github.com/robfig/pathtree (download)
Fetching https://gopkg.in/fsnotify.v1?go-get=1
Parsing meta tags from https://gopkg.in/fsnotify.v1?go-get=1 (status code 200)
get "gopkg.in/fsnotify.v1": found meta tag main.metaImport{Prefix:"gopkg.in/fsnotify.v1", VCS:"git", RepoRoot:"https://gopkg.in/fsnotify.v1"} at https://gopkg.in/fsnotify.v1?go-get=1
gopkg.in/fsnotify.v1 (download)

ここで止まります。
なんかgopkg.in/fsnotify.v1 がダウンロードできないみたいですね。
いろいろ調べていたらgitのバージョンがふるいっぽいです。
下記を参考にさせていただきました。
revel入れたいのにgo getが進まなかった - Qiita

# git clone https://gopkg.in/fsnotify.v1

これで動かないので・・・
ということでgitのバージョンをあげます。
標準のgitのバージョンは1.7.1でした。

# git --version
git version 1.7.1

gitをアンインストールしてから必要なパッケージを取得します。
gitをインストールするのに必要なパッケージは下記の通りです。

curl-devel
expat-devel
gettext-devel
openssl-devel
zlib-devel
perl-ExtUtils-MakeMaker

ということで削除から設定まで一気にやってしまいましょう!
こちらを参考にさせていただきました。
CentOS 6.5, yum でインストールした Git を 1.7.1 から 2.2.0 にバージョンアップする (※Git2.2.1,2.3.2版もあり) - Qiita

# yum remove git
# yum -y install curl-devel expat-devel gettext-devel openssl-devel zlib-devel perl-ExtUtils-MakeMaker
# wget https://www.kernel.org/pub/software/scm/git/git-2.3.2.tar.gz
# tar -zxf git-2.3.2.tar.gz
# cd git-2.3.2
# make prefix=/usr/local all
# make prefix=/usr/local install
# export PATH=/usr/local/bin/git:$PATH
# git --version
git version 2.3.2

gitのバージョンは最新になりました。
もう一回入れてみると、今度は1.2.2のバージョンのものが適用されているようで、うまくインストールできませんでした。

# github.com/revel/revel
go/src/github.com/revel/revel/revel.go:4: import /root/go/pkg/linux_amd64/github.com/agtorre/gocolorize.a: object is [linux amd64 go1.2.2 X:none] expected [linux amd64 go1.4.2 X:precisestack]

ということで$GOPATH/src/github.com/revel を削除してもう一回インストール

# go get github.com/revel/revel
# go get github.com/revel/cmd/revel

これにて無事インストール完了です・・・・

nginxの設定を行う

nginxの設定を行います。
confファイルを書き換えるだけです。

# vi /etc/nginx/conf.d/default.conf

内容を下記のように書き換えます。

server {
    listen       80;
    server_name  hostname;

    location ~ / {
        proxy_pass http://127.0.0.1:9000;
    }
}

リバースプロキシの設定を行います。
80番でアクセスされたときにlocalhostの9000番にアクセスするような設定をすることで、revelフレームワークで作成したアプリケーションにアクセスすることができます。

revelフレームワークでアプリケーションを作成する

いつものやつ

# revel new AppName

作成されたAppNameのapp.confのhttp.portは9000番を指定してください。(デフォルトは9000番)
あとは起動してサーバからアクセスするだけです。

# revel run AppName

アクセスするとrevelフレームワークのアプリケーションが起動するはずです。

ついでにいれたmysqlのメモ

完全にメモ。mysqlを入れたときのメモです。

# yum -y install mysql-server mysql

mysql入れたときにutf-8にするための設定を記述します。
/etc/my.cnf に下記の設定を入れます。

[mysqld]
character_set_server = utf8
collation_server = utf8_general_ci

[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
default-character-set=utf8

んでmysql-serverをスタート。ついでに起動したときに開始するような処理も入れます。

# /etc/init.d/mysqld start
# chkconfig mysqld on

おしまい!

終わりに

revelフレームワークだけじゃなくて他のアプリケーションをnginxで動かす場合にも使えそうですね、リバースプロキシの設定。
今ってどういうのが主流なんだろ?他にあったら教えていただきたいです!