2014年3月25日 星期二

[記事] Logstash 安裝

屬於阿宅世界的技術文章,想看的再點開,切莫自誤 !

在稽核時,稽核大人對目前的日誌那不fancy的review的機制似乎有點小小的意見,只好從善如流的裝裝 logstash 來做 logreview了

架構 :
(怕圖片失連的文字版)
Shipper <-> broker <-> indexer <-> ElasticSearch <-> Web Interface

Sever 配置
broker : 10.0.0.1
storage & search : 10.0.0.1
indexer : 10.0.0.1
Web : 10.0.0.2
Shipper : 10.0.0.3

Prerequisite: Java & ruby
shell> yum install java-1.7.0-openjdk ruby

建立程式安裝的目錄,由於目前把broker / ElasticSearch / indexer 通通放在同一台,所以在同一台下建立下列目錄:
shell> mkdir /home/data1
# redis (broker) 的資料存放目錄
shell> mkdir /home/data1/redis/
# search engine (ElasticSearch) 的資料存放目錄
shell> mkdir /home/data1/elasticsearch
# logstash 安裝目錄
shell> mkdir /home/logstash
# redis 安裝目錄
shell> mkdir -p /home/redis/src
# log 存放目錄
shell> mkdir /var/log/logstash

安裝 Broker - redis

這東西感覺是只是隊列伺服器,不裝好像沒關係,但為了之後架構可以比較靈活的調整,還是先給它一個角色好了,之後再看情況
目前支援的有不少,官方目前好像比較推廌 RabbitMQ,但我只查到 redis 怎麼裝 (冏),那就先湊合著用吧 XD
shell> cd /home/redis/src
# download the source file from http://redis.io/download
shell> wget http://download.redis.io/releases/redis-2.8.7.tar.gz
shell> tar zxvf redis-2.8.7.tar.gz
shell> cd redis-2.8.7
shell> make
shell> make PREFIX=/home/redis install
shell> cp redis.conf /home/redis/redis.conf

編輯設定 /home/redis/redis.conf
...
# Specify the log file name
logfile "/var/log/redis/redis.log"
# Specify the working directory
dir /home/data1/redis/
...

設定啟動檔
shell> cp utils/redis_init_script /etc/init.d/redis
shell> vi /etc/init.d/redis
...
REDISPORT=6379
EXEC=/home/redis/bin/redis-server
CLIEXEC=/home/redis/bin/redis-cli
PIDFILE=/var/run/redis.pid
CONF="/home/redis/redis.conf"
...

啟動
shell> /etc/init.d/redis start

redis 預設聽在 port 6379 上,記得在iptables 裡打開相對的設定

安裝 SearchEngine - ElasticSearch

logstash 在 1.4 之前的版本好像內建一個,到了1.4之後,官方教學就叫你自建一個,手續不多,加上logstash的主體其實是ElasticSearch這個搜尋引擎,為了能對 ElasticSearch下更多(?)參數,那還是建吧
shell> cd /home/elasticsearch
shell> wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.0.1.tar.gz
shell> tar zxvf elasticsearch-1.0.1.tar.gz
shell> cd elasticsearch-1.0.1

編輯 ElasticSearch 設定
...
# ElasticSearch log 存放目錄
path.logs: /var/log/logstash
# ElasticSearch 資料存放目錄, 支援用逗號隔開的多個路徑,很不錯
path.data: /home/data1
...

啟動
shell> bin/elasticsearch -d -p /var/log/logstash/elasticsearch.pid

啟動後會看到 ElasticSearch 預設聽在port 9200 跟 9300

安裝 Indexer - Logstash
shell> wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.0.tar.gz
shell> tar zxvf logstash-1.4.0.tar.gz
shell> cd logstash-1.4.0
shell> mkdir conf

編輯設定檔 conf/logstash_indexer.conf ,Indexer 的工作為把資料由 broker (redis) 讀出,然後餵給 Search Engine (ElasticSearch),簡單設置如下
input {
  redis {
    host => '10.0.0.1'
    data_type => 'list'
    port => '6379'
    key => 'logstash:redis'
    type => 'redis-input'
  }

}
output {
  elasticsearch {
    host => 10.0.0.1
  }
}

接著就可以啟動試試看
shell> /home/logstash/logstash-1.4.0/bin/logstash -f /home/logstash/logstash-1.4.0/conf/logstash_indexer.conf -l /var/log/logstash/logstash.log &


安裝 Shipper - logstash

安裝方法同Indexer,但 Shipper 的工作是把本機上要監控的資料丟到 broker (redis) 去排隊等待處理,所以設定上隨著監控項目不同而不同,如果我們想看 SSH登入的狀況,可以這樣設定

input {
  file {
    path => "/var/log/secure"
  }
}
filter {
  grok {
    match => [ "message", "%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host_target} sshd\[%{NUMBER}\]: Failed password for %{USERNAME:username} from %{IP:src_ip} port %{NUMBER:src_port} ssh2" ]
    add_tag => ["SSH_FAIL"]
  }
  grok {
    match => [ "message", "%{SYSLOGTIMESTAMP:timestamp} %{HOSTNAME:host_target} sshd\[%{NUMBER}\]: Accepted password for %{USERNAME:username} from %{IP:src_ip} port %{NUMBER:src_port} ssh2" ]
    add_tag => ["SSH_ACCEPT"]
  }
}
output {
  redis {
    host => "10.0.0.1"
    data_type => "list"
    key => "logstash:redis"
  }
  # 除錯、測試用,都沒問題的話可以直接移除
  stdout {
    codec => rubydebug
  }
}


安裝查詢Log的Web Interface - Kibana

1.4 版之後已經內建 Kibana 3.0 了,可以讓logstash 在 -web 模式下直接使用,但如果想拆出來與既有的 Web Server 整合也很簡單,3.0 版的Kibana 整包就是一堆 HTML 跟 JS 而已,丟到你的 Web 目錄下就好,唯一一個要設定的是 config.js 裡的 elasticsearch要指向正確的位置
shell> cd /home/www/
shell> wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.0.tar.gz
shell> tar zxvf kibana-3.0.0.tar.gz
shell> mv kibana-3.0.0 kibana
shell> cd kibana

編輯 kibana 設定檔 config.js
...
elasticsearch: "http://10.0.0.1:9200",
...

之後就可以透過 http://10.0.0.2/kibana的方式查詢 log 資料,預設會問你的 Dashboard 要怎麼配置,選下方的 logstash 即可,若不想每次都來這一下,把 /home/www/kibana/app/dashboards/ 的 logstash.json 改名為 default.json 就好 (小心會覆蓋掉原本 的default.json)

p.s ElasticSearch 骨子裡是 Lucene ,遵循 Lucene 的查詢語法,上述的配置如果要查 tag 是 SSH 登入失敗的記錄可以下
tags:SSH_FAIL

其他可查詢的欄位 Kibana 會列在 左下角的 Fields 欄裡

詳細的 lucene 語法請參考 : http://lucene.apache.org/core/2_9_4/queryparsersyntax.html

0 意見:

張貼留言