91精品国产综合久久四虎久久_国产成人午夜高潮毛片_99er视频精品免费观看_2020亚洲熟女在线观看_日本女优人体写真_国内黄色毛片_年轻的老师中文版在线_丰满女邻居做爰_久久久久久精品成人免费图片

Elasticsearch 5.0和ELK/Elastic Stack指南
學(xué)習(xí)如何發(fā)送、解析、存儲(chǔ)和分析日志
編者注:更多內(nèi)容可以參考Strata北京2017的相關(guān)議題

這篇文章是一步一步的使用指南,介紹了如何結(jié)合使用Elasticsearch和其他ELK技術(shù)棧(現(xiàn)在叫Elastic Stack)來發(fā)送、解析、存儲(chǔ)和分析日志。在這個(gè)指南里我會(huì)使用:

  • Filebeat:用于收集日志(注意:日志里包括的信息還可能有指標(biāo)、SQL事務(wù)記錄和其他的Beat能收集的信息源)。
  • Logstash:用于處理日志和指標(biāo),并把他們轉(zhuǎn)變成結(jié)構(gòu)化的事件,以便于Elasticsearch進(jìn)行索引處理。
  • Kibana:用于對存儲(chǔ)在Elasticsearch里的結(jié)構(gòu)化數(shù)據(jù)做可視化展現(xiàn)。

在這里,我會(huì)使用Apache的訪問日志作為例子。但你從這篇文章里所獲得的知識(shí)可以讓你運(yùn)用于其他類型的日志。文章最后我們會(huì)看看對這樣的系統(tǒng)擴(kuò)展到生產(chǎn)級別所面臨的挑戰(zhàn),無論是你自己干還是使用第三方提供的ELK/Elastic Stack。

安裝和配置Elasticsearch、KibanaFilebeat。

Elasticsearch

Elasticsearch是一個(gè)Java應(yīng)用,所以你需要安裝最新版的JDK(Oracle的或是Ubuntu 16.04上的OpenJDK)。在Ubuntu 16.04版里,你可以用下面的命令安裝OpenJDK 8。

sudo apt-get install openjdk-8-jdk

如果你用的是RPM/DEB的Linux,我推薦下面這個(gè)官方包。文章里會(huì)用APT資源庫來獲得5.x版本。

wget -qO – https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –

echo “deb https://artifacts.elastic.co/packages/5.x/apt stable main” | sudo tee -a /etc/apt/sources.list.d/elasticsearch-5.x.list

sudo apt-get update && sudo apt-get install elasticsearch

在啟動(dòng)Elasticsearch(命令是sudo service elasticsearch start)前,你需要決定給它分配多少內(nèi)存。這可以通過修改/etc/elasticsearch/jvm.options文件里面的-Xms和-Xmx值來確定。經(jīng)驗(yàn)法則是一開始使用服務(wù)器總內(nèi)存的一半來配置這兩個(gè)值,這樣剩下的一半內(nèi)存可以被操作系統(tǒng)用于緩存。以后可以通過監(jiān)控Elasticsearch的heap使用情況以及根據(jù)IO吞吐量的需求再調(diào)整這兩個(gè)值。

Kibana

Kibana可以通過使用Elasticsearch同一個(gè)APT資源庫來獲取并安裝。

sudo apt-get install kibana

sudo service kibana start

Filebeat

同樣,我們還是使用同一個(gè)APT資源庫來安裝Filebeat。

sudo apt-get install filebeat

默認(rèn)地Filebeat 5.0會(huì)向Elasticsearch推送一個(gè)模版。對于大多數(shù)的應(yīng)用場景,這個(gè)模版都可以配置與filebeat*模式相匹配的索引。例如,大部分的字符串都會(huì)被作為關(guān)鍵字索引起來,從而能很好地為分析(Kibana的可視化)所用。message字段會(huì)作為文本被索引,從而能被用來做全文本搜索(Kibana的Discover分頁)。對應(yīng)于Apache的日志文件,你需要通過配置filebeat.prospectors(里面的第一個(gè)prospector定義為:input_type: log)里面的paths(路徑)變量來把Filebeat指向它們。你需要用如下方式來定義這個(gè)路徑:

paths:

– /var/log/apache.log

然后啟動(dòng)Filebeat。你的日志應(yīng)該開始被導(dǎo)入了:

sudo service filebeat start

Kibana里對日志進(jìn)行可視化展現(xiàn)

到這里,你可以在瀏覽器里打開Kibana(默認(rèn)端口是5601)來查看Elasticsearch里的日志了。首先你需要通過定義一個(gè)“索引模式”來指示被搜索的索引。把它設(shè)成filebeat-*:

filebeat_index_pattern-v3-9faad974297684d4c1cded93ba5cc6d8

圖1 圖片由Radu Gheorghe友情授權(quán)使用

接著你可以去Discover面板并搜索日志。例如,你采用與grep類似的方式搜索日志的內(nèi)容,但也會(huì)有一樣的缺陷。比如,如果你搜索“200”,你就無法確定是“200 OK”響應(yīng)還是“200 bytes”被傳送。

200_search-975ef4e3ec43a7c9e7b101e5ed770f0a

圖2 圖片由Radu Gheorghe友情授權(quán)使用

需要可視化時(shí),你可以進(jìn)入Visualize分頁并按主機(jī)名區(qū)分顯示。但是同樣的,你也無法使用message字段里的信息,因?yàn)樗锩娴牟煌牟糠郑ū热珥憫?yīng)編碼)還沒有被解析為它們自己的字段:

hostname_breakdown-307fcacaae8a18288ffe19c5ee9f4f25

圖3 圖片由Radu Gheorghe友情授權(quán)使用

使用Logstash解析數(shù)據(jù)

為了能全面地探索你的日志數(shù)據(jù),你需要一個(gè)能解析它們的工具。Logstash就是這樣一個(gè)工具。在Elasticsearch 5.0版里,你可以使用一個(gè)Elasticsearch的“消化節(jié)點(diǎn)”來進(jìn)行這一處理,它能帶來性能的顯著提升。但是消化管道并不能為Logstash提供靈活性(例如條件)。所以在這個(gè)文章里我們會(huì)只會(huì)關(guān)注Logstash。

為了構(gòu)建Filebeat -> Logstash -> Elasticsearch -> Kibana的管道,你需要安裝和配置Logstash,并更新Filebeat的配置選項(xiàng)來讓它從原來指向Elasticsearch改為指向Logstash。讓我們一步一步地完成這個(gè)過程:

首先用相同的資源庫來安裝Lostash:

sudo apt-get install logstash

隨后在/etc/logstash/conf.d/文件夾里創(chuàng)建一個(gè)文件(比如說logstash.conf)。在這個(gè)文件里設(shè)置一個(gè)beats input讓Filebeat來連接。接著你可以使用grok filter來解析你的數(shù)據(jù),然后再發(fā)送給Elasticsearch。

input {

beats {

port => 5044

}

}

filter {

grok {

match => [ “message”, “%{COMMONAPACHELOG}” ]

}

}

output {

elasticsearch {

hosts => “localhost:9200”

}

}

在Filebeat里,你需要注釋掉整個(gè)output.elasticsearch小節(jié),并把output.logstash下面的hosts配置修改為Logstash的地址:

### Logstash as output

logstash:

# The Logstash hosts

hosts: [“localhost:5044”]

為了能讓Filebeat通過Logstash來重發(fā)日志數(shù)據(jù),你需要做以下幾個(gè)動(dòng)作:

  • 先停掉Filebeat(sudo service filebeat stop)。
  • 刪除注冊文件。Filebeat在這個(gè)文件里記錄了它原來指向的Apache日志。這個(gè)動(dòng)作讓Filebeat完全重啟:sudo rm /var/lib/filebeat/registry
  • 刪除Elasticsearch里面已經(jīng)索引的數(shù)據(jù):curl -XDELETE localhost:9200/filebeat*
  • 最后啟動(dòng)Logstash和Filebeat:sudo service logstash start; sudo service filebeat start

現(xiàn)在你的日志應(yīng)該已經(jīng)被Elasticsearch再次索引了。只是這次它們是結(jié)構(gòu)化的,并且默認(rèn)是存在索引logstash-*下面。Logstash使用了一個(gè)與Filebeat類似的模版,所以目前你還不用操心它的配置。

再去看一下Kibana。你需要在Settings分頁下新建一個(gè)索引模式,并配置logstash-*指向索引。你可能也想把這個(gè)模式設(shè)為默認(rèn)的。

logstash_index_pattern-v2-c2a46828a08b99e7fe00e0a9c50e6a6c

圖4 圖片由Radu Gheorghe友情授權(quán)使用

因?yàn)楝F(xiàn)在Apache的日志已經(jīng)是結(jié)構(gòu)化的了,所以你可以搜索指定的字段。比如這個(gè)response字段:

response_code_search-0ec209933bfbeecd3a0d76b66a0723c4

圖5 圖片由Radu Gheorghe友情授權(quán)使用

你也可以構(gòu)建可視化圖來查看不同類型的響應(yīng)時(shí)間隨時(shí)間變化的情況:

response_code_breakdown-v2-c3a32bb6ab2aef88ba43d21d476d4f50

圖6 圖片由Radu Gheorghe友情授權(quán)使用

從概念驗(yàn)證到生產(chǎn)系統(tǒng)

如你所見,Elastic Stack的入門是相當(dāng)?shù)煤唵蚊髁?。不過想把它用于生產(chǎn)環(huán)境的數(shù)據(jù)則需要做更多的工作。

在數(shù)據(jù)收集側(cè),Logstash可能會(huì)成為瓶頸,除非你能把它擴(kuò)展部署到很多節(jié)點(diǎn),或是單機(jī)多節(jié)點(diǎn)。還有其他的備選方案。比如你可以使用rsyslog。它也很快還是輕量級的。你可以很容易地把它裝在每個(gè)Web服務(wù)器上,讓它完成解析和直接發(fā)送數(shù)據(jù)到Elasticsearch的任務(wù)。不過,不同的發(fā)送者用不同的特征集合。在我們這個(gè)場景里,rsyslog允許配置rulesets來使用不同的通道發(fā)送消息,但GeoIP默認(rèn)是不支持這個(gè)功能的。

在Elasticsearch一側(cè),為了實(shí)現(xiàn)容錯(cuò)以及處理更多的日志,你需要為集群加入更多的節(jié)點(diǎn)。你需要在elasticsearch.yml里做一些修改來實(shí)現(xiàn)這個(gè)目標(biāo)。

實(shí)現(xiàn)容錯(cuò)

首先定義discovery.zen.ping.unicast.hosts,這樣節(jié)點(diǎn)間才能相互知道其他的節(jié)點(diǎn)的存在,從而形成一個(gè)集群。生產(chǎn)環(huán)境至少需要3個(gè)節(jié)點(diǎn)。這樣即使一個(gè)節(jié)點(diǎn)掛了,其他的節(jié)點(diǎn)還是能形成一個(gè)仲裁組。想定義仲裁組的大小,可以設(shè)置discovery.zen.minimum_master_nodes為NUMBER_OF_NODES/2+1。最后,你可以通過設(shè)置network.host來讓Elasticsearch監(jiān)聽外部接口(而不是監(jiān)聽默認(rèn)的localhost地址)。這樣就能讓Filebeat、Logstash、Elasticsearch、Kibana和你的瀏覽器運(yùn)行在不同的機(jī)器上。

對于包括更多節(jié)點(diǎn)的集群的配置或是對已有集群的調(diào)優(yōu)則會(huì)要求你對Elasticsearch的工作方式有更深的理解。O’Reilly的培訓(xùn)視頻《使用Elasticsearch》只有3個(gè)小時(shí)長,但會(huì)提供給你所有需要知道的關(guān)于如何配置和管理Elasticsearch的足夠信息。視頻內(nèi)容針對日志和其他的應(yīng)用場景,例如社交媒體分析和內(nèi)容搜索等。

自建還是購買

自建Elastic Stack可以讓你對Elasticsearch有更多的掌控,包括何時(shí)升級、安裝什么插件以及如何與其他的在用的技術(shù)(如數(shù)據(jù)庫、數(shù)據(jù)處理工具等)相集成。缺點(diǎn)則是要花很多時(shí)間、精力和投資來進(jìn)行日常維護(hù)、升級、調(diào)優(yōu),以及在基礎(chǔ)的ELK/Elastic Stack上開發(fā)各種各樣你需要的特性。如果自建對你來說不是那么有吸引力,你還是有一些其他的選擇。

一種選擇是使用云端的日志管理服務(wù)。這能讓你很快就上生產(chǎn),節(jié)省你在配置和維護(hù)Elasticsearch上的時(shí)間和投入。這些服務(wù)一般包括監(jiān)控、備份和升級等。

如果你想自建Elastic Stack,同時(shí)還想降低啟動(dòng)的時(shí)間,那就有很多的選擇可供考慮。比如這個(gè)O’Reilly的視頻課程Elasticsearch培訓(xùn)ELK/Elastic Stack咨詢服務(wù)等。

Radu Gheorghe

Radu Gheorghe是Sematext公司的搜索咨詢師和軟件工程師。作為咨詢師,他與客戶一起基于Elasticsearch或Solr開發(fā)搜索、分析和日志的解決方案。他也是支持團(tuán)隊(duì)的一員,幫助解決這些解決方案的生產(chǎn)系統(tǒng)里的問題。作為軟件工程師,他主要貢獻(xiàn)于Logsene、Sematext的日志SaaS。Radu是《使用Elasticsearch》視頻教程的作者,同時(shí)也是《Elasticsearch in Action》的作者之一。

Container ship ZIM, New York, Miraflores Locks, Panama Canal. (source: Patrick Denker on Wikimedia Commons).