【大数据开发必看】ELK入门及实战

ELK 学习笔记

很多人不知道ELK是什么,先说一下ELK指什么,E表示Elasticsearch,L表示Logstash,K表示Kibana

在发展的过程中,又有了Beats的加入,这个时候就不再使用ELK去命名,而是Elastic Stack

在这里插入图片描述

先简单介绍一下他们的作用分别是什么,这样我们才能知道为什么要学习这些技术

  • Elasticsearch:分布式搜索引擎,还有存储数据
  • Logstash:收集日志,分析和处理日志
  • Kibana:提供web页面,展示数据分析的结果
  • Beats:数据采集,它出现之前,都是Logstash进行日志收集

总结:通过Beats收集数据,直接发送到elasticsearch或者先发送到ogstash经过处理后再发送给elasticsearch,最终通过Kibana进行数据可视化。

1. Elasticsearch

1.1 简介

  • Elasticsearch是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据;本身扩展性很好,可以扩展到上百台服务器,处理PB级别的数据。
  • Elasticsearch也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucene的复杂性,从而让全文搜索变得简单。
    • Lucene只是一个库。想要使用它,你必须使用Java来作为开发语言并将其直接集成到你的应用中,更糟糕的是,Lucene非常复杂,你需要深入了解检索的相关知识来理解它是如何工作的。所以Elasticsearch是最佳的选择

1.2 相关概念

1.2.1 分片
  • 一个索引可以存储超出单个节点硬件限制的大量数据。比如,一个具有 10 亿文档数据的索引占据 1TB 的磁盘空间,而任一节点都可能没有这样大的磁盘空间。或者单个节点处理搜索请求,响应太慢。为了解决这个问题,Elasticsearch 提供了将索引划分成多份的能力,每一份就称之为分片
  • 当创建一个索引的时候,你可以指定分片的数量,一旦指定,就不可以再进行修改(原因是路由计算…)
1.2.2 副本
  • 副本是一个分片的精确复制,每个分片可以有零个或多个副本。
  • 当主分片丢失或不可用时,集群会将副本提升为新的主分片。

1.3 核心概念

  • Index:关系型数据库中的数据库
  • Type:关系型数据库中的
    • 1个数据库可以有多个表,等价于1个索引下可以有多个类型
  • Document:关系型数据库中的 ,文档以JSON格式来表示
    • 1个表中可以有多行,等价于1个类型中可以有多个文档

1.4 面试题汇总(不断更新

  • 问题1:路由计算,当索引一个文档的时候,elasticsearch如何知道文档存储在哪个分片中?当我们创建文档的时候,elasticsearch如何决定将这个文档存储到哪个分片上呢?

    • 创建的时候肯定不是随机的,如果是随机的,我读的时候去哪找呢
    • 计算公式 s h a r d = h a s h ( r o u t i n g ) % n u m b e r _ o f _ p r i m a r y _ s h a r d s shard = hash(routing) \% {number\_of\_primary\_shards} shard=hash(routing)%number_of_primary_shards
      • r o u t i n g routing routing是一个可变值,默认是文档的_id,也可以设置成一个自定义的值(可以在调用文档API的时候指定)
  • 问题2:倒排索引?

    • 倒排索引就是关键词到文档 ID 的映射。
    • 在搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。例如,文档 1 经过分词,提取了 20 个关键词,每个关键词都会记录它在文档中出现的次数和出现位置。
  • 问题3:es写数据和读数据的工作原理是什么啊?

    • 写数据

      在这里插入图片描述

      1. 客户端向 Node 1 发送新建、索引或者删除请求。
      2. 节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3,因为分片 0 的主分片目前被分配在 Node 3 上。
      3. Node 3 在主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1 和 Node 2 的副本分片上。一旦所有的副本分片都报告成功, Node 3 将向协调节点报告成功,协调节点向客户端报告成功。
    • 读数据

    在这里插入图片描述

    1. 客户端向 Node 1 发送获取请求。
    2. 节点使用文档的 _id 来确定文档属于分片 0 。分片 0 的副本分片存在于所有的三个节点上。 在这种情况下,它将请求转发到 Node 2 (轮询)。
    3. Node 2 将文档返回给 Node1 ,然后将文档返回给客户端。

2. Logstash

2.1 简介

  • 它是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送给ES。
  • 之所以不再使用logstash去采集数据,一部分原因是logstash速度太慢

2.2 安装

# 1.解压安装包
tar -zxvf logstash...tar.gz
# 2.运行测试案例 输入什么就输出什么
bin/logstash -e 'input { stdin { } } output { stdout { } }'

2.3 参数配置详解

input { # 输入
	stdin { ... } # 标准输入
}
filter { # 过滤,对数据进行分割、截取等处理
	...
}
output { # 输出
	stdout { ... } # 标准输出
}

2.4 读取自定义日志文件

日志结构: 2021-05-26 22:22:22|ERROR|读取数据出错|参数id=1002

# vim pipeline.conf 
input {
	file { 
		path => "/logstash/logs/app.log" 
		start_position => "beginning" 
	} 
}
filter { 
	mutate { 
		split => {"message"=>"|"} 
	} 
}
# 输出到控制台
output { 
	stdout { codec => rubydebug } 
}
# 输出到ES中
output { 
	elasticsearch { 
		hosts => [主机号1:9200, 主机号2:9200, 主机号3:9200] 
	} 
}
#启动 
./bin/logstash -f ./pipeline.conf 
#写日志到文件 
echo "2021-05-26 22:22:22|ERROR|读取数据出错|参数id=1002" >> app.log

3. Kibana

3.1 简介

  • 它是一款开源的数据分析可视化平台。同时我们可以使用Kibana对ES的数据进行搜索、查看以及交互的操作。

3.2 安装以及配置

# 1.解压安装包
tar -zxvf kibana....tar.gz
# 2.修改配置文件
vim config/kibana.yml

server.host: "192.168.15.104"
elasticsearch.url: "http://192.168.15.104:9200"	
# 3.启动
./bin/kibana
# 4.通过浏览器访问
http://hadoop102:5601/app/kibana

3.3 安装metricbeat仪表盘

metricbeat是轻量级指标采集器,用于从系统和服务中收集指标

fillebeat是轻量级日志采集器,用于转发和汇总日志文件

# 1.修改metricbeat配置
setup.kibana: host: 
	"192.168.15.104:5601"
# 2.安装仪表盘到Kibana【保证Kibana已启动】
./metricbeat setup --dashboards

3.4 Dev Tools

  • 开发者工具,为开发者的调试提供了便捷工具使用。
post index1/type1/id1
{
	"id":1001,
	"name":"sl",
	"age":22
}
get index1/type1/id1

4. 综合案例

  • 使用java生成日志文件(实际生产环境就是真实的系统),通过Filebeat去采集数据,发送给Logstash,经过处理后,将数据发送给Elasticsearch,最后Kibana去读取Elasticsearch中要分析的数据,制作仪表盘进行数据展示。

  • 简单介绍一下其中的配置:

    • Filebeat

      vi dashboard.yml
      # 监控日志文件
      filebeat.inputs:
      - type: log
        enabled: true
        paths:
        	- /itcast/logs/*.log
      # 配置elasticsearch分片数
      setup.template.settings:
        index.number_of_shards: 3
      # 输出到logstash
      output.logstash:
        hosts: ["主机号:端口号"]
      
      # 启动 ./filebeat -e -c dashboard.yml
      
    • Logstash

      vi dashboard.conf
      # 监听上述对应的端口号
      input {
      	beats {
      		port => "端口号"
      	}
      }
      # 过滤器
      filter {
      	mutate {
      		split => {"message"=>"|"}
      	}
      	mutate {
      		add_field => {
      			"userId" => "%{message[1]}"
      			"visit" => "%{message[2]}"
      			"date" => "%{message[3]}"
      		}
      	}
      	mutate {
      		convert => {
      			"userId" => "integer"
      			"userId" => "string"
      			"userId" => "string"
      		}
      	}
      }
      # 输出到ES
      output {
      	elasticsearch {
      		hosts => [主机号1:9200, 主机号2:9200, 主机号3:9200]
      	}
      }
      
      #启动 ./bin/logstash -f dashboard.conf
      
    • kibana:

      • 制作仪表盘就是玩儿~~~~
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值