本文提供了將資料擷取到Elasticsearch服務中的幾種解決方案。
背景資訊
對於資料搜尋和分析來說,Elasticsearch無處不在。開發人員和社區可使用Elasticsearch尋找各種各樣的使用情境,從應用程式搜尋和網站搜尋,到日誌、基礎架構監測、APM和安全分析,不一而足。雖然現在有針對這些情境的免費解決方案,但是開發人員仍需要先將其資料提供給Elasticsearch。
本文提供了以下幾種常見的將資料擷取到Elasticsearch中的方法:
Elasticsearch提供了靈活的RESTful API,用於與用戶端應用程式進行通訊。因此通過調用RESTful API,可以完成資料擷取、搜尋和分析,以及管理叢集及其索引的操作。
Elastic Beats
Elastic Beats是一組輕量型的資料擷取器,可以方便地將資料發送給Elasticsearch服務。由於是輕量型的,Beats不會產生太多的運行開銷,因此,可以在硬體資源有限的裝置(如 IoT 裝置、邊緣裝置或嵌入式裝置)上運行和收集資料。如果您需要收集資料,但沒有資源來運行資源密集型資料收集器,那麼Beats會是您最佳的選擇。這種無處不在(涵蓋所有連網裝置)的資料收集方式,能夠讓您快速檢測到異常情況並做出反應,例如系統範圍內的問題和安全事件等。
當然,Beats並不局限於資源有限的系統,它們還可用於具有更多可用硬體資源的系統。
Beats有多種風格,可以收集不同類型的資料:
Filebeat支援從檔案形式的資料來源中讀取、預先處理和傳輸資料。雖然大多數使用者使用Filebeat來讀取記錄檔,但它也支援非二進位檔案格式。Filebeat還支援多種其他資料來源,包括TCP/UDP、容器、Redis和Syslog。藉助豐富的模組,可以輕鬆收集Apache、MySQL和Kafka等常見應用程式的日誌,並且能夠根據日誌格式解析出對應的資料。
Metricbeat可以收集並預先處理系統和服務指標資料。系統指標包括運行中的進程的相關資訊,以及CPU、記憶體、磁碟、網路利用率等方面的資料。藉助豐富的模組,可以收集來自不同服務的資料,包括Kafka、Palo Alto Networks、Redis等。
Packetbeat可以收集並預先處理即時網路資料,從而支援應用程式監測、安全和網路效能分析。此外,Packetbeat還支援DHCP、DNS、HTTP、MongoDB、NFS和TLS協議。
Winlogbeat可以從Windows作業系統捕獲事件記錄,包括應用程式事件、硬體事件,以及安全和系統事件。
Auditbeat可以檢測對關鍵檔案的更改,並從Linux的審計架構中收集事件,主要應用於安全分析情境中。
Heartbeat可以使用探測來監測系統和服務的可用性,因此可以應用於很多情境中,例如基礎架構監測和安全分析。同時支援ICMP、TCP和HTTP協議。
Functionbeat可以從無伺服器環境(如AWS Lambda)中收集日誌和指標。
請參見通過自建Metricbeat收集系統指標資訊學習Beats的使用方法,其他Beats的使用方法與此類似。
Logstash
Logstash是一個強大而靈活的工具,可以讀取、處理和傳送任何類型的資料,並且具有豐富的功能,但對裝置資源的要求較高。目前Beats還不支援Logstash提供的一些豐富的功能,或者通過Beats執行成本太高,例如通過尋找外部資料源來豐富文檔。但是Logstash的硬體要求顯著高於Beats,因此Logstash通常不應部署在低資源裝置上,在Beats功能不足以滿足特定應用情境要求的情況下,可使用Logstash進行代替。
一種常見的架構模式是將Beats和Logstash組合起來:使用Beats來收集資料,並使用Logstash來執行Beats無法執行的資料處理任務。
Elasticsearch提供了Logstash服務。阿里雲Logstash作為伺服器端的資料處理管道,提供了100%相容開源的Logstash功能,能夠動態地從多個來源採集資料、轉換資料,並且將資料存放區到所選擇的位置。通過輸入、過濾和輸出外掛程式,Logstash可以對任何類型的事件進行加工和轉換。
Logstash通過事件處理管線來執行任務,其中每個管道至少包含以下各項中的一個:
從資料來源讀取資料。官方支援多種資料來源,包括檔案、http、imap、jdbc、kafka、syslog、tcp和udp。
以多種方式處理和豐富資料。在許多情況下,需要先將非結構化的日誌行解析為更加結構化的格式。因此,除其他功能外,Logstash還在Regex的基礎上,提供瞭解析CSV、JSON、鍵/值對、分隔的非結構化資料、複雜的非結構化資料的過濾器(grok過濾器)。Logstash還提供了更多的過濾器,通過執行DNS尋找,添加關於IP地址的地理資訊,或通過尋找自訂目錄或Elasticsearch索引來豐富資料。通過這些附加的過濾器,能夠對資料進行各種轉換,例如重新命名、刪除、複製資料欄位和值(mutate過濾器)。
輸出是Logstash處理管道的最後階段,可以將解析後並加以豐富的資料寫入資料接收器。雖然有很多輸出外掛程式可用,但本文主要討論如何使用Elasticsearch輸出,將資料擷取到Elasticsearch服務中。
以下提供了一個樣本Logstash管道,該管道能夠:
讀取Elastic部落格RSS源。
通過複製或重新命名欄位、刪除特殊字元以及HTML標記,來執行一些簡單的資料預先處理。
將文檔採集到Elasticsearch。
按照如下樣本配置阿里雲Logstash管道。
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_blog" user => "elastic" password => "<your-elasticsearch-password>" } }
hosts
需要替換為<對應Elasticsearch執行個體的私網地址>:9200
;password
需要替換為對應Elasticsearch的訪問密碼。在Kibana控制台中,查看索引資料。
POST elastic_blog/_search
詳細操作方法請參見查看資料同步結果。
語言用戶端
通過Elasticsearch提供的用戶端,您可以將資料擷取與自訂應用程式代碼整合。這些用戶端是抽象出資料擷取低層細節的庫,使您能夠專註於特定應用程式的實際工作。目前Elasticsearch支援多種用戶端語言,包括Java、JavaScript、Go、.NET、PHP、Perl、Python和Ruby等,更多支援的用戶端語言以及您所選語言的詳細資料和程式碼範例,請參見官方支援的Elasticsearch用戶端。
如果您的應用程式所使用的語言不在官方支援的用戶端語言中,可以在社區貢獻的用戶端中尋找相關文檔。
Kibana開發工具
推薦您使用Kibana開發控制台開發並調試Elasticsearch請求。Kibana開發工具公開了通用的Elasticsearch RESTful API的全部功能,同時抽象出了底層HTTP請求的技術細節。您可以使用Kibana開發工具,將原始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"
}
除了Kibana開發工具以外,您也可以使用其他工具,通過RESTful API與Elasticsearch通訊並採集文檔。例如curl是一款經常使用的工具,用於Elasticsearch請求的開發、調試或與自訂指令碼整合。
總結
將資料擷取到Elasticsearch服務的方法不勝枚舉。您需要根據特定用例、需求和環境,選擇合適的方法或工具來採集資料。
Beats提供了一種方便、輕量級的開箱即用型解決方案,可以從許多不同的來源採集資料。與Beats封裝在一起的模組為許多常見資料庫、作業系統、容器環境、Web伺服器、緩衝等提供了資料擷取、解析、索引和可視化的配置。通過這些模組,可以實現五分鐘將資料製作成儀表板進行展示。因為Beats是輕量型的,所以非常適合資源受限的嵌入式裝置,例如IoT裝置或防火牆。
Logstash是一種靈活的工具,可用於讀取、轉換和採集資料,提供了大量的過濾器、輸入和輸出外掛程式。如果Beats的功能對於某些用例來說還不夠,那麼一種常見的架構模式是使用Beats來收集資料,並通過Logstash做進一步處理,然後再採集到Elasticsearch中。
當您需要直接從應用程式採集資料時,建議使用官方支援的用戶端庫。
當您需要對Elasticsearch請求進行開發或調試時,建議您使用Kibana開發工具。