一、前言
日志分析是目前重要的系統調試和問題排查的重要手段之一,而目前分布式系統由于執行個體和機器衆多,是以建構一套統一日志系統是非常必要的;ELK提供了一整套解決方案,并且都是開源軟體,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用,是目前的主流選擇之一。
本文主要介紹如何實作一套
ELK日志系統
同時給 多套環境 、多個系統 共同使用/測試,并實作互相之間的資料與視圖互相 隔離 互不影響。
二、隔離方式
常見的
ELK
架構如下圖所示,分别由
Elasticsearch
、
Logstash
Kibana
與
FileBeat
組成。

分别在每個應用伺服器裡部署一個
FileBeat
元件作為日志收集器,通過輸入插件從檔案中擷取資料,然後傳輸給
Logstash
将通過過濾插件加工并結構化處理日志資料後發送至
Elasticsearch
存儲,最後通過
Kibana
進行可視化展示分析。
PS:需要對上圖中 ELK
的各個元件分别做 隔離 處理
2.1. FileBeat隔離
由于每台機器上都會部署一個
Beat
執行個體作為日志收集,是以
FileBeat
本身無需做任何隔離配置,但是作為資料的入口需要把所屬 租戶 相關的資訊傳遞給下遊,如下圖所示
通過 project(項目名) 和 env(環境) 作為 租戶 隔離辨別
2.2. Logstash隔離
主要是每個項目的日志格式可能會不一樣,是以會存在不同的個性化配置檔案,這個 日志解析配置檔案 需要定義隔離規則進行分離;
使用以下指令啟動
logstash
指定
config/conf/
為配置存放目錄,并指定配置檔案熱加載。
bin/logstash -f config/conf/ --config.reload.automatic
日志解析配置檔案隔離方法可參考下圖方式:
(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隔離
可通過多工作區的方式進行隔離,每個租戶建立自己獨立的工作空間,用于隔離自己的索引資料、展示視圖等對象,并且 互相不可見。
工作區的配置流程如下:
- 建立工作區
- 建立角色(配置權限)
- 建立使用者(關聯角色)
2.3.1 建立工作空間
2.3.1.1 超級管理者登入
使用超級管理者賬号
elastic
登入Kibana,選擇 預設工作區
2.3.1.2 進入管理頁面
2.3.1.3 建立工作空間
建立工作區,并可定制顯示的功能點(預設全部顯示)
2.3.2 建立角色綁定工作空間
建立一個新的角色,并配置設定對應的
索引權限
工作區權限
等權限給該角色
2.3.3 建立使用者
建立使用者,并綁定自己
工作空間
下的角色
PS:該使用者隻能看到自己所屬下的
工作區
索引
等對象
儀表闆
三、總結
每個 租戶 需對
ELK
- Filebeat:負責把區分 租戶 相關的資訊傳遞給下遊
- Logstash:獨立分開每個租戶的個性化
配置檔案Filter
- Elasticsearch:通過規範的索引命名,各租戶獨立的建立索引實作實體隔離
- Kibana:通過多工作區的方式進行隔離,資料與儀表闆等互不可見
PS:隔離步驟雖然有點繁瑣,但是後期大家可以自行開發産品化日志系統,把上述的步驟放在圖形化界面上操作實作。
掃碼關注有驚喜!