如何將數據採集到 Elasticsearch 服務
做者Florian Kelbert
對於數據搜索和分析來講,Elasticsearch 無處不在。開發人員和社區可利用 Elasticsearch 尋找尋找各類各樣的用例,從應用程序搜索和網站搜索,到日誌、基礎架構監測、APM 和 安全分析,不一而足。雖然如今有針對這些用例的免費解決方案,可是開發人員首先須要將其數據提供給 Elasticsearch。html
本文將描述幾種最多見的將數據採集到 Elasticsearch 服務的方法。這多是一個託管在 Elastic Cloud 或其本地方案 Elastic Cloud Enterprise 上的集羣。雖然咱們主要關注於這些服務,但採集到自管型 Elasticsearch 集羣的數據看起來幾乎是相同的。惟一的變化是您處理集羣的方式。node
在咱們深刻探討技術細節以前,提醒一下:若是您在閱讀本文時遇到任何問題,請隨時訪問 discuss.elastic.co。咱們的社區很是活躍,您有望會在那裏找到問題的答案。git
接下來,咱們開始使用如下方法來深刻探討數據採集:github
**web
**正則表達式
Elasticsearch 提供了靈活的 RESTful API,用於與客戶端應用程序通訊。所以,REST 調用被用來採集數據、執行搜索和數據分析,以及管理集羣及其索引。實際上,上述全部方法都依賴於這個 API 將數據採集到 Elasticsearch。docker
在本文後續介紹中,咱們假設您已經建立了 Elasticsearch 服務集羣。若是您尚未建立,請註冊 Elastic Cloud 免費試用。在您建立集羣后,系統將會爲您提供 Elastic 超級用戶賬戶的雲 ID 和密碼。雲 ID 的格式以下:cluster_name:ZXVy...Q2Zg==
。它對您集羣的 URL 進行了編碼,而且咱們將會看到,它可簡化數據採集。數據庫
**緩存
**安全
Elastic Beats 是一組輕量型的數據採集器,能夠方便地將數據發送給 Elasticsearch 服務。因爲是輕量型的,Beats 不會產生太多的運行時開銷,所以,能夠在硬件資源有限的設備(如 IoT 設備、邊緣設備或嵌入式設備)上運行和收集數據。若是您須要收集數據,但沒有資源來運行資源密集型數據收集器,那麼 Beats 會是您最佳的選擇。這種無處不在(涵蓋全部聯網設備)的數據收集方式,讓您可以快速檢測到異常狀況作出反應,例如系統範圍內的問題和安全事件等。
固然,Beats 並不侷限於資源有限的系統,它們還可用於具備更多可用硬件資源的系統。
**
**
Beats 有多種風格,能夠收集不一樣類型的數據:
一旦您決定了在特定場景中要使用哪一個 Beats,入門就像下節所描述的那樣,很是簡單。
**
**
在這部分中,咱們將以 Metricbeat 爲例,學習如何開始使用 Beats。對於其餘 Beats,步驟大同小異。針對您具體的 Beat 和操做系統,請參考本文檔並按照下列步驟進行操做。
sudo metricbeat modules enable docker
啓用 Docker 模塊(若是您使用包管理器安裝)。若是您經過解壓縮 tgz/zip 包安裝,則使用 /metricbeat modules enable docker
。cloud.id: cluster_name:ZXVy...Q2Zg== cloud.auth: "elastic:YOUR_PASSWORD"
cloud.id
是在建立集羣時提供給您的。cloud.auth
是一個冒號分隔的用戶名和密碼的串聯,且已在 Elasticsearch 集羣中被授予足夠的權限。/etc/metricbeat
目錄下找到配置文件;若是您使用 tgz/zip 包安裝,則在解壓縮的目錄下。sudo metricbeat setup
將它們加載到 Kibana;若是使用 tgz/zip 包安裝,則在解壓縮的目錄下運行 ./metricbeat setup
。sudo systemctl start metricbeat
;若是您使用 tgz/zip 包安裝,則使用 ./metricbeat -e
若是一切正常,數據就會開始流入 Elasticsearch 服務。
**
**
前往 Elasticsearch 服務中的 Kibana 來查看數據:
metricbeat-*
索引模式,您將可以看到已採集的各個文檔。**
**
Logstash 是一個強大而靈活的工具,能夠讀取、處理和傳送任何類型的數據。Logstash 提供了許多功能,這些功能目前還不可用,或者經過 Beats 執行成本過高,好比經過對外部數據源執行查找來豐富文檔。無論採用哪一種方式,Logstash 的這種功能和靈活性都是有代價的。此外,Logstash 的硬件要求也顯著高於 Beats。嚴格來講,Logstash 一般不該部署在低資源設備上。所以,在 Beats 功能不足以知足特定用例要求的狀況下,可將 Logstash 用做其替代選擇。
一種常見的架構模式是將 Beats 和 Logstash 組合起來:使用 Beats 來收集數據,並使用 Logstash 來執行 Beats 沒法執行的任何數據處理。
**
**
Logstash 經過執行事件處理管道來工做,其中每一個管道至少包含如下各項中的一個:
**
**
沒有兩個用例是相同的。所以,您可能必須開發符合自身特定數據輸入和需求的 Logstash 管道。
咱們提供了一個示例 Logstash 管道,該管道可以
步驟以下:
./bin/logstash-plugin install logstash-input-rss
input { rss { url => "/blog/feed" interval => 120 } } filter { mutate { rename => [ "message", "blog_html" ] copy => { "blog_html" => "blog_text" } copy => { "published" => "@timestamp" } } mutate { gsub => [ "blog_text", "<.*?>", "", "blog_text", "[\n\t]", " " ] remove_field => [ "published", "author" ] } } output { stdout { codec => dots } elasticsearch { hosts => [ "https://<your-elsaticsearch-url>" ] index => "elastic_blogRead More
啓動 Logstash 須要幾秒鐘的時間。您會在控制檯上看到出現圓點 (.....)。每一個點表示一個已採集到 Elasticsearch 的文檔。
有關更多詳細信息,請參閱優秀的博客文章 Logstash 實用介紹。所有詳細信息,請參閱 Logstash 文檔。
在某些狀況下,最好將數據採集與自定義應用程序代碼集成。爲此,咱們建議使用一個官方支持的 Elasticsearch 客戶端。這些客戶端是抽象出數據採集低層細節的庫,使您可以專一於特定應用程序的實際工做。Java、JavaScript、Go、.NET、PHP、Perl、Python 和 Ruby 都有官方客戶端。有關您所選語言的全部詳細信息和代碼示例,請參閱相關文檔便可。若是您的應用程序不是用上面所列語言編寫的,則極可能會有社區貢獻的客戶端。
咱們推薦的用於開發和調試 Elasticsearch 請求的工具是 Kibana 開發工具控制檯。開發工具公開了通用的 Elasticsearch REST API 的所有功能和靈活性,同時抽象出了底層 HTTP 請求的技術細節。不出所料,您可使用開發工具控制檯將原始 JSON 文檔放到 Elasticsearch 中:
PUT my_first_index/_doc/1 { "title" :"How to Ingest Into Elasticsearch Service", "date" :"2019-08-15T14:12:12", "description" :"This is an overview article about the various ways to ingest into Elasticsearch Service" }
**
**有了 Elasticsearch 提供的通用 REST 接口,您便可爲所欲爲地找到本身喜歡的 REST 客戶端來與 Elasticsearch 通訊並採集文檔。雖然咱們建議首先嚐試上面提到的工具,可是有不少緣由可能會讓您考慮其餘選擇。例如,curl 是一款常常做爲最後手段使用的工具,用於開發、調試或與自定義腳本集成。
將數據採集到 Elasticsearch 服務的方法不勝枚舉。沒有兩種場景是相同的;選擇具體的方法或工具來採集數據取決於您的特定用例、需求和環境。Beats 提供了一種方便、輕量級的開箱即用型解決方案,能夠從許多不一樣的來源收集和採集數據。與 Beats 封裝在一塊兒的模塊爲許多常見數據庫、操做系統、容器環境、Web 服務器、緩存等提供了數據獲取、解析、索引和可視化的配置。這些模塊可提供五分鐘實現數據到儀表板的體驗。由於 Beats 是輕量型的,因此很是適合資源受限的嵌入式設備,例如 IoT 設備或防火牆。另外一方面,Logstash 是一種靈活的工具,可用於讀取、轉換和採集數據,提供了大量的過濾器、輸入和輸出插件。若是 Beats 的功能對於某些用例來講還不夠,那麼一種常見的架構模式是使用 Beats 來收集數據,並經過 Logstash 作進一步處理,而後再採集到 Elasticsearch 中。咱們建議在直接從應用程序採集數據時使用官方支持的客戶端庫。Kibana 開發工具控制檯很是適合開發和調試。最後,Elasticsearch REST API 爲您提供了使用您喜歡的 REST 客戶端的靈活性。準備好進一步深刻了解了嗎?推薦您閱讀如下相關文章:
想要更多瞭解Elastic技術,歡迎關注和報名參加webinar,近期安排以下:
2020年2月19日(星期三)15:00-16:00
使用Elastic Stack構建全方位可觀察性實例
2020年2月26日(星期三)15:00-16:00
Kibana Lens 網絡研討會
2020年3月4日(星期三)15:00-16:00
Elastic Endpoint Security 概述網絡
2020年3月11日(星期三)15:00-16:00
使用Elastic Stack監控網站資源