ES集群部署及EFK架构梳理
一.后续课程安排
1.介绍
- ElasticStack:6~7days
PB级别日志分析系统。
- Docker: 5~6days
容器管理工具。
- Prometheus: 5days
监控系统,尤其是在云原生领域中非常优秀。
- Ceph: 4days
分布式存储系统,块存储,对象存储,文件系统。
- Kubernetes: 17~19days
容器的集群编排工具。
二.ElasticStack及EFK架构梳理
1.什么是ElasticStack
ElasticStack是elastic公司推出的一系列技术栈。
早期ElasticStack的前身,有一个很火的名词叫ELK,代表的是该公司的三款日志采集方案的技术栈。
- ElasticSearch
是一款分布式高可用的数据库,主要作用就是存储和检索数据。
简称ES集群。
- Logstash
是一款日志分析处理工具,主要对数据进行过滤,处理,转换等相关操作,将处理后的数据写入ES集群。
- Kibana
需要链接ES集群,可以图形化查询ES集群数据。简化查询过程。
后来,logstash相对来说比较重量级,业界开始使用其他的日志采集工具进行替代(比如Fluentd,Flume等),官方也推出了轻量级解决方案,beats组件,其中比较出名的就是Filebeat,主要是用于日志文件采集。
于是起名字就成了一个问题,有的公司使用ELFK架构,EFK架构,ELK架构,后来官方将elk stack更名为elasticstack。
官方文档:
https://www.elastic.co/cn/
“ES8-“版本技术文档:
https://www.elastic.co/guide/index.html
2.EFK架构图解

如上图所示,EFK架构是业界目前主流的一种日志采集解决方案。
三.ElasticSearch环境部署
1.ElasticSearch单点部署
1 | |
2.ElasticSearch集群部署
1 | |


这个正则表达式
"^#|^$"用于egrep -v(反向匹配),意思是排除符合条件的行,只显示有效配置行。拆解说明:
^#— 匹配以#开头的行(注释行)
|— 或者
^$— 匹配空行(^是行首,$是行尾,中间没有任何字符)
-v— 反向匹配,即排除匹配到的行所以整条命令的效果是:读取 elasticsearch.yml,过滤掉注释行和空行,只输出真正有效的配置项。
四.ES集群术语及DSL语句初体验
1.ES集群的相关术语

1 | |
2.ES相关的面试题
1 | |
Elasticsearch 天生就是分布式的,核心靠两个概念保证数据安全:
分片(Shard)
- 把一个索引的数据切成多块,分散存到不同节点
- 比如1000万条数据,分成5个分片,每个节点存200万
副本(Replica)
- 每个分片可以有1个或多个副本,存在不同节点上
- 主分片坏了,副本自动顶上
1 | |
只要副本数 ≥ 1,数据不会丢。
1 | |
ES 会自动把副本晋升为主分片,集群继续正常服务。
⚠️ 什么时候会丢数据?
- 副本数设为 0
- 主分片和它唯一的副本恰好在同一节点(ES默认会避免这种情况)
全量更新vs增量更新
增量更新 — 只更新变化的字段
1 | |
3.ES集群的DSL语句初体验
1 | |
Postman 是什么?
Postman 是一个接口调试工具,可以方便地发送 HTTP 请求,不用写代码。
为什么 ES 要用 Postman?
ES 提供的是 REST API,所有操作都通过 HTTP 请求完成:
ES 常用操作对照表
| 操作 | HTTP方法 | 示例 |
|---|---|---|
| 查询文档 | GET | GET /索引名/_doc/1 |
| 新增文档 | POST | POST /索引名/_doc |
| 更新文档 | PUT/POST | PUT /索引名/_doc/1 |
| 删除文档 | DELETE | DELETE /索引名/_doc/1 |
Postman 请求示例
1 | |
五.Kibana组件部署
1.部署kibana组件

1 | |



2.kibana基础使用
1 | |

继续点击Kibana 索引模式 ——> 创建索引模式

后点击Discover

选择相应的索引与字段


六.Filebeat环境部署实战
1.部署Filebeat环境
1 | |
2.Filebeat采集文本日志实战
1 | |
3.课堂练习-Filebeat采集nginx案例
1 | |
七.EFK架构采集nginx实战案例
1.EFK架构采集nginx日志

1 | |
2.Filebeat模块管理实战
2.1 查看模块
1 | |
2.2 启动模块
1 | |
2.3 禁用模块
1 | |
2.4 底层逻辑验证
1 | |
3.filebeat基于模块采集nginx日志
3.1 准备nginx的访问日志
1 | |
3.2 编写Filebeat的模块文件
1 | |
3.3 编写Filebeat的配置文件
1 | |
3.4 启动Filebeat实例
1 | |
3.5 kibana查询相关的字段
1 | |
3.6 过滤数据

1 | |
八.Filebeat多实例
1.什么是Filebeat多实例
1 | |
2.实战案例

1 | |
九.今日内容回顾及作业
1.今日内容回顾
1 | |
2.今日作业
1 | |
3.扩展作业
1 | |
十.自己整理
1 | |
配置步骤
- 编辑 Nginx 配置文件
1 | |
- 创建存放文件的目录
1 | |
- 重载 Nginx
1 | |
- 访问效果
1 | |
点击文件名即可下载。
注意:
这是因为 autoindex 对路径末尾的 / 很敏感。
原因
/files 和 /files/ 在 Nginx 看来是不同的路径:
http://10.0.0.91/files/→ 明确表示这是一个目录,Nginx 正常处理http://10.0.0.91/files→ Nginx 认为这可能是一个文件,找不到就返回 404
解决方法
在配置里加上 return 301 自动跳转,访问 /files 时自动补上 /:
1 | |
重载配置后:
1 | |
之后访问 http://10.0.0.91/files 会自动跳转到 http://10.0.0.91/files/,两种写法都能用了。
上传文件
⚠️ Nginx 默认不支持上传,只能下载/浏览。
上传有几种方案:
| 方案 | 说明 |
|---|---|
nginx-upload-module | 编译安装第三方模块,较复杂 |
用 scp / rsync | 直接命令行传到服务器目录 |
| 搭配后端服务 | 用 Python/Node 写个上传接口,Nginx 反代 |
推荐:用 vsftpd 或 samba | 专门做文件传输,更合适 |
安全建议
如果服务器对外暴露,建议加上密码验证:
1 | |
生成密码文件:
1 | |
nginx重新加载配置文件命令
常用的有以下几种:
1 | |
区别:
reload是平滑重载配置,不会中断现有连接;restart是完全重启,会短暂中断服务,能不用就不用。
nginx中的目录
root 的实际路径 = root 的值 + location 的路径
1 | |
对比几个例子
| root 值 | location | 实际目录 | 访问URL |
|---|---|---|---|
/data | /files/ | /data/files/ | http://ip/files/ |
/ | /files/ | /files/ | http://ip/files/ |
/var/www | /files/ | /var/www/files/ | http://ip/files/ |
/data | / | /data/ | http://ip/ |
用 alias 就不一样了
alias 是直接替换,不拼接:
1 | |
一句话总结
root= root路径 拼上 location路径,目录名要对得上alias= 直接用 alias 的路径,完全替换 location 部分
| 命令 | 作用 |
|---|---|
echo -n | 输出内容但不换行 |
cat -A | 显示隐藏字符(换行、tab等) |
ll -i | 查看文件 inode 编号 |
yy | Vim复制一行 |
p | Vim粘贴 |
十一.作业
1 | |
1 | |
1 | |
1 | |
1 | |
机器准备
| 名称 | 描述 | IP | 系统 |
|---|---|---|---|
| m01 | Ansible所在的服务器 | 10.0.0.81 | Kylin Linux Advanced Server V10 SP3 |
| elk11 | ES集群的节点之一 | 10.0.0.11 | Kylin Linux Advanced Server V10 SP3 |
| elk12 | ES集群的节点之一 | 10.0.0.12 | Kylin Linux Advanced Server V10 SP3 |
| elk13 | ES集群的节点之一 | 10.0.0.13 | Kylin Linux Advanced Server V10 SP3 |
安装包准备
| 安装包名称 | 描述 |
|---|---|
| elasticsearch-7.17.29-x86_64.rpm | 每个节点都需要安装的ES软件包 |
| filebeat-7.17.29-x86_64.rpm | 用于从主机读取数据的filebeat |
| kibana-7.17.29-x86_64.rpm | 用于展示存储在ES节点上的数据 |
配置文件准备
| 配置文件 | 描述 |
|---|---|
| elasticsearch.yml | 每个节点都需要安装的ES软件包 |
| 01-stdin-to-console.yaml | 用于从主机读取数据的filebeat |
| kibana.yml | 用于展示存储在ES节点上的数据 |
kibana
1 | |
filebeat
1 | |
site.yml
1 | |
1 | |
遇到的问题:
1 | |
十二.思维导图整理
