日志時(shí)時(shí)刻刻記錄著(zhù)操作系統、應用服務(wù)、業(yè)務(wù)邏輯等情景下不斷產(chǎn)生的數據,根據不完全統計,全球每天大約要產(chǎn)生 2 EB 日志數據,面對如此海量的數據,在需要查找一些重要的信息時(shí),一套集中式日志管理系統顯得尤為重要。
日志管理相關(guān)的工具、產(chǎn)品和服務(wù)有很多:Rsyslog、Syslog-ng、商業(yè)化的 Splunk、FaceBook 的 Scribe,Apache 的 Chukwa,Linkedin 的 Kafak,Cloudera 的 Fluentd,Elastic 的 ELK 等等。
其中,開(kāi)源的 ELK 架構在最近兩年迅速崛起,成為機器數據分析、實(shí)時(shí)日志處理領(lǐng)域,開(kāi)源界的第一選擇。簡(jiǎn)單來(lái)說(shuō),ELK 是 Elasticsearch、 Logstash 和 Kibana 這三個(gè)軟件集合的簡(jiǎn)稱(chēng):
- Elasticsearch 是一個(gè)實(shí)時(shí)分布式搜索和分析引擎
- Logstash 為用戶(hù)提供數據采集、轉換、優(yōu)化和輸出的能力
- Kibana 則為 Elasticsearch 提供了強大的可視化界面

此次 QingCloud 推出的 ELK 服務(wù),將原有三大獨立的應用組件整合到一個(gè)服務(wù)中,并通過(guò) AppCenter 以云應用的形式交付給用戶(hù)使用,使得組件相互之間可以自動(dòng)感知和配置,支持一鍵部署、節點(diǎn)橫向和縱向擴容,極大地減輕了組件的獨立搭建和手動(dòng)配置的繁雜工作。
ELK on QingCloud 帶來(lái)了哪些特性呢?
ELK on QingCloud 功能概覽
- ELK 版本全新升級至 5.0,其中 Elasticsearch、Kibana 版本為 5.5.1,Logstash 版本為 5.4.3,同時(shí)也支持新版本的一鍵升級;
- Elasticsearch 中文分詞功能全面增強,集成了 IK Analysis 中文分詞插件,并為該插件集成了結巴分詞的詞庫和 IK 自帶的搜狗詞庫,同時(shí)還支持用戶(hù)上傳自定義詞典;
- 與 QingStor 對象存儲深度集成:可對 Elasticsearch 集群進(jìn)行備份,生成集群快照至 QingStor 對象存儲并可從備份的快照中恢復數據;Logstash 提供 QingStor input/output 插件;
- 新增 ElasticHD 可視化插件,方便用戶(hù)通過(guò)瀏覽器使用 Elasticsearch 進(jìn)行數據搜索和分析;
- 一鍵實(shí)現集群的安裝部署,支持節點(diǎn)橫向和縱向擴容,支持集群關(guān)鍵指標監控。
伴隨如此多的功能特性,ELK 服務(wù)應用在哪些場(chǎng)景下呢?
日志收集、存儲、檢索及分析
ELK on QingCloud 可以通過(guò) Logstash input 插件,從多種數據源獲取日志數據(文件、log4j、syslog、QingStor 對象存儲、Kafka、Elasticsearch 等)并保存到 Elasticsearch 中。
Logstash 節點(diǎn)默認配置了http input 插件,下面將以此插件為例(用戶(hù)可以選擇其他多種 input 插件),以 HTTP 的方式輸入數據進(jìn)行測試,步驟如下:
首先,在集群詳情頁(yè)面找到任意 Logstash 節點(diǎn)的 IP 地址,執行如下命令:
curl -d "[09-07 15:57:26]: call_es_api [:10105/_cluster/health] Exception [error: [Errno -5] No address associated with hostname], try to sleep 10 second."http://:9700
將一條模擬日志發(fā)往 Logstash,Logstash 默認會(huì )將輸入數據發(fā)送至 Elasticsearch。
接下來(lái)就可以在 Kibana 中查到由 Logstash 輸入到 Elasticsearch 中的日志數據了:
在瀏覽器中訪(fǎng)問(wèn) Kibana 節點(diǎn)提供的 Web 界面 ( http://:5601 ),默認進(jìn)入配置索引模式界面,如圖,直接點(diǎn)擊 Create 即可。

點(diǎn)擊左側的 Discover 菜單項,顯示近期接收到的日志,在搜索欄中輸入“error”,點(diǎn)擊右側的“搜索”按鈕。如圖,“error” 被高亮顯示,測試成功。

IK Analysis 插件中文分詞 & 上傳自定義詞典
假設這樣一個(gè)情境,用戶(hù)想通過(guò) Elasticsearch 檢索日志中「優(yōu)帆科技」關(guān)鍵詞,在未設置詞典的情況下,會(huì )搜索出所有包含:「優(yōu)」「帆」「科技」等詞的日志,使搜索效果大打折扣,但若上傳并配置好自定義詞典,便可以精確地搜索出包含「優(yōu)帆科技」這個(gè)關(guān)鍵字的日志內容。
為了在 Elasticsearch 中獲取更好的中文分詞效果,ELK on QingCloud 集成了 IK Analysis 中文分詞插件,并為該插件提供了結巴分詞的詞庫和 IK 自帶的搜狗詞庫,同時(shí)還支持用戶(hù)上傳自定義詞典。IK Analysis 插件用法請參考 IK Analysis plugin(https://github.com/medcl/elasticsearch-analysis-ik)
上傳用戶(hù)自定義詞典步驟如下:
首先,在集群詳情頁(yè)面找到任意 Logstash 節點(diǎn)的 IP 地址。
其次,通過(guò) curl -T <字典文件> http:///dicts/ 命令上傳用戶(hù)自定義字典。上傳成功后可通過(guò)訪(fǎng)問(wèn) http:///dicts/ 來(lái)查看字典文件。

最后,在集群詳情頁(yè)面中切換到配置參數標簽頁(yè),選擇"Elasticsearch 節點(diǎn)"進(jìn)行參數配置,設置 remote_ext_dict 設置項為用戶(hù)自定義字典的可訪(fǎng)問(wèn) url (如示例中為http://192.168.0.13/dicts/mydict.dic) 后保存, 然后在集群列表頁(yè)面重啟集群中的 Elasticsearch 節點(diǎn)。
注:請在配置保存之后,在集群列表頁(yè)面手動(dòng)重啟集群中的 Elasticsearch 節點(diǎn)。
ELK 服務(wù)深度集成 QingStor 對象存儲
Elasticsearch 與 QingStor 對象存儲集成
Elasticsearch 通過(guò)與對象存儲進(jìn)行集成,可以實(shí)現集群數據備份和跨區的數據遷移。
青云提供的 Elasticsearch 服務(wù)可以生成集群快照進(jìn)而將快照備份到到 QingStor 中,并可以在必要時(shí)從中恢復。同時(shí),存儲在快照中的信息不是和某個(gè)具體的集群或集群名字綁定的,因此可以把在一個(gè)集群中生成的快照恢復到另一個(gè)集群中去,比如把在 pek3a 中 ES 集群生成的快照恢復到 sh1a 的 ES 集群中區。
隨著(zhù) Elasticsearch 中數據不斷增多,集群的存儲成本也隨之上升。Logstash與對象存儲集成后,不僅可以將 QingStor 對象存儲中的數據快速傳輸至 Elasticsearch 進(jìn)行分析;
還可將 Elasticsearch 中的數據或 Logstash 采集的數據導入并長(cháng)期保存在 QingStor 對象存儲中,通過(guò)定期刪除現有集群中的冷數據,從而極大地降低使用 ELK 的存儲成本。
Logstash-input/output-qingstor 插件使用方式
Logstash 集成了青云對象存儲 QingStor 的 logstash input/ouput插件用戶(hù)可以很方便地:
從 QingStor 對象存儲通過(guò) Logstash-input-qingstor 插件將 QingStor 中的數據輸入到 Elasticsearch 中;
通過(guò) Logstash-output-qingstor 插件,將各種來(lái)源的輸入數據,除了輸出到 Elasticsearch 集群中外,還可以將數據保存至 QingStor 對象存儲永久保存。
告別繁瑣的集群配置,一鍵部署 ELK
作為青云首款集成多個(gè)產(chǎn)品的端到端解決方案,ELK 服務(wù)目前已經(jīng)在青云QingCloud AppCenter 應用中心上線(xiàn),感興趣的用戶(hù)可以通過(guò) AppCenter 一鍵部署 ELK 服務(wù)。
第 1 步:基本設置

第 2 步:Elasticsearch 節點(diǎn)設置

填寫(xiě) Elasticsearch 節點(diǎn) CPU、內存、節點(diǎn)數量、主機類(lèi)型及數據盤(pán)大小等配置信息。
第 3 步:Kibana 節點(diǎn)設置

填寫(xiě) Kibana 節點(diǎn) CPU、內存、節點(diǎn)數量及主機類(lèi)型等配置信息。
第 4 步:Logstash 節點(diǎn)設置

填寫(xiě) Logstash 節點(diǎn) CPU、內存、節點(diǎn)數量、主機類(lèi)型及數據盤(pán)大小等配置信息。
第 5 步:網(wǎng)絡(luò )設置

出于安全考慮,所有的集群都需要部署在私有網(wǎng)絡(luò )中,請選擇自己創(chuàng )建的已連接路由器的私有網(wǎng)絡(luò )
第 6 步:服務(wù)環(huán)境參數設置

創(chuàng )建成功后,點(diǎn)擊集群列表頁(yè)面相應集群可查看集群詳情。可以看到集群分為 Elasticsearch 節點(diǎn)、Kibana 節點(diǎn)和 Logstash 節點(diǎn)三種角色。
注:Kibana 節點(diǎn)和 Logstash 節點(diǎn)為可選,用戶(hù)可以創(chuàng )建僅包含 Elasticsearch 節點(diǎn)的集群。如果想要使用 Kibana、Head 或者 ElasticHD,則需要創(chuàng )建 Kibana節點(diǎn);如需要使用 Logstash、上傳自定義詞典或者查看 Elasticsearch 集群各節點(diǎn)的 log,則需要創(chuàng )建 Logstash 節點(diǎn)。