ELK多租户方案

file

1、前言

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

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

 

2、隔离方式

常见的 ELK 架构以下图所示,分别由 ElasticsearchLogstashKibanaFileBeat 组成。
file服务器

分别在每一个应用服务器里部署一个 FileBeat 组件做为日志收集器,经过输入插件从文件中获取数据,而后传输给 Logstash 将经过过滤插件加工并结构化处理日志数据后发送至 Elasticsearch 存储,最后经过 Kibana 进行可视化展现分析。架构

PS:须要对上图中 ELK 的各个组件分别作 隔离 处理

 

2.1. FileBeat隔离

因为每台机器上都会部署一个 Beat 实例做为日志收集,因此 FileBeat 自己无需作任何隔离配置,可是做为数据的入口须要把所属 租户 相关的信息传递给下游,以下图所示elasticsearch

file

经过 project(项目名) 和 env(环境) 做为 租户 隔离标识

 

2.2. Logstash隔离

主要是每一个项目的日志格式可能会不同,因此会存在不一样的个性化配置文件,这个 日志解析配置文件 须要定义隔离规则进行分离;分布式

使用如下命令启动 logstash 指定 config/conf/ 为配置存放目录,并指定配置文件热加载。测试

bin/logstash -f config/conf/ --config.reload.automatic

 

日志解析配置文件隔离方法可参考下图方式:spa

file

(1)01-input-beats.conf插件

为通用 输入 配置,每一个租户共享,用于接收来自 Filebeat 的数据3d

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,选择 默认工做区
file

2.3.1.2 进入管理页面

file

2.3.1.3 建立工做空间

建立工做区,并可定制显示的功能点(默认所有显示)
file

 

2.3.2 建立角色绑定工做空间

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

 

2.3.3 建立用户

建立用户,并绑定本身 工做空间 下的角色
file

PS:该用户只能看到本身所属 工做区 下的 索引仪表板 等对象

 

3、总结

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

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

 

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

 

扫码关注有惊喜!

file

相关文章
相关标签/搜索