ELK多租户方案

一、前言
日志分析是目前重要的系统调试和问题排查的重要手段之一,而目前分布式系统由于实例和机器众多,所以构建一套统一日志系统是非常必要的;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:隔离步骤虽然有点繁琐,但是后期大家可以自行开发产品化日志系统,把上述的步骤放在图形化界面上操作实现。
扫码关注有惊喜!

ELK多租户方案的更多相关文章
- ELK + kafka 日志方案
概述 本文介绍使用ELK(elasticsearch.logstash.kibana) + kafka来搭建一个日志系统.主要演示使用spring aop进行日志收集,然后通过kafka将日志发送给l ...
- FreeSql 将 Saas 租户方案精简到极致[.NET ORM SAAS]
什么是多租户 维基百科:"软件多租户是指一种软件架构,在这种软件架构中,软件的一个实例运行在服务器上并且为多个租户服务".一个租户是一组共享该软件实例特定权限的用户.有了多租户架构 ...
- FreeSql 将 Saas 租户方案精简到极致[.NET ORM]
什么是多租户 维基百科:"软件多租户是指一种软件架构,在这种软件架构中,软件的一个实例运行在服务器上并且为多个租户服务".一个租户是一组共享该软件实例特定权限的用户.有了多租户架构 ...
- ELK日志分析方案
针对公司项目微服务化,随着项目及服务器的不断增多,决定采用ELK(Elasticsearch+Logstash+Kibana)日志分析平台进行微服务日志分析. 1.ELK整体方案 1.1 ELK架构图 ...
- 实现saas多租户方案比较
看到一篇比较多租户数据隔离方案的文章,总结挺不错.其实大部分内容在我前几年写的文章都有. 文章翻译自: https://blog.arkency.com/comparison-of-approache ...
- saas系统多租户数据隔离的实现(一)数据隔离方案
0. 前言 前几天跟朋友聚会的时候,朋友说他们公司准备自己搞一套saas系统,以实现多个第三方平台的业务接入需求.聊完以后,实在手痒难耐,于是花了两天时间自己实现了两个saas系统多租户数据隔离实现方 ...
- 云计算Docker全面项目实战(Maven+Jenkins、日志管理ELK、WordPress博客镜像)
2013年,云计算领域从此多了一个名词“Docker”.以轻量著称,更好的去解决应用打包和部署.之前我们一直在构建Iaas,但通过Iaas去实现统一功 能还是相当复杂得,并且维护复杂.将特殊性封装到 ...
- 初探 ELK - 每天5分钟玩转 Docker 容器技术(89)
在开源的日志管理方案中,最出名的莫过于 ELK 了.ELK 是三个软件的合称:Elasticsearch.Logstash.Kibana. Elasticsearch一个近乎实时查询的全文搜索引擎.E ...
- 多租户实现之基于Mybatis,Mycat的共享数据库,共享数据架构
前言 SaaS模式是什么? 传统的软件模式是在开发出软件产品后,需要去客户现场进行实施,通常部署在局域网,这样开发.部署及维护的成本都是比较高的. 现在随着云服务技术的蓬勃发展,就出现了SaaS模式. ...
- SpringBoot使用ELK日志收集
本文介绍SpringBoot应用配合ELK进行日志收集. 1.有关ELK 1.1 简介 在之前写过一篇文章介绍ELK日志收集方案,感兴趣的可以去看一看,点击这里-----> <ELK日志分 ...
随机推荐
- 深入浅出Java异常机制
一次对Java异常机制的理解 近期有一个对接三方接口的任务,在这个过程中用到了许多 try-catch 处理,发现自己对异常处理是一知半解,浅浅研究了一下,记录一下,也帮助小伙伴如何正确使用 try- ...
- Linux和Windows时间不一致问题
问题描述 装过双系统或者虚拟机装Linux的人都知道,Linux的时间和Windows往往是不同步的,在编写跨平台程序的时候特别是对时间敏感的代码就带来很大的困扰 解决办法 这个问题可以在Linux下 ...
- ABC332
D 我们可以把矩阵 \(\text{A}\) 看成 \({p,q}\). \(p\) 指现在一行最开始在哪里,\(q\) 指现在这一列最开始在哪里. 于是我们枚举 \(p\) 和 \(q\) 所有可能 ...
- INFINI Labs 产品更新 | Gateway 支持基于 Kafka 的复制能力,发布 Helm Charts 部署方式
INFINI Labs 产品又更新啦~.本次更新概要如下:Easysearch 新增了索引字段相关统计 API,优化了 source_reuse 提升压缩效率:Gateway 新增诸多新特性,如:支持 ...
- 使用Blazor WebAssembly整合PocketBase的基础项目模板
使用Blazor WebAssembly整合PocketBase的基础项目模板 在这篇博客文章中,我们将探讨如何创建一个集成PocketBase的基础Blazor WebAssembly项目.我们将涵 ...
- Flarum 安装和使用教程
随着开源社区的日益繁荣,人们对社区品质的要求也越来越高.传统的 BBS 论坛模式已经难以满足现代用户对美观.便捷.互动性的需求.搭建一个现代化的高品质社区,成为许多网站管理者的迫切需求和共同挑战. 今 ...
- cuda性能优化-2.访存优化
简介 在CUDA程序中, 访存优化个人认为是最重要的优化项. 往往kernel会卡在数据传输而不是计算上, 为了最大限度利用GPU的计算能力, 我们需要根据GPU硬件架构对kernel访存进行合理的编 ...
- 题解:洛谷 P1137 旅行计划
标签:图论,拓扑,dp 题意 给定一张 \(n\) 个点 \(m\) 条边的 DAG,对于每个 \(i\),求以它为终点最多经过多少个点? 思路 由于是 DAG,求的是终点 \(i\) 经过的所有点, ...
- 全志T3+FPGA国产核心板——Pango Design Suite的FPGA程序加载固化
本文主要基于紫光同创Pango Design Suite(PDS)开发软件,演示FPGA程序的加载.固化,以及程序编译等方法.适用的开发环境为Windows 7/10 64bit. 测试板卡为全志T3 ...
- Linux历史管理命令
history管理历史命令 [1].history命令 history命令用于显示历史记录和执行过的命令,登录系统时,会读取~./bash_history历史文件中记录的命令,当我们退出shell时, ...