簡介html
一般日誌管理是逐漸崩潰的——當日志對於人們最重要的時候,也就是出現問題的時候,這個漸進的過程就開始了。
日誌管理通常會經歷一下3個階段:java
初級管理員將經過一些傳統工具(如cat、tail、sed、awk、perl以及grep)對日誌進行檢查,但它的適用範圍僅限於少許的主機和日誌文件類型;git
考慮到現實中的可擴展性問題,日誌管理也會逐步進化,使用如rsyslog和syslog-ng這樣的工具進行集中化的管理;github
當日志信息愈來愈大的時候,從快速增加的日誌數據流中提取出所需的信息,並將其與其餘相關聯的事件進行關聯,將變得越加困難,此時LogStash就提供了一個很好的解決方案web
LogStash的優點:redis
對日誌數據更好的語法分析功能;shell
更加靈活的日誌存儲方式apache
附帶搜索和目錄功能json
易於安裝、可擴展、性能良好等架構
LogStash 由JRuby語言編寫,基於消息(message-based)的簡單架構,並運行在Java虛擬機(JVM)上。不一樣於分離的代理端(agent)或主 機端(server),LogStash可配置單一的代理端(agent)與其它開源軟件結合,以實現不一樣的功能。
在LogStash的生態系統中,主要分爲四大組件:
Shipper:發送事件(events)至LogStash;一般,遠程代理端(agent)只須要運行這個組件便可;
Broker and Indexer:接收並索引化事件;
Search and Storage:容許對事件進行搜索和存儲;
Web Interface:基於Web的展現界面
正是因爲以上組件在LogStash架構中可獨立部署,才提供了更好的集羣擴展性。
在大多數狀況下,LogStash主機可分爲兩大類:
代理主機(agent host):做爲事件的傳遞者(shipper),將各類日誌數據發送至中心主機;只需運行Logstash 代理(agent)程序;
中心主機(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" } }
Apache日誌:自定義apache輸出日誌格式,json輸出,無需filter參與
Postfix日誌:沒法自定義,需使用如grok等filter進行過濾
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