首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ELK多租户方案

ELK多租户方案

作者头像
陶陶技术笔记
发布2020-12-11 15:26:50
2.5K0
发布2020-12-11 15:26:50
举报
文章被收录于专栏:陶陶技术笔记陶陶技术笔记

一、前言

日志分析是目前重要的系统调试和问题排查的重要手段之一,而目前分布式系统由于实例和机器众多,所以构建一套统一日志系统是非常必要的;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 的入参变量动态生成规定的索引名。

索引的命名规则为:{项目名}-{环境}-

例如: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」:隔离步骤虽然有点繁琐,但是后期大家可以自行开发产品化日志系统,把上述的步骤放在图形化界面上操作实现。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 陶陶技术笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、前言
  • 二、隔离方式
    • 2.1. FileBeat隔离
      • 2.2. Logstash隔离
        • 2.3. Elasticsearch隔离
          • 2.4. Kibana隔离
            • 2.3.1 创建工作空间
            • 2.3.2 创建角色绑定工作空间
            • 2.3.3 创建用户
        • 三、总结
        相关产品与服务
        Elasticsearch Service
        腾讯云 Elasticsearch Service(ES)是云端全托管海量数据检索分析服务,拥有高性能自研内核,集成X-Pack。ES 支持通过自治索引、存算分离、集群巡检等特性轻松管理集群,也支持免运维、自动弹性、按需使用的 Serverless 模式。使用 ES 您可以高效构建信息检索、日志分析、运维监控等服务,它独特的向量检索还可助您构建基于语义、图像的AI深度应用。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档