## 一、前言
日志分析是目前重要的系统调试和问题排查的重要手段之一,而目前分布式系统由于实例和机器众多,所以构建一套统一日志系统是非常必要的;ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用,是目前的主流选择之一。
本文主要介绍如何实现一套`ELK日志系统`同时给**多套环境**、**多个系统**共同使用/测试,并实现相互之间的数据与视图相互**隔离**互不影响。
## 二、隔离方式
常见的`ELK`架构如下图所示,分别由`Elasticsearch`、`Logstash`、`Kibana`与`FileBeat`组成。
![](https://img.kancloud.cn/b7/95/b79543117fd52becd4f338498209ece3_1355x706.png)
分别在每个应用服务器里部署一个`FileBeat`组件作为日志收集器,通过输入插件从文件中获取数据,然后传输给`Logstash`将通过过滤插件加工并结构化处理日志数据后发送至`Elasticsearch`存储,最后通过`Kibana`进行可视化展示分析。
> 需要对上图中`ELK`的各个组件分别做**隔离**处理
### 2.1. FileBeat隔离
由于每台机器上都会部署一个`Beat`实例作为日志收集,所以`FileBeat`本身无需做任何隔离配置,但是作为数据的入口需要把所属**租户**相关的信息传递给下游,如下图所示
![](https://img.kancloud.cn/68/31/683198d547dfc99a558ca7f1647e192d_635x425.png)
> 通过 project(项目名) 和 env(环境) 作为**租户**隔离标识
### 2.2. Logstash隔离
主要是每个项目的日志格式可能会不一样,所以会存在不同的个性化配置文件,这个**日志解析配置文件**需要定义隔离规则进行分离;
使用以下命令启动`logstash`指定`config/conf/`为配置存放目录,并指定配置文件热加载。
~~~
bin/logstash -f config/conf/ --config.reload.automatic
~~~
日志解析配置文件隔离方法可参考下图方式:
![](https://img.kancloud.cn/8e/af/8eaff6aa35dd56a9334b9e8fa5ea2f72_613x81.png)
**(1)01-input-beats.conf**
为通用**输入**配置,每个租户共享,用于接收来自 Filebeat 的数据
~~~
input {
beats {
port => 5044
}
}
~~~
**(2)02-output-es.conf**
为通用**输出**配置,每个租户共享,用于把日志数据按照定义好的**索引命名规则**创建索引写入到es中
> 需要在数据来源中添加`project`、`env`和`docType`三个字段分别代表项目名、环境与日志类型
~~~
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.4.1 创建工作空间
##### 2.4.1.1 超级管理员登录
使用超级管理员账号`elastic`登录Kibana,选择**默认工作区**
![](https://img.kancloud.cn/c6/74/c674eb4f715907918f6b1fe0f3626a0b_984x867.png)
##### 2.4.1.2 进入管理页面
![](https://img.kancloud.cn/60/93/60937a391b8473e6bce04ba8e9e5d679_323x773.png)
##### 2.4.1.3 创建工作空间
创建工作区,并可定制显示的功能点(默认全部显示)
![](https://img.kancloud.cn/23/db/23dbdba141e40b828da986e2d98cc183_2509x1005.png)
#### 2.4.2 创建角色绑定工作空间
创建一个新的角色,并分配对应的`索引权限`与`工作区权限`等权限给该角色
![](https://img.kancloud.cn/72/aa/72aacca3fda16128ec8d054093b632bf_2375x956.png)
#### 2.4.3 创建用户
创建用户,并绑定自己`工作空间`下的角色
![](https://img.kancloud.cn/20/3c/203c3434bcd53ef3f84c26e60bfd41af_1726x1165.png)
> **PS**:该用户只能看到自己所属`工作区`下的`索引`和`仪表板`等对象
## 三、总结
每个**租户**需对`ELK`的各个组件分别做**隔离**处理
1. **Filebeat**:负责把区分**租户**相关的信息传递给下游
2. **Logstash**:独立分开每个租户的个性化`Filter`配置文件
3. **Elasticsearch**:通过规范的索引命名,各租户独立的创建索引实现物理隔离
4. **Kibana**:通过多工作区的方式进行隔离,数据与仪表板等互不可见
> 隔离步骤虽然有点繁琐,但是后期大家可以自行开发产品化日志系统,把上述的步骤放在图形化界面上操作实现。
- springcloud
- springcloud的作用
- springboot服务提供者和消费者
- Eureka
- ribbon
- Feign
- feign在微服务中的使用
- feign充当http请求工具
- Hystrix 熔断器
- Zuul 路由网关
- Spring Cloud Config 分布式配置中心
- config介绍与配置
- Spring Cloud Config 配置实战
- Spring Cloud Bus
- gateway
- 概念讲解
- 实例
- GateWay
- 统一日志追踪
- 分布式锁
- 1.redis
- springcloud Alibaba
- 1. Nacos
- 1.1 安装
- 1.2 特性
- 1.3 实例
- 1. 整合nacos服务发现
- 2. 整合nacos配置功能
- 1.4 生产部署方案
- 环境隔离
- 原理讲解
- 1. 服务发现
- 2. sentinel
- 3. Seata事务
- CAP理论
- 3.1 安装
- 分布式协议
- 4.熔断和降级
- springcloud与alibba
- oauth
- 1. abstract
- 2. oauth2 in micro-service
- 微服务框架付费
- SkyWalking
- 介绍与相关资料
- APM系统简单对比(zipkin,pinpoint和skywalking)
- server安装部署
- agent安装
- 日志清理
- 统一日志中心
- docker安装部署
- 安装部署
- elasticsearch 7.x
- logstash 7.x
- kibana 7.x
- ES索引管理
- 定时清理数据
- index Lifecycle Management
- 没数据排查思路
- ELK自身组件监控
- 多租户方案
- 慢查询sql
- 日志审计
- 开发
- 登录认证
- 链路追踪
- elk
- Filebeat
- Filebeat基础
- Filebeat安装部署
- 多行消息Multiline
- how Filebeat works
- Logstash
- 安装
- rpm安装
- docker安装Logstash
- grok调试
- Grok语法调试
- Grok常用表达式
- 配置中常见判断
- filter提取器
- elasticsearch
- 安装
- rpm安装
- docker安装es
- 使用
- 概念
- 基础
- 中文分词
- 统计
- 排序
- 倒排与正排索引
- 自定义dynamic
- 练习
- nested object
- 父子关系模型
- 高亮
- 搜索提示
- kibana
- 安装
- docker安装
- rpm安装
- 整合
- 收集日志
- 慢sql
- 日志审计s
- 云
- 分布式架构
- 分布式锁
- Redis实现
- redisson
- 熔断和降级