一、前言

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

 

扫码关注有惊喜!