learn.lianglianglee.com/专栏/ElasticSearch知识体系详解/02 认知:Elastic Stack生态和场景方案.md.html
2022-08-14 03:40:33 +08:00

300 lines
17 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<!-- saved from url=(0046)https://kaiiiz.github.io/hexo-theme-book-demo/ -->
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1.0, user-scalable=no">
<link rel="icon" href="/static/favicon.png">
<title>02 认知Elastic Stack生态和场景方案.md.html</title>
<!-- Spectre.css framework -->
<link rel="stylesheet" href="/static/index.css">
<!-- theme css & js -->
<meta name="generator" content="Hexo 4.2.0">
</head>
<body>
<div class="book-container">
<div class="book-sidebar">
<div class="book-brand">
<a href="/">
<img src="/static/favicon.png">
<span>技术文章摘抄</span>
</a>
</div>
<div class="book-menu uncollapsible">
<ul class="uncollapsible">
<li><a href="/" class="current-tab">首页</a></li>
</ul>
<ul class="uncollapsible">
<li><a href="../">上一级</a></li>
</ul>
<ul class="uncollapsible">
<li>
<a href="/专栏/ElasticSearch知识体系详解/01 认知ElasticSearch基础概念.md.html">01 认知ElasticSearch基础概念</a>
</li>
<li>
<a class="current-tab" href="/专栏/ElasticSearch知识体系详解/02 认知Elastic Stack生态和场景方案.md.html">02 认知Elastic Stack生态和场景方案</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/03 安装ElasticSearch和Kibana安装.md.html">03 安装ElasticSearch和Kibana安装</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/04 入门:查询和聚合的基础使用.md.html">04 入门:查询和聚合的基础使用</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/05 索引:索引管理详解.md.html">05 索引:索引管理详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/06 索引:索引模板(Index Template)详解.md.html">06 索引:索引模板(Index Template)详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/07 查询DSL查询之复合查询详解.md.html">07 查询DSL查询之复合查询详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/08 查询DSL查询之全文搜索详解.md.html">08 查询DSL查询之全文搜索详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/09 查询DSL查询之Term详解.md.html">09 查询DSL查询之Term详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/10 聚合聚合查询之Bucket聚合详解.md.html">10 聚合聚合查询之Bucket聚合详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/11 聚合聚合查询之Metric聚合详解.md.html">11 聚合聚合查询之Metric聚合详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/12 聚合聚合查询之Pipline聚合详解.md.html">12 聚合聚合查询之Pipline聚合详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/13 原理从图解构筑对ES原理的初步认知.md.html">13 原理从图解构筑对ES原理的初步认知</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/14 原理ES原理知识点补充和整体结构.md.html">14 原理ES原理知识点补充和整体结构</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/15 原理ES原理之索引文档流程详解.md.html">15 原理ES原理之索引文档流程详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/16 原理ES原理之读取文档流程详解.md.html">16 原理ES原理之读取文档流程详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/17 优化ElasticSearch性能优化详解.md.html">17 优化ElasticSearch性能优化详解</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/18 大厂实践:腾讯万亿级 Elasticsearch 技术实践.md.html">18 大厂实践:腾讯万亿级 Elasticsearch 技术实践</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/19 资料Awesome Elasticsearch.md.html">19 资料Awesome Elasticsearch</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/20 WrapperQuery.md.html">20 WrapperQuery</a>
</li>
<li>
<a href="/专栏/ElasticSearch知识体系详解/21 备份和迁移.md.html">21 备份和迁移</a>
</li>
</ul>
</div>
</div>
<div class="sidebar-toggle" onclick="sidebar_toggle()" onmouseover="add_inner()" onmouseleave="remove_inner()">
<div class="sidebar-toggle-inner"></div>
</div>
<script>
function add_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.add('show')
}
function remove_inner() {
let inner = document.querySelector('.sidebar-toggle-inner')
inner.classList.remove('show')
}
function sidebar_toggle() {
let sidebar_toggle = document.querySelector('.sidebar-toggle')
let sidebar = document.querySelector('.book-sidebar')
let content = document.querySelector('.off-canvas-content')
if (sidebar_toggle.classList.contains('extend')) { // show
sidebar_toggle.classList.remove('extend')
sidebar.classList.remove('hide')
content.classList.remove('extend')
} else { // hide
sidebar_toggle.classList.add('extend')
sidebar.classList.add('hide')
content.classList.add('extend')
}
}
function open_sidebar() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.add('show')
overlay.classList.add('show')
}
function hide_canvas() {
let sidebar = document.querySelector('.book-sidebar')
let overlay = document.querySelector('.off-canvas-overlay')
sidebar.classList.remove('show')
overlay.classList.remove('show')
}
</script>
<div class="off-canvas-content">
<div class="columns">
<div class="column col-12 col-lg-12">
<div class="book-navbar">
<!-- For Responsive Layout -->
<header class="navbar">
<section class="navbar-section">
<a onclick="open_sidebar()">
<i class="icon icon-menu"></i>
</a>
</section>
</header>
</div>
<div class="book-content" style="max-width: 960px; margin: 0 auto;
overflow-x: auto;
overflow-y: hidden;">
<div class="book-post">
<p id="tip" align="center"></p>
<div><h1>02 认知Elastic Stack生态和场景方案</h1>
<h2>Elastic Stack生态</h2>
<blockquote>
<p>Beats + Logstash + ElasticSearch + Kibana</p>
</blockquote>
<p>如下是我从官方博客中找到图这张图展示了ELK生态以及基于ELK的场景最上方</p>
<p><img src="assets/es-introduce-1-1.png" alt="img" /></p>
<p>由于Elastic X-Pack是面向收费的所以我们不妨也把X-Pack放进去看看哪些是由X-Pack带来的在阅读官网文档时将方便你甄别重点</p>
<p><img src="assets/es-introduce-1-0.png" alt="img" /></p>
<h3>Beats</h3>
<p>Beats是一个面向<strong>轻量型采集器</strong>的平台这些采集器可以从边缘机器向Logstash、ElasticSearch发送数据它是由Go语言进行开发的运行效率方面比较快。从下图中可以看出不同Beats的套件是针对不同的数据源。</p>
<p><img src="assets/es-introduce-2-0.png" alt="img" /></p>
<h3>Logstash</h3>
<p>Logstash是<strong>动态数据收集管道</strong>拥有可扩展的插件生态系统支持从不同来源采集数据转换数据并将数据发送到不同的存储库中。其能够与ElasticSearch产生强大的协同作用后被Elastic公司在2013年收购。</p>
<p>它具有如下特性:</p>
<p>1实时解析和转换数据</p>
<p>2可扩展具有200多个插件</p>
<p>3可靠性、安全性。Logstash会通过持久化队列来保证至少将运行中的事件送达一次同时将数据进行传输加密</p>
<p>4监控</p>
<h3>ElasticSearch</h3>
<p>ElasticSearch对数据进行<strong>搜索、分析和存储</strong>其是基于JSON的分布式搜索和分析引擎专门为实现水平可扩展性、高可靠性和管理便捷性而设计的。</p>
<p>它的实现原理主要分为以下几个步骤:</p>
<p>1首先用户将数据提交到ElasticSearch数据库中</p>
<p>2再通过分词控制器将对应的语句分词</p>
<p>3将分词结果及其权重一并存入以备用户在搜索数据时根据权重将结果排名和打分将返回结果呈现给用户</p>
<h3>Kibana</h3>
<p>Kibana实现<strong>数据可视化</strong>其作用就是在ElasticSearch中进行民航。Kibana能够以图表的形式呈现数据并且具有可扩展的用户界面可以全方位的配置和管理ElasticSearch。</p>
<p>Kibana最早的时候是基于Logstash创建的工具后被Elastic公司在2013年收购。</p>
<p>1Kibana可以提供各种可视化的图表</p>
<p>2可以通过机器学习的技术对异常情况进行检测用于提前发现可疑问题</p>
<h2>从日志收集系统看ES Stack的发展</h2>
<blockquote>
<p>我们看下ELK技术栈的演化通常体现在日志收集系统中。</p>
</blockquote>
<p>一个典型的日志系统包括:</p>
<p>1收集能够采集多种来源的日志数据</p>
<p>2传输能够稳定的把日志数据解析过滤并传输到存储系统</p>
<p>3存储存储日志数据</p>
<p>4分析支持 UI 分析</p>
<p>5警告能够提供错误报告监控机制</p>
<h3>beats+elasticsearch+kibana</h3>
<p>Beats采集数据后存储在ES中有Kibana可视化的展示。</p>
<p><img src="assets/es-introduce-2-1.png" alt="img" /></p>
<h3>beats+logstath+elasticsearch+kibana</h3>
<p><img src="assets/es-introduce-2-2.png" alt="img" /></p>
<p>该框架是在上面的框架的基础上引入了logstash引入logstash带来的好处如下</p>
<p>1Logstash具有基于磁盘的自适应缓冲系统该系统将吸收传入的吞吐量从而减轻背压。</p>
<p>2从其他数据源例如数据库S3或消息传递队列中提取。</p>
<p>3将数据发送到多个目的地例如S3HDFS或写入文件。</p>
<p>4使用条件数据流逻辑组成更复杂的处理管道。</p>
<p><strong>beats结合logstash带来的优势</strong></p>
<p>1水平可扩展性高可用性和可变负载处理beats和logstash可以实现节点之间的负载均衡多个logstash可以实现logstash的高可用</p>
<p>2消息持久性与至少一次交付保证使用beats或Winlogbeat进行日志收集时可以保证至少一次交付。从Filebeat或Winlogbeat到Logstash以及从Logstash到Elasticsearch的两种通信协议都是同步的并且支持确认。Logstash持久队列提供跨节点故障的保护。对于Logstash中的磁盘级弹性确保磁盘冗余非常重要。</p>
<p>3具有身份验证和有线加密的端到端安全传输从Beats到Logstash以及从 Logstash到Elasticsearch的传输都可以使用加密方式传递 。与Elasticsearch进行通讯时有很多安全选项包括基本身份验证TLSPKILDAPAD和其他自定义领域</p>
<p><strong>增加更多的数据源</strong> 比如TCPUDP和HTTP协议是将数据输入Logstash的常用方法</p>
<p><img src="assets/es-introduce-2-3.png" alt="img" /></p>
<h3>beats+MQ+logstash+elasticsearch+kibana</h3>
<p><img src="assets/es-introduce-2-4.png" alt="img" /></p>
<p>在如上的基础上我们可以在beats和logstash中间添加一些组件redis、kafka、RabbitMQ等添加中间件将会有如下好处</p>
<p>1降低对日志所在机器的影响这些机器上一般都部署着反向代理或应用服务本身负载就很重了所以尽可能的在这些机器上少做事</p>
<p>2如果有很多台机器需要做日志收集那么让每台机器都向Elasticsearch持续写入数据必然会对Elasticsearch造成压力因此需要对数据进行缓冲同时这样的缓冲也可以一定程度的保护数据不丢失</p>
<p>3将日志数据的格式化与处理放到Indexer中统一做可以在一处修改代码、部署避免需要到多台机器上去修改配置</p>
<h2>Elastic Stack最佳实践</h2>
<blockquote>
<p>我们再看下官方开发成员分享的最佳实践。</p>
</blockquote>
<h3>日志收集系统</h3>
<p>PS就是我们上面阐述的</p>
<p>基本的日志系统</p>
<p><img src="assets/es-introduce-2-5.png" alt="img" /></p>
<p>增加数据源和使用MQ</p>
<p><img src="assets/es-introduce-2-6.png" alt="img" /></p>
<h3>Metric收集和APM性能监控</h3>
<p><img src="assets/es-introduce-2-7.png" alt="img" /></p>
<h3>多数据中心方案</h3>
<p>通过冗余实现数据高可用</p>
<p><img src="assets/es-introduce-2-8.png" alt="img" /></p>
<p>两个数据采集中心(比如采集两个工厂的数据),采集数据后的汇聚</p>
<p><img src="assets/es-introduce-2-9.png" alt="img" /></p>
<p>数据分散,跨集群的搜索</p>
<p><img src="assets/es-introduce-2-10.png" alt="img" /></p>
<h2>参考文章</h2>
<ul>
<li>https://www.elastic.co/cn/elasticsearch/</li>
<li>https://www.elastic.co/pdf/architecture-best-practices.pdf</li>
<li>https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html</li>
<li>https://www.cnblogs.com/supersnowyao/p/11110703.html</li>
<li>https://blog.51cto.com/wutengfei/2645627</li>
</ul>
</div>
</div>
<div>
<div style="float: left">
<a href="/专栏/ElasticSearch知识体系详解/01 认知ElasticSearch基础概念.md.html">上一页</a>
</div>
<div style="float: right">
<a href="/专栏/ElasticSearch知识体系详解/03 安装ElasticSearch和Kibana安装.md.html">下一页</a>
</div>
</div>
</div>
</div>
</div>
</div>
<a class="off-canvas-overlay" onclick="hide_canvas()"></a>
</div>
<script defer src="https://static.cloudflareinsights.com/beacon.min.js/v652eace1692a40cfa3763df669d7439c1639079717194" integrity="sha512-Gi7xpJR8tSkrpF7aordPZQlW2DLtzUlZcumS8dMQjwDHEnw9I7ZLyiOj/6tZStRBGtGgN6ceN6cMH8z7etPGlw==" data-cf-beacon='{"rayId":"70996f8f1ad83d60","version":"2021.12.0","r":1,"token":"1f5d475227ce4f0089a7cff1ab17c0f5","si":100}' crossorigin="anonymous"></script>
</body>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=G-NPSEEVD756"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag('js', new Date());
gtag('config', 'G-NPSEEVD756');
var path = window.location.pathname
var cookie = getCookie("lastPath");
console.log(path)
if (path.replace("/", "") === "") {
if (cookie.replace("/", "") !== "") {
console.log(cookie)
document.getElementById("tip").innerHTML = "<a href='" + cookie + "'>跳转到上次进度</a>"
}
} else {
setCookie("lastPath", path)
}
function setCookie(cname, cvalue) {
var d = new Date();
d.setTime(d.getTime() + (180 * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + ";path = /";
}
function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for (var i = 0; i < ca.length; i++) {
var c = ca[i].trim();
if (c.indexOf(name) === 0) return c.substring(name.length, c.length);
}
return "";
}
</script>
</html>