本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告
  • 首页
  • ELK Stack
  • ELK Stack (1)——Elasticsearch 6介绍与安装配置教程

ELK Stack (1)——Elasticsearch 6介绍与安装配置教程

发布:TangLu2019-10-7 10:08分类: ELK Stack 标签: ELK ElasticSearch logstash kibana ELKStack

一、ELK STACK是什么

ELK Stack是Elasticserach、Logstash、Kibana三种工具组合而成的一个栈。ELK可以将系统日志、访问日志、运行日志、错误日志等进行统一收集、存储分析和搜索以及图形展现。相比传统的CTRL+F或者使用SQL语句在数据库中进行查询,Elasticserach先通过倒排索引和分词功能将所查内容快速定位到具体某页,然后再用正排索引通过某页去查找出内容,搜索速度更快,就算是TB、PB级别的数据也可以快速搜索。而使用SQL的话必然会使用%来进行通配,而这是不支持走索引的。而且Elasticserach还支持分布式搜索,并且更智能。比如可以去掉类似“这,的,是”这样一些没有特殊含义的词汇,还可以进行分词搜索。比如搜索苹果手机,可以被拆分为苹果+手机2个关键词。另外还有搜索补全、搜索纠错、搜索关键词高亮等实用功能(使用百度搜索、电商网站产品搜索都会用到Elasticsearch)ELK常用组件介绍:

1、LogStash负责日志的收集,并且可以输出到指定位置,如Redis、kafka、以及最主要的ElasticSearch中,通常会在所有需要收集日志的服务器上安装Logstash,然后由Logstash agent端发送到Logstash的Server端

2、ElasticSearch使用JAVA开发、基于Lucene搜索引擎库的全文搜索工具,通过RESTful API(一种接口设计规范,让接口更易懂)隐藏了Lucene原本的复杂性。实现了日志数据的分布式、实时分析,并且可以进行搜索补全与纠错等功能,是ELK最核心的组件。相比MySQL库和表的概念,在ES中把库叫做索引

3、Kibana负责数据的展示与统计,是一个图形化的管理系统

4、Filebeat:轻量级的日志采集端


二、ElasticSearch概念与工作流程介:

索引(index):文档的容器,属性类似的文档集合,类似MySQL中的库或者表的概念,强烈建议同一类的数据放一个索引里

分片(shared):Elasticsearch在创建索引时如果没有指定分片(number_of_shards)的话默认会分为5个shard和一个副本(number_of_replicas),由于文档到分片的映射采用了HASH算法,所以分片数不可再修改。每一个分片都是一个独立完整的索引,分布在不同的节点上,用head或者cerebro插件查看分片时实线分片是主分片,虚线分片是副本分片。如果发现有分片没有被分配到节点上,可以看下是否磁盘没有空间。另外需要注意的是如果节点数大于分片数的话,并不能起到优化作用,所以在初期就要规划好分片数

节点:站在用户角度来看并没有主节点概念,每个节点对用户来说都是一样的,都会响应请求,但是对于集群来说,会有一个主节点用于管理节点状态以及决定shard分布方式,还会周期性检查其他节点是否可用并进行修复。各节点是通过集群名称来判断是否属于同一节点。

Elasticsearch中将文档归属于一种类型(type),而这些类型存在于索引(index)中。用MySQL来对比了解:

Database->Table->Row->Column

Indice->Type->Document->Field


三、安装与配置Elasticsearch 6:

1、ElasticSearch默认工作在集群模式下,扩展性很强,并且支持自动发现。所以在实验环境中需要至少2台服务器来搭建,但是为了防止脑裂,建立使用基数台服务器。在部署ElasticSearch前需要先部署JAVA环境,所以第一步是安装JDK,这里偷懒使用yum安装了openjdk,生产环境还是建议用JDK的源码包

yum install java-1.8.0-openjdk.x86_64


2、下载ElasticSearch,官网地址是www.elastic.co(不是com),其每个Products下都有专门的文档用于参考

下载tar包解压,然后进入config目录,该目录下除了有一个主配置文件elasticsearch.yml需要配置外,还有一个jvm.options文件用于JVM的调优

tar zxf elasticsearch-6.3.tar.gz
cd elasticsearch-6.3/config


jvm.options文件主要是JVM优化相关,关于垃圾回收这块使用默认配置就可以了,我们要调整的就是最大内存和最小内存的设置。通常设置为一样大小,具体的值可以设置为系统最大内存的一半或三分之二,但不要超过32G,并且预留一半内存给系统。为了保证性能,内存和数据量有一个建议比例,搜索类项目建议比例为1G内存:16G数据,日志类项目为1G:48~96G。假设存放1T数据,有3个节点,1个副本,那么每个节点存储的数据就是2T/3≈700G左右,然后预留100G空间,每个节点就需要存放800G数据,再按照这个比例就可以算出推荐内存了。

-Xms1g  #程序启动时占用内存的大小
-Xmx1g  #程序启动后最大可占用内存的大小


3、修改ElasticSearch主配置文件elasticsearch.yml

vi /usr/local/elasticsearch-6.7.1/config/elasticsearch.yml
cluster.name: test_es  #集群名称,相同集群名称的节点会自动加入到该集群
node.name: node-1_9 #节点名称,这里1_9代表IP最后2段位1.9
path.data: /data/es/data #节点数据存储路径
path.logs: /data/es/logs #节点日志存储路径
node.master: true  #配置该节点是否能成为主节点,默认为true
node.data: true  #配置该节点是否能存储数据,默认为true
network.host: 10.4.1.9 #修改为节点IP,建议配置为内网地址,不要写0.0.0.0,不安全
http.port: 9200 #ES端口
discovery.zen.ping.unicast.hosts: ["10.4.1.9", "10.4.1.27", "10.4.1.31"] #master节点列表。
discovery.zen.minimum_master_nodes:2 #配置主节点数量的最少值,少于该值的话ES集群不可用,为避免脑裂,通常配置为节点数量/2+1,比如使用了三台节点,那么配置应该为2
bootstrap.system_call_filter: false  #关闭自检程序
bootstrap.memory_lock: false  



4、使用非root用户运行bin/elasticsearch -d脚本可以让服务在系统后台启动。启动后服务会监听在9200端口,还有个9300端口用于集群间通信。如果需要重启ES的话可以使用jps显示 一下ES的PID,然后kill掉再启动,比直接用ps去查PID要方便一点

/usr/local/elasticsearch-6.7.1/bin/elasticsearch -d


5、如果配置文件中监听的端口是非回环地址127.0.0.1(建议把监听地址配置在内网网卡上,数据更安全),在运行Elasticsearch时会遇到一些内核报错,具体报错和解决方法如下(做好配置后,需要注销用户重新登录才会生效):

don't run elasticsearch as root

解决办法:Elasticsearch是不允许使用root用户来运行的,所以需要把ElasticSearch目录所有者修改为其他用户,并切换到该用户去执行。用浏览器打开能看到如下信息代表安装成功:

elk2.png


Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12):

解决办法:内存不足,升级内存


Exception in thread "main" java.nio.file.AccessDeniedException

解决办法:运行Elasticsearch程序的用户权限不够,把Elasticsearch目录权限修改下即可


max virtual memory areas vm.max_map_count [65530] is too low
解决办法:修改/etc/sysctl.conf,增加一行vm.max_map_count= 262144。然后执行sysctl -p使其生效


max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
解决办法:修改/etc/security/limits.conf,做以下配置

*                soft   nproc          65536
*                hard   nproc          65536
*                soft   nofile         65536
*                hard   nofile         65536


max number of threads [3812] for user [elkuser] is too low, increase to at least [4096]

解决办法:修改/etc/security/limits.d/20-nproc.conf,做以下配置

*          soft    nproc     4096
*          hard    nproc     4096


四、Elasticsearch数据操作方式

要操作ES中的数据有2种方式,一个是使用Kibana中的Dev tools工具进行数据操作,该工具支持自动补齐,只需把PUT、GET等命令写进去运行就可以了另一个是用curl命令调用API接口。ES有四类API,作用大概分为:检查集群节点、索引当前状态;管理集群节点、索引及元数据;执行增删改查操作执行高级操作,如paging,filtering。而Elasticsearch常用API有cat和cluster,下面是一些日常用法介绍:

1、使用curl命令查看cat API下的功能,其中indices用于检查所有索引,health用于检查集群状态

catapi1.png


2、查看ES集群健康状态,green代表主副分片分配正常;yellow代表主分片正常,有副本分片未正常分配;red代表有主分片未分配

http://localhost:9200/_cluster/health  #如果状态非green,可以关注unassigned_shard查看未分配的分片数
http://localhost:9200/_cluster/health?pretty #加上pretty会将内容格式化再输出,更美观

http://localhost:9200/_cat/health  
http://localhost:9200/_cat/health?v  #?v可以让显示信息更详尽

http://localhost:9200/_cluster/state?pretty #可以看主节点信息等


3、查询Elasticsearch所有节点列表

curl http://localhost:9200/_cat/nodes?v


4、查询Elasticsearch所有索引

curl http://localhost:9200/_cat/indices?v


5、为Elasticsearch创建索引或数据,数据需要是json格式,如果对已存在数据进行操作会进行覆盖,属于updated

curl -XPUT "10.4.0.221:9200/nginx_web_log.2019.03.01"  #新增一个索引nginx_web_log.2019.03.01
curl -XPUT "10.4.0.221:9200/nginx_web_log.2019.03.01/users/1{
  "name":"tanglu",
  "age": 30
}" 


6、查询Elasticsearch数据

cutl -XGET /nginx_web_log.2019.03.01/users/1 #返回的source就是ES里的数据


7、删除Elasticsearch中的索引或者数据

curl -XDELETE http://10.4.0.221:9201/nginx_web_log.2019.03.*  #支持通配符


8、ES数据备份与迁移

elasticdump --input=http://源IP:9200/索引名 --output=http://目标IP:9200/索引名 --type=settings
elasticdump --input=http://源IP:9200/索引名 --output=http://目标IP:9200/索引名 --type=mapping
elasticdump --input=http://源IP:9200/索引名 --output=http://目标IP:9200/索引名 --type=data



下面是更贴近实际操作的curl命令,插入了两条数据

#为blog索引新增两条记录,指定type为article,ID为2和3
curl -XPUT -H "Content-Type: application/json" 'localhost:9201/blog/article/2?pretty' -d '
{
  "title": "test",
  "content":"testsfsdfdsfdsf",
  "PV":10
}'

curl -XPUT -H "Content-Type: application/json" 'localhost:9201/blog/article/3?pretty' -d '
{
  "title": "test",
  "content":"testsfsdfdsfdsf",
  "PV":23
}'


关于Elasticsearch更多使用说明,请看本站后续文章……

温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!
et_highlighter51
版权所有:《Linux运维技术学习站点
文章标题:《ELK Stack (1)——Elasticsearch 6介绍与安装配置教程
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-295.html  [生成短网址]

已有 0/5935 人参与

发表评论:

欢迎分享Linux运维技术学习站点

欢迎使用手机扫描访问本站,还可以关注微信哦~