[レポート]Elasticsearch、Kibana、Logstash で始めるログ解析入門

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、菅野です。
2016年6月17日〜18日にかけて開催されていたオープンソースカンファレンス2016 Hokkaidoへ行ってきました。
18日10:00からのセミナー「Elasticsearch、Kibana、Logstash で始めるログ解析入門」を聴講してきましたのでそのレポートです。
IMG_3419
ロゴ入りのガム(懐かしい)をもらいました。

講師

Elastic 大谷 純(おおたに じゅん)氏

アジェンダ

  • Elastic stack 紹介
    • Logstash - Log収集
    • Elasticsearch - 検索・分析
    • Kibana - 可視化
  • 商用プラグイン紹介

Elastic stack 紹介

スクリーンショット 2016-06-18 17.26.37
・AWS とはパートナーというわけではない

Logstash

  • Log収集
  • rubyで描かれている
  • 実行はJRuby
  • 設定は以下の3つに分かれている
    • input
      何から取り込むか指定する
    • filter
      grokでログのパターンを正規表現を使って設定し、1行毎にパースする
      dateフィルタで日付のパターンを指定しておくと@timestampに時刻情報が取り込まれ、それを内部で使用している
      パースしたらmessageの中に放り込まれる
      ここでtagを付与することができる。if分も使える
      geoipフィルタにクライアントIPアドレスのフィールドを指定しておくとIPアドレスから位置情報に変換してくれる
      useragentフィルタでユーザーエージェント項目をパースしてくれる
    • output どこに出力するか指定する
      複数の対象に対して出力可能
      index => "****-%{+YYYY.mm.dd}"といった感じでindex名のパターンを指定できる

Elasticsearch

  • 元々は奥様のレシピ検索のために作った(まだ完成していない)
  • 検索エンジンである
  • 以下のような機能を持っている
    • フリーワード検索
    • 絞り込み
    • ハイライト
    • ソート
    • ページング
    • 集計
    • サジェスト
  • httpでjsonを投げることでデータ登録、取得が可能
  • GitHub、Wikipedia、はてなブックマークで使われている
  • 分散構成スケール
    • インデックス
      RDBのようなもの
    • レプリケーション
      SPOFの解消
    • シャーディング
      シャードの数は作成時に指定できる。
      登録したデータは各シャードに分散される
      自動的に分散される
      スクリーンショット 2016-06-18 17.59.35
      ノードの数は3つ以上がおすすめで2つはやめた方がいい(ネットワーク分断した時にどっちが正しいかわからなくなる)
  • 全文検索
    • 用語
      ドキュメント:レコード
      フィールド:カラム
    • 形態素解析(日本語を分けるの)は「kuromoji」というエンジンが使え、プラグインとして追加可能)
      意味のある単語の切れ目で別れる
      品詞の情報を元に追加処理が可能
      辞書を元に解析するので新語は理解できない
      内部で文章を単語単位に分割しその単語とIDを結びつけて登録している。
    • N-Gramも使える
      固定の文字数で単語として登録する
      意味にない単語になる可能性がある
      インデックスが肥大化する
    • その他
      緯度経度検索が可能 Percolator
       クエリ(検索条件)を登録しておいて、文章を投げるとヒットするかを返してくれる
      バックアップ
       S3にもバックアップできる
      Ecosystem
       プラグインによる機能の追加
      クライアントライブラリ
       各種言語に対応(Scala、clojure、go一部はコミュニティ管理)
      aggregation
       グルーピングして集計できる(多段の集計)
       東京で何件、品川区で何件といった結果が返ってくる

Kibana

  • スワヒリ語で建物(木でできた小屋)という意味
  • node.jsで描かれている
  • 解析・可視化ツール
  • Aggregationの機能を使っている
  • リアルタイムの集計も可能
    スクリーンショット 2016-06-18 18.00.26

beats

  • go言語で描かれている
  • 軽量が売り
  • 用途で分かれている
    • packetgeat
      パケットをキャプチャしてSQL文の解析をできたりする。(それをKibanaで可視化したり)
      Kibanaのダッシュボードもついている
    • filebeat
      ファイルから収集してlogstashが投げるといった使い方
    • winlogbeat
      Windowsのログを収集する
  • ライブラリが配布されている 独自で解析したいものは自分で作れる

商用プラグイン

  • Shield ユーザー認証 LDAP Active Directory ファイルベースでの認証
    ロールベースのACが可能
    インデックス毎、アクション毎の設定が可能
    ドキュメント・フィールド毎の設定も可能
    SSL/TLS、IPフィルタリングが可能
    監査ログも作成できる
  • Watcher
    Elasticsearchのクエリを利用してデータを監視
    細かい条件の指定が可能
    スケジュールの指定が可能
    アクションの定義が可能
    履歴の保存が可能
    Shieldの監査ログをWatcherでチェックして通知するといった使い方ができる
  • Cloud
    Elasticsearch as service
    アップグレードが簡単
    商用プラグインも利用可能
    14日間お試しできる

その他

  • ES-Hadoop
    Hadoopに入れると、出力先としてElasticsearchを簡単に指定することができる
  • Discussというフォーラムで日本語で質問できる

最後に

Elastic stack を利用してLog解析を行う時の流れを、細かい設定も含めて説明していただきました。
特に beats は今回初めて知り、特に Packetgeat の存在には衝撃を受けました。
例えば Appサーバーから DBサーバーへのパケットを監視し、SQL文を Elasticsearch でデータ化し Kibana で可視化するといった事が可能となります。

このレポートを読んで興味を持たれた方は、一度 Elastic のセミナーに参加してみることをおすすめします。