LogStash日志分析系統


簡介

通常日志管理是逐漸崩潰的——當日志對於人們最重要的時候,也就是出現問題的時候,這個漸進的過程就開始了。
日志管理一般會經歷一下3個階段:

  1. 初級管理員將通過一些傳統工具(如cat、tail、sed、awk、perl以及grep)對日志進行檢查,但它的適用范圍僅限於少量的主機和日志文件類型;

  2. 考慮到現實中的可擴展性問題,日志管理也會逐步進化,使用如rsyslog和syslog-ng這樣的工具進行集中化的管理;

  3. 當日志信息越來越大的時候,從快速增長的日志數據流中提取出所需的信息,並將其與其他相關聯的事件進行關聯,將變得越加困難,此時LogStash就提供了一個很好的解決方案

LogStash的優勢:

  1. 對日志數據更好的語法分析功能;

  2. 更加靈活的日志存儲方式

  3. 附帶搜索和目錄功能

  4. 易於安裝、可擴展、性能良好等

設計及架構

LogStash 由JRuby語言編寫,基於消息(message-based)的簡單架構,並運行在Java虛擬機(JVM)上。不同於分離的代理端(agent)或主 機端(server),LogStash可配置單一的代理端(agent)與其它開源軟件結合,以實現不同的功能。

在LogStash的生態系統中,主要分為四大組件:

  1. Shipper:發送事件(events)至LogStash;通常,遠程代理端(agent)只需要運行這個組件即可;

  2. Broker and Indexer:接收並索引化事件;

  3. Search and Storage:允許對事件進行搜索和存儲;

  4. Web Interface:基於Web的展示界面

正是由於以上組件在LogStash架構中可獨立部署,才提供了更好的集群擴展性。

在大多數情況下,LogStash主機可分為兩大類:

  1. 代理主機(agent host):作為事件的傳遞者(shipper),將各種日志數據發送至中心主機;只需運行Logstash 代理(agent)程序;

  2. 中心主機(central host):可運行包括中間轉發器(Broker)、索引器(Indexer)、搜索和存儲器(Search and Storage)、Web界面端(Web Interface)在內的各個組件,以實現對日志數據的接收、處理和存儲。

部署

基礎環境

um install java-1.7.0-openjdk
java -version # 保證java版本為1.7

 

部署LogStash

# 下載
wget https://download.elasticsearch.org/logstash/logstash/logstash-1.3.1-flatjar.jar -O logstash.jar 
# 啟動
java -jar logstash.jar agent -v -f shipper.conf # 啟動shipper
java -jar logstash.jar agent -v -f indexer.conf # 啟動indexer

 

部署Redis

# 安裝
yum install redis-server
# 啟動
/etc/init.d/redis-server start
# 測試
$ redis-cli -h 192.168.12.24
redis 192.168.12.24:6379> PING
PONG

 

部署Elasticsearch

# 下載
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-0.90.8.noarch.rpm
# 安裝
rpm -ivh elasticsearch-0.90.8.noarch.rpm 
# 啟動
/etc/init.d/elasticsearch status

啟動Kibana

# 安裝
java -jar logstash.jar web # LogStash 1.3.1自帶Kibana
# 查看
http://192.168.12.24:9292

Logstash配置文件與插件

input {
    stdin { }
    file {
        type => "syslog"
        path => ["/var/log/secure", "/var/log/messages"]
        exclude => ["*.gz", "shipper.log"]
    }
    zeromq {
      address => ["tcp://192.168.8.145:8889"]
      mode => "client"
      type => "zmq-input"
      topic => "weblog"
      topology => "pubsub"
      codec => "json"
    }
  }
  filter {
    mutate {
        gsub => [ "message","APPS weblog",""]
        gsub => [ "message","{",""]
        gsub => [ "message","}",""]
    }
  }
  output {
    stdout { debug => true debug_format => "json"}
    
    elasticsearch {
      cluster => "logstash"
      codec => "json"
    }
}

 

日志類別與處理方法

  1. Apache日志:自定義apache輸出日志格式,json輸出,無需filter參與

  2. Postfix日志:無法自定義,需使用如grok等filter進行過濾

  3. Tomcat日志:需將多行日志合並至一個事件中,並排除空白行

集群擴展

擴展架構

注意事項

Redis:部署多台,僅提供高可用作用,無分擔負載作用,可使用ZeroMQ代替

ElasticSearch:

# 檢測節點狀態:
    curl -XGET 'http://127.0.0.1:9200/_cluster/health?pretty=true'
            green status:所有shard被分配,且運行正常
            yellow status:只有主shard被分配,如集群正在節點間復制數據時
            red status:存在未被分配的shard
# 集群監控:
    Paramedic工具:
            安裝:/usr/share/elasticsearch/bin/plugin -install karmi/elasticsearch-paramedic
            查看:http://log.okooo.net:9200/_plugin/paramedic/index.html
    Bigdesk工具:
            安裝:/usr/share/elasticsearch/bin/plugin -install lukas-vlcek/bigdesk
            查看:http://log.okooo.net:9200/_plugin/bigdesk/index.html
            
# 數據保留策略:
            1.LogStash默認為每一天創建1個index,可手動刪除index
                curl -XDELETE http://127.0.0.1:9200/logstash-2013.12.19
                shell優化腳本:https://github.com/cnf/logstash-tools/blob/master/elasticsearch/clean-elasticsearch.sh
            2.優化index:
                curl -XPOST 'http://127.0.0.1:9200/logstash-2013.12.19/_optimize'
                curl -XPOST 'http://127.0.0.1:9200/_optimize' # 優化所有index
                curl 'http://127.0.0.1:9200/logstash-2013.12.19/_stats?clear=true&store=true&pretty=true' #查看index的大小,index過多會影響優化耗時
            3.默認index數據目錄:/var/lib/elasticsearch/logstash 

參考資料

LogStash官網:http://www.logstash.net/

Elasticsearch官網:http://www.elasticsearch.org/

Kibana查詢語法:http://lucene.apache.org/core/3_6_1/queryparsersyntax.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM