天天看點

【技術幹貨】想要高效采集資料到阿裡雲Elasticsearch,這些方法你知道嗎?

簡介:

本文全面介紹了Elastic Beats、Logstash、語言用戶端以及Kibana開發者工具的特性及資料采集到阿裡雲Elasticsearch(簡稱ES)服務中的解決方案。幫助您全面了解原理并選擇符合自身業務特色的資料采集方案。

本文字數:2763

閱讀時間:預計10分鐘

以下是正文

背景資訊

對于資料搜尋和分析來說,Elasticsearch無處不在。開發人員和社群可使用Elasticsearch尋找各種各樣的用例,從

應用程式

搜尋和

網站搜尋

,到日志、

基礎架構監測

APM

安全分析

,不一而足。雖然現在有針對這些用例的免費解決方案,但是開發人員首先需要将其資料提供給Elasticsearch。

本文提供了以下幾種常見的将資料采集到阿裡雲ES中的方法。

  • Elastic Beats
  • Logstash
  • 語言用戶端
  • Kibana開發工具

Elasticsearch提供了靈活的RESTful API,用于與用戶端應用程式通信。是以,REST調用被用來采集資料、執行搜尋和資料分析,以及管理叢集及其索引。實際上,上述所有方法都依賴于REST API将資料采集到Elasticsearch。

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 使用探測來監測系統和服務的可用性。是以,Heartbeat在許多場景中都很有用,例如基礎架構監測和安全分析。ICMP、TCP和HTTP都是受支援的協定。
  • Functionbeat 可以從無伺服器環境(如 AWS Lambda)中收集日志和名額。

您可以參考

阿裡雲Elasticsearch通過Beats搭建可視化運維系統

,學習Beats的使用方法。其他Beats的使用方法與此類似。

Logstash是一個強大而靈活的工具,可以讀取、處理和傳送任何類型的資料。Logstash提供了許多功能,這些功能目前還不可用,或者通過Beats執行成本太高,例如通過對外部資料源執行查找來豐富文檔。不管采用哪種方式,Logstash的這種功能和靈活性都是有代價的。此外,Logstash的硬體要求也顯著高于Beats。嚴格來說,Logstash通常不應部署在低資源裝置上。是以,在Beats功能不足以滿足特定用例要求的情況下,可将Logstash用作其替代選擇。

一種常見的架構模式是将Beats和Logstash組合起來:使用Beats來收集資料,并使用Logstash來執行Beats無法執行的資料處理任務。

Logstash概述

阿裡雲Elasticsearch提供了Logstash服務。阿裡雲Logstash Service作為伺服器端的資料處理管道,提供了100%相容開源的Logstash功能,能夠動态地從多個來源采集資料、轉換資料,并且将資料存儲到所選擇的位置。通過輸入、過濾和輸出插件,Logstash可以對任何類型的事件加工和轉換。

Logstash通過事件處理管道來執行任務,其中每個管道至少包含以下各項中的一個:

  • 輸入 從資料源讀取資料。官方支援多種資料源,包括檔案、http、imap、jdbc、kafka、syslog、tcp和udp。
  • 過濾器 以多種方式處理和豐富資料。在許多情況下,首先需要将非結構化的日志行解析為更加結構化的格式。是以,除其他功能外,Logstash還在正規表達式的基礎上,提供了解析CSV、JSON、鍵/值對、分隔的非結構化資料,以及複雜的非結構化資料的過濾器( grok 過濾器 )。Logstash還提供了更多的過濾器,通過執行 DNS查找 ,添加 關于IP位址的地理資訊 ,或通過對 自定義目錄 Elasticsearch 索引執行查找來豐富資料。通過這些附加的過濾器,能夠對資料進行各種轉換,例如重命名、删除、複制資料字段和值( mutate 過濾器 )。
  • 輸出 将解析後并加以豐富的資料寫入資料接收器,是Logstash處理管道的最後階段。雖然有很多輸出插件可用,但本文主要讨論如何使用 Elasticsearch輸出 ,将資料采集到Elasticsearch服務中。

Logstash示例管道

以下提供了一個示例Logstash管道,該管道能夠:

  • 讀取Elastic部落格RSS源。
  • 通過複制/重命名字段、删除特殊字元以及HTML标記,來執行一些簡單的資料預處理。
  • 将文檔采集到Elaticsearch。

1.參考

通過Kibana配置Pipeline

,按照以下示例配置阿裡雲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的通路密碼。

  1. 将Logstash與阿裡雲Elasticsearch相關聯。詳細操作方法請參見 管道管理配置
  2. 在Kibana控制台中,檢視索引資料。

POST elastic_blog/_search

  1. 詳細操作方法請參見 執行任務并檢視結果

在某些情況下,最好将資料采集與自定義應用程式代碼內建。為此,建議您使用一個

官方支援的Elasticsearch用戶端

。這些用戶端是抽象出資料采集低層細節的庫,使您能夠專注于特定應用程式的實際工作。Java、JavaScript、Go、.NET、PHP、Perl、Python和Ruby都有官方用戶端。有關您所選語言的所有詳細資訊和代碼示例,請參見相關文檔即可。如果您的應用程式不是用上面所列語言編寫的,則可以在

社群貢獻的用戶端

中查找相關文檔。

推薦您使用

Kibana開發控制台

,開發并調試Elasticsearch請求。Kibana開發工具公開了通用的Elasticsearch REST 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開發工具以外,您也可以使用其他工具,通過Elasticsearch提供的通用REST接口,與Elasticsearch通信并采集文檔。例如

curl

是一款經常作為最後手段使用的工具,用于開發、調試或與自定義腳本內建。

總結

将資料采集到Elasticsearch服務的方法不勝枚舉。您需要根據特定用例、需求和環境,選擇合适的方法或工具來采集資料。

  • Beats提供了一種友善、輕量級的開箱即用型解決方案,可以從許多不同的來源收集和采集資料。與Beats封裝在一起的子產品為許多常見資料庫、作業系統、容器環境、Web伺服器、緩存等,提供了資料擷取、解析、索引和可視化的配置。這些子產品可提供五分鐘實作資料到儀表闆的體驗。因為Beats是輕量型的,是以非常适合資源受限的嵌入式裝置,例如IoT裝置或防火牆。
  • Logstash是一種靈活的工具,可用于讀取、轉換和采集資料,提供了大量的過濾器、輸入和輸出插件。如果Beats的功能對于某些用例來說還不夠,那麼一種常見的架構模式是使用Beats來收集資料,并通過Logstash做進一步處理,然後再采集到Elasticsearch中。
  • 當您需要直接從應用程式采集資料時,建議使用官方支援的用戶端庫。
  • 當您需要對Elasticsearch請求進行開發或調試時,建議您使用Kibana開發工具。

加入我們

加入《Elasticsearch中文技術社群》,與更多開發者探讨交流

【技術幹貨】想要高效采集資料到阿裡雲Elasticsearch,這些方法你知道嗎?

訂閱《阿裡雲Elasticsearch技術交流期刊》每月定期為大家推送相關幹貨

【技術幹貨】想要高效采集資料到阿裡雲Elasticsearch,這些方法你知道嗎?

2019年阿裡雲雲栖大會上,Elasticsearch背後的商業公司Elastic與阿裡雲Elasticsearch确定戰略合作更新,在100%相容開源的基礎上,完成了ELK的完整生态雲上閉環,歡迎開通使用。

點選了解更多産品資訊