乐趣区

关于java:ELK多租户方案

一、前言

日志剖析是目前重要的零碎调试和问题排查的重要伎俩之一,而目前分布式系统因为实例和机器泛滥,所以构建一套对立日志零碎是十分必要的;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:隔离步骤尽管有点繁琐,然而前期大家能够自行开发产品化日志零碎,把上述的步骤放在图形化界面上操作实现。

 

扫码关注有惊喜!

退出移动版