前言:
els是大型数据储存体系,类似于一种分片式存储方式。elasticsearch有强大的查询功能,基于java开发的工具,结合logstash收集工具,收集数据。kibana图形化展示数据,可以很好在大量的消息中准确的找到符合条件,人们想知道的信息。并且支持多种数据类型。
实验环境:
关掉selinux和防火墙,做时间同步
192.168.121.30 vm2.cluster.com elasticsearch
192.168.121.40 vm1.cluster.com logstash
192.168.121.50 vm3.cluster.com kibana
一、elasticsearch的安装
地址:https://www.elastic.co/cn/downloads
找到资源,下载,对应Linux的版本就行了

root@vm2 \~\]# vim /etc/hosts 写入三行数据 192.168.121.30 vm2.cluster.com elasticsearch 192.168.121.40 vm1.cluster.com logstash 192.168.121.50 vm3.cluster.com kibana #scp /etc/hosts [email protected]:/etc/hosts #scp /etc/hosts [email protected]:/etc/hosts 远程传到对应主机 # hostnamectl hostname vm2.cluster.com # yum -y install lrzsz tar net-tools wget chrony #timedatectl时间同步 # yum -y install java-1.8.0\* 安装java,基于es是java开发 \[root@vm2 \~\]# java -version openjdk version "1.8.0_422" 查看版本,是否下载 \[root@vm2 \~\]# rpm -ivh elasticsearch-6.5.2.rpm 安装es  \[root@vm2 \~\]# vim /etc/elasticsearch/elasticsearch.yml 定义集合的名字,打开9200端口,监听所有ip,所有主机,更改三个地方 cluster.name: **elk-cluster** 可以自定义一个集群名称,不配置的话默认会取名为elasticsearch path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host:**0.0.0.0**打开注释,并修改为监听所有 http.port: 9200 打开注释,监听端口9200 \[root@vm2 \~\]# systemctl restart elasticsearch.service 重启服务 \[root@vm2 \~\]# systemctl enable elasticsearch.service \[root@vm2 \~\]# ss -anlt State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:\* LISTEN 0 4096 \*:9200 \*:\* LISTEN 0 128 \[::\]:22 \[::\]:\* LISTEN 0 4096 \*:9300 \*:\* 查看9200,9300端口启用,9200是数据传输,访问的端口,9300是集群的端口。 \[root@vm2 \~\]# curl http://192.168.121.30:9200/_cluster/health?pretty 查看到集群的名字为elk-cluster,只要一个节点   ### 二、设置节点2,192.168.121.40为第二个节点,组成集群 # yum -y install lrzsz tar net-tools wget chrony # yum -y install java-1.8.0\* # hostnamectl hostname vm1.cluster.com \[root@vm1 \~\]# java -version openjdk version "1.8.0_422" \[root@vm1 \~\]# vim /etc/elasticsearch/elasticsearch.yml 设置节点2,不为主节点 /cluster.name: elk-cluster /node.name: **192.168.21.40**本机IP或主机名 **node.master: false** 指定不为master节点,这一行写道node.name下面 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch /network.host: **0.0.0.0** **/http.port: 9200 开启,去掉前面的#注释** /discovery.zen.ping.unicast.hosts: \["**192.168.121.30** ", "**192.168.121.40**"
填写两个节点的ip
root@vm2 \~\]# vim /etc/elasticsearch/elasticsearch.yml cluster.name: elk-cluster node.name: **192.168.121.30** 本机IP或主机名 **node.master: true** 指定为master节点 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 0.0.0.0 http.port: 9200 discovery.zen.ping.unicast.hosts: \["192.168.121.30", "192.168.121.40"
vm添加主节点,192.168.121.30为主
root@vm1 \~\]# systemctl restart elasticsearch.service //重启服务 \[root@vm1 \~\]# systemctl enable elasticsearch.service \[root@vm2 \~\]# systemctl restart elasticsearch.service \[root@vm2 \~\]# ss -anlt 查看9200和9300端口启用 \[root@vm2 \~\]# curl http://192.168.121.30:9200/_cluster/health?pretty 查看有两个节点   ### 三、es集合的基本参数查询   索引是一个 Node(节点):运行单个ES实例的服务器 Cluster(集群):一个或多个节点构成集群 Index(索引):索引是多个文档的集合 Type(类型):一个Index可以定义一种或多种类型,将Document逻辑分组 Document(文档):Index里每条记录称为Document,若干文档构建一个Index Field(字段):ES存储的最小单元 Shards(分片):ES将Index分为若干份,每一份就是一个分片 Replicas(副本):Index的一份或多份副本  \[root@vm2 \~\]# curl http://192.168.121.30:9200/_cat/nodes?v 在主机和网页都是可以查询的,主机前面加一个curl就行了。那是linux访问网站的命令  \[root@vm2 \~\]# curl -X PUT http://192.168.121.30:9200/nginx_access 上传索引nginx_access \[root@vm2 \~\]# curl http://192.168.121.30:9200/_cat/indices?v 查看索引,只要一个   \[root@vm2 \~\]# curl -X DELETE http://192.168.121.30:9200/nginx_access 删除索引 索引类似于目录,更好的查询。   上传一个写有一千条数据的json文件,关于bank银行人员的,方便查询 \[root@vm2 \~\]# curl -H "Content-Type: application/json" -XPOST "192.168.121.30:9200/bank/_doc/_bulk?pretty\&refresh" --data-binary "@accounts.json"  导入后,查看索引,有一个bank的索引  \[root@vm2 \~\]# curl -X GET "192.168.121.30:9200/bank/_search?pretty" -H 'Content-Type: application/json' -d ' { "query": {"match_all": {} } } ' 默认查询十条   \[root@vm2 \~\]# curl -X GET "192.168.121.30:9200/bank/_search?pretty" -H 'Content-Type:application/json' -d' { "query": { "match_all": {} }, "from": 0 \> , \> "size": 2 \> } \> ' 查看两条数据  查看500到509的十条记录 \[root@vm2 \~\]# curl -X GET "192.168.121.30:9200/bank/_search?pretty" -H 'Content-Type:application/json' -d' { "query": { "match_all": {} }, "from": 500, "size": 10, "sort": \[ { "account_number": "asc" }
}
' 2>/dev/null


四、安装elasticsearch-head,可视化管理数据和查看参数
安装es-head需要先安装nodejs
网上找对应安装包就行了

root@vm2 \~\]# tar -xf node-v10.24.1-linux-x64.tar.xz -C /usr/local/ \[root@vm2 \~\]# cd /usr/local/ \[root@vm2 local\]# mv node-v10.24.1-linux-x64/ nodejs \[root@vm2 local\]# ln -s /usr/local/nodejs/bin/npm /bin/npm \[root@vm2 local\]# ln -s /usr/local/nodejs//bin/node /bin/node 创建软连接,使系统能使用npm命令和node命令 \[root@vm2 local\]# cd \[root@vm2 \~\]# yum -y install unzip \[root@vm2 \~\]# unzip elasticsearch-head-master.zip 解压zip文件,使用unzip命令 \[root@vm2 \~\]# cd elasticsearch-head-master/ 先使用npm安装grunt 到head目录下安装对应工具 \[root@vm2 elasticsearch-head-master\]# npm install -g grunt-cli --registry=http://registry.npm.taobao.org //后面接一个淘宝的仓库,下载更快 \[root@vm2 elasticsearch-head-master\]# npm install [email protected] --ignore-script --registry=http://registry.npm.taobao.org 安装npm的时候报错了,安装这个 \[root@vm2 elasticsearch-head-master\]# npm install --registry=http://registry.npm.taobao.org 安装完成,没有报错就行,有报错就要解决了  \[root@vm2 elasticsearch-head-master\]# nohup npm run start \& //在head目录下,后台启动npm \[root@vm2 \~\]# ss -anlt //查看9100端口启用  \[root@vm2 \~\]# vim /etc/elasticsearch/elasticsearch.yml //两个节点都添加连接 http.cors.enabled: true后重启es服务 http.cors.allow-origin: "\*" \[root@vm2 \~\]# systemctl restart elasticsearch.service \[root@vm1 \~\]# vim /etc/elasticsearch/elasticsearch.yml http.cors.enabled: true http.cors.allow-origin: "\*" \[root@vm1 \~\]# systemctl restart elasticsearch.service  刷新网页,填写192.168.121.30的ip连接  40和30的IP都是一模一样的内容,都有bank索引,内容和数据  可以删除,操作相关内容  输入删除两个字就删除了,这里不删除,只是演示一下       不要更改/etc/hosts文件,能ping通192.168.121.30,和192.168.121.40就行了    一千多条数据,查询很快,这也是es的功能之一  ### 五、安装logstash,结合es使用 logstash可以采集任何格式的数据,当然我们这里主要是讨论采集系统日志,服务日志等日志类型数据。主要是收集日志文件。 官方产品介绍:https://www.elastic.co/cn/products/logstash input插件: 用于导入日志源 (配置必须) https://www.elastic.co/guide/en/logstash/current/input-plugins.html filter插件: 用于过滤(不是配置必须的) output插件: 用于导出(配置必须) 在vm3.cluster.com上,IP为192.168.121.50  \[root@vm3 \~\]# yum -y install java-1.8.0\* \[root@vm3 \~\]# java -version openjdk version "1.8.0_422" path.data: /var/lib/logstash path.config: /etc/logstash/conf.d/ 打开注释,并加上配置目录路径 http.host: "192.168.121.50" //本地的IP地址 http.port:9600-9700 打开端口 \[root@vm3 bin\]# cd /usr/share/logstash/bin/ \[root@vm3 bin\]# ./logstash -e 'input {stdin {}} output {stdout {}}' 运行,看到端口9600和sucess就表示运行成功了,ctrl+c结束 回车自定义输出 hi      **不要更etc/hosts文件,能ping通192.168.121.30和192.168.121.40就行了** \[root@vm3 bin\]# vim /etc/logstash/conf.d/test.conf input{ file { path =\> "/var/log/messages" start_position =\> "beginning" } } output { elasticsearch{ hosts =\> \["192.168.121.30:9200"
index => "test-%{+YYYY.MM.dd}"
}
}

#cd /usr/share/logstash/bin
root@vm3 bin\]# ./logstash --path.settings /etc/logstash/ -r -f /etc/logstash/conf.d/test.conf \& 后台启用  \[root@vm3 bin\]# ps -ef \| grep java \| grep -v grep root 1750 1132 9 11:07 pts/0 \[root@vm3 bin\]# kill -9 1750 杀死进程 在/usr/share/logstash/bin执行logstash命令 \[root@vm3 bin\]# ./logstash --path.settings /etc/logstash/ -r -f /etc/logstash/conf.d/test.conf \&  刷新es的网页,可以看到添加的  六、安装kibana 找到对应的版本6.5的,对应前面的es版本和logstash版本  \[root@vm1 \~\]# rpm -ivh kibana-6.5.2-x86_64.rpm \[root@vm1 \~\]# vim /etc/kibana/kibana.yml 改四个地方 /server.port: 5601 /server.host: "0.0.0.0" /elasticsearch.url: "http://192.168.121.30:9200" /logging.dest: /var/log/kibana.log \[root@vm1 log\]# cat /etc/kibana/kibana.yml \|grep -v "#" \[root@vm1 \~\]# cd /var/log/ \[root@vm1 log\]# touch kibana.log \[root@vm1 log\]# chown kibana.kibana kibana.log \[root@vm1 log\]# systemctl restart kibana.service \[root@vm1 log\]# systemctl enable kibana.service 网页访问192.168.121.30:5601    系统监控,不知道英文的看图标,好吧  查看节点  多出来三个索引,是kibana的   添加yum\*和bank\*     扩展: filebeat工具安装在vm1,vm2和vm3上面,收集数据给logstash,更高效更快速,最重要是节省logstash的资源,filebeat使用go语言编写,简单占用内存少。 大概步骤与上面一致,开启端口,改ip.