天天看點

ELK多租戶方案

一、前言

日志分析是目前重要的系統調試和問題排查的重要手段之一,而目前分布式系統由于執行個體和機器衆多,是以建構一套統一日志系統是非常必要的;ELK提供了一整套解決方案,并且都是開源軟體,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用,是目前的主流選擇之一。

本文主要介紹如何實作一套

ELK日志系統

同時給 多套環境 、多個系統 共同使用/測試,并實作互相之間的資料與視圖互相 隔離 互不影響。

二、隔離方式

常見的

ELK

架構如下圖所示,分别由

Elasticsearch

Logstash

Kibana

FileBeat

組成。

ELK多租戶方案

分别在每個應用伺服器裡部署一個

FileBeat

元件作為日志收集器,通過輸入插件從檔案中擷取資料,然後傳輸給

Logstash

将通過過濾插件加工并結構化處理日志資料後發送至

Elasticsearch

存儲,最後通過

Kibana

進行可視化展示分析。

PS:需要對上圖中

ELK

的各個元件分别做 隔離 處理

2.1. FileBeat隔離

由于每台機器上都會部署一個

Beat

執行個體作為日志收集,是以

FileBeat

本身無需做任何隔離配置,但是作為資料的入口需要把所屬 租戶 相關的資訊傳遞給下遊,如下圖所示

ELK多租戶方案
通過 project(項目名) 和 env(環境) 作為 租戶 隔離辨別

2.2. Logstash隔離

主要是每個項目的日志格式可能會不一樣,是以會存在不同的個性化配置檔案,這個 日志解析配置檔案 需要定義隔離規則進行分離;

使用以下指令啟動

logstash

指定

config/conf/

為配置存放目錄,并指定配置檔案熱加載。

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

日志解析配置檔案隔離方法可參考下圖方式:

ELK多租戶方案

(1)01-input-beats.conf

為通用 輸入 配置,每個租戶共享,用于接收來自 Filebeat 的資料

input {
  beats {
    port => 5044
  }
}           

(2)02-output-es.conf

為通用 輸出 配置,每個租戶共享,用于把日志資料按照定義好的 索引命名規則 建立索引寫入到es中

需要在資料來源中添加

project

env

docType

三個字段分别代表項目名、環境與日志類型
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,選擇 預設工作區

ELK多租戶方案
2.3.1.2 進入管理頁面
ELK多租戶方案
2.3.1.3 建立工作空間

建立工作區,并可定制顯示的功能點(預設全部顯示)

ELK多租戶方案

2.3.2 建立角色綁定工作空間

建立一個新的角色,并配置設定對應的

索引權限

工作區權限

等權限給該角色

ELK多租戶方案

2.3.3 建立使用者

建立使用者,并綁定自己

工作空間

下的角色

ELK多租戶方案
PS:該使用者隻能看到自己所屬

工作區

下的

索引

儀表闆

等對象

三、總結

每個 租戶 需對

ELK

  1. Filebeat:負責把區分 租戶 相關的資訊傳遞給下遊
  2. Logstash:獨立分開每個租戶的個性化

    Filter

    配置檔案
  3. Elasticsearch:通過規範的索引命名,各租戶獨立的建立索引實作實體隔離
  4. Kibana:通過多工作區的方式進行隔離,資料與儀表闆等互不可見

PS:隔離步驟雖然有點繁瑣,但是後期大家可以自行開發産品化日志系統,把上述的步驟放在圖形化界面上操作實作。

掃碼關注有驚喜!

ELK多租戶方案