如何將數據採集到 Elasticsearch 服務

原文鏈接:https://www.elastic.co/cn/blog/how-to-ingest-data-into-elasticsearch-service

對於數據搜索和分析來說,Elasticsearch 無處不在。開發人員和社區可利用 Elasticsearch 尋找尋找各種各樣的用例,從應用程序搜索網站搜索,到日誌、基礎架構監測APM 和 安全分析,不一而足。雖然現在有針對這些用例的免費解決方案,但是開發人員首先需要將其數據提供給 Elasticsearch。

本文將描述幾種最常見的將數據採集到 Elasticsearch 服務的方法。這可能是一個託管在 Elastic Cloud 或其本地方案 Elastic Cloud Enterprise 上的集羣。雖然我們主要關注於這些服務,但採集到自管型 Elasticsearch 集羣的數據看起來幾乎是相同的。唯一的變化是您處理集羣的方式。

在我們深入探討技術細節之前,提醒一下:如果您在閱讀本文時遇到任何問題,請隨時訪問 discuss.elastic.co。我們的社區非常活躍,您有望會在那裏找到問題的答案。

接下來,我們開始使用以下方法來深入探討數據採集:

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

採集到 Elasticsearch 服務

Elasticsearch 提供了靈活的 RESTful API,用於與客戶端應用程序通信。因此,REST 調用被用來採集數據、執行搜索和數據分析,以及管理集羣及其索引。實際上,上述所有方法都依賴於這個 API 將數據採集到 Elasticsearch。

在本文後續介紹中,我們假設您已經創建了 Elasticsearch 服務集羣。如果您還沒有創建,請註冊 Elastic Cloud 免費試用。在您創建集羣后,系統將會爲您提供 Elastic 超級用戶帳戶的雲 ID 和密碼。雲 ID 的格式如下:cluster_name:ZXVy...Q2Zg==。它對您集羣的 URL 進行了編碼,並且我們將會看到,它可簡化數據採集。

Elastic Beats

Elastic Beats 是一組輕量型的數據採集器,可以方便地將數據發送給 Elasticsearch 服務。由於是輕量型的,Beats 不會產生太多的運行時開銷,因此,可以在硬件資源有限的設備(如 IoT 設備、邊緣設備或嵌入式設備)上運行和收集數據。如果您需要收集數據,但沒有資源來運行資源密集型數據收集器,那麼 Beats 會是您最佳的選擇。這種無處不在(涵蓋所有聯網設備)的數據收集方式,讓您能夠快速檢測到異常情況做出反應,例如系統範圍內的問題和安全事件等。

當然,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 操作系統捕獲事件日誌,包括應用程序事件、硬件事件,以及安全和系統事件。對於許多用例來說,從 Windows 事件日誌中獲得的大量信息非常有用。
  • Auditbeat 可檢測對關鍵文件的更改並從 Linux 審計框架收集事件。不同的模塊簡化了它的部署,這主要在安全分析用例中使用。
  • Heartbeat 利用探測來監測系統和服務的可用性。因此,Heartbeat 在許多場景中都很有用,比如基礎架構監測和安全分析。ICMP、TCP 和 HTTP 都是受支持的協議。
  • Functionbeat 可從無服務器環境(如 AWS Lambda)中收集日誌和指標。

一旦您決定了在特定場景中要使用哪個 Beats,入門就像下節所描述的那樣,非常簡單。

Beats 入門

在這部分中,我們將以 Metricbeat 爲例,學習如何開始使用 Beats。對於其他 Beats,步驟大同小異。針對您具體的 Beat 和操作系統,請參考本文檔並按照下列步驟進行操作。

  1. 下載並安裝所需的 Beat。安裝 Beats 有很多種方法,但大多數用戶都會選擇使用爲操作系統的包管理器提供的 Elastic 存儲庫 (DEB/RPM),或者簡單下載並解壓縮所提供的 tgz/zip 包。
  2. 配置 Beat 並啓用任何所需的模塊
cloud.id: cluster_name:ZXVy...Q2Zg==
cloud.auth: "elastic:YOUR_PASSWORD"
    
  • 例如,要收集系統上運行的關於 Docker 容器的指標,則通過 sudo metricbeat modules enable docker 啓用 Docker 模塊(如果您使用包管理器安裝)。如果您通過解壓縮 tgz/zip 包安裝,則使用 /metricbeat modules enable docker
  • 雲 ID 是一種簡便的方法,用以指定收集的數據要發送到的 Elasticsearch 服務。將雲 ID 和身份驗證信息添加到 Metricbeat 配置文件 (Metricbeat .yml):
    • 如前所述,cloud.id 是在創建集羣時提供給您的。cloud.auth 是一個冒號分隔的用戶名和密碼的串聯,且已在 Elasticsearch 集羣中被授予足夠的權限。
    • 若要快速啓動,可以使用在創建集羣時提供的 Elastic 超級用戶和密碼。如果您使用包管理器安裝,則可以在 /etc/metricbeat 目錄下找到配置文件;如果您使用 tgz/zip 包安裝,則在解壓縮的目錄下。
  1. 將預裝儀表板加載到 Kibana。大多數 Beats 和它們的模塊都帶有預先定義好的 Kibana 儀表板。如果您使用包管理器安裝,則通過 sudo metricbeat setup 將它們加載到 Kibana;如果使用 tgz/zip 包安裝,則在解壓縮的目錄下運行 ./metricbeat setup
  1. 運行 Beat。如果您在基於 systemd 的 Linux 系統上使用包管理器安裝,則使用 sudo systemctl start metricbeat;如果您使用 tgz/zip 包安裝,則使用 ./metricbeat -e

如果一切正常,數據就會開始流入 Elasticsearch 服務。

探索預裝儀表板

前往 Elasticsearch 服務中的 Kibana 來查看數據:

  • 在 Kibana Discover 中,選擇 metricbeat-* 索引模式,您將能夠看到已採集的各個文檔。
  • “Kibana 基礎架構”選項卡通過以各種圖表形式顯示有關係統資源(CPU、內存、網絡)的使用情況,讓您能夠以更圖形化的方式檢查系統和 Docker 指標。
  • 在 Kibana 儀表板中,選擇任意帶有 [Metricbeat System] 前綴的儀表板,以交互方式查看數據。

Logstash

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

一種常見的架構模式是將 Beats 和 Logstash 組合起來:使用 Beats 來收集數據,並使用 Logstash 來執行 Beats 無法執行的任何數據處理。

Logstash 概述

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

  • 輸入從數據源讀取數據。官方支持多種數據源,包括文件、http、imap、jdbc、kafka、syslog、tcp 和 udp。
  • 過濾器以多種方式處理和豐富數據。在許多情況下,首先需要將非結構化的日誌行解析爲更加結構化的格式。因此,除其他功能外,Logstash 還在正則表達式的基礎上提供瞭解析 CSV、JSON、鍵/值對、分隔的非結構化數據和複雜的非結構化數據的過濾器(grok 過濾器)。Logstash 還提供了更多的過濾器,通過執行 DNS 查找,添加關於 IP 地址的地理信息,或通過對自定義目錄或 Elasticsearch 索引執行查找來豐富數據。通過這些附加的過濾器,能夠對數據進行各種轉換,例如重命名、刪除、複製數據字段和值(mutate 過濾器)。
  • 輸出將解析後並加以豐富的數據寫入數據接收器,這是 Logstash 處理管道的最後階段。雖然有許多輸出插件可用,但這裏我們主要討論如何使用 Elasticsearch 輸出將數據採集到 Elasticsearch 服務。

Logstash 示例管道

沒有兩個用例是相同的。因此,您可能必須開發符合自身特定數據輸入和需求的 Logstash 管道。

我們提供了一個示例 Logstash 管道,該管道能夠

  • 讀取 Elastic 博客 RSS 源
  • 通過複製/重命名字段和刪除特殊字符及 HTML 標記來執行一些簡單的數據預處理
  • 將文檔採集到 Elaticsearch

步驟如下:

  1. 通過包管理器或下載並解壓 tgz/zip 文件來安裝 Logstash。
  2. 安裝 Logstash rss 輸入插件,這可支持讀取 RSS 數據源:./bin/logstash-plugin install logstash-input-rss
  3. 將下列 Logstash 管道定義複製到一個新文件,例如 ~/elastic-rss.conf:
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>" 
  } 
}
  1. 在上面的文件中,修改參數主機和密碼,以匹配您的 Elasticsearch 服務端點和 Elastic 用戶密碼。在 Elastic Cloud 中,您可以從部署頁的詳細信息中獲取 Elasticsearch 端點 URL(複製端點 URL)。

 

  1. 通過啓動 Logstash 執行管道:./bin/logstash -f ~/elastic-rss.conf

啓動 Logstash 需要幾秒鐘的時間。您會在控制檯上看到出現圓點 (.....)。每個點表示一個已採集到 Elasticsearch 的文檔。

  1. 打開 Kibana。在 Kibana 開發工具控制檯中,執行以下操作,以確認已經採集了 20 個文檔:POST elastic_blog/_search

有關更多詳細信息,請參閱優秀的博客文章 Logstash 實用介紹。全部詳細信息,請參閱 Logstash 文檔

語言客戶端

在某些情況下,最好將數據採集與自定義應用程序代碼集成。爲此,我們建議使用一個官方支持的 Elasticsearch 客戶端。這些客戶端是抽象出數據採集低層細節的庫,使您能夠專注於特定應用程序的實際工作。Java、JavaScript、Go、.NET、PHP、Perl、Python 和 Ruby 都有官方客戶端。有關您所選語言的所有詳細信息和代碼示例,請參閱相關文檔即可。如果您的應用程序不是用上面所列語言編寫的,則很可能會有社區貢獻的客戶端

Kibana 開發工具

我們推薦的用於開發和調試 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" 
}

其他 REST 客戶端

有了 Elasticsearch 提供的通用 REST 接口,您即可隨心所欲地找到自己喜歡的 REST 客戶端來與 Elasticsearch 通信並採集文檔。雖然我們建議首先嚐試上面提到的工具,但是有很多原因可能會讓您考慮其他選擇。例如,curl 是一款經常作爲最後手段使用的工具,用於開發、調試或與自定義腳本集成。

結論

將數據採集到 Elasticsearch 服務的方法不勝枚舉。沒有兩種場景是相同的;選擇具體的方法或工具來採集數據取決於您的特定用例、需求和環境。Beats 提供了一種方便、輕量級的開箱即用型解決方案,可以從許多不同的來源收集和採集數據。與 Beats 封裝在一起的模塊爲許多常見數據庫、操作系統、容器環境、Web 服務器、緩存等提供了數據獲取、解析、索引和可視化的配置。這些模塊可提供五分鐘實現數據到儀表板的體驗。因爲 Beats 是輕量型的,所以非常適合資源受限的嵌入式設備,例如 IoT 設備或防火牆。另一方面,Logstash 是一種靈活的工具,可用於讀取、轉換和採集數據,提供了大量的過濾器、輸入和輸出插件。如果 Beats 的功能對於某些用例來說還不夠,那麼一種常見的架構模式是使用 Beats 來收集數據,並通過 Logstash 做進一步處理,然後再採集到 Elasticsearch 中。我們建議在直接從應用程序採集數據時使用官方支持的客戶端庫。Kibana 開發工具控制檯非常適合開發和調試。最後,Elasticsearch REST API 爲您提供了使用您喜歡的 REST 客戶端的靈活性。準備好進一步深入瞭解了嗎?推薦您閱讀以下相關文章:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章