タグ : bigdata

Splunkのクエリーテンプレートを集めたサイトが便利かも!

Go Splunk 2015-04-19 18-09-57

Splunkとは、ログの解析や可視化を行うプラットフォームで、IT機器が吐き出す様々なログを一元的に取り込んで、検索や分析なんかが出来るソフトウェアです。

Splunkをインストールしてみる | ネットワークエンジニアを目指して – ブログ

Splunkの特徴として、独自のクエリ言語でログを検索、加工、集計、グラフ化することが出来る点があります。

Splunkのクエリー検索は非常に高速なので、実際に集計してグラフ化したいと思ったときに、クエリーを指定してあげれば、インタラクティブにグラフを作っていけるのがSplunkの魅力です。

ただしその反面、クエリ言語を覚えるのはなかなか大変だったりします。

Splunkのクエリーは独自の言語で、細かなフィルターや追加情報の付加などもできて大変便利なのですが、どのように分析したいかを考えながらクエリーを学んでいく必要があって、どうしても時間がかかってしまいます。

そんな自由度が高いメリットがある反面、複雑になってしまうというデメリットを解決してくれそうなサービスがありましたのでご紹介します。

Go Splunk

Go SplunkはSplunkのクエリーを集めたサイトで、そのままSplunkのクエリー入力画面に、コピー ⇒ 貼り付けして使えるテンプレートが多数登録されています。

登録されているクエリーの一例をご紹介します。

など、かなり複雑なクエリーも、コピー ⇒ ペーストして利用することが出来ます。

クエリーの投稿もできますので、便利なクエリーがあれば投稿してみてはいかがでしょうか。

SplunkでTwitterのタイムラインを解析してみる

前回はSplunkにTwitterのタイムラインを取り込んだところまでやったので、今回はこのデータを使って分析してみたいと思います。

ユーザー別のMentios数

ツイートの中に含まれるユーザー別のMention数を集計してみます。

sourcetype="Twitter" | top limit=20 "entities.user_mentions{}.screen_name"

ソースタイプ「Twitter」のデータから、Mention名のFieldのトップ20を表示させます。

Search | Splunk 6.2.2 2015-03-02 11-21-53

ビジュアル化する場合は「Visualiztion」タブを選択して、「Column」から適当なチャートを選びます。
以下は円グラフを選択してみた場合。

Search | Splunk 6.2.2 2015-03-02 11-22-57

ハッシュタグ トップ20

つづいて、ハッシュタグのトップ20を集計してみます。

sourcetype="Twitter" | top limit=20 "entities.hashtags{}.text"

これもハッシュタグのFieldがあるので、簡単に集計できます。
ビジュアル化するとこんな感じ。

Search | Splunk 6.2.2 2015-03-02 11-25-59

上記は全てのデータからハッシュタグを集計していますが、直近1時間のデータで集計したい場合は、「earliest=-1h」を付けて検索します。

sourcetype="Twitter" earliest=-1h | top limit=20 "entities.hashtags{}.text"

Search | Splunk 6.2.2 2015-03-02 11-29-28

利用クライアント比率

つづいて、利用しているクライアントの割合を集計してみます。

source="rest://Twitter" | spath source | fields source | rex field=source "(<[^>]\*>)?(?<source>[^<]\*)" | top source

「spath」はjsonなどからFieldを取り出す時に利用します。

source Fieldは「 TweetDeck」のように、hrefタグも含んでいるため、この文字列からクライアント名を抜き出すために、正規表現を利用しています。

Search | Splunk 6.2.2 2015-03-02 11-32-36

時間帯別ツイート数

次は、時間帯別のつぶやき数を集計してみます。

source="rest://Twitter" | stats count by date_hour | sort by date_hour

「stats count by date_hour」で時間ごとのツイート数をカウントして、「sort by date_hour」でソートさせています。

Search | Splunk 6.2.2 2015-03-02 11-34-15

ツイートのリアルタイム表示

リアルタイムのツイートを表示させることもできます。

source="rest://Twitter" | rename user.screen_name as screenname | table screenname text _time | sort -_time

「rename user.screen_name as screenname」で、「user.screen_name」を表示させる時に「screenname」にリネームさせています。

結果をテーブルで、「table」、「screenname」、「text _time」の3つを表示させて、時間でソートさせて最新のツイートを常に1行目に表示させるようにしています。

Search___Splunk_6_2_2

このままだと、検索しなければ更新してくれないので、リアルタイムに更新するようにするいは、検索条件で「All time (real-time)」を選択します。
これで、リアルタイムに結果が反映されます。

Search___Splunk_6_2_2

ダッシュボードに登録

Splunkには、解析の結果を一覧で見ることができる「ダッシュボード」というものがあります。

解析結果を表示させた状態で、右上の「Save As」->「Dashborad Panel」を選択

Search___Splunk_6_2_2

ダッシュボードの設定画面が出るので、新規で作成する場合は「New」、既に存在するダッシュボードに追加する場合は「Existing」を選択。

Search | Splunk 6.2.2 2015-03-01 21-47-03

その他オプション項目を選択して「Save」すれば、トップ画面に表示されます。

Home___Splunk_6_2_2

ダッシュボードは表示位置など細かく設定出来ますので、色々と弄ってみてください。

まとめ

今回、Twitterのデータを使っていろいろ解析してみました。

改めて思ったのは、データマイニングはデータを集めるだけでは意味が無くて、そのデータから何を導き出すか?がとても重要で、そのためには経験とセンスが必要な気がしました。

SplunkにTwitterのタイムラインを取り込んでみる

SplunkにTwitterのタイムラインを取り込む

今回はTwitterのタイムラインをSplunkに取り込んで色々と遊んでみます。

SplunkにはTwitter専用のAPP「App for Twitter Data」が用意されているのですが、残念ながらこのAppで取得出来るデータは、Twitterのサンプルストリームの1%を取得しているようで、せっかくなので自分のタイムラインを取得したいので却下。

ということで今回は、「REST API Modular Input」というAPPを使用してみます。

This app provides a scripted input for Splunk that automatically extracts tweets from Twitter’s 1% sample stream.

via:splunk/splunk-app-twitter · GitHub

まずはそれをインストールします。
トップ画面の左側にある「+」のとこをクリック。

Home___Splunk_6_2_2

Appの一覧が表示されるのは、検索ボックスで「REST API Modular Input」と検索すると出てきたAPPをインストールします。
インストールにはsplunk.comのアカウントが必要です。

Settings___Splunk

REST API Modular Inputの事前準備

それでは設定をしていきましょう。

「settings」->「Data inputs」->「REST」->「New」を選択します。

Data_inputs_-_Settings___Splunk

設定は以下のように設定しました。

項目名 設定値
REST API Input Name <任意の名前>
Endpoint URL https://userstream.twitter.com/2/user.json
HTTP Method GET
Authentication Type oauth1
OAUTH 1 Client Key 「API Key」
OAUTH 1 Client Secret 「API Secret」
OAUTH 1 Access Token 「Access Token」
OAUTH 1 Access Token Secret 「Access Token Secret」
Response Type json
Streaming Request ? 「チェック」
Request Timeout 86400
Set sourcetype manual
Source type Twitter
More settings 「チェック」
Index main

OAUTHのAPI設定の部分は、Twitter APIの設定を入力。
Twitter APIの設定はTwitter Developersから行うことができます。
ご自身のアカウントでログインし、右上にあるアイコンから「My Applications」->「Create New App」からAPIの作成が可能です。

今回使用したのは、Stream APIなので、自分のタイムラインがリアルタイムに取り込まれてくるはず。

Twitterのタイムラインを検索してみる

早速検索してみます。

「sourcetype = Twitter」

で検索してみます。

Search | Splunk 6.2.2 2015-03-01 16-10-32

問題無く取り込まれていますね。今回Response Typeをjsonにしたので、Splunkがjsonの構造を解釈して、自動でFieldを設定してくれています。

次回はこのFieldを活用していくつか分析をしてみます。

Splunkのレポート作成と高度な検索

Splunkのレポート作成

前回、Splunkの基本的な検索を行ったので、今回はレポートの作成を行ってみます。

Splunkでの「レポート」とは、実行した検索の検索条件を保存して、後で簡単に呼び出すことができます。この保存した検索条件を「レポート」と呼んでいるようです。

About reports

via:About reports

検索の結果を表示させて状態で、「Save As」から「Report」をクリックします。

Banners_and_Alerts_と_Search___Splunk_6_2_2

Search | Splunk 6.2.2 2015-02-28 11-38-36

保存したグラフは、「Report」メニューから呼び出すことができます。

Reports___Splunk_6_2_2

高度な検索

パイプライン

UNIXでよく使われる「パイプ」を使った検索も可能です。

search

via:search

以下はあくまで一例で、実際はかなりのコマンドが用意されてますので詳細はドキュメントをどうぞ。

  • キーワード「invalid」を最初の10件表示
    「invalid | head 10」
  • キーワード「invalid」を最後の10件表示
    「invalid | tail 10」
  • ソースタイプ「access_combined_wcookie」をクライアントIPで昇順ソート
    「sourcetype=access_combined_wcookie | sort +clientip」
  • ソースタイプ「accessを含む文字列」でHTTPステータスコード「200」でアクセスしたIPアドレスの中で、最もアクセスの多かったIPアドレスのアクセス数を表示
    「sourcetype=access_* status=200 | top limit=1 clientip」

最後の例は、パイプで「top」コマンドを使っています。topコマンドを使うと通常の検索結果ではなく、以下の例のように数と割合を表示してくれます。

Search | Splunk 6.2.2 2015-02-28 14-48-16

サブサーチ

ある検索の結果に含まれる値を、さらに別の検索条件として利用することをサブサーチと呼んでいます。

About subsearches

via:About subsearches

検索条件2 [検索条件1 | fields field1]

サブサーチの記載は以下のように[]を使用します。
上記の場合、「まず検索条件1を実行 -> その結果からFiled1を取り出す -> 検索条件2に先ほどのフィールドを使って検索」という流れになります。

例えば、以下では、ソースタイプ”secure”であり、フレーズ”failed password for”を含むイベントにおいて、もっとも頻度が高く出現した”clientip”フィールドの値2つを用いて、ソースタイプ”access_combined_wcookie”のイベントを検索しています。

サブサーチを使えば、より実用で使える検索が可能です。

例えば、「SSHログでPasswordをFailしている怪しいIPを探して、そのIPアドレスでWebサイトにアクセスしている形跡はないかを探したい」という時は、

sourcetype=”access_*” [search sourcetype=”secure” “failed password for” | top limit=5 clientip | fields clientip]

とやると検索できます。

Search | Splunk 6.2.2 2015-02-28 15-26-48

さらにこの結果を「時間単位にIPアドレスごとの件数」を表示させるには、以下のようにパイプを追加します。

sourcetype=”access_*” [search sourcetype=”secure” “failed password for” | top limit=5 clientip | fields clientip] | timechart count by clientip

Search | Splunk 6.2.2 2015-02-28 15-30-26

さらに「Visualization」タブをクリックすると、簡単にグラフ化できます。すげー!

Search___Splunk_6_2_2

Splunkで基本的な検索をしてみる

Splunkで基本的な検索をしてみる

前回、Splunkへのデータの取り込みを行ったので、今回は取り込んだデータの検索とレポートを行ってみます。

で、今更気付いたのですが、Splunkのサイトにチュートリアル用のサンプルログがあることを発見。

Get the tutorial data into Splunk

via:Get the tutorial data into Splunk

せっかくなのでこのサンプルログを使って検索をしてみます。
サンプルログと取り込む方法は上記リンク参照。

ログイン後に、左にある「Search & Reporting」を選択します。

Home___Splunk_6_2_2

「Search & Reporting」の初期画面は以下です。

Search | Splunk 6.2.2 2015-02-27 09-29-37

キーワード検索

検索ボックスにキーワードを入力することで特定のキーワードでデータの全文検索を行ってくれます。

チュートリアル通りに試しに、「buttercupgames」で検索してみます。

Search | Splunk 6.2.2 2015-02-27 16-38-41

グラフは検索キーワードにマッチしたイベントが、期間ごとに何件あるかをグラフで表しています。このグラフを操作することで期間を絞り込んだり、広げたりすることもできます。

画面左下は「Field」と呼ばれ、データから自動抽出した項目が表示されます。どのホストが一番多いのかとか、どの時間帯が多いのかなど、項目ごとに絞り込みを行うことができます。

画面右下は検索結果。検索キーワードが黄色網掛けで表示されています。
結果は時系列に新しい順に表示されていて、ソートの変更は出来ないっぽい。

キーワード検索の注意点

どうやらSplunkは内部で単語に分割してインデックス化してるっぽい。
「Invalid」で検索すると表示されるけど、「Invali」で検索すると結果が表示されません。
大文字小文字は区別しないらしく、「invalid」でも検索可能。

部分検索をする場合は、「*」を活用します。「Invali*」と検索すれば、Invaliで始まる全てのキーワードを検索します。

日本語の検索はどうなんだろう。
後で、Twitterのログを読み込ませてみる予定なのでそこで確認してみます。

空白を含むキーワードを検索する場合は、”mac os”のように「”」(ダブルクォーテーション)で囲みます。

論理演算子を使って、AND,OR,NOT検索も可能。

Start searching

via:Start searching

検索する時間指定

どの時間範囲で検索するかも可能で、検索ボックス横の「All Time」と記載されているボタンを選択することで時間範囲の指定が可能。

Search___Splunk_6_2_2

About the time range picker

via:About the time range picker

Fieldを使った検索

Fieldを使った検索が出来るという点が、Splunkを使う利点になるんじゃないかと思っています。

Splunkはログを取り込む際に、ログ中のデータ項目をFieldとして認識してインデックス化を行います。

検索されたFiledが画面左下に表示されます。

例えば、「clientip」というFiledはクライアントのIPアドレスが入っていて、選択するとクライアントIPアドレスの多い順に結果が表示されます。

Search___Splunk_6_2_2

ここで例えば、ReportsのTop valuesをクリックすると簡単にビジュアル化してくれます。

Search | Splunk 6.2.2 2015-02-27 17-18-45

他にも様々な検索方法がありますので、詳しくはSplunkのドキュメントをご覧下さい。

Use fields to search

via:Use fields to search