Centralized Pipeline Management

前言

Logstash 是一個非常強大的資料 ETL (Extract-Transform-Load) 工具,在具有一定量級的處理環境時,常常會佈署多台的 Logstash,以及配合許多情境而有對應配置的 ETL 設定,這些對於管理及運維上都有一定的複雜度及成本,這篇文章將會介紹,如何透過 X-Pack 中 Gold License 以上的授權、或是 Elastic Cloud service Standard 以上版本才能使用的 Centralized Pipeline Management ,如個使用這個功能讓 Logstash Pipeline 的管理能集中化的在 Kibana 中被簡單的配置。

進入此章節的先備知識

  • Logstash 的基本配置與使用方式。

  • Logstash 的 Pipeline 配置方式。

此章節的重點學習

  • 如何透過 Centralized Pipeline Management 來集中化管理 Logstash 的 Pipeline 配置。


Centralized Pipeline Management 基本介紹

Centralized Pipeline Management 是 Elastic Stack 6.0 時以 Beta 版本首次推出的服務,主要的目的就是使用 Kibana 來當作集中化的管理工具、能管理多台 Logstash 身上的 Pipbline 配置,同時將 Elasticsearch 當作 Database ,存放這些 Pipeline 的配置。

功能定位

Centralized Pipeline Management 是為集中化的管理多台 Logstash,如果已經有使用其他更強大的 Configuration Management (CM) 工具像是 Puppet, Ansible, Chef 來解決這個問題,這功能可能就不見得需要使用,但如果還沒有使用到這些複雜的 CM 工具、但又有這個 Logstash 管理的需求時、又或者希望能由 Kibana 來提供需要修改 Pipeline 的操作者有統一的 GUI 管理工具,那這個 Centralized Pipeline Management 就會是你的選擇。

Centralized Pipeline Management 基本運作架構圖

將 Logstash 加入 Centralized Pipeline Management

首先我們要將 Logstash 註冊進入 Centralized Pipeline Management 的託管,我們會需要做幾件事:

1. 先配置好 Logstash 所要使用的 Security User & Role

首先依照官方的建議配置,先建立兩個 Role - logstash_writerlogstash_reader

POST _xpack/security/role/logstash_writer
{
  "cluster": ["manage_index_templates", "monitor", "manage_ilm"], 
  "indices": [
    {
      "names": [ "logstash-*" ], 
      "privileges": ["write","create","delete","create_index","manage","manage_ilm"]  
    }
  ]
}
POST _xpack/security/role/logstash_reader
{
  "indices": [
    {
      "names": [ "logstash-*" ], 
      "privileges": ["read","view_index_metadata"]
    }
  ]
}

logstash_reader 是給之後要能查閱我們透過 Logstash 傳進來的資料而先定義好的 Role。

建立一個 User ,並且給予 logstash_admin, logstash_system (這兩個是系統內建的 Role ) 和 logstash_writer 的 Role。

POST _xpack/security/user/logstash_user
{
  "password" : "t0p.s3cr3t",
  "roles" : ["logstash_admin","logstash_system","logstash_writer"],
  "full_name" : "Logstash User"
}

以上的操作都能直接在 Kibana > Stack Management > Security 中,使用 GUI 的畫面建立。

2. 決定 Pipeline Id 及修改 Logstash 的設定

我們要在某一台已安裝好 Logstash 的機器上,將配置改成 xpack.management.enable: true 也就是將這台 Logstash 註冊透過 Centralized PIpeline Management 來託管。

# config/logstash.yml

xpack.management.enabled: true
xpack.management.logstash.poll_interval: 5s
xpack.management.pipeline.id: ["main", "apache_logs", "cloudwatch_logs"]

# 若是自架 Elastic Stack 要設置以下 Elasticsearch 的配置
xpack.management.elasticsearch.hosts: "http://localhost:9200/"
xpack.management.elasticsearch.username: logstash_user
xpack.management.elasticsearch.password: t0p.s3cr3t

# 若是使用 Elastic Cloud 可以直接指定 cloud_id 和 cloud_auth
xpack.management.elasticsearch.cloud_id: uncle-joe:xxxxxxxxxxxx
xpack.management.elasticsearch.cloud_auth: logstash_user:t0p.s3cr3t

這邊要注意,在 Config 中指派的 pipeline id,也就會是這個 logstash 機器會從 Centralized Pipeline Management 抓取的 Pipeline 配置,所以這部份是要事先定義好的。

另外以下是 X-pack Monitoring 的設定,也建議打開,或是使用 Metricbeat 來另外收集 Logstash Monitoring 的資訊。

xpack.monitoring.enabled: true
xpack.monitoring.collection.interval: 10s
xpack.monitoring.elasticsearch.cloud_id: uncle-joe:xxxxxxxxxxxx
xpack.monitoring.elasticsearch.cloud_auth: logstash_system:t0p.s3cr3t

3. 註冊 Logstash 進入 Centralized Pipeline Management 中

當配置完成後,不需要做其他特別的執行,只要啟動 (或重新啟動) Logstash

bin/logstash
run logstash

這時會發現出現找不到 remote config 的錯誤 (因為 Kibana 上的 Pipeline config 我們這時還沒建立好)。

4. 確認 Kibana 使用者的權限

這邊要特別注意,當我們配置好之後,要重新回到 Kibana 來設定 Logstash Pipelines 時,要確保 Kibana 的使用者有以下的權限:

  • logstash_admin

  • logstash_writer

一但以上的步驟完成後,我們接下來就要進入 Kibana 設置 Logstash Pipeline。

使用 Kibana 管理 Logstash Pipelines

進入 Kibana > Stack Management > Ingest 中,有一個 Logstash Pipeline 的管理介面。

Screen Shot 2020-10-03 at 10.22.52 PM

點選 Create Pipeline 之後,就可以依照一般使用 Pipeline 的配置方式來設定 Pipeline。

最後按下 Create and deploy 就會立刻發佈到 Logstash 並生效。

透過 Kibana Stack Monitoring 確認 Logstash Pipelines 運作狀況

Kibana > Stack Monitoring > Logstash 中,可以看到目前 Logstash 的機器狀況,也可以即時監看 Pipeline 的運作狀態。

stack monitoring
stack monitoring pipelines

若是有多台機器、多組 Pipeline 的配置,都能透過 Stack Monitoring 即時監看運作狀態,在更新 Pipeline 的配置後,請記得來這邊確認配置的結果是否運作正常。

使用建議與注意事項

  • Centralized Pipeline Management 的目的是讓 Logstash Pipeline 可以讓多租戶的使用者們自行配置、自主管理,而這邊會配合的用方是 Logstash multiple pipeline 的配置方式,也就可以讓我們 以 Pipieline 為單位 來定義各種不同情境的需求,也就是每個租戶、或是每個 data-flow 可以配置屬於自己的 Pipeline。

  • Centralized Pipeline Management 所建立的 Pipeline 資料是真接儲存在 Elasticsearch 中,所有的調整與變動都會直接套用到 Logstash,不需要重新開啟動 Logstash,而這些 Pipeline 的配置沒有任何的驗證錯誤的機制,也就是一但修改後就會直接生效,若是配置有錯誤的話,也就會直接反應到實際的環境中,這部份會需要特別小心。

  • Logstash 在這樣集中化管理的情況,一但發生錯誤,也會需要看每台 Logstash 的 logs 才能知道狀況,因此也同樣會建議啟用 X-Pack monitoring 的功能,讓 Logstash 的 logs 被收集到 Elasticsearch 來一併監控與管理。

  • 為了能控制發生錯誤時的影響,建議配置好 Logstash 的 Dead Letter Queue ,當有錯誤發生時,也能再次透過 Pipeline 的調整,以重新修復資料。

參考資料

Last updated