一:Elastic Stack 简介(1~2)
1.:Elastic Stack 简介
1)名称来源
2)技术栈组成
3)Elastic stack 每个组件的作用
4)四个技术具体解释
二:es—快速入门(3~13)
三:核心讲解(14~22)
四:全文搜索(23~27)
五:集群(28~34)
六:Java 客户端 & 课程总结(35~38)
参考:
https://blog.csdn.net/qq_43056248/article/details/123048092
七:ELK 课程介绍 & 安装 Nignx(39~41)
1.:Nginx 日志分析系统:
1)项目需求:
2)业务流程 & 说明:
3)说明:
2.:部署安装 Nginx
tar -zxvf nginx-1.21.0.tar.gz
// 安装依赖环境
yum -y install gcc
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum install -y openssl openssl-devel
// 安装
./configure
make
make install
// 启动
cd /usr/local/nginx/sbin/
./nginx
// 通过浏览器访问首页,并查看日志:
http://192.168.124.11:80/
tail -f /usr/local/nginx/logs/access.log
八:Beats 简介 & Filebeat 入门(42~49)
1.:Beats 简介
1)Elastic Stack 的组成:
2)官网介绍:
https://www.elastic.co/beats/
-1:
Filebeat
-2:
Metricbeat
2.:介绍:Filebeat 采集日志文件
3.:Filebeat:架构:
1)用于监控、收集服务器日志文件。
2)架构图、工作流程图。
4.:运行 与 部署:
1)下载:
https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.11.0-linux-x86_64.tar.gz
2)解压:
mkdir /usr/local/beats
tar -zxvf filebeat-7.11.0-linux-x86_64.tar.gz
3)在 filebeat 目录下,创建一个配置文件:itcast.yml
1 filebeat.inputs:
2 - type: stdin -- 启用输入(标准输入)
3 enabled: true -- 开启
4 setup.template.settings:
5 index.number_of_shards: 3 -- 指定分片数
6 output.console: -- 输出(控制台)
7 pretty: true -- 输出美化
8 enable: true -- 输出启用
4)启动 filebeat:
./filebeat -e -c itcast.yml -- 前台启动
./filebeat -e -c itcast.yml -d "publish"
-1:
-e:输出到标准输出,默认是输出到 syslog 和 logs 下。
-2:
-c:指定配置文件。
-3:
-d:可以在 控制台输出打印 debug 信息。 (控制台打印:存储到 es 里的 json内容)(实际生产中,要去掉)。
5)访问测试:
控制台输入 hello
6)运行结果如下:
5.:读取 Nginx 日志文件,输出到控制台:
1)配置 itcast-nginx.yml:
filebeat.inputs:
- type: log
enabled: true
paths: -- 读取文件的路径
- /usr/local/nginx/logs/access.log
setup.template.settings:
index.number_of_shards: 3 -- 指定分片数量
output.console:
pretty: true
enable: true
2)启动 filebeat:根据 itcast-nginx.yml:
// 启动 filebeat
./filebeat -e -c itcast-log.yml
3)访问 Nginx,使之生成日志。
4)观察 filebeat 输出:
(message)
-1:
可以看出,检测到 Nignx 日志文件有更新。
-2:
立即就会读取到更新的内容,并且输出到控制台打印。
2022-02-24T20:03:24.877+0800 INFO log/harvester.go:302 Harvester started for file: /usr/local/nginx/logs/access.log
{
"@timestamp": "2022-02-24T12:03:24.877Z",
"@metadata": {
"beat": "filebeat",
"type": "_doc",
"version": "7.11.0"
},
"agent": {
"hostname": "localhost",
"ephemeral_id": "cfbbbe52-b4d3-4a60-9437-7bcf89122640",
"id": "baa44686-68fa-48d2-9d5e-008844fa770a",
"name": "localhost",
"type": "filebeat",
"version": "7.11.0"
},
"log": {
"offset": 1026,
"file": {
"path": "/usr/local/nginx/logs/access.log"
}
},
"message": "192.168.124.5 - - [24/Feb/2022:20:03:22 +0800] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36\"",
"input": {
"type": "log"
},
"ecs": {
"version": "1.6.0"
},
"host": {
"name": "localhost"
}
}
6.:自定义字段:
配置读取文件项:itcast-log.yml
filebeat.inputs:
- type: log
enabled: true
paths: -- 读取文件的路径
- /usr/local/nginx/logs/access.log
// 添加自定义 tag,便于后续的区分、处理
tags: ["nginx---1----nginx","nginx----2-----nginx"]
// 添加 自定义字段
fields:
form: fields---1----fields
// true:为添加到跟节点中。false:为添加到子节点中。
fields_under_root: true
setup.template.settings:
index.number_of_shards: 3 -- 指定分片数量
output.console:
pretty: true
enable: true
1)添加 tags 后效果:
"message": "192.168.124.5 - - [26/Feb/2022:12:31:21 +0800] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36\"",
"tags": [
"nginx---1----nginx",
"nginx----2-----nginx"
],
2)添加 fields 后效果:
-- false
{
"fields": {
"form": "fields---1----fields"
}
}
-- true
{
"form": "fields---1----fields"
}
7.:读取 Nginx 日志,收集输出到 Elasticsearch
1)修改配置:
2)再次启动 filebeat:
3)访问 Nginx,生成日志:
-1:索引库以天为单位,划分存储:
-2:查询es的状态、新增索引状态、数据:
4)存在问题:
-1:
可以看到:在 message 中,已经获取到了 nginx 的日志,但是,内容并没有经过处理,只是读取到原数据。
-2:
那么,对于我们后期的操作,是不利的,有办法解决吗?
-3:引入 Module:
"message": "192.168.124.5 - - [24/Feb/2022:20:03:22 +0800] \"GET / HTTP/1.1\" 304 0 \"-\" \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/98.0.4758.109 Safari/537.36\"",
8.:Filebeat 工作原理:
Filebeat 由两个主要组件组成:【 prospector 和 harvester】
1)harvester:
【收割机】
-1:
负责读取单个文件的内容。
-2:
如果文件在读取时,被删除或重命名,Filebeat 将继续跟踪这个文件,继续读取这个文件。
2)prespector:
【勘探者; 探矿者】
-1:
prespector 负责管理 harverster。并找到所有要读取的文件来源。
-2:
如果输入类型为日志,则查找器,将查找路径匹配的所有文件。并为每个文件,启动一个 harvester。
-3:Filebeat 目前支持两种 prospector 类型:
-:1、log(日志文件)
-:2、stdin(标准输入)
3)Filebeat 如何保持文件的状态:
-1:
Filebeat 保存每个文件的状态,并经常将状态,刷新到磁盘上的注册文件中。(文件状态记录在 data/redistry 文件中。)
-2:
该状态,用于记住 harvester 正在读取文件最后的偏移量,并确保发送所有日志行。
-3:
如果输出(例如:Elasticsearch 或 Logstash)无法访问,Filebeat 会跟踪最后发送的行,并在输出再次可用时,继续读取文件。再次发送数据。(Fliebeat 自动完成)
-4:
在 Filebeat 运行时,每个 prospector 内存中,也会保存的文件状态信息(减少文件保存次数,减少IO的开销)。
当重启 Filebeat 时,将使用注册文件的数据,来重建文件状态。Filebeat 将每个 harverster 在从保存的最后偏移量继续读取。
9.:Module 的使用
1)前面:
要想实现日志数据的读取,以及处理,都是手动配置的。
其实,在 Filebeat 中,有大量的 Module,可以简化我们的配置,直接就可以使用,如下:
2)查看 Module 列表:
./filebeat modules list
3)启用 & 禁用 Nginx
./filebeat modules enable nginx
./filebeat modules disable nginx
4)启用后查看:
可以发现,已经被启用
5)nginx module 配置
(Nginx.yml 未使用:.disabled 结尾,说明文件已启用)
-1:修改 Module 文件:
配置日志 & 错误 日志地址
vim modules.d/nginx.yml
4 - module: nginx
5 # Access logs
6 access:
7 enabled: true
// 安装日期存储,所以要使用 *
8 var.paths: [" /usr/local/nginx/logs/access.log*"]
9
15 error:
16 enabled: true
17 var.paths: [" /usr/local/nginx/logs/error.log*"]
-2:配置 filebeat:
(注释部分代码,添加新的 module 配置)
filebeat.inputs:
#- type: log
# enabled: true
# paths:
# - /usr/local/nginx/logs/access.log
# tags: ["my-nginx"]
setup.template.settings:
index.number_of_shards: 3
output.elasticsearch:
hosts: ["192.168.124.11:9200","192.168.124.12:9200","192.168.124.13:9200"]
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
6)启动 filebeat:
有可能报错,执行提示即可:(安装依赖)
7)访问 nginx,查看记录的日志:
1、日志格式样式,已发生改变。做了一定的解析。
2、其他的 Module 使用方法,参考官方文档。
九:Metricbeat 入门(采集指标数据)(50~52)
1.:Metricbeat 介绍:
1)定义收集,操作系统或应用服务的 指标数据
。
2)存储到 Elasticsearch 中,进行实时分析。
2.:Metricbeat 组成:
Metricbeat 由两部分组成:(Module & Metricset)
1)Module:
收集的对象,如:mysql、redis、nginx、操作系统。
2)Metricset:
收集指标的集合,如:cpu、memory、network等。
以 redis Module 为例,查看是如何收集指标数据的?
(其他的也类似)
3.:部署与收集系统指标:
1)下载:
-1:
https://www.elastic.co/downloads/beats/metricbeat
-2:
https://artifacts.elastic.co/downloads/beats/metricbeat/metricbeat-7.11.0-linux-x86_64.tar.gz
2)解压:
tar -zxvf metricbeat-7.11.0-linux-x86_64.tar.gz
3)查看配置文件,并修改配置:
vim metricbeat.yml
13 metricbeat.config.modules:
14 path: ${path.config}/modules.d/*.yml
93 output.elasticsearch:
94 hosts: ["192.168.124.11:9200","192.168.124.12:9200","192.168.124.13:9200"]
4)启动:
./metricbeat -e
4.:启动后:可以看到指标数据已经被写入到 Elasticsearch
5.:Module 的使用:
1)查看 系统级,采集配置文件:(默认开启)
-1:
vim /modules.d/system.yml
6.:Nginx Module 配置
1)查看 / 开启 / 关闭 Nginx module
./metricbeat modules list
./metricbeat modules enable nginx
2)开启 Ngnix module
-1:
在 Nginx 中,需要开启状态查询,才能查询到指标数据:
-2:重新编译 Nginx
./configure --prefix=/usr/local/nginx --with-http_stub_status_module
./configure --prefix=/usr/local/nginx --with-http_stub_status_module
make
make install
-3:查看 Nginx 版本:(大写)
./nginx -V
// 应该显示内容如下:
nginx version: nginx/1.21.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
configure arguments: --with-http_stub_status_module
-4:修改 nginx 配置文件:
vim conf/nginx.conf
35 server {
36 listen 80;
37 server_name localhost;
38 location /nginx-status {
39 stub_status on;
40 access_log off;
41 }
-5:重启 Nginx
./sbin/nginx -s stop
./sbin/nginx
3)访问,查询 nginx 状态信息:
http://192.168.124.11/nginx-status
4)结果说明:
-1:Active connections:
表示正在处理等活动连接数。
-2:server、accepts、handled requests:
-3:Reading、Writing、Waiting:
5)配置 Nginx Module:
-1:启用 nginx module
./metricbeat modules enable nginx
-2:修改 配置文件:
module.d/nginx.yml
10 hosts: ["http://192.168.124.11:80"]
//和访问 Nginx 控制台配置路径相同
13 server_status_path: "nginx-status"
-3:启动
./metricbeat -e
6)控制台:
十:Kibana 入门(53~57)
Kibana 介绍
1)官网介绍:
https://www.elastic.co/cn/kibana/
2)讲义介绍:
-1:Kibana:
是一款开源的数据分析和可视化平台,它是 Elastic stack 成员之一,设计用于和 Elasticseatch 协作。
-2:
您可以使用 Kibana,对 Elasticsearch 索引中的数据,进行搜索、查看、交互等操作。
-3:
也可以很方便的,利用图表、表格以及地图,对数据进行多元化的分析和呈现。
1.:Kibana 配置安装
1)下载,解压安装包
https://artifacts.elastic.co/downloads/kibana/kibana-7.11.0-linux-x86_64.tar.gz
tar -zxvf kibana-7.11.0-linux-x86_64.tar.gz
2)修改配置文件:
vim config/kibana.yml
// 修改 对外暴露服务的地址
7 server.host: "192.168.124.11"
// 配置 Elasticsearch(6.x版本可能为注释内容)
// elasticsearch.url: "http://192.168.124.11:9200"
32 elasticsearch.hosts: ["http://192.168.124.11:9200"]
3)启动:
(需要切换非 root 用户)
./bin/kibana
4)浏览器进行访问:
http://192.168.124.11:5601
2:功能说明:
3.:Discover:数据探索
1)首先添加索引信息:
2)刷新 Discover,会出现数据:
4.:Metricbeat 仪表盘
1)可以将 Metricbeat 的数据,在 Kibana 中,使用仪表盘方式 展示:
2)Metricbeat 中的配置操作:
-1:修改 metricbeat 配置:
vim metricbeat.yml
61 setup.kibana:
67 host: "192.168.124.11:5601"
-2:安装 仪表盘 到 Kibana:
(要确保 Kibana 处于运行状态)(速度慢)
./metricbeat setup --dashboards
// 安装成功提示
Loading dashboards (Kibana must be running and reachable)
Loaded dashboards
-3:启动 Metricbeat,使之不断产生数据:
./metricbeat -e
5.1:System 指标仪表盘(Metricbeat)
5.2:Nginx 指标仪表盘(Metricbeat)
6.:Nginx 日志仪表盘(Filebeat)
1)修改配置文件:
vim itcast-nginx.yml
1 filebeat.inputs:
2 #- type: log
3 # enabled: true
4 # paths:
5 # - /usr/local/nginx/logs/access.log
6 # tags: ["my-nginx"]
7 setup.template.settings:
8 index.number_of_shards: 3
9 output.elasticsearch:
10 hosts: ["192.168.124.11:9200","192.168.124.12:9200","192.168.124.13:9200"]
11
12 filebeat.config.modules:
13 path: ${path.config}/modules.d/*.yml
14 reload.enabled: false
/* 新增:*/
15 setup.kibana:
16 host: "192.168.124.11:5601"
2)filebeat 安装 仪表盘到 kibana中
(慢)
./filebeat -c itcast-nginx.yml setup
// 响应打印:
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling.
Index setup finished.
Loading dashboards (Kibana must be running and reachable)
3)启动 filebeat:
./filebeat -e -c itcast-nginx.yml
3)访问 Kibana,查看日志仪表盘:
搜索:Filebeat Nginx Overview
7.:自定义图表
1)在 Kibana 中,也可以进行自定义图表,如制作柱形图。
8.:开发者工具(Dev Tools)
十一:LogStash 入门(58~60)
1.:Logstash 入门 & 简介
1)简介:
-1:官网:
https://www.elastic.co/cn/logstash/
2)用途:
输入 -> 处理 -> 输出
2.:Logstassh 部署安装 & demo:
1)检查 JDK 环境,要求 1.8
(因为 Logstash 是 java 开发的)
java -version
2)下载 & 解压安装包:
// 下载:https://artifacts.elastic.co/downloads/logstash/logstash-7.10.0-linux-x86_64.tar.gz
tar -zxvf logstash-7.10.0-linux-x86_64.tar.gz
3)第一个基本 Logstash 示例演示:
启动很慢,java写的,需先启动虚拟机。
./bin/logstash -e 'input { stdin { } } output { stdout {} }'
4)执行效果如下:
输入 hello,输出 json
hello
{
"message" => "hello",
"@timestamp" => 2022-02-25T11:04:02.760Z,
"host" => "localhost",
"@version" => "1"
}
3.:配置详解:(3 部分)
1)input:输入:
-1:
采集各种样式、大小和来源的数据。数据往往以各种各样的形式,或分散、或集中的,存在于很多系统中。
-2:
Logstash 支持各种输入选择。可以在同一时间,从众多常用来源捕捉事件。
-3:
能够以连续的流式传输方式,轻松的从您的日志、指标、Web应用、数据存储,以及各种 AWS 服务采集数据。
2)filter:过滤(重要):
对数据进行分割、截取等处理:
-1:
实时解析和转换数据。
-2:
数据从源,传输到存储库的过程中。Logstash 过滤器能够解析各个事件,识别已命名的字段,以构建结构。
-3:
并将它们转换成为通用格式,以便更轻松、跟快速的分析和实现商业价值。
3)output:输出
-1:
Logstash 提供众多输出选择,您可以将数据,发送到您指定的地方,并且能够灵活的解锁众多下游用例。
4.:读取自定义日志 & 解析处理:
1)说明:
-1:
前面我们通过 Filebeat,读取了 Nginx 的日志,如果是自定义结构的日志,就需要读取处理后,才能使用。
-2:
所以,这个时候就需要使用 Logstash 了。因为 Logstash 有着强大的处理能力,可以应对各种各样的场景。
2)日志结构:
-1:
可以看到,日志中的内容,是使用“|”进行分割的,使用,我们在处理时候,也需要对数据做分割处理。
3)编写配置文件:
vim itcast-pipeline.conf
input {
file { 读取来源是一个文件
path => "/itcast/logstash/logs/app.log" 读取这个日志文件
start_position => "beginning" 从日志文件开头,开始读取
}
}
filter { 过滤:
mutate {
split => {"message" => "|"} 拿到 message 数据,用 “|”进行分割
}
}
output {
stdout { codec => rubydebug } 标准的控制台输出
}
4)创建对应的日志文件:
mkdir -p /itcast/logstash/logs/app.log
5)启动:
./bin/logstash -f itcast-pipeline.conf
6)追加写日志,到文件:
(另一个控制台)
echo "20190-02-02 21:21:21|ERROR|读取文件出错|参数:ID= 18" ->> app.log
7)查看效果:
(捕获数据,并对字符串进行了分割)
5.:实战使用:输出到 Elasticsearch:
1)修改配置文件:
vim itcast-pipeline.conf
input {
file {
path => "/itcast/logstash/logs/app.log"
# type => "system"
start_position => "beginning"
}
}
filter { 过滤:
mutate {
split => {"message" => "|"} 拿到 message 数据,用 “|”进行分割
}
}
output {
elasticsearch {
hosts => {"192.168.124.11:9200","192.168.124.12:9200","192.168.124.13:9200"}
}
}
2)启动:Logstash
./bin/logstash -f ./itcast-pipeline.conf
3)写入数据:
echo "20190-02-02 21:21:21|ERROR|读取文件出错|参数:ID= 18" ->> app.log
4)查看 Elasticseatch 的 Kibana 控制台 数据:
十二:Elastic Stack 综合练习 & 总结(61~65)
下面,我们将前面,学习到的 【Elasticsearch + Logstash + Beats + Kibana】整合起来。做一个综合性的练习。
目的:就是让学生们,更加深刻的理解 Elastic Stack 的使用。
1.:流程说明:
1)图示:
2)解释:
(日志格式、图表、Dashboard 都是自定义的)
-1:
应用 APP 生产日志,用来记录用户的操作:
-2:
通过 Filebeat 读取日志文件中的内容。并且将内容,发送给 Logstash,原因是需要对内容进行处理。
-3:
Logstash 接收到内容后,进行处理。如分割操作。然后将内容发送到 Elasticsearch 中。
-4:
Kibana 会读取 Elasticsearch 中的数据。并且在 Kibana 中,进行设计 Dashboard,最后进行展示。
2.:APP 介绍:
1)说明:
APP 在生产环境中,应该是真实的系统,然而,我们现在仅是学习,为了简化操作,所以就做数据的模拟生成即可。业务代码如下:
@Data
@RestController
public class test {
private static final Logger logger = LoggerFactory.getLogger(test.class);
@RequestMapping(value = "/hhh")
public void hello() throws InterruptedException {
while (true) {
LocalDateTime now = LocalDateTime.now();
String format = now.format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
String result = "开始|" + format + "|日志|" + "|结束";
Thread.sleep(2000);
logger.info(result);
}
}
}
2)将 app 打成 jar 包,放置服务器上并启动:
java -jar xxx.jar
java -jar xxx.jar & -- 后台打印生成
3)查看生成日志文件:
3.:Filebeat:
1)修改 Filebeat 配置文件:
vim itcast-dashboard.yml
1 filebeat.inputs:
2 - type: log
3 enabled: true
4 paths:
5 - /app/testapollo/*.log
6 setup.template.settings:
7 index.number_of_shards: 3
// 日志输出到 Logstash
8 output.logstash:
9 hosts: ["192.168.124.11:5044"]
2)启动 Filebeat:
(需要先启动 Logstash 后)
./filebeat -e -c itcast-dashboard.yml
4.:Logstash:
1)编辑 Logstash 配置文件:
vim itcast-dashboard.conf
// 简单的版本,控制台打印,测试是否联通
// (logstash 控制台会打印数据)
1 input {
2 beats {
3 port => "5044"
4 }
5 }
6
7 filter {
8 mutate {
9 split => { "message" => "|" }
10 }
11 }
12
13 output {
14 # stdout {
15 # codec => rubydebug
16 # }
17 elasticsearch {
18 hosts => [192.168.124.11:9200]
19 }
20 }
2)启动 es、Logstash、filebeat:
./bin/logstash -f itcast-dashboard.conf
./filebeat -e -c itcast-dashboard.yml
3)使用 插件 / kibana,查询保存到 es 的字段:
4)
5)
6)
7)
5.:Kibana:
-1:启动 Kibana & 通过浏览器进行访问:
./bin/kibana
http://192.168.124.11:5601
-2:
添加 Logstash 索引,到 Kibana 中。
1)时间间隔的柱形图:
2)各个操作的饼图分布:
3)数据表格:
4)制作 DashBoard:
6.:课程总结:
1)
-1: