如何將數據採集到 Elasticsearch 服務

如何將數據採集到 Elasticsearch 服務
做者Florian Kelbert
對於數據搜索和分析來講,Elasticsearch 無處不在。開發人員和社區可利用 Elasticsearch 尋找尋找各類各樣的用例,從應用程序搜索網站搜索,到日誌、基礎架構監測APM安全分析,不一而足。雖然如今有針對這些用例的免費解決方案,可是開發人員首先須要將其數據提供給 Elasticsearch。html

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

在咱們深刻探討技術細節以前,提醒一下:若是您在閱讀本文時遇到任何問題,請隨時訪問 discuss.elastic.co。咱們的社區很是活躍,您有望會在那裏找到問題的答案。git

接下來,咱們開始使用如下方法來深刻探討數據採集:github

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

**web

採集到 Elasticsearch 服務

**正則表達式

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

在本文後續介紹中,咱們假設您已經建立了 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啓用任何所需的模塊
  • 例如,要收集系統上運行的關於 Docker 容器的指標,則經過 sudo metricbeat modules enable docker 啓用 Docker 模塊(若是您使用包管理器安裝)。若是您經過解壓縮 tgz/zip 包安裝,則使用 /metricbeat modules enable docker
  • 雲 ID 是一種簡便的方法,用以指定收集的數據要發送到的 Elasticsearch 服務。將雲 ID 和身份驗證信息添加到 Metricbeat 配置文件 (Metricbeat .yml):

cloud.id: cluster_name:ZXVy...Q2Zg== cloud.auth: "elastic:YOUR_PASSWORD"

  • 如前所述,cloud.id 是在建立集羣時提供給您的。cloud.auth 是一個冒號分隔的用戶名和密碼的串聯,且已在 Elasticsearch 集羣中被授予足夠的權限。
  • 若要快速啓動,可使用在建立集羣時提供的 Elastic 超級用戶和密碼。若是您使用包管理器安裝,則能夠在 /etc/metricbeat 目錄下找到配置文件;若是您使用 tgz/zip 包安裝,則在解壓縮的目錄下。
  1. 將預裝儀表板加載到 Kibana。大多數 Beats 和它們的模塊都帶有預先定義好的 Kibana 儀表板。若是您使用包管理器安裝,則經過 sudo metricbeat setup 將它們加載到 Kibana;若是使用 tgz/zip 包安裝,則在解壓縮的目錄下運行 ./metricbeat setup
  2. 運行 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_blogRead More

  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 客戶端的靈活性。準備好進一步深刻了解了嗎?推薦您閱讀如下相關文章:


想要更多瞭解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監控網站資源

相關文章
相關標籤/搜索