201308202153logstash + kibana - Make sense of a mountain of logs

logstash用了一陣子了, 忽然發現我沒寫過筆記說, 來記一記好了, logstash 本身是一個 log collector, server, broker, 內建了一個 based on lucene 開發的 elasticsearch search engine, 再加上 kibana 這個用來取代原本 logstash port 9292的簡易查詢介面, 形成了一個不錯用的 log集中管理系統, 不過 slogan叫make sense of mountain of logs也太威了吧, 好像也沒那麼威說

以下就用我自己的 case 來看囉

10.0.0.1 logstash, kibana

    9292 tcp web search UI

    5544 udp log server

    5601 tcp kibana UI

10.0.0.14 elasticsearch

    9200 tcp REST interface

kibana用來給人看 log, logstash用來當log server, 除了存一份到檔案去, 也丟一份到search engine去, 然後再寫一些程式去 query search engine, 每天整理一下 log, 輔助檢查伺服器的異常與否

(1) logstash安裝

下載 logstash jar file: http://logstash.net/

將 logstash 以 java service wrapper方式啟動, 可參考之前寫的這篇文章: http://blog.xuite.net/misgarlic/weblogic/63779746

(2) logstash 設定

input {
  udp {
    port => 5544
    type => syslog
  }
}
                                                                                                                                                       
filter {
  grok {
      type => "syslog"
      pattern => [ "<%{POSINT:syslog_pri}>%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:[%{POSINT:syslog_pid}])?: %{GREEDYDATA:syslog_message}" ]
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{@source_host}" ]
  }
  syslog_pri {
      type => "syslog"
  }
  date {
      type => "syslog"
      match => [ "syslog_timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
  }
  mutate {
      type => "syslog"
      exclude_tags => "_grokparsefailure"
      replace => [ "@source_host", "%{syslog_hostname}" ]
      replace => [ "@message", "%{syslog_message}" ]
  }
  mutate {
      type => "syslog"
      remove => [ "syslog_hostname", "syslog_message", "syslog_timestamp" ]
  }
}
                                                                                                                                                       
output {
  elasticsearch {
      host => "10.0.0.14"
      index => "logstash-%{+YYYY.MM}"
  }
}

這邊 elasticsearch index name default為 logstash-2013.01.01 (daily index) 這樣型式的 index pattern, 但是這樣可能會造成太多 index, 會有 fd 用完的情形, 所以我只把 index 以月份去做區隔 (logstash-2013.01) 一個月一個 index

(3) elasticsearch 安裝, 已經有 rpm, 所以就去官網下載下來裝就可以了

% wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.3.noarch.rpm

% rpm -Uvh elasticsearch-0.90.3.noarch.rpm

% /etc/init.d/elasticsearch start

(4) 安裝 Kibana

% wget https://github.com/rashidkpc/Kibana/archive/v0.2.0.tar.gz

% tar zxvf Kibana-0.2.0.tar.gz

% mv Kibana-0.2.0 /home/kibana

% cd /home/kibana

% gem install bundler

% bundle install

% vi KibanaConfig.rb

# 修改以下內容

# 這個是因為我們的 elasticsearch 是分開裝在另一台機器上

Elasticsearch = "10.0.0.14:9200"

# 這個是因為我們改了 default index name

Smart_index_pattern = 'logstash-%Y.%m'

% ruby kibana-daemon.rb start

接下來可以利用之前談過的 evtsys, 把 windows event log當做syslog forward 到logstash 5544 port去, 就可以看到 log不斷在收進來了, 中文也OK, 這台server是申請某雲端服務上的主機, 還滿可怕的, 才一開機, 就一堆 try 密碼的, 糟的是還給他 try 進去 anonymous account, 不知道有沒有其他弱點, 被放什麼木馬, 可怕喲, 趕快去砍掉這台VM喲 ~~~~~~~

@補充說明: 2013-12-30

default設定是顯示timestamp和@message兩個欄位, 如果對其他欄位有興趣, 又不想每次去點左邊的加入的話, 就修改 KibanaConfig.rb 的內容, 找到 Default_fields 的設定, 改成

Default_fields = ['@message','@source_host','syslog_serverity']

這樣就會在@message後, 多出source_host, 和syslog_serverity兩個欄位了

--

@2015-02-25更新

因應新版本的 logstash, 更新 filter 寫法

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" ]
        }
    }
}

之便搜尋使用的欄位名換成了 syslog_message, syslog_timestame, syslog_hostname

回應
關鍵字
*贊助商連結*

用 BloggerAds 替自已加薪
贊助商連結
累積 | 今日
loading......
    沒有新回應!
*自由欄位大集合*





Powered by Xuite
BloggerAds
相關文章
Related Posts with Thumbnails