歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> LogStash日志分析展示系統

LogStash日志分析展示系統

日期:2017/2/28 14:35:21   编辑:Linux教程

簡介

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

  1. 初級管理員將通過一些傳統工具(如cat、tail、sed、awk、perl以及grep)對日志進行檢查,但它的適用范圍僅限於少量的主機和日志文件類型;
  2. 考慮到現實中的可擴展性問題,日志管理也會逐步進化,使用如rsyslog和syslog-ng這樣的工具進行集中化的管理;
  3. 當日志信息越來越大的時候,從快速增長的日志數據流中提取出所需的信息,並將其與其他相關聯的事件進行關聯,將變得越加困難,此時LogStash就提供了一個很好的解決方案

LogStash的優勢:
對日志數據更好的語法分析功能;

更加靈活的日志存儲方式

附帶搜索和目錄功能

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

設計及架構
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)在內的各個組件,以實現對日志數據的接收、處理和存儲。

部署
基礎環境
yum 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.linuxidc.net:9200/_plugin/paramedic/index.html
Bigdesk工具:
安裝:/usr/share/elasticsearch/bin/plugin -install lukas-vlcek/bigdesk
查看:http://log.linuxidc.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

Copyright © Linux教程網 All Rights Reserved