Rainbond通過插件整合ELK/EFK,實現日誌收集

  • 2021 年 12 月 27 日
  • 筆記

前言

ELK 是三個開源項目的首字母縮寫:Elasticsearch、Logstash 和 Kibana。但後來出現的 FileBeat 可以完全替代 Logstash的數據收集功能,也比較輕量級。本文將介紹 EFK: Elasticsearch、Filebeat 和 Kibana

Elasticsearch:分散式搜索和分析引擎,具有高可伸縮、高可靠和易管理等特點。基於 Apache Lucene 構建,能對大容量的數據進行接近實時的存儲、搜索和分析操作。通常被用作某些應用的基礎搜索引擎,使其具有複雜的搜索功能;

Kibana:數據分析和可視化平台。與 Elasticsearch 配合使用,對其中數據進行搜索、分析和以統計圖表的方式展示;

Filebeat:Filebeat 是一個輕量級的傳送器,用於轉發和集中日誌數據。Filebeat 作為代理安裝在您的伺服器上,監控您指定的日誌文件或位置,收集日誌事件,並將它們轉發到 Elasticsearch 或 Logstash 以進行索引。

通過本文了解如何將運行在 Rainbond 上的應用,通過開啟 FileBeat 插件的方式收集應用日誌並發送到 Elasticsearch 中。

整合架構

在收集日誌時,需要在應用中啟用 FileBeat 插件進行收集,FileBeat收集日誌有三種方式:

  1. 指定日誌路徑
  2. 收集所有容器日誌
  3. 指定 Label 自動發現

本文使用 指定日誌路徑進行收集,這種方式我們可以自定義收集日誌的規則等。

我們將 FileBeat 製作成 Rainbond 的 一般類型插件 ,在應用啟動之後,插件也隨之啟動並自動收集日誌發送至 Elasticsearch,整個過程對應用容器無侵入,且拓展性強。對接其他日誌收集也可以用類似方式,用戶通過替換插件實現對接不同的日誌收集工具。

下圖展示了在Rainbond使用FileBeat插件收集應用日誌並發送到 Elasticsearch 的結構。

image-20211223162213573

插件實現原理解析

Rainbond插件體系是相對於Rainbond應用模型的一部分,插件主要用來實現應用容器擴展運維能力。由於運維工具的實現有較大的共性,因此插件本身可以被複用。插件必須綁定到應用容器時才具有運行時狀態,用以實現一種運維能力,比如性能分析插件、網路治理插件、初始化類型插件。

具有運行時的插件的運行環境與所綁定的組件從以下幾個方面保持一致:

  • 網路空間 這個一個至關重要的特性,網路空間一致使插件可以對組件網路流量進行旁路監聽和攔截,設置組件本地域名解析等。
  • 存儲持久化空間 這個特性使得插件與組件之間可以通過持久化目錄進行文件交換。
  • 環境變數 這個特性使得插件可以讀取組件的環境變數。

在製作 FileBeat 插件的過程中,使用到了 一般類型插件,可以理解為一個POD啟動兩個 Container,Kubernetes原生支援一個POD中啟動多個 Container,但配置起來相對複雜,在Rainbond中通過插件實現使用戶操作簡單。

通過Rainbond 應用商店一鍵安裝 EK

我們已將 elasticsearch + Kibana 製作為應用並發布至應用市場,用戶可基於開源應用商店一鍵安裝。

  1. 安裝 Rainbond
  2. 在開源應用商店搜索 elasticsearch,點擊安裝即可一鍵安裝;

image-20211223163856435

image-20211223164246240

  1. elasticsearch 默認啟用了 xpack 安全模組來保護我們的集群,所以我們需要一個初始化的密碼。我們進入 elasticsearch Web終端執行如下所示的命令,Web終端內運行 bin/elasticsearch-setup-passwords 命令來生成默認的用戶名和密碼:
bin/elasticsearch-setup-passwords 參數
auto 自動生成
interactive 手動填寫
  1. 進入 Kibana 組件的環境變數中,修改默認連接 elasticsearch的環境變數 ELASTICSEARCH_PASSWORD。

收集應用日誌

使用 Nginx 作為本文的演示應用,在Rainbond上使用鏡像創建組件,

  • 鏡像地址:nginx:latest
  • 掛載存儲:/var/log/nginx,將Nginx日誌持久化,Filebeat插件可讀取到該日誌文件。

製作 FileBeat 插件

在Rainbond團隊介面點擊插件後進入插件介面,點擊新建插件,創建一般類型插件。

  • 鏡像地址:docker.elastic.co/beats/filebeat:7.15.2
  • 其他自定義即可。

image-20211223165325136

創建插件並構建,構建成功後我們在 Nginx組件的插件中開通 FileBeat 插件。

在Nginx組件的環境配置中,添加 FileBeat 配置文件 如下,更多配置可參考 官方文檔

  • 配置文件掛載路徑:/usr/share/filebeat/filebeat.yml
  • 配置文件許可權:644
filebeat.inputs:
- type: log
  paths:
    - /var/log/nginx/*.log
output.elasticsearch:
  hosts: '127.0.0.1:9200'
  username: "elastic"
  password: "elastic"

建立依賴關係

將 Nginx 與 elasticsearch 建立依賴關係,使其能通過 127.0.0.1地址與 elasticsearch 通訊,更新Nginx組件使依賴生效。

訪問Kibana

Kibana默認已漢化

  1. 點擊 Stack Management > 索引管理,可看到我們的 filebeat 索引已存在。

  2. Stack Management > 索引模式,創建 filebeat 索引模式。

  3. Discover 頁面即可看到日誌資訊。

image-20211223180227267

總結

基於Rainbond的插件機制與 EFK 結合,使用戶可以快速的通過EFK收集應用日誌進行分析,並且可靈活的將插件 FileBeat 替換為 Logstash。

除此之外,Rainbond的插件機制具有開放性,通過插件機制對應用治理功能進行擴展,例如網路治理類、數據備份類插件,在對原應用邏輯無侵入的情況下,能夠通過網路治理類插件對服務的性能進行分析,對接ELK等日誌收集系統;對於資料庫等組件而言,使用備份插件對數據進行備份。

關於Rainbond

Rainbond 是一個開源的雲原生應用管理平台,使用簡單,不需要懂容器和Kubernetes,支援管理多個Kubernetes集群,提供企業級應用的全生命周期管理,功能包括應用開發環境、應用市場、微服務架構、應用持續交付、應用運維、應用級多雲管理等。

Github://github.com/goodrain/rainbond

官網://www.rainbond.com

Tags: