本站所有文章均为原创,如对您有帮助,恳请帮忙点击任何一处广告

ELK Stack——Elasticsearch 6 安装与配置教程

发布:TangLu2019-4-16 18:05分类: 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最常用三个组件的作用:

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

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

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


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

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

分片(shared):Elasticsearch默认将创建的索引分为5个shard(也可以自定义),每一个shard都是一个独立完整的索引,然后分布在不同的节点上

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

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

Database->Table->Row->Column

Indice->Type->Document->Field


三、安装与配置Elasticsearch 6:

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

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优化相关,关于垃圾回收这块使用默认配置就可以了,我们要调整的就是最大内存和最小内存的设置。通常设置为一样大小,具体的值可以设置为系统最大内存的一半或三分之二

-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数据操作方式

1、使用Kibana中的Dev tools工具进行数据操作,该工具支持自动补齐,只需把PUT、GET等命令写进去运行就可以了

2、使用curl命令去调用ES的API接口。ES是使用RESTful形式的接口对外提供访问,所以要访问ES接口的话可以使用curl命令。ES有四类API,作用大概分为:检查集群节点、索引当前状态;管理集群节点、索引及元数据;执行增删改查操作执行高级操作,如paging,filtering。Elasticsearch常用API有cat和cluster,下面是一些日常用法介绍:

通过curl可以看到cat这个API下有很多子功能

catapi1.png



Elasticsearch集群健康检查:

通过cat、cluster两个API都可以进行集群健康检查,green代表集群完全正常;yellow代表集群正常,部分副本分片不正常;red代表集群故障,数据可能会丢失

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

http://localhost:9200/_cluster/health
http://localhost:9200/_cluster/health?pretty #加上pretty会将内容格式化再输出,更美观
http://localhost:9200/_cluster/state?pretty #可以看主节点信息等


查询Elasticsearch所有节点列表
curl http://localhost:9200/_cat/nodes?v


查询Elasticsearch所有索引

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


使用curl -XPUT命令为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
}" 


使用curl -XGET命令获取ES中的数据,返回的数据中source就是ES的数据

cutl  -XGET /nginx_web_log.2019.03.01/users/1


使用curl -XDELETE命令删除Elasticsearch索引或者数据

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


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——Elasticsearch 6 安装与配置教程
除非注明,文章均为 《Linux运维技术学习站点》 原创
转载请注明本文短网址:http://www.linuxe.cn/post-295.html  [生成短网址]

已有 0/5360 人参与

发表评论:

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

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