- 搜索引擎发展五个阶段:
- 第一阶段:FTP 文件检索阶段。
- 该阶段的搜索引擎比如 Archie,只检索多个 FTP 服务器上存储的文件。我们搜索文件时需要输入精确文件名才能进行搜索,搜索出来的结果就是给我们提示FTP地址,可以从这个FTP地址下载我们搜索的文件。
- 第二阶段:分类目录导航阶段。
- 该阶段的搜索引擎就是一个导航网站,比如hao123、搜狗浏览器主页等网站。这种网站上面都是把各种网址分类好,当我们使用此种搜索引擎时,只需要从各个分类目录里找到我们想要的网址,单击其网站链接后进入相应的网站。
- 第三阶段:文本相关性检索阶段。
- 当互联网上的内容逐渐丰富时,网页内容和形态也开始多样化,页面中就开始出现内容与网页地址和网页标题大相径庭的情况,第二阶段的搜索引擎功能弊端就开始显形。所以为了解决这个问题,第三阶段就出现了。
- 第三阶段搜索引擎开始引入全文搜索技术,用来保证搜索引擎检索到的网页标题与网页全文内容强一致性。
- 使用这类搜索引警时,我们将输入的查询信息提交给搜索引擎后台服务器,搜索引擎服务器通过查阅已经索引好的网页全文信息,返回一些相关程度高的页面信息。计算输入的查询信息与网页内容相关性判断的模型主要有布尔模型、概率模型、向量空间模型等。
- 这个阶段的搜索引擎代表有Ala Vista、Excite等。
- 第四阶段:网页链接分析阶段。
- 此阶段的代表作就是谷歌搜索,最大的特性就是通过结合网页内容的重要性和相似程度来改善搜索的信息质量。
- 此阶段的搜索引擎使用的网站链接形式与当前基本相同,外部链接表示推荐,通过计算每个网站的推荐链接的数量,就可以判断一个网站的流行性和重要性。
- 第五阶段:用户意图识别阶段。
- 这个阶段的目的是更人性化的为每个用户服务,代表有百度搜索。
- 在使用这类搜索引擎时,不同用户查询同一个关键词时,检索出来的结果可能不同。
- 同一个用户搜索同样的关键词也会因时因地的不同而有所差异。比如当用户在搜索引擎上首次输入“TAL”时,可能是想查找 TAL 股票代码对应的好未来公司的网站;当用户在好未来的办公区内搜索“TAL”时,有可能是想查看 TAL 股票代码的实时股价。
- 搜索引擎的两大分类:
站外搜索:也就是全网搜索,目前主流的搜索引擎基本都是全网搜索,如谷歌、百度。主攻网站外部链接和网站品牌推广。
站内搜索:比如微博、京东、饿了么、淘宝、美团等。主攻网站内部结构、内容。
- 说Elasticsearch之前,需要先了解一下Lucene,因为ElasticSearch 是在Lucene 之上封装出来的一个工具。
- Lucene是一个免费、开源、高性能信息检索工具包,是以纯Java语言编写出来的一个jar包,并不包含搜索引擎系统。只包含索引结构、读写索引的工具、排序、搜索规则…等工具类。
- Lucene的由来:
- 在Google公司成立着力于研发搜索引擎之后,一位名叫Doug Cutting的美国工程师,也迷上了搜索引擎。他做了一个用于文本搜索的函数库(姑且理解为软件的功能组件),命名为Lucene。
- 这个人后面也搞出了大数据Hadoop。
- Lucene为什么只是个工具包?
- 因为创始人当初研究它的初衷主要是为软件开发人员提供一个简单易用的工具包,主要提供倒排素引的查询结构,以方便软件开发人员在其业务系统中实现全文检索的功能。
- Elasticsearch的由来:
- 一个叫做Shay Banon的开发者给老婆构建一个食谱的搜索引擎,方便他老婆学习厨师,并开始构建一个早期版本的Lucene。
- 直接基于Lucene工作会比较困难,所以他开始抽象Lucene代码以便Java程序员可以在应用中添加搜索功能。他发布了他的第一个开源项目,叫做“Compass”。
- 后来他找到一份工作,这份工作处在高性能和内存数据网格的分布式环境中,因此高性能的、实时的、分布式的搜索引擎也是理所当然需要的。然后他决定重写Compass库使其成为一个独立的服务叫做Elasticsearch。
- 在2010年2月公开第一个Elasticsearch版本,并成为当时Github上最受欢迎的项目之一,一家主营Elasticsearch的公司就此成立。
- Elasticsearch是什么?
- Elaticsearch,简称为es,是一个开源的高扩展的分布式全文检索引擎,它可以近乎实时的存储、检索数据,本身扩展性很好可以扩展到上百台服务器,处理PB级别的数据。
- es也使用Java开发并使用Lucene作为其核心来实现所有索引和搜索的功能,但是它的目的是通过简单的RESTful API来隐藏Lucne的复杂性,从而让全文搜索变得简单。
- 谁在使用Elasticsearch?
- 维基百科,有用到全文检索、高亮,根据权重搜索推荐。
- The Guardian(国外新闻网站),用户行为日志(点击,浏览,收藏,评论)+社交网络数据(对某某新闻的相关看法),数据分析,给到每篇新闻文章的作者,让他知道他的文章的公众反馈(好,坏,热门,垃圾,鄙视,崇拜)
- Stack Overflow(国外的程序异常讨论论坛 ),IT问题,程序的报错,提交上去,有人会跟你讨论和回答,全文检索,搜索相关问题和答案,程序报错了,就会将报错信息粘贴到里面去,搜索有没有对应的答案。
- GitHub( 开源代码管理 ),搜索上千亿行代码。
- 电商网站,检索商品。
- 日志数据分析,logstash采集日志,ES进行复杂的数据分析,ELK技术,elasticsearch+logstash+kibana=ELK。
- 商品价格监控网站,用户设定某商品的价格闻值,当低于该阔值的时候,发送通知消息给用户,比如说订阅牙膏的监控,如果高露洁牙膏的家庭套装低于50块钱,就通知我,我就去买。
- BI系统,商业智能,Business lnteligence。比如说有个大型商场集团,BI,分析一下某某区域最近3年的用户消费金额的趋势以及用户群体的组成构成,产出相关的数张报表,*区,最近3年,每年消费金额呈现100%的增长,而且用户群体85%是高级白领,开一个新商场。ES执行数据分析和挖掘,Kibana进行数据可视化。
- 国内: 站内搜索(电商,招聘,门户),IT系统搜索 (OA,CRM,ERP),数据分析。
- Lucene的优点:
- 索引文件格式独立于应用平台。Lucene 定义了一套以8 位字节为基础的索引文件格式,使得兼容系统或者不同平台的应用能够共享建立的索引文件。
- 索引速度快。在传统全文检索引擎的倒排索引的基础上,实现了分块索引,能够针对新的文件建立小文件索引,提升索引速度。然后通过与原有索引的合并,达到优化的目的。
- 简单易学。优秀的面向对象的系统架构,降低了 Lucene 扩展的学习难度,方便扩充新功能
- 跨语言。设计了独立于语言和文件格式的文本分析接口,索引器通过接收 Token 流完成索引文件的创立,用户扩展新的语言和文件格式,只需实现文本分析的接口即可。
- 强大的查询引擎。Lucene 默认实现了一套强大的查询引擎,用户无须自己编写代码即可通过系统获得强大的查询能力。Lucene 默认实现了布尔操作、模糊查询、分组查询等。
- Lucene的主要模块作用:
- Analysis模块:主要负责词法分析及语言处理,也就是我们常说的分词,通过该模块可最终形成存储或者搜索的最小单元 Term。
- Index模块:主要负责索引的创建工作。
- Store 模块:主要负责索引的读和写,主要是对文件的一些操作,其主要目的是抽象出和平台文件系统无关的存储。
- QueryParser 模块:主要负责语法分析,把查询语生成 Lucene 底层可以识别的条件。
- Search 模块:主要负责对索引的搜索工作。
- Similarity模块:主要负责相关性打分和排序的实现。
- Lucene核心术语:
- Term:索引中最小的存储和查询单元。对于英文语境而言,一般是指一个单词;对于中文语境而言,一般是指一个分词后的词。
- 词典(Term Dictionary):是 Term的集合。词典的数据结构有很多种,各有优缺点。如可以通过排序数组(通过二分查找来检索数据)、HashMap(哈希表,检索速度更快,属于空间换时间的模式).FST(Finite-State Transducer,有很好的压缩率)等来实现。
- 倒排表(Posting List):一篇文章通常由多个词组成,倒排表记录的是某个词在哪些文章中出现过。
- 正向信息:原始的文档信息,可以用来做排序、聚合、展示等。
- 段(Segment):索引中最小的独立存储单元。一个索引文件由一个或者多个段组成。在 Lucene中,段有不变性,段一旦生成,在段上只能读取、不可写入。
- Solr是什么?
- Solr 是Apache下的一个顶级开源项目,采用lava开发,它是基于Lucene的全文搜索服务器。Sor提供了比Lucene更为丰富的查询语言,同时实现了可配置、可扩展,并对索引、搜索性能进行了优化。
- Solr可以独立运行,运行在Jetty、Tomcat等这些Servlet容器中,Solr索引的实现方法很简单,用 POST 方法向Solr服务器发送一个描述 Field 及其内容的 XML文档,Solr根据xml文档添加、删除、更新索。Solr 搜索只需要发送 HTTP GET 求,然后对 Sol返回Xm、ison等格式的查询结果进行解析,组织页面布局。Solr不提供构建UI的功能,Solr提供了一个管理界面,通过管理界面以查询Solr的配置和运行情况。
- solr是基于lucene开发企业级搜索服务器,实际上就是封装了lucene。
- Solr是一个独立的企业级搜索应用服务器,它对外提供类似于Web-service的AP接口。用户可以通过http请求,向搜索引擎服务器提交一定格式的文件,生成索引;也可以通过提出查找请求,并得到返回结果。
- 总结:
- es安装简单,Solr安装略微复杂。
- Solr 利用 Zookeeper 进行分布式管理,而 Elasticsearch 自身带有分布式协调管理功能。
- Solr 支持更多格式的数据,比如SON、XML、CSV,而 Elasticsearch 仅支持ison文件格式
- Solr官方提供的功能更多,而 Elasticsearch 本身更注重于核心功能,高级功能多有第三方插件提供,例如图形化界面需要kibana来支撑。
- Solr 查询快,但更新索引时慢( 即插入删除慢 ),用于电商等查询多的应用。ES建立索引快(即查询慢),即实时性查询快,用于facebook新浪等搜索。Solr 是传统搜索应用的有力解决方案,但 Elasticsearch 更适用于新兴的实时搜索应用。
- Solr比较成熟,有一个更大,更成熟的用户、开发和贡献者社区,而 Elasticsearch相对开发维护者较少,更新太快,学习使用成本较高。
- 2种数据类型:
- 结构化数据:一般放入关系数据库(如 MySQL、Oracle 等),这是因为结构化数据有固定的数据格式和有限个数的字段,因此可以通过二维化的表结构来承载* 。
- 非结构化数据:一般会放入 MongoDB 中,这是因为非结构化的数据长度不定且无固定数据格式,显然在关系数据库中存储这类数据较为困难。
- 数据搜索方式:
- 结构化数据搜索:顺序扫描、关键词精确匹配、关键词部分匹配等。
- 非结构化数据搜索:顺序扫描和全文检索两种方法。不难看出,对于非结构化数据而言,顺序扫描是效率很低的方法,因此全文检索技术应运而生。
- 全文检索过程:
- 在实现全文检索的过程中,一般都需要提取非结构化数据中的有效信息,重新组织数据的承载结构形式。而搜索数据时,需要基于新结构化的数据展开,从而达到提高搜索速度的目的。显而易见,全文检索是一种空间换时间的做法一一前期进行数据索引的创建,需要花费一定的时间和空间,但能显著提高后期搜索的效率。
- 搜索引擎的工作原理分两个阶段,网页数据爬取和索引阶段、搜索阶段。
- 第一阶段,网页数据爬取和索引阶段。包含网络爬虫、数据预处理、数据索引三个主要动作。
- 第一步,网络爬虫尽可能快、尽可能全地发现和爬取互联网上的网页,爬取到一个新网页后还要继续通过该页面中的链接来爬取其他网页,是个不间断的工作。
- 第二步, 网络爬虫爬取到的网页存入网页库,存入过程中会进行查重检查,因为互联网上的网页有一定的重复性。网页库里存储的网页信息与我们在浏览器看到的页面内容相同。
- 第三步,网页数据预处理程序不断地从网页库中取出网页进行预处理工作,之后网页就被浓缩成以关键词为核心的内容。
- 常见的预处理动作:去除噪声内容(版权声明文字、导航条、广告等)、关键词处理(如中文分词、去除停止词)、网页间链接关系计算等。
- 还有各类文件文档(如 PDF、Word、WPS、XLS、PPT、TXT 等)、多媒体文件(如图片、视频)等,这些内容均需进行相应的数据预处理动作。
- 第四步,数据预处理后,要进行数据索引过程。索引过程先后经历正向索引和倒排索引阶段,最终建立索引库。随着新的网页等内容不断地被加入网页库,索引库的更新和维护往往也是增量进行的。
- 第二阶段,搜索阶段。包含搜索关键词、输入内容预处理、搜索关键词查询三个主要动作。
- 第一步,用户输入的关键词。
- 第二步,对输入内容进行预处理。比如删除不必要的标点符号、停用词、空格、字符拼写错误识别等,然后进行相关的分词。
- 第三步,分词后搜索引擎系统将向索引库发出搜索请求。
- 第四步,索引库会将包含搜索关键词的相关网页从索引库中找出来,搜索引擎根据索引库返回的内容进行排序处理,最终返回给用户。
- 什么是网络爬虫?
- 网络爬虫是我们常说的的俗称,还有别称诸如网络探测器、Crawler 爬行器、Spider 蜘蛛、Robot 机器人等等,只是网络爬虫或网络蜘蛛的叫法更加生动一点,因为网页爬取程序像虫子和蜘蛛一样在网络间爬来爬去,从一个网页链接爬到另一个网页链接。
- 网络爬虫方式:
- 一般采用并行爬取的方式,可以提高爬取效率。
- 网络爬虫的核心工作:
- 工作核心是在网页搜集效率、质量和对目标网站的友好程度上。
- 网络爬虫要用最少的资源、最少的时间,搜集尽可能多的高质量网页,同时对目标网站的内容抓取不影响网站的正常运转和使用。
- 网络爬虫工作流程:
- 第一步,网络爬虫在爬取网页时,搜索引擎先会建立两张不同的表。如上图B表记录已经访问过的URL网址,A表记录没有访问过的URL网址。
- 第二步,当第一个网络爬虫爬取某个外部链接页面 URL 时,会把该网站的URL 下载回来分析,处理好这个 URL 后,将该 URL 存入已经访问过的表中。
- 第三步,当第二个网络爬虫从其他网站或页面中又发现了这个 URL 时,它会在已访问列表中有对比查看有没有该URL的访问记录。若有,则爬虫程序会自动丢弃该URL,不再访问。
- 网络爬虫工作策略:
- 网络爬虫方式有两种,“先深度后广度”和“先广度后深度”。可以把爬取网页的过程想象成一个有向图。
- 一般采用“先深度后广度”的方式。
- 网页的收录模式:
- 全量收集:每次爬取网页都更新全部数据内容。该模式的资源开销大、付出成本高、内容更新的时效性不高、网络宽带消耗高,而且全量更新数据耗时,所以一般定期展开。
- 增量搜集:这种模式主要用于搜集新网页、搜集更新的网页,删除不存在的页面。当然,相较于全量收集,网络爬虫的系统设计也会复杂一些,但时效性好。
- 提高网站被抓去的效果方式:
- 对于网站而言,被各家主流搜索引擎收录是共同的夙愿。所以,网站往往采取一些技术手段告知搜索引擎来抓取内容。
- 一般网站可以使用SiteMap 。
- SiteMap 的核心作用就是向网络抓取工具提供一些提示信息,以便它们更有效地抓取网站。
- SiteMap 的最简单实现形式就是 XML 文件。当然,各家搜索引擎定义的 SiteMap 不尽相同,如百度SiteMap 分为三种格式:txt 文本格式、XML格式和 SiteMap 索引格式。
- 网站管理员还可以结合 SEO(Search Engine Optimization,搜索引擎优化)来改善网站的被抓取效果。
- 实现网络爬虫的方式:
- 对软件开发人员来说,我们可以基于现有的爬虫框架来实现对网络数据的爬取。
- Java 语言栈的用户可以使用 WebMagicGecco。
- Python 语言栈的用户可以使用 Scrapy。
- Go 语言栈的用户可以使用YiSpider。
- 网络爬虫将爬取的网页数据存储到网页库,然后网页分析程序将自动对网页进行分析。分析后,网页数据将变成网页中关键词组、链接与关键词的相关度、网页重要程度等信息。
- 网页分析主要动作:
- 网页内容摘要:一般由网页正文生成,摘要一般会显示在搜索结果的展示区。
- 链接分析:链接其实是一种投票、一种信任。网站被主动链接的次数越多,说明互联网环境下其他网站对该网站的投票越多、信任越多,该网站在互联网中越流行。
- 本质上这就是一种分布式系统下的共识投票。如果将网页间的链接关系视作有向图,则网页的链接关系就会变成入度和出度。入度指网页能通过其他网页的链接来访问;出度指网页中链接了其他网页。因此,入度大网页,说明其被多个网页引用,这也意味着该网页比较权威、比较流行和热门。
- 网页重要程度计算:用于衡量网站的权威性。
- 越权威的网站,越容易被其他网站主动链接。网站被引用的次数越多,说明该网站越重要。对搜索引擎而言,在返回相关性强的内容时,应该尽量先返回权威网站的内容;对搜索引擎的用户而言,这样往往更能匹配他们的需要。因此这也是评价搜索引擎体验好坏的核心指标之一。
- 关键词提取分词:中英文分词差异大,英文分词较简单,中文分词常用算法分两类。一类是基于字典的机械式分词,另一类是基于统计的分词。
- 基于字典的分词方法:一般会按照一定的策略将待分析的汉字串与一个充分大的词典的词条进行匹配,若在词典中找到某个字符串词条,则匹配成功。所以此种方法的核心是字符串的匹配,分为正向匹配和逆向匹配两种。
- 正向匹配,指的是在匹配字符串时从左向右匹配。
- 逆向匹配,是从右向左匹配。
- 正向或逆向匹配过程中,按匹配长度的不同,还可以细分为最大/最长匹配和最小/最短匹配。
- 基于字典的分词算法一般常用正向最大匹配、逆向最大匹配,或者是组合模式。
- 基于统计的分词算法:该算法无须词典,一般会根据汉字与汉字相邻出现的概率来进行分词。因此基于统计的分词算法往往需要构建一个语料库,并不断更新。在分词前,算法需要进行预处理,即对语料库中相邻出现的各个字的组合进行统计,计算两个汉字间的组合概率。
- 去除噪声:去除如广告、无关的导航条、版权信息、调查问卷等和文章主体内容无关的内容。
- 内容摘要的生成方式:
- 静态生成方式:在网页分析阶段即可从网页内容中提取。虽然这种方式“短、平、快”,但缺点也很明显,即当呈现搜索结果时,展示的摘要可能与搜索的关键词无关。
- 动态生成方式:即根据查询关键词在文档中的位置,提取其周边的文字,并高亮显示。
- 正排索引:
- 倒排索引:
- 总结:
- 索引对象还可以分为基于词的索引,和基于字的索引。
- 以基于词的索引查询时会更加高效,因为基于词内容比基于字做索引的索引内容少。
- 倒排索引中有词条(Term)、词典 (Term Dictionary)、倒排表(Post List)三个名词。
- 词条,是索引里面最小的存储和查询单元。一般来说,在英文语境中词条是一个单词,在中文语境中词条指的是分词后的一个词组。
- 词典,又称字典,是词条的集合。单词词典一般是由网页或文章集合中出现过的所有词构成的字符串集合。
- 倒排表,记录的是词出现在哪些文档里、出现的位置和频率等。在倒排表中,每条记录被称为一个倒排项。
- 词典和倒排表是分两部分存储的,词典存储在内存中,倒排表存储在磁盘上。
- Elasticsearch 是一个分布式、可扩展、近实时的高性能搜索与数据分析引擎。Elasticsearch基于 Apache Lucene 构建,采用 Java 编写,并使用 Lucene 构建索引、提供搜索功能。
- Elasticsearch 的目标是让全文搜索功能的落地变得简单。
- 特点和优势:
- 分布式实时文件存储。Elasticsearch 可将被索引文档中的每一个字段存入索引,以便字段可以被检索到。
- 实时分析的分布式搜索引擎。Elasticsearch 的索引分拆成多个分片,每个分片可以有零个或多个副本。集群中的每个数据节点都可承载一个或多个分片,并且协调和处理各种操作:负载再平衡和路由会自动完成。
- 高可拓展性。Elasticsearch 可以扩展到上百台服务器,处理 PB 级别的结构化或非结构化数据。
- 可插拔插件支持。Elasticsearch 支持多种插件,如分词插件、同步插件、Hadoop 插件可视化插件等。
- 如下图为最新的数据库排名。
Elasticsearch官网
Elasticsearch官网下载地址
官网kibana下载地址
github es-head下载地址
注意事项:
1.版本选择, ES 7.x 及之前版本,选择 Java 8。
2. ES 8.0版本:Java版本仅支持 Java 17。
3. ES 8.1及以上版本:支持Java 17 以及 Java 18,建议 Java 17,因为对应版本的 Logstash 不支持 Java 18。
- 准备好以下安装包。
- es依赖java环境,所以也要提前装好java环境,高版本已经内置了java环境。
- 各目录释义:
- bin :可执行脚本文件,包括es服务启动、插件管理、函数命令等等。
- config : 配置文件目录,如elasticsearch.yml(ES 配置文件)、jvm.options(java虚拟机相关配置文件)、log4j2.properties(日志配置文件)等等。
- jdk : 7.x版本之后才有的目录,自带内置的 JDK环境。
- lib : es依赖的java库。
- logs : 默认日志文件储存路径。
- modules : ES 所有功能模块,如Cluster、Discovery、Indices、X-pack 等等。
- plugins : ES 已经安装的插件,默认没有插件,所以刚开始是空的。
- data : 默认数据存放目录,包含节点、分片、索引、文档的所有数据。
2.进入bin目录,双击elasticsearch.bat,启动服务。和7.x 版本不同的是,ES 8.x 启动之后会输出以下信息,此时服务已经启动成功了,而7.x版本启动时控制台输出 started 时代表服务启动成功。
3.网页访问显示需要输入账号密码。在es7.0版本之后的安装包默认自带了xpack开启密码校验功能。
4.进入bin目录,为elasticsearch内部用户创建随机密码。也可以重置密码。
elasticsearch-setup-passwords auto
#重置密码命令。
elasticsearch-reset-password -u elastic -i
1.我们再回过头来看日志,这里有个报错,是因为启动时会更新地图的一些数据库,关闭geoip数据库的更新操作即可。
vim elasticsearch.yml
#关闭geoip数据库更新。
ingest.geoip.downloader.enabled: false
2.重启es,之后就没有了。
- 高版本的es代码里内置默认开启密码登录,我这里测试就去掉密码登录,省事。
1.修改es配置文件,添加如下两行。
vim elasticsearch.yml
#关闭es密码登陆设置。
xpack.security.enabled: false
xpack.security.transport.ssl.enabled: false
1.前面访问都是使用本地主机环回地址访问,若要使用特定IP访问需要修改es配置文件,对如下参数进行修改。
# 为es实例绑定特定的IP地址,若设置成0.0.0.0,则监听本地所有IPV4地址。
network.host: 192.168.0.100
#为es实例设置特定的端口
http.port: 9200
#集群配置项,用于启动当前节点时,发现其他节点的初始列表。必须开启,因为es单节点自认为主节点。
discovery.seed_hosts: ["192.168.0.100"]
- es-head依赖nodejs环境编译,需要提前准备。
- nodejs下载地址
1.直接点击node-v18.13.0-x64.msi程序,安装完成后可以通过node -v查看版本,能查看到则安装成功。
2.解压es-head安装包,查看package.json文件可以看到,需要安装依赖服务。
3.安装依赖服务。直接使用npm install安装会报错,版本导致,可以用cnpm install来安装。
# 网上都是说是npm install可以安装,但是异常慢。
1.安装cnpm。
npm install -g cnpm --registry=https://registry.npm.taobao.org
2.安装依赖。
cnpm install
npm run start
5.配置elasticsearch.yml文件,添加如下三行,解决跨域问题,并允许使用密码连接。
http.cors.enabled: true #启用http端口,允许跨源REST请求。
http.cors.allow-origin: "*" #允许所有人请求。
http.cors.allow-headers: Authorization,X-Requested-With,Content-Type,Content-Length #es设置安全密码后,es-head允许使用密码访问。
http://localhost:9100/?auth_user=es_user&auth_password=es_password
- 初识ELK:
- ELK是Elasticsearch、Logstash、 Kibana三大开源框架首字母大写简称,市面上也被成为Elastic Stack。
- Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交与的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引警的场景都可以使用Elasticsearch作为底层支持架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。
- Logstash是ELK的中央数据流引擎,用于从不同目标( 文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等 )。
- Kibana是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。操作简单,基于浏览器的用户界面可以快速创建仪表板( dashboard)实时显示Elasticsearch查询动态。
- Kibana官网
1.下载解压kibana安装包。注意ELK三组件版本需要一致,并且也依赖node.js环境。
2.进入bin目录启动kibana.bat文件会发现报错,原因是不能使用localhost来访问,需要修改成固定IP地址。
1.kibana支持汉化,可以在以下目录看到有个中文包。
2.在kibana配置文件添加汉化设置,i18n.locale: “zh-CN”。
1.不需要安装java环境。
- 注意事项:
- es依赖jdk环境,现在高版本的es压缩包中自带有jdk。
- 若已提前安装了jdk环境,则es启动时,会优先找linux中的jdk。若此时jdk的版本不一致,就会造成jdk不能正常运行。
- 所以,若Linux服务本来没有配置jdk,则会直接使用es目录下默认的jdk,反而不会报错。
2.创建用户,不然直接使用root用户启动会报错。
[root@localhost elasticsearch-8.5.2]# useradd es-qingjun
[root@localhost elasticsearch-8.5.2]# chown es-qingjun:es-qingjun -R /opt/elasticsearch-8.5.2/
3.切换至创建的用户,启动es,可以看到有个初始密码。因为8版本开始默认开启ssl认证的,可以使用https登录web端。
[root@localhost elasticsearch-8.5.2]# su es-qingjun
[es-qingjun@localhost elasticsearch-8.5.2]$ ./bin/elasticsearch
日志释义:
- es首次启动时,会自动进行安全设置。
第一步:为传输层和 HTTP 层生成 TLS 证书和密钥。
第二步:TLS 配置设置被写入elasticsearch.yml
第三步:为 elastic 用户生成密码。
第四步:为 Kibana 生成一个注册令牌。高亮白色字体释义:
- 第一串高亮白色字符:ES给elastic账户设置的默认密码,需要记下来。
- 第二串高亮白色字符:CA证书的密钥信息。
- 第三串高亮白色字符:ES给Kibana生成的访问令牌,Kibana访问ES服务需要用到这个。
4.如果不想使用密码登录,可以进入es配置文件关闭ssl认证,再重启es。
[es-qingjun@localhost elasticsearch-8.5.2]$ vim config/elasticsearch.yml
xpack.security.enabled: false #该参数修改成false。
[es-qingjun@localhost elasticsearch-8.5.2]$ ./bin/elasticsearch
1.安装node.js环境,注意版本不要太高,不然会跟linux本身的依赖库包版本冲突报错。
[root@localhost bck]# tar zxf node-v16.9.0-linux-x64.tar.gz
[root@localhost bck]# mv node-v16.9.0-linux-x64 /usr/local/node
[root@localhost bck]# tail -2 /etc/profile
export node_home=/usr/local/node
export PATH=$node_home/bin:$PATH
[root@localhost bck]# source /etc/profile
[root@localhost bck]# node -v
v16.9.0
2.解压es-head安装包,安装依赖。注意这里需要进入解压出来的目录里执行命令。
#安装cnpm
[root@localhost elasticsearch-head-5.0.0]# npm install -g cnpm --registry=https://registry.npm.taobao.org
#安装依赖
[root@localhost elasticsearch-head-5.0.0]# cnpm install
[root@localhost elasticsearch-head-5.0.0]# npm run start
4.访问页面。
5.修改es配置文件,添加如下两行,解决跨域问题。
[root@localhost elasticsearch-8.5.2]# vi config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
1.解压安装包,修改配置文件。
[root@localhost bck]# tar zxf kibana-8.5.2-linux-x86_64.tar.gz -C ../
[root@localhost bck]# cd ../kibana-8.5.2/
[root@localhost kibana-8.5.2]# vi config/kibana.yml
server.host: "192.168.130.140" #修改成固定IP。
elasticsearch.hosts: ["http://192.168.130.140:9200"] #修改es固定IP。
i18n.locale: "zh-CN" #汉化。
2.启动kibana,访问网页。
#kibana不能使用root用户启动,可以加这个参数启动,也可以新建一个用户,并对安装目录修改权限。
#方式一:
[root@localhost kibana-8.5.2]# ./bin/kibana --allow-root
#方式二:
[root@localhost kibana-8.5.2]# chmod kibana
[root@localhost kibana-8.5.2]# chown kibana:kibana -R /opt/kibana-8.5.2/
[root@localhost kibana-8.5.2]# su - kibana
[kibana@localhost ~]$ cd /opt/kibana-8.5.2/
[kibana@localhost kibana-8.5.2]$ ./bin/kibana