ELK多租戶方案

file

1、前言

日誌分析是目前重要的系統調試和問題排查的重要手段之一,而目前分佈式系統因爲實例和機器衆多,因此構建一套統一日誌系統是很是必要的;ELK提供了一整套解決方案,而且都是開源軟件,之間互相配合使用,完美銜接,高效的知足了不少場合的應用,是目前的主流選擇之一。json

本文主要介紹如何實現一套 ELK日誌系統 同時給 多套環境多個系統 共同使用/測試,並實現相互之間的數據與視圖相互 隔離 互不影響。bash

 

2、隔離方式

常見的 ELK 架構以下圖所示,分別由 ElasticsearchLogstashKibanaFileBeat 組成。
file服務器

分別在每一個應用服務器裏部署一個 FileBeat 組件做爲日誌收集器,經過輸入插件從文件中獲取數據,而後傳輸給 Logstash 將經過過濾插件加工並結構化處理日誌數據後發送至 Elasticsearch 存儲,最後經過 Kibana 進行可視化展現分析。架構

PS:須要對上圖中 ELK 的各個組件分別作 隔離 處理

 

2.1. FileBeat隔離

因爲每臺機器上都會部署一個 Beat 實例做爲日誌收集,因此 FileBeat 自己無需作任何隔離配置,可是做爲數據的入口須要把所屬 租戶 相關的信息傳遞給下游,以下圖所示elasticsearch

file

經過 project(項目名) 和 env(環境) 做爲 租戶 隔離標識

 

2.2. Logstash隔離

主要是每一個項目的日誌格式可能會不同,因此會存在不一樣的個性化配置文件,這個 日誌解析配置文件 須要定義隔離規則進行分離;分佈式

使用如下命令啓動 logstash 指定 config/conf/ 爲配置存放目錄,並指定配置文件熱加載。測試

bin/logstash -f config/conf/ --config.reload.automatic

 

日誌解析配置文件隔離方法可參考下圖方式:spa

file

(1)01-input-beats.conf插件

爲通用 輸入 配置,每一個租戶共享,用於接收來自 Filebeat 的數據3d

input {
  beats {
    port => 5044
  }
}

 

(2)02-output-es.conf

爲通用 輸出 配置,每一個租戶共享,用於把日誌數據按照定義好的 索引命名規則 建立索引寫入到es中

須要在數據來源中添加 projectenvdocType 三個字段分別表明項目名、環境與日誌類型
output {
  elasticsearch {
    hosts => ["localhost"]
    user => "elastic"
    password => "changeme"
    index => "%{[fields][project]}-%{[fields][env]}-%{[fields][docType]}-%{+YYYY.MM.dd}"
  }
}
ip、用戶名和密碼按實際狀況修改

 

(3)mp.conf

爲個性化 日誌解析 配置,每一個租戶單獨新建一個配置文件配置本身的 filter 內容

filter {
  if [fields][project] == "mp" and [fields][env] == "pre" and [fields][docType] == "syslog" {
    grok {
      ..........
    }
  }
}
PS:必需增長 if 語句來確認是否屬於本身租戶的日誌數據!

 

2.3. Elasticsearch隔離

經過不一樣的索引命名,建立各自獨立的索引實現物理隔離;由前面的 Logstash 在結構化數據後生成索引時,已自動經過 Filebeat 的入參變量動態生成規定的索引名。

索引的命名規則爲:${項目名}-${環境}-${日誌類型}-%{+YYYY.MM.dd}

例如:mp-pre-syslog-2020.12.01

 

2.4. Kibana隔離

可經過多工做區的方式進行隔離,每一個租戶建立本身獨立的工做空間,用於隔離本身的索引數據、展現視圖等對象,而且 相互不可見

工做區的配置流程以下:

  1. 建立工做區
  2. 建立角色(配置權限)
  3. 建立用戶(關聯角色)

2.3.1 建立工做空間

2.3.1.1 超級管理員登陸

使用超級管理員帳號 elastic 登陸Kibana,選擇 默認工做區
file

2.3.1.2 進入管理頁面

file

2.3.1.3 建立工做空間

建立工做區,並可定製顯示的功能點(默認所有顯示)
file

 

2.3.2 建立角色綁定工做空間

建立一個新的角色,並分配對應的 索引權限工做區權限 等權限給該角色
file

 

2.3.3 建立用戶

建立用戶,並綁定本身 工做空間 下的角色
file

PS:該用戶只能看到本身所屬 工做區 下的 索引儀表板 等對象

 

3、總結

每一個 租戶 需對 ELK 的各個組件分別作 隔離 處理

  1. Filebeat:負責把區分 租戶 相關的信息傳遞給下游
  2. Logstash:獨立分開每一個租戶的個性化 Filter 配置文件
  3. Elasticsearch:經過規範的索引命名,各租戶獨立的建立索引實現物理隔離
  4. Kibana:經過多工做區的方式進行隔離,數據與儀表板等互不可見

 

PS:隔離步驟雖然有點繁瑣,可是後期你們能夠自行開發產品化日誌系統,把上述的步驟放在圖形化界面上操做實現。

 

掃碼關注有驚喜!

file

相關文章
相關標籤/搜索