一、前言
日志分析是目前重要的系統調試和問題排查的重要手段之一,而目前分布式系統由於實例和機器眾多,所以構建一套統一日志系統是非常必要的;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:隔離步驟雖然有點繁瑣,但是后期大家可以自行開發產品化日志系統,把上述的步驟放在圖形化界面上操作實現。
掃碼關注有驚喜!