日志時時刻刻記錄著操作系統(tǒng)、應(yīng)用服務(wù)、業(yè)務(wù)邏輯等情景下不斷產(chǎn)生的數(shù)據(jù),根據(jù)不完全統(tǒng)計,全球每天大約要產(chǎn)生 2 EB 日志數(shù)據(jù),面對如此海量的數(shù)據(jù),在需要查找一些重要的信息時,一套集中式日志管理系統(tǒng)顯得尤為重要。
日志管理相關(guān)的工具、產(chǎn)品和服務(wù)有很多:Rsyslog、Syslog-ng、商業(yè)化的 Splunk、FaceBook 的 Scribe,Apache 的 Chukwa,Linkedin 的 Kafak,Cloudera 的 Fluentd,Elastic 的 ELK 等等。
其中,開源的 ELK 架構(gòu)在最近兩年迅速崛起,成為機器數(shù)據(jù)分析、實時日志處理領(lǐng)域,開源界的第一選擇。簡單來說,ELK 是 Elasticsearch、 Logstash 和 Kibana 這三個軟件集合的簡稱:
- Elasticsearch 是一個實時分布式搜索和分析引擎
- Logstash 為用戶提供數(shù)據(jù)采集、轉(zhuǎn)換、優(yōu)化和輸出的能力
- Kibana 則為 Elasticsearch 提供了強大的可視化界面
此次 QingCloud 推出的 ELK 服務(wù),將原有三大獨立的應(yīng)用組件整合到一個服務(wù)中,并通過 AppCenter 以云應(yīng)用的形式交付給用戶使用,使得組件相互之間可以自動感知和配置,支持一鍵部署、節(jié)點橫向和縱向擴容,極大地減輕了組件的獨立搭建和手動配置的繁雜工作。
ELK on QingCloud 帶來了哪些特性呢?
ELK on QingCloud 功能概覽
- ELK 版本全新升級至 5.0,其中 Elasticsearch、Kibana 版本為 5.5.1,Logstash 版本為 5.4.3,同時也支持新版本的一鍵升級;
- Elasticsearch 中文分詞功能全面增強,集成了 IK Analysis 中文分詞插件,并為該插件集成了結(jié)巴分詞的詞庫和 IK 自帶的搜狗詞庫,同時還支持用戶上傳自定義詞典;
- 與 QingStor 對象存儲深度集成:可對 Elasticsearch 集群進行備份,生成集群快照至 QingStor 對象存儲并可從備份的快照中恢復(fù)數(shù)據(jù);Logstash 提供 QingStor input/output 插件;
- 新增 ElasticHD 可視化插件,方便用戶通過瀏覽器使用 Elasticsearch 進行數(shù)據(jù)搜索和分析;
- 一鍵實現(xiàn)集群的安裝部署,支持節(jié)點橫向和縱向擴容,支持集群關(guān)鍵指標(biāo)監(jiān)控。
伴隨如此多的功能特性,ELK 服務(wù)應(yīng)用在哪些場景下呢?
日志收集、存儲、檢索及分析
ELK on QingCloud 可以通過 Logstash input 插件,從多種數(shù)據(jù)源獲取日志數(shù)據(jù)(文件、log4j、syslog、QingStor 對象存儲、Kafka、Elasticsearch 等)并保存到 Elasticsearch 中。
Logstash 節(jié)點默認(rèn)配置了http input 插件,下面將以此插件為例(用戶可以選擇其他多種 input 插件),以 HTTP 的方式輸入數(shù)據(jù)進行測試,步驟如下:
首先,在集群詳情頁面找到任意 Logstash 節(jié)點的 IP 地址,執(zhí)行如下命令:
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 默認(rèn)會將輸入數(shù)據(jù)發(fā)送至 Elasticsearch。
接下來就可以在 Kibana 中查到由 Logstash 輸入到 Elasticsearch 中的日志數(shù)據(jù)了:
在瀏覽器中訪問 Kibana 節(jié)點提供的 Web 界面 ( http://:5601 ),默認(rèn)進入配置索引模式界面,如圖,直接點擊 Create 即可。
點擊左側(cè)的 Discover 菜單項,顯示近期接收到的日志,在搜索欄中輸入“error”,點擊右側(cè)的“搜索”按鈕。如圖,“error” 被高亮顯示,測試成功。
IK Analysis 插件中文分詞 & 上傳自定義詞典
假設(shè)這樣一個情境,用戶想通過 Elasticsearch 檢索日志中「優(yōu)帆科技」關(guān)鍵詞,在未設(shè)置詞典的情況下,會搜索出所有包含:「優(yōu)」「帆」「科技」等詞的日志,使搜索效果大打折扣,但若上傳并配置好自定義詞典,便可以精確地搜索出包含「優(yōu)帆科技」這個關(guān)鍵字的日志內(nèi)容。
為了在 Elasticsearch 中獲取更好的中文分詞效果,ELK on QingCloud 集成了 IK Analysis 中文分詞插件,并為該插件提供了結(jié)巴分詞的詞庫和 IK 自帶的搜狗詞庫,同時還支持用戶上傳自定義詞典。IK Analysis 插件用法請參考 IK Analysis plugin(https://github.com/medcl/elasticsearch-analysis-ik)
上傳用戶自定義詞典步驟如下:
首先,在集群詳情頁面找到任意 Logstash 節(jié)點的 IP 地址。
其次,通過 curl -T <字典文件> http:///dicts/ 命令上傳用戶自定義字典。上傳成功后可通過訪問 http:///dicts/ 來查看字典文件。
最后,在集群詳情頁面中切換到配置參數(shù)標(biāo)簽頁,選擇"Elasticsearch 節(jié)點"進行參數(shù)配置,設(shè)置 remote_ext_dict 設(shè)置項為用戶自定義字典的可訪問 url (如示例中為http://192.168.0.13/dicts/mydict.dic) 后保存, 然后在集群列表頁面重啟集群中的 Elasticsearch 節(jié)點。
注:請在配置保存之后,在集群列表頁面手動重啟集群中的 Elasticsearch 節(jié)點。
ELK 服務(wù)深度集成 QingStor 對象存儲
Elasticsearch 與 QingStor 對象存儲集成
Elasticsearch 通過與對象存儲進行集成,可以實現(xiàn)集群數(shù)據(jù)備份和跨區(qū)的數(shù)據(jù)遷移。
青云提供的 Elasticsearch 服務(wù)可以生成集群快照進而將快照備份到到 QingStor 中,并可以在必要時從中恢復(fù)。同時,存儲在快照中的信息不是和某個具體的集群或集群名字綁定的,因此可以把在一個集群中生成的快照恢復(fù)到另一個集群中去,比如把在 pek3a 中 ES 集群生成的快照恢復(fù)到 sh1a 的 ES 集群中區(qū)。
隨著 Elasticsearch 中數(shù)據(jù)不斷增多,集群的存儲成本也隨之上升。Logstash與對象存儲集成后,不僅可以將 QingStor 對象存儲中的數(shù)據(jù)快速傳輸至 Elasticsearch 進行分析;
還可將 Elasticsearch 中的數(shù)據(jù)或 Logstash 采集的數(shù)據(jù)導(dǎo)入并長期保存在 QingStor 對象存儲中,通過定期刪除現(xiàn)有集群中的冷數(shù)據(jù),從而極大地降低使用 ELK 的存儲成本。
Logstash-input/output-qingstor 插件使用方式
Logstash 集成了青云對象存儲 QingStor 的 logstash input/ouput插件用戶可以很方便地:
從 QingStor 對象存儲通過 Logstash-input-qingstor 插件將 QingStor 中的數(shù)據(jù)輸入到 Elasticsearch 中;
通過 Logstash-output-qingstor 插件,將各種來源的輸入數(shù)據(jù),除了輸出到 Elasticsearch 集群中外,還可以將數(shù)據(jù)保存至 QingStor 對象存儲永久保存。
告別繁瑣的集群配置,一鍵部署 ELK
作為青云首款集成多個產(chǎn)品的端到端解決方案,ELK 服務(wù)目前已經(jīng)在青云QingCloud AppCenter 應(yīng)用中心上線,感興趣的用戶可以通過 AppCenter 一鍵部署 ELK 服務(wù)。
第 1 步:基本設(shè)置
填寫服務(wù)名稱和描述,選擇版本。
第 2 步:Elasticsearch 節(jié)點設(shè)置
填寫 Elasticsearch 節(jié)點 CPU、內(nèi)存、節(jié)點數(shù)量、主機類型及數(shù)據(jù)盤大小等配置信息。
第 3 步:Kibana 節(jié)點設(shè)置
填寫 Kibana 節(jié)點 CPU、內(nèi)存、節(jié)點數(shù)量及主機類型等配置信息。
第 4 步:Logstash 節(jié)點設(shè)置
填寫 Logstash 節(jié)點 CPU、內(nèi)存、節(jié)點數(shù)量、主機類型及數(shù)據(jù)盤大小等配置信息。
第 5 步:網(wǎng)絡(luò)設(shè)置
出于安全考慮,所有的集群都需要部署在私有網(wǎng)絡(luò)中,請選擇自己創(chuàng)建的已連接路由器的私有網(wǎng)絡(luò)
第 6 步:服務(wù)環(huán)境參數(shù)設(shè)置
創(chuàng)建成功后,點擊集群列表頁面相應(yīng)集群可查看集群詳情?梢钥吹郊悍譃 Elasticsearch 節(jié)點、Kibana 節(jié)點和 Logstash 節(jié)點三種角色。
注:Kibana 節(jié)點和 Logstash 節(jié)點為可選,用戶可以創(chuàng)建僅包含 Elasticsearch 節(jié)點的集群。如果想要使用 Kibana、Head 或者 ElasticHD,則需要創(chuàng)建 Kibana節(jié)點;如需要使用 Logstash、上傳自定義詞典或者查看 Elasticsearch 集群各節(jié)點的 log,則需要創(chuàng)建 Logstash 節(jié)點。