一、前言

日志分析是目前重要的系统调试和问题排查的重要手段之一,而目前分布式系统由于实例和机器众多,所以构建一套统一日志系统是非常必要的;ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用,是目前的主流选择之一。

本文主要介绍如何实现一套 ELK日志系统 同时给 多套环境多个系统 共同使用/测试,并实现相互之间的数据与视图相互 隔离 互不影响。

二、隔离方式

常见的 ELK 架构如下图所示,分别由 ElasticsearchLogstashKibanaFileBeat 组成。

分别在每个应用服务器里部署一个 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中

需要在数据来源中添加 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,选择 默认工作区

2.3.1.2 进入管理页面

2.3.1.3 创建工作空间

创建工作区,并可定制显示的功能点(默认全部显示)

2.3.2 创建角色绑定工作空间

创建一个新的角色,并分配对应的 索引权限工作区权限 等权限给该角色

2.3.3 创建用户

创建用户,并绑定自己 工作空间 下的角色

PS:该用户只能看到自己所属 工作区 下的 索引仪表板 等对象

三、总结

每个 租户 需对 ELK 的各个组件分别做 隔离 处理

  1. Filebeat:负责把区分 租户 相关的信息传递给下游
  2. Logstash:独立分开每个租户的个性化 Filter 配置文件
  3. Elasticsearch:通过规范的索引命名,各租户独立的创建索引实现物理隔离
  4. Kibana:通过多工作区的方式进行隔离,数据与仪表板等互不可见

PS:隔离步骤虽然有点繁琐,但是后期大家可以自行开发产品化日志系统,把上述的步骤放在图形化界面上操作实现。

扫码关注有惊喜!

ELK多租户方案的更多相关文章

  1. ELK + kafka 日志方案

    概述 本文介绍使用ELK(elasticsearch.logstash.kibana) + kafka来搭建一个日志系统.主要演示使用spring aop进行日志收集,然后通过kafka将日志发送给l ...

  2. FreeSql 将 Saas 租户方案精简到极致[.NET ORM SAAS]

    什么是多租户 维基百科:"软件多租户是指一种软件架构,在这种软件架构中,软件的一个实例运行在服务器上并且为多个租户服务".一个租户是一组共享该软件实例特定权限的用户.有了多租户架构 ...

  3. FreeSql 将 Saas 租户方案精简到极致[.NET ORM]

    什么是多租户 维基百科:"软件多租户是指一种软件架构,在这种软件架构中,软件的一个实例运行在服务器上并且为多个租户服务".一个租户是一组共享该软件实例特定权限的用户.有了多租户架构 ...

  4. ELK日志分析方案

    针对公司项目微服务化,随着项目及服务器的不断增多,决定采用ELK(Elasticsearch+Logstash+Kibana)日志分析平台进行微服务日志分析. 1.ELK整体方案 1.1 ELK架构图 ...

  5. 实现saas多租户方案比较

    看到一篇比较多租户数据隔离方案的文章,总结挺不错.其实大部分内容在我前几年写的文章都有. 文章翻译自: https://blog.arkency.com/comparison-of-approache ...

  6. saas系统多租户数据隔离的实现(一)数据隔离方案

    0. 前言 前几天跟朋友聚会的时候,朋友说他们公司准备自己搞一套saas系统,以实现多个第三方平台的业务接入需求.聊完以后,实在手痒难耐,于是花了两天时间自己实现了两个saas系统多租户数据隔离实现方 ...

  7. 云计算Docker全面项目实战(Maven+Jenkins、日志管理ELK、WordPress博客镜像)

    2013年,云计算领域从此多了一个名词“Docker”.以轻量著称,更好的去解决应用打包和部署.之前我们一直在构建Iaas,但通过Iaas去实现统一功  能还是相当复杂得,并且维护复杂.将特殊性封装到 ...

  8. 初探 ELK - 每天5分钟玩转 Docker 容器技术(89)

    在开源的日志管理方案中,最出名的莫过于 ELK 了.ELK 是三个软件的合称:Elasticsearch.Logstash.Kibana. Elasticsearch一个近乎实时查询的全文搜索引擎.E ...

  9. 多租户实现之基于Mybatis,Mycat的共享数据库,共享数据架构

    前言 SaaS模式是什么? 传统的软件模式是在开发出软件产品后,需要去客户现场进行实施,通常部署在局域网,这样开发.部署及维护的成本都是比较高的. 现在随着云服务技术的蓬勃发展,就出现了SaaS模式. ...

  10. SpringBoot使用ELK日志收集

    本文介绍SpringBoot应用配合ELK进行日志收集. 1.有关ELK 1.1 简介 在之前写过一篇文章介绍ELK日志收集方案,感兴趣的可以去看一看,点击这里-----> <ELK日志分 ...

随机推荐

  1. 【终极指南】使用Python可视化分析文本情感倾向

    本文分享自华为云社区<Python理解文本情感倾向的终极指南>,作者: 柠檬味拥抱. 情感分析是一种通过自然语言处理技术来识别.提取和量化文本中的情感倾向的方法.Python在这一领域有着 ...

  2. NOIP模拟89(多校22)

    T1 谜之阶乘 解题思路 二分答案,发现 \(a-b\) 至多为 19,毕竟 \(20!\) 已经大于 \(10^{18}\) 了. 对于每一种可能的差值,每一次二分 \(b+1\) 直接枚举乘积进行 ...

  3. js 设置复选框选中后不勾选

    今天在解决bug的时候,明明觉得这是个小问题,但是在我去调试的时候,发现使用setAttribute一直没得效果,虽然input框已经设置了checked属性,但是无法勾选,于是在网上找了一大堆,发现 ...

  4. wordpress博客系统报错

    第一种,只显示nginx的默认网页 说明wordpress的网页配置文件没有被系统读取 我们就需要去查看nginx的配置文件/etc/nginx/conf.d/default.conf 首先,查看是不 ...

  5. 忘记root密码,破解root密码

    破解root用户密码: 1.按e进入内核参数重置界面 2.找到开头Linux的段落,行尾输入rd.break 3.按ctrl+x 进入可选步骤 5.以读写方式挂载sysyroot 修改root密码要挂 ...

  6. liquibase常用操作

    1.概述 Liquibase是一个用于跟踪.管理和应用数据库变化的开源的数据库重构工具.它将所有数据库的变化(包括结构和数据)都保存在XML文件中,便于版本控制. 本文旨在将平时工作中常用的一些操作进 ...

  7. C#窗体内控件大小随窗体等比例变化

    一.首先定义全局变量 1 private float X;//当前窗体的宽度 2 private float Y;//当前窗体的高度 3 private bool IsFirst = true; 二. ...

  8. 荣耀无5G开关,荣耀手机,荣耀80GT

    荣耀无5G开关,荣耀手机,荣耀80GT. Magic OS 版本号是:7.0.0.138(C00E135R2P6). 解决方法: 1.进入设置-关于手机-连续点击7次版本号. 会提示,开发者选项已开启 ...

  9. EF MYSQL 出现:输入字符串的格式不正确

    实体类字段和数据库类型不一致. 比如:数据库是char类型字段,程序里声明为int.

  10. 哎,被这个叫做at least once的玩意坑麻了。

    你好呀,我是歪歪. 前几天遇到一个生产问题,同一个数据在数据库里面被插入了两次,导致后续处理出现了一些问题. 当时我们首先检讨了自己,没有做好幂等校验.甚至还发现了一个低级错误:对应的表,针对订单号, ...