なんとなくVagrantで構築したElasticSearch + Kibanaの環境にLogstashで自分の現場参戦メモを投入してみた。
ただ、参戦数が少なすぎて何の発見もなく普通にExcelでグラフ書けばいいじゃん的な結果に。
Vagrantのセットアップとミドルウェアのインストール
ansibleのplaybookベースなのでVirtualBoxとVagrantをインストールした状態であれば下記ファイル群を置いて
vagrant up
すればElasticSearchとKibanaとLogstashが入る。
この状態であれば同一ホスト内でElasticSearchには
http://localhost:9200/
VagrantのホストOSからKibanaには
http://10.3.8.4:5601/
でアクセスできる。
Vagrantfile
# -*- mode: ruby -*- # vi: set ft=ruby : VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "centos65" config.vm.box_url = "http://www.lyricalsoftware.com/downloads/centos65.box" config.vm.network :private_network, ip: "10.3.8.4" config.vm.synced_folder ".", "/vagrant", :mount_options => [ "dmode=775", "fmode=664" ] config.vm.provision "shell", :path => "provision.sh" config.vm.provider "virtualbox" do |v| v.memory = 1024 end end
provision.sh
#!/usr/bin/env bash if ! [ `which ansible` ]; then yum install -y ansible fi ansible-playbook -i /vagrant/ansible/hosts /vagrant/ansible/playbook.yml
ansible/hosts
127.0.0.1 ansible_connection=local
ansible/playbook.yml
--- - hosts: 127.0.0.1 connection: local sudo: yes vars: src_dir: /usr/local/src jdk_ver: 1.8.0 kibana_file_base: kibana-4.2.0-linux-x64 kibana_install_dir: /opt tasks: - name: install Java yum: name=java-{{jdk_ver}}-openjdk state=present - name: import key for repository of ElasticSearch rpm_key: key=https://packages.elastic.co/GPG-KEY-elasticsearch state=present - name: add repository of ElasticSearch copy: src=elasticsearch.repo dest=/etc/yum.repos.d/elasticsearch.repo owner=root group=root mode=0644 - name: install ElasticSearch yum: name=elasticsearch state=present - name: enable ElasticSearch service: name=elasticsearch state=started enabled=yes - name: import key for repository of Logstash rpm_key: key=https://packages.elasticsearch.org/GPG-KEY-elasticsearch state=present - name: add repository of Logstash copy: src=logstash.repo dest=/etc/yum.repos.d/logstash.repo owner=root group=root mode=0644 - name: install Logstash yum: name=logstash state=present - name: enable Logstash service: name=logstash state=started enabled=yes - name: download Kibana get_url: url=https://download.elastic.co/kibana/kibana/{{kibana_file_base}}.tar.gz dest={{src_dir}}/{{kibana_file_base}}.tar.gz - name: unarchive Kibana command: tar zxvf {{src_dir}}/{{kibana_file_base}}.tar.gz -C {{src_dir}} - name: install Kibana command: mv {{src_dir}}/{{kibana_file_base}} {{kibana_install_dir}}/kibana creates={{kibana_install_dir}}/kibana - name: setup init.d for Kibana copy: src=kibana.init dest=/etc/rc.d/init.d/kibana owner=root group=root mode=0755 - name: enable Kibana service: name=kibana state=started enabled=yes
ansible/elasticsearch.repo
[elasticsearch-2.x] name=Elasticsearch repository for 2.x packages baseurl=http://packages.elastic.co/elasticsearch/2.x/centos gpgcheck=1 gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch enabled=1
ansible/logstash.repo
[logstash-2.0] name=Logstash repository for 2.0.x packages baseurl=http://packages.elasticsearch.org/logstash/2.0/centos gpgcheck=1 gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch enabled=1
ansible/kibana.init
#!/bin/sh ### BEGIN INIT INFO # Provides: kibana # Required-Start: $local_fs $remote_fs $network # Should-Start: $time # Required-Stop: $local_fs $remote_fs $network # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Short-Description: Kibana 4 # Description: Service controller for Kibana 4 ### END INIT INFO INSTALLED_DIR=/opt/kibana EXEC_SCRIPT="$INSTALLED_DIR/bin/kibana" LOG_DIR=/var/log/kibana PID_DIR=/var/run PID_FILE="$PID_DIR"/kibana.pid LOG_FILE="$LOG_DIR"/kibana.log test -d $LOG_DIR || mkdir $LOG_DIR # Source function library. . /etc/init.d/functions RETVAL=0 case "$1" in start) if [ ! -f "$PID_FILE" ]; then echo -n "Starting Kibana" nohup $EXEC_SCRIPT 0<&- &> $LOG_FILE & echo $! > $PID_FILE success else echo -n "Kibana is already running" RETVAL=1 failure fi echo ;; stop) if [ -f "$PID_FILE" ]; then echo -n "Stopping Kibana" test -f $PID_FILE && cat $PID_FILE | xargs kill -s SIGKILL && rm -f $PID_FILE success else echo -n "Kibana is not running" RETVAL=1 failure fi echo ;; restart) $0 stop $0 start ;; reload) $0 restart ;; status) status kibana RETVAL=$? ;; *) echo "Usage: $0 {start|stop|status|restart|reload}" exit 1 ;; esac exit $RETVAL
データの流し込み
ElasticSearchが立ち上がっている状態で(この時点ではKibanaとLogstashのサービスは起動していなくてよい)下記のファイルを置いてvagrant内で/vagrant/ansible/_dataに移動して、以下を実行すると同フォルダの「sample_data_hello.tsv」の中身がElasticSearchに投入される。
cat sample_data_hello.tsv | /opt/logstash/bin/logstash -f 01-hellolog.conf
その後Kibanaをサービスとして起動して「 http://10.3.8.4:5601/ 」にアクセスするといろいろいじれる。
ansible/_data/01-hellolog.conf
input { stdin {} } filter { if [message] =~ "^@" { drop {} } if [message] =~ "^\s*$" { drop {} } csv { separator => " " columns => [ status, date, day, time, place, seat, title, note ] } date { match => [ date, "YYYY/MM/dd" ] } } output { elasticsearch { hosts => [ "localhost:9200" ] } # stdout { codec => rubydebug } }
※注:「separator」の中身はタブ。
※注:冒頭に全角「@」がある行と空行は無視している。
ansible/_data/sample_data_hello.tsv
2014/04/29 火 15:00 サンシティ越谷市民ホール 大ホール ファミリー席 2Fn列n番 Berryz工房デビュー10周年記念コンサートツアー2014春 ~ リアルBerryz工房 ~ 2015/10/15 木 18:20 TOKYO FM HALL n列n番 カントリー・ガールズ 山木梨沙バースデーイベント2015 (お見送り:山木) 2015/10/30 金 17:00 千葉大学 西千葉キャンパス かたらいの森前ステージ 立ち見 カントリー・ガールズ Special Live ~千の葉に舞うMUSIC!~ (郵送待ち) 2015/12/07 月 18:30 武道館 ファミリー席 モーニング娘。’15 コンサートツアー秋 ~PRISM~
※注:各項目タブ区切り。「ステータス、日付、曜日、開演時刻、会場、座席、タイトル、備考」の順。