ELK-開源日志收集分析軟件棧

首先,日志能做什么?

  • 系統(tǒng)健康狀況監(jiān)控

  • 查找故障根源

  • 系統(tǒng)瓶頸診斷和調(diào)優(yōu)

  • 追蹤安全相關(guān)問題

現(xiàn)在,如何采集日志?

互聯(lián)網(wǎng)大規(guī)模、分布式的特性決定了日志的源頭越來越分散,產(chǎn)生的速度越來越快,傳統(tǒng)的手段和工具(主要是linux grep、awk、wc等命令)顯得日益力不從心。市場(chǎng)對(duì)新工具的需求已然催生出Splunk這樣近百億美元市值的專業(yè)日志分析解決方案供應(yīng)商。然而,開源才是王道。以下是羅列的一些主流開源日志框架。(本文先整理了ELK的部分,其他開源日志框架介紹后續(xù)不定時(shí)間更新)

  • ELk(elasticsearch+logstash+kibana)

1.官方主頁:https://www.elastic.co/products

2.開源簡(jiǎn)介:
顧名思義,ELK是三個(gè)開源工具ElasticSearch,Logstash,Kibana組合而成的軟件棧,其中的核心是開源的分布式搜索引擎Elasticsearch,輔以Logstash靈活多樣的日志收集,過濾,傳送功能以及Kibana炫酷的前端展示面板,組合成一套可以媲美商業(yè)應(yīng)用的解決方案。

  • Elasticsearch 是個(gè)開源分布式搜索引擎,它的特點(diǎn)有:分布式,零配置,自動(dòng)發(fā)現(xiàn),索引自動(dòng)分片,索引副本機(jī)制, restful 風(fēng)格接口,多數(shù)據(jù)源,自動(dòng)搜索負(fù)載等。

  • Logstash 是一個(gè)完全開源的工具,他可以對(duì)你的日志進(jìn)行收集、分析,并將其存儲(chǔ)供以后使用(如,搜索)。

  • kibana 也是一個(gè)開源和免費(fèi)的工具,他 Kibana 可以為 Logstash 和ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助您匯總、分析和搜索重要數(shù)據(jù)日志。

3.架構(gòu)原理
在需要收集日志的所有服務(wù)上部署 logstash ,作為 logstash agent ( logstash shipper )用于監(jiān)控并過濾收集日志,將過濾后的內(nèi)容發(fā)送到 logstash indexer ,logstash indexer 將日志收集在一起交給全文搜索服務(wù) ElasticSearch ,可以用ElasticSearch 進(jìn)行自定義搜索通過 Kibana 來結(jié)合自定義搜索進(jìn)行頁面展示。架構(gòu)圖如Fig1.1所示:

Fig 1.1 elk.png

4.安裝部署

  • JDK安裝和配置(略)

  • Logstash安裝

下載并安裝 Logstash ,安裝 logstash 只需將它解壓的對(duì)應(yīng)目錄即可,例如:/usr/local 下:
<pre># tar -zxf logstash-2.2.2.tar.gz -C /usr/local/ </pre>

安裝后運(yùn)行如下命令:
<pre># cd /usr/local/logstash-2.2.2/bin

logstash -e 'input { stdin { } } output { stdout {} }'

Hello World!

2016-03-07T12:46:12.095Z XiaoMeng-MacMini.local HelloWorld!

</pre>

我們可以看到,我們輸入什么內(nèi)容logstash按照某種格式輸出,其中-e參數(shù)參數(shù)允許Logstash直接通過命令行接受設(shè)置。這點(diǎn)尤其快速的幫助我們反復(fù)的測(cè)試配置是否正確而不用寫配置文件。使用CTRL-C命令可以退出之前運(yùn)行的Logstash。

使用-e參數(shù)在命令行中指定配置是很常用的方式,不過如果需要配置更多設(shè)置則需要很長(zhǎng)的內(nèi)容。這種情況,我們首先創(chuàng)建一個(gè)簡(jiǎn)單的配置文件,并且指定logstash使用這個(gè)配置文件。 例如:在 logstash 安裝目錄下創(chuàng)建一個(gè)“基本配置”測(cè)試文件 logstash-test.conf, 文件內(nèi)容如下:
<pre># cat logstash-simple.conf
input { stdin { } }
output {
stdout { codec=> rubydebug }
}</pre>

Logstash 使用 input 和 output 定義收集日志時(shí)的輸入和輸出的相關(guān)配置,本例中input 定義了一個(gè)叫 "stdin" 的 input , output 定義一個(gè)叫 "stdout" 的 output 。無論我們輸入什么字符, Logstash 都會(huì)按照某種格式來返回我們輸入的字符,其中 output被定義為 "stdout" 并使用了 codec 參數(shù)來指定 logstash 輸出格式。
使用logstash的-f參數(shù)來讀取配置文件,執(zhí)行如下開始進(jìn)行測(cè)試:
<pre># logstash agent -f logstash_simple.conf Settings: Default pipeline workers: 4
Logstash startup completed
echo "date hello world" //命令行輸入
//測(cè)試結(jié)果
{
"message" => "echo "date hello world"",
"@version" => "1",
"@timestamp" => "2016-03-09T00:47:41.172Z",
"host" => "XiaoMeng-MacMini.local"
}
</pre>

  • Elasticsearch安裝和配置

下載 Elasticsearch 后,解壓到對(duì)應(yīng)的目錄就完成 Elasticsearch 的安裝。
<pre># tar -zxf elasticsearch-2.2.0.tar.gz -C /usr/local/</pre>
啟動(dòng)Elasticsearch
<pre># cd /usr/local/elasticsearch-2.2.0/bin
# elasticsearch</pre>
如果使用遠(yuǎn)程連接的 Linux 的方式并想后臺(tái)運(yùn)行 elasticsearch ,可以使用nohup:
<pre># nohup /usr/local/elasticsearch-2.2.0/bin/elasticsearch > nohup &</pre>
查看 elasticsearch 的 9200 端口是否已監(jiān)聽,是則說明 elasticsearch 已成功運(yùn)行:
<pre># netstat -anp |grep 9200</pre>
接下來我們?cè)?logstash 安裝目錄下創(chuàng)建一個(gè)用于測(cè)試 logstash 使用 elasticsearch作為 logstash 的后端的測(cè)試文件 logstash_es_simple.conf,該文件中定義了stdout和elasticsearch作為output,這樣的“多重輸出”即保證輸出結(jié)果顯示到屏幕上,同時(shí)也輸出到elastisearch中。
<pre># cat logstash_es_simple.conf
input { stdin { } }
output {
elasticsearch {hosts => "localhost" }
stdout { codec=> rubydebug }
}</pre>
執(zhí)行如下命令:
<pre># logstash agent -f logstash-es-simple.conf
hello logstash//命令行輸入
//測(cè)試結(jié)果
{
"message" => "hello logstash",
"@version" => "1",
"@timestamp" => "2016-03-09T01:15:44.766Z",
"host" => "XiaoMeng-MacMini.local"
}
</pre>
接下來使用 curl 命令發(fā)送請(qǐng)求來查看 ES 是否接收到了數(shù)據(jù):
<pre># curl 'http://localhost:9200/_search?pretty'
//測(cè)試結(jié)果
{
"took" : 19,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [ {
"_index" : "logstash-2016.03.09",
"_type" : "logs",
"_id" : "AVNY8afVDB1d7fLqdOmL",
"_score" : 1.0,
"_source" : {
"message" : "hello logstash",
"@version" : "1",
"@timestamp" : "2016-03-09T01:15:44.766Z",
"host" : "XiaoMeng-MacMini.local"
}
} ]
}
}
</pre>
至此,已經(jīng)成功利用 Elasticsearch 和 Logstash 來收集日志數(shù)據(jù)了。

  • elasticsearch 插件
    Elasticsearch-kopf 插件可以查詢 Elasticsearch 中的數(shù)據(jù),安裝 elasticsearch-kopf,只要在你安裝 Elasticsearch 的目錄中執(zhí)行以下命令即可:
    <pre># cd /usr/local/elasticsearch-2.2.0/bin/
    # plugin install lmenezes/elasticsearch-kopf</pre>

安裝完成后在 plugins 目錄下可以看到 kopf.在瀏覽器訪問 http://localhost:9200/_plugin/kopf 瀏覽保存在 Elasticsearch 中的數(shù)據(jù),如圖Fig1.2所示:

Fig 1.2 plugins.png
  • Kibana安裝

下載 kibana 后,解壓到對(duì)應(yīng)的目錄就完成 kibana 的安裝
<pre>tar -zxf kibana-4.4.1-linux-x64.tar.gz -C /usr/local/</pre>
啟動(dòng)kibana
<pre># cd /usr/local/kibana-4.4.1-linux-x64/bin
# kibana</pre>
使用 http://localhost :5601 訪問 Kibana ,登錄后,首先,配置一個(gè)索引,默認(rèn), Kibana 的數(shù)據(jù)被指向 Elasticsearch ,使用默認(rèn)的 logstash-* 的索引名稱,并且是基于時(shí)間的,點(diǎn)擊“ Create ”即可。如圖Fig1.3所示。

Fig 1.3 kibana.png

看到如下界面說明索引創(chuàng)建完成,如圖Fig1.4所示。

Fig 1.4 create index.png

點(diǎn)擊“ Discover ”,可以搜索和瀏覽 Elasticsearch 中的數(shù)據(jù),默認(rèn)搜索的是最近 15分鐘的數(shù)據(jù)??梢宰远x選擇時(shí)間。
到此,說明簡(jiǎn)易的 ELK 平臺(tái)安裝部署已經(jīng)完成。

  • 配置 logstash 作為 Indexer

將 logstash 配置為索引器,并將 logstash 的日志數(shù)據(jù)存儲(chǔ)到 Elasticsearch ,本范例主要是索引本地系統(tǒng)日志。
<pre># cat /usr/local/logstash-2.2.2/bin/logstash_indexer.conf
input {
file {
type =>"syslog"
path => ["/var/log/messages", "/var/log/syslog" ]
}
syslog {
type =>"syslog"
port =>"5544"
}
}
output {
stdout { codec=> rubydebug }
elasticsearch {hosts => "localhost" }
}
# cd /usr/local/logstash-2.2.2/bin/
# logstash -f logstash_indexer.conf</pre>
使用 echo 命令模擬寫入日志,命令執(zhí)行后看到如圖Fig1.5所示的信息:
<pre># echo " 'date' Jay" >> /var/log/messages</pre>
刷新 kibana ,發(fā)現(xiàn)最新的測(cè)試數(shù)據(jù)顯示到瀏覽器中,如圖Fig1.6所示:

Fig 1.6 刷新kibana.png

到此, ELK 平臺(tái)部署和基本的測(cè)試已完成。

---(to be continued)

說明
1.本文搭建平臺(tái)為OSX10.10.6;
2.elasticsearch,需要新建普通用戶單獨(dú)執(zhí)行,不要用root執(zhí)行;
3.在logstash-2.2.2中配置elasticsearch output時(shí),host參數(shù)改為hosts參數(shù)。具體可使用--configtest 檢測(cè)配置文件是否兼容舊版的參數(shù)配置;
4.本文所有軟件配置均為官方最新版本,版本號(hào)對(duì)應(yīng)文件名;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容