當(dāng)前位置:首頁 > 芯聞號 > 充電吧
[導(dǎo)讀]ELK Stack 簡介ELK 不是一款軟件,而是 Elasticsearch、Logstash 和 Kibana 三種軟件產(chǎn)品的首字母縮寫。這三者都是開源軟件,通常配合使用,而且又先后歸于 Elas


ELK Stack 簡介


ELK 不是一款軟件,而是 Elasticsearch、Logstash 和 Kibana 三種軟件產(chǎn)品的首字母縮寫。這三者都是開源軟件,通常配合使用,而且又先后歸于 Elastic.co 公司名下,所以被簡稱為 ELK Stack。根據(jù) Google Trend 的信息顯示,ELK Stack 已經(jīng)成為目前最流行的集中式日志解決方案。

Elasticsearch:分布式搜索和分析引擎,具有高可伸縮、高可靠和易管理等特點(diǎn)?;?Apache Lucene 構(gòu)建,能對大容量的數(shù)據(jù)進(jìn)行接近實(shí)時(shí)的存儲、搜索和分析操作。通常被用作某些應(yīng)用的基礎(chǔ)搜索引擎,使其具有復(fù)雜的搜索功能;Logstash:數(shù)據(jù)收集引擎。它支持動態(tài)的從各種數(shù)據(jù)源搜集數(shù)據(jù),并對數(shù)據(jù)進(jìn)行過濾、分析、豐富、統(tǒng)一格式等操作,然后存儲到用戶指定的位置;Kibana:數(shù)據(jù)分析和可視化平臺。通常與 Elasticsearch 配合使用,對其中數(shù)據(jù)進(jìn)行搜索、分析和以統(tǒng)計(jì)圖表的方式展示;Filebeat:ELK 協(xié)議棧的新成員,一個(gè)輕量級開源日志文件數(shù)據(jù)搜集器,基于 Logstash-Forwarder 源代碼開發(fā),是對它的替代。在需要采集日志數(shù)據(jù)的 server 上安裝 Filebeat,并指定日志目錄或日志文件后,F(xiàn)ilebeat?
就能讀取數(shù)據(jù),迅速發(fā)送到 Logstash 進(jìn)行解析,亦或直接發(fā)送到 Elasticsearch 進(jìn)行集中式存儲和分析。

ELK 常用架構(gòu)及使用場景 最簡單架構(gòu)

在這種架構(gòu)中,只有一個(gè) Logstash、Elasticsearch 和 Kibana 實(shí)例。Logstash 通過輸入插件從多種數(shù)據(jù)源(比如日志文件、標(biāo)準(zhǔn)輸入 Stdin 等)獲取數(shù)據(jù),再經(jīng)過濾插件加工數(shù)據(jù),然后經(jīng) Elasticsearch 輸出插件輸出到 Elasticsearch,通過 Kibana 展示。詳見圖 1。?
圖 1. 最簡單架構(gòu)?
?
這種架構(gòu)非常簡單,使用場景也有限。初學(xué)者可以搭建這個(gè)架構(gòu),了解 ELK 如何工作。

Logstash 作為日志搜集器

這種架構(gòu)是對上面架構(gòu)的擴(kuò)展,把一個(gè) Logstash 數(shù)據(jù)搜集節(jié)點(diǎn)擴(kuò)展到多個(gè),分布于多臺機(jī)器,將解析好的數(shù)據(jù)發(fā)送到 Elasticsearch server 進(jìn)行存儲,最后在 Kibana 查詢、生成日志報(bào)表等。詳見圖 2。?
圖 2. Logstash 作為日志搜索器?
?
這種結(jié)構(gòu)因?yàn)樾枰诟鱾€(gè)服務(wù)器上部署 Logstash,而它比較消耗 CPU 和內(nèi)存資源,所以比較適合計(jì)算資源豐富的服務(wù)器,否則容易造成服務(wù)器性能下降,甚至可能導(dǎo)致無法正常工作。

Beats 作為日志搜集器

這種架構(gòu)引入 Beats 作為日志搜集器。目前 Beats 包括四種:

Packetbeat(搜集網(wǎng)絡(luò)流量數(shù)據(jù));Topbeat(搜集系統(tǒng)、進(jìn)程和文件系統(tǒng)級別的 CPU 和內(nèi)存使用情況等數(shù)據(jù));Filebeat(搜集文件數(shù)據(jù));Winlogbeat(搜集 Windows 事件日志數(shù)據(jù))。

Beats 將搜集到的數(shù)據(jù)發(fā)送到 Logstash,經(jīng) Logstash 解析、過濾后,將其發(fā)送到 Elasticsearch 存儲,并由 Kibana 呈現(xiàn)給用戶。詳見圖 3。

圖 3. Beats 作為日志搜集器?

這種架構(gòu)解決了 Logstash 在各服務(wù)器節(jié)點(diǎn)上占用系統(tǒng)資源高的問題。相比 Logstash,Beats 所占系統(tǒng)的 CPU 和內(nèi)存幾乎可以忽略不計(jì)。另外,Beats 和 Logstash 之間支持 SSL/TLS 加密傳輸,客戶端和服務(wù)器雙向認(rèn)證,保證了通信安全。?
因此這種架構(gòu)適合對數(shù)據(jù)安全性要求較高,同時(shí)各服務(wù)器性能比較敏感的場景。

引入消息隊(duì)列機(jī)制的架構(gòu)

這種架構(gòu)使用 Logstash 從各個(gè)數(shù)據(jù)源搜集數(shù)據(jù),然后經(jīng)消息隊(duì)列輸出插件輸出到消息隊(duì)列中。目前 Logstash 支持 Kafka、Redis、RabbitMQ 等常見消息隊(duì)列。然后 Logstash 通過消息隊(duì)列輸入插件從隊(duì)列中獲取數(shù)據(jù),分析過濾后經(jīng)輸出插件發(fā)送到 Elasticsearch,最后通過 Kibana 展示。詳見圖 4。

圖 4. 引入消息隊(duì)列機(jī)制的架構(gòu)?

這種架構(gòu)適合于日志規(guī)模比較龐大的情況。但由于 Logstash 日志解析節(jié)點(diǎn)和 Elasticsearch 的負(fù)荷比較重,可將他們配置為集群模式,以分擔(dān)負(fù)荷。引入消息隊(duì)列,均衡了網(wǎng)絡(luò)傳輸,從而降低了網(wǎng)絡(luò)閉塞,尤其是丟失數(shù)據(jù)的可能性,但依然存在 Logstash 占用系統(tǒng)資源過多的問題。

基于 Filebeat 架構(gòu)的配置部署詳解

前面提到 Filebeat 已經(jīng)完全替代了 Logstash-Forwarder 成為新一代的日志采集器,同時(shí)鑒于它輕量、安全等特點(diǎn),越來越多人開始使用它。這個(gè)章節(jié)將詳細(xì)講解如何部署基于 Filebeat 的 ELK 集中式日志解決方案,具體架構(gòu)見圖 5。

圖 5. 基于 Filebeat 的 ELK 集群架構(gòu)?

因?yàn)槊赓M(fèi)的 ELK 沒有任何安全機(jī)制,所以這里使用了 Nginx 作反向代理,避免用戶直接訪問 Kibana 服務(wù)器。加上配置 Nginx 實(shí)現(xiàn)簡單的用戶認(rèn)證,一定程度上提高安全性。另外,Nginx 本身具有負(fù)載均衡的作用,能夠提高系統(tǒng)訪問性能。

Filebeat安裝 下載地址:https://www.elastic.co/downloads/beats/filebeat編輯filebeat.yml啟動sudo ./filebeat -e -c filebeat.ymlfilebeat input配置介紹


filebeat: ? ?spool_size: 1024 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 最大可以攢夠 1024 條數(shù)據(jù)一起發(fā)送出去 ? ?idle_timeout: "5s" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 否則每 5 秒鐘也得發(fā)送一次 ? ?registry_file: ".filebeat" ? ? ? ? ? ? ? ? ? ? ? ? ?# 文件讀取位置記錄文件,會放在當(dāng)前工作目錄下。所以如果你換一個(gè)工作目錄執(zhí)行 filebeat 會導(dǎo)致重復(fù)傳輸! ? ?config_dir: "path/to/configs/contains/many/yaml" ? ?# 如果配置過長,可以通過目錄加載方式拆分配置 ? ?prospectors: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 有相同配置參數(shù)的可以歸類為一個(gè) prospector ? ? ? ?- ? ? ? ? ? ?fields: ? ? ? ? ? ? ? ?ownfield: "mac" ? ? ? ? ? ? ? ? ? ? ? ? # 類似 logstash 的 add_fields ? ? ? ? ? ?paths: ? ? ? ? ? ? ? ?- /var/log/system.log ? ? ? ? ? ? ? ? ? # 指明讀取文件的位置 ? ? ? ? ? ? ? ?- /var/log/wifi.log ? ? ? ? ? ?include_lines: ["^ERR", "^WARN"] ? ? ? ? ? ?# 只發(fā)送包含這些字樣的日志 ? ? ? ? ? ?exclude_lines: ["^OK"] ? ? ? ? ? ? ? ? ? ? ?# 不發(fā)送包含這些字樣的日志 ? ? ? ?- ? ? ? ? ? ?document_type: "apache" ? ? ? ? ? ? ? ? ? ? # 定義寫入 ES 時(shí)的 _type 值 ? ? ? ? ? ?ignore_older: "24h" ? ? ? ? ? ? ? ? ? ? ? ? # 超過 24 小時(shí)沒更新內(nèi)容的文件不再監(jiān)聽。在 windows 上另外有一個(gè)配置叫 force_close_files,只要文件名一變化立刻關(guān)閉文件句柄,保證文件可以被刪除,缺陷是可能會有日志還沒讀完 ? ? ? ? ? ?scan_frequency: "10s" ? ? ? ? ? ? ? ? ? ? ? # 每 10 秒鐘掃描一次目錄,更新通配符匹配上的文件列表 ? ? ? ? ? ?tail_files: false ? ? ? ? ? ? ? ? ? ? ? ? ? # 是否從文件末尾開始讀取 ? ? ? ? ? ?harvester_buffer_size: 16384 ? ? ? ? ? ? ? ?# 實(shí)際讀取文件時(shí),每次讀取 16384 字節(jié) ? ? ? ? ? ?backoff: "1s" ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 每 1 秒檢測一次文件是否有新的一行內(nèi)容需要讀取 ? ? ? ? ? ?paths: ? ? ? ? ? ? ? ?- "/var/log/apache/*" ? ? ? ? ? ? ? ? ? # 可以使用通配符 ? ? ? ? ? ?exclude_files: ["/var/log/apache/error.log"] ? ? ? ?- ? ? ? ? ? ?input_type: "stdin" ? ? ? ? ? ? ? ? ? ? ? ? # 除了 "log",還有 "stdin" ? ? ? ? ? ?multiline: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?# 多行合并 ? ? ? ? ? ? ? ?pattern: '^[[:space:]]' ? ? ? ? ? ? ? ?negate: false ? ? ? ? ? ? ? ?match: afteroutput: ? ?...Elasticsearch安裝

下載地址:https://www.elastic.co/downloads/elasticsearch

Logstash安裝

下載地址:https://www.elastic.co/downloads/logstash

Kibana安裝

下載地址:https://www.elastic.co/downloads/kibana

Kibana視圖構(gòu)建示例及配置 以收集Nginx訪問日志為例,我們希望能統(tǒng)計(jì)到api接口調(diào)用排行,瀏覽器類型,操作系統(tǒng)類型,http狀態(tài)分布,響應(yīng)時(shí)間分布。雖然logstash可以通過內(nèi)建模板解析Nginx日志字符串,不過直接在Nginx配置中直接json字符串最為方便。 編輯/usr/local/nginx/conf/nginx.conf

在server節(jié)定義json日志格式


log_format json '{"@timestamp_local":"$time_iso8601",' ? ?'"host":"$server_addr",' ? ?'"clientip":"$remote_addr",' ? ?'"size":$body_bytes_sent,' ? ?'"responsetime":$request_time,' ? ?'"upstreamtime":"$upstream_response_time",' ? ?'"upstreamhost":"$upstream_addr",' ? ?'"http_host":"$host",' ? ?'"url":"$uri",' ? ?'"type":"newnginx-api",' ? ?'"request":"$request",' ? ?'"time_local":"$time_local",' ? ?'"xff":"$http_x_forwarded_for",' ? ?'"referer":"$http_referer",' ? ?'"agent":"$http_user_agent",' ? ?'"status":"$status"}';

然后在各網(wǎng)站Nginx配置下指定json模板日志格式


access_log ?/home/wwwlogs/abc.com.log json;

重啟Nginx,日志格式輸出結(jié)果示例如下:


{"@timestamp_local":"2017-02-23T16:16:19+08:00","host":"192.168.56.10","clientip":"192.168.56.1","size":5,"responsetime":0.085,"upstreamtime":"0.085","upstreamhost":"unix:/tmp/php-cgi.sock","http_host":"www.abc.com","url":"/index.php","type":"newnginx-api","request":"GET / HTTP/1.1","time_local":"23/Feb/2017:16:16:19 +0800","xff":"-","referer":"-","agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36","status":"500"}編輯filebeat.yml

增加或更新以下配置


filebeat.registry_file: ".filebeat"filebeat.prospectors:- input_type: log ? ?paths: ? ? ? ?- /home/wwwlogs/abc.com.log ? ?tail_files: true #從文件末尾開始讀取 ? ?document_type: "newnginx-api"output.logstash: ? ?# The Logstash hosts ? ?hosts: ["localhost:5044"]編輯logstash.yml


input { ? ?beats { ? ? ? ?port => 5044 ? ? ? ?codec => "json" ? ?}}filter { ? ?grok { ? ? ? ?match => { ? ? ? ? ? ?"request" => "s+(? ? ? ? ?} ? ?} ? ?grok { ? ? ? ?match => { ? ? ? ? ? ?"agent" => "(? ? ? ? ?} ? ?} ? ?grok { ? ? ? ?match => { ? ? ? ? ? ?"agent" => "(? ? ? ? ?} ? ?} ? ?mutate { ? ? ? ?split => [ "upstreamtime", "," ] ? ?} ? ?mutate { ? ? ? ?convert => [ "upstreamtime", "float" ] ? ?}}output { ? ?stdout { ? ? ? ?codec => rubydebug ? ?} ? ?elasticsearch { ? ? ? ?hosts => ["localhost:9200"] ? ? ? ?index => "%{type}-%{+YYYY.MM.dd}" ? ? ? ?flush_size => 2000 ? ? ? ?idle_flush_time => 10 ? ? ? ?sniffing => false ? ? ? ?template_overwrite => true ? ?}}

logstash filter主要從日志中提取api_path,os,browser三個(gè)字段作為之后排序依據(jù)。

增加Kibana索引index pattern

菜單 -> Management -> Index Patterns -> Add New

我們在filebeat.yml中配置了document_type: "newnginx-api",所以index name pattern寫為newnginx-api-*,*表示所有日期的。見圖:

視圖示例配置 1. 餅圖:HTTP狀態(tài)及響應(yīng)時(shí)間 metrics選擇Count第一個(gè)buckets以Terms為聚合,選擇status字段,order by count,Size填5第二個(gè)bucket以Range為子聚合,選擇responsetime字段,from-to指定響應(yīng)時(shí)間范圍,比如0-0.1,0.1-0.2,0.2-0.5,0.5-1,1-2,2-5,5-10

2. 直方圖:http狀態(tài)時(shí)間軸直方圖 metrics選擇Countbuckets X-Axis選擇timestamp_local,時(shí)間間隔可選擇秒,分,小時(shí)等buckets Split Bars選擇Terms為子聚合,選擇status字段,order by term(相當(dāng)于對status進(jìn)行g(shù)roup分組)

3. 線形圖:所有接口調(diào)用數(shù)時(shí)間曲線圖 metrics選擇Countbuckets X-Axis選擇Data Histogram(時(shí)間片),選擇timestamp_local字段,時(shí)間間隔可選擇秒,分,小時(shí)等。

4. 聚合數(shù)字:接口調(diào)用總數(shù) metric 可視化為你選擇的聚合顯示一個(gè)單獨(dú)的數(shù)字。 5. 直方圖:接口調(diào)用排行榜 metrics選擇Countbuckets X-Axis選擇Terms聚合,選取api_path字段,order by count,size填30(前30調(diào)用最高)buckets Split Bars選擇Terms子聚合,選取api_path字段,order by count

其他視圖配置根據(jù)需要選擇metrics和buckets。

Kibana功能簡要介紹 可視化類型Area chart 用區(qū)塊圖來可視化多個(gè)不同序列的總體貢獻(xiàn)。 Data table 用數(shù)據(jù)表來顯示聚合的原始數(shù)據(jù)。其他可視化可以通過點(diǎn)擊底部的方式顯示數(shù)據(jù)表。 Line chart 用折線圖來比較不同序列。 Markdown widget 用Markdown顯示自定義格式的信息或和你儀表盤有關(guān)的用法說明。 Metric 用指標(biāo)可視化在你儀表盤上顯示單個(gè)數(shù)字。 Pie chart 用餅圖來顯示每個(gè)來源對總體的貢獻(xiàn)。 Tile map 用瓦片地圖將聚合結(jié)果和經(jīng)緯度聯(lián)系起來。 Timeseries 計(jì)算和展示多個(gè)時(shí)間序列數(shù)據(jù)。 Vertical bar chart 用垂直條形圖作為一個(gè)通用圖形。 metrics聚合 <blockquote class="white-blockquote" style="border-left:10px solid rgb(214,219,223);border-top-color:rgb(214,219,223);border-right-color:

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉