在稽核時,稽核大人對目前的日誌那不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
# 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
# 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/
...
# 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> 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
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
...
# 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
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
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",
...
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 意見:
張貼留言