スタンドアロン配置ELKログ収集、分析システム


最近ログ分析をして、logstashが自分のニーズに合っていることを発見しました.
Logstash:システムロゴの収集、転載を行うツール.同時に各種のログプラグインを統合することは、ログのクエリーと分析の効率に大きな助けになります.一般にshipperをlogとして収集し,indexerをlogとして転載する. 
Logstash shipperはlogを収集し、logをredisストレージに転送する
Logstash indexerはredisからデータを読み出しelasticsearchに転送する
redis:dbで、logstash shipperはlogをredisデータベースに転送して格納します.Logstash indexerはredisからデータを読み出しelasticsearchに転送する. 
Elasticsearch:elasticsearchはluceneベースのオープンソース検索エンジンで、インデックスとして使用されます.
Kibana:オープンソースwebが表示され、インタフェースがきれいで、強力なelasticsearchデータ表示クライアントです.logstashにはkibanaが内蔵されています.kibanaを単独で配置することもできます.最新版のkibana 3は純html+jsクライアントです.
ソフトウェアダウンロードディレクトリ
http://www.elasticsearch.org/downloads/
私の環境は以下の通りです.
IP:192.168.81.44 t44
OS:CentOS6.5 x86_64
openjdk version "1.8.0_31"
nginx-1.0.15
redis-2.4.10
elasticsearch-1.5.0
logstash-1.4.2
kibana-3.1.0

一、epel YUMソースの配置
yum -y localinstall http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

二、jdk環境のインストール
yum -y install java-1.8.0-openjdk

三、redisのインストール、redisの起動
yum -y install redis ; /etc/init.d/redis restart

四、設置配置Elasticsearch、起動Elasticsearch
wget -c https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.5.0.tar.gz -O /root/elasticsearch-1.5.0.tar.gz
tar -xvf /root/elasticsearch-1.5.0.tar.gz -C /usr/local/

2行構成を追加:
tail -n2  /usr/local/elasticsearch-1.5.0/config/elasticsearch.yml 
http.cors.allow-origin: "/.*/"
http.cors.enabled: true

Elasticsearchの起動
/usr/local/elasticsearch-1.5.0/bin/elasticsearch -d

Elasticsearchログの表示
tail -f /usr/local/elasticsearch-1.5.0/logs/elasticsearch.log

五、設置配置Logstash、起動Logstash
wget -N https://download.elastic.co/logstash/logstash/logstash-1.4.2.tar.gz -O /root/logstash-1.4.2.tar.gz
tar -xvf /root/logstash-1.4.2.tar.gz -C /usr/local/

indexを設定します.conf
cat /usr/local/logstash-1.4.2/bin/index.conf 
input {
redis {
host => "127.0.0.1"
    # these settings should match the output of the agent
data_type => "list"
key => "logstash"
    # We use the 'json' codec here because we expect to read
    # json events from redis.
codec =>json
  }
file {
type =>"t44message"
path =>["/var/log/messages"]
  }
file {
type =>"t44secure"
path =>["/var/log/secure"]
  }
file {
type =>"t44nginx"
path =>["/var/log/nginx/*.log"]
  }
}
output {
#  stdout { debug => true debug_format => "json"}
stdout { codec =>rubydebug }
elasticsearch {
host => "127.0.0.1"
  }
}

filterを設定します.conf
cat /usr/local/logstash-1.4.2/bin/filter.conf 
input {
redis {
host => "127.0.0.1"
    # these settings should match the output of the agent
data_type => "list"
key => "logstash"
    # We use the 'json' codec here because we expect to read
    # json events from redis.
codec =>json
  }
file {
type =>"t44message"
path =>["/var/log/nginx/*.log"]
  }
}
filter {
  grok {
    match => { "message" => "No such file or directory" }
  }
  date {
    match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}
output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
if "No such file or directory" in [t44message]
  { exec {
    command => "echo '%{@timestamp} %{@message}' | mail -s nginx_no_such_file_or_directory -u alarm [email protected]"
  }      }
}

syslogを設定します.conf
cat /usr/local/logstash-1.4.2/bin/syslog.conf
input {
  tcp {
    port => 514
    type => syslog
  }
  udp {
    port => 514
    type => syslog
  }
}
filter {
  if [type] == "syslog" {
    grok {
      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
    date {
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
    }
  }
}
output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

Logstashの起動
/usr/local/logstash-1.4.2/bin/logstash -f /usr/local/logstash-1.4.2/bin/index.conf
/usr/local/logstash-1.4.2/bin/logstash -f /usr/local/logstash-1.4.2/bin/filter.conf
/usr/local/logstash-1.4.2/bin/logstash -f /usr/local/logstash-1.4.2/bin/syslog.conf

六、nginx、kibanaのインストール
yum -y install nginx
wget -c https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.tar.gz -O /root/kibana-3.1.0.tar.gz
tar -xvf /root/kibana-3.1.0.tar.gz -C /usr/share/nginx/html/

構成nginx:
egrep -v '^#|    #' /etc/nginx/conf.d/default.conf |grep -v '^$'
server {
    listen       80 default_server;
    server_name  _;
    include /etc/nginx/default.d/*.conf;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm index.php;
    }
    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    location ~ \.php$ {
        root           /usr/share/nginx/html;
        fastcgi_pass   127.0.0.1:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        fastcgi_buffer_size         32k;
        fastcgi_buffers             8 32k;
        include        fastcgi_params;
    }
}

kibanaの設定:
grep 'elasticsearch:' /usr/share/nginx/html/kibana/config.js |grep -v '\*'
elasticsearch: "http://192.168.81.44:9200",
\cp /usr/share/nginx/html/kibana/app/dashboards/default.json{,.bak}
\cp /usr/share/nginx/html/kibana/app/dashboards/logstash.json /usr/share/nginx/html/kibana/app/dashboards/default.json

kibanaへのアクセス:
http://192.168.81.44/kibana/
本文は“すべて風に任せます”のブログから出て、転載をお断りします!