ELK(Elasticsearch-Logstash-Kibana)
文章目录
一、Elasticsearch
1、Elasticsearch是什么
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。主要功能查询和存储。
2、下载并安装
官方下载地址
将文件上传至集群上,并解压
3、配置文件
1.config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
cluster.name: elk #集群的名字
node.name: boss #节点的名字
node.master: true
network.host: 192.168.XXX.100 #自己的IP
discovery.zen.ping.unicast.hosts: ["hadoop100"] #主机名
2./etc/security/limits.conf
最后添加如下代码(配置Linux的硬件配置:原因是ES对硬件要求比较高)
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
3./etc/sysctl.conf
最后一行添加如下代码(依然是Linux硬件配置)
vm.max_map_count=655360
sysctl -p 使更新后的系统文件生效
4.修改文件权限
- chown [-R] [用户名称] [文件或目录]
- chown [-R] [用户名称:组名称] [文件或目录]
chown elastic elasticsearch-6.2.3 -R # -R:递归目录
chown -R es:es es
5.创建用户【赋予用户权限】
创建用户的目的是:Elasticsearch只能在非root下使用,原因问官方
useradd 用户名 #创建用户
passwd 密码 #设置密码
【注意:因为Elasticsearch使用Java写的,所以需要Java环境】
设置好用户名和密码后,如果你的Java是安装在root下的话,启动会报错,如果没有,那么请忽略,直接运行
【Tips】
这里讲一下如何解决Java安装在root下,无法启动问题
(1)简单的就是把root权限改一下
chmod 555 root
(2)将Java移动到当前目录下,环境变量配置
处理好后,切换成新用户然后启动
4、启动
在Elasticsearch安装目录下使用如下命令
./bin/elasticsearch
通过浏览器输入:
IP:9200
可以成功看到
5、ES的相关知识
1.ES数据模型
和传统数据库相比
2.文档(Document)
- put:插入
- post:修改
- get:查询
- delete:删除
具体看下面的使用
6、elasticsearch-head-master
由于在小黑界面处理比较麻烦,所以这里安装一个elasticsearch-head-master插件,可视化界面,方便我们操作和查询和上面的一样,需要先解压安装,完成后,在下载解压安装node,因为head-master需要node节点,所以先配置node
unzip elasticsearch-head-master.zip
【Tips】
没有unzip命令的可以先安装zip
yum install -y unzip zip
安装好后,我们进入环境变量的配置文件/etc/profile对node进行配置
export NODE_HOME=/opt/bigdata/node8 #这里是你node的安装目录,node8是node的重命名
export PATH=$PATH:$NODE_HOME/bin:$PATH
先别急着source,先配置head-master的文件
进入head-master目录下
1、Gruntfile.js
hostname: '*',
2、_site/app.js
4360行将localhost改成自己的IP
这里再
source /etc/profile
然后安装grunt
npm install -g grunt-cli #安装grunt
npm config set registry https://registry.npm.taobao.org
npm install #初始化配置项
【注意:这里可能会报错,如果是Warning警告,那没事,如果是Error,你可以通过重新执行上面的代码】
如果是:…prebuilt… script安装问题的话
可以执行如下代码
npm install phantomjs-prebuilt@2.1.14 --ignore-scripts
head-master安装好后
head-master启动
进入head安装文件夹下
npm run start #普通启动
nohup npm run start & #后台启动
浏览器中输入:
IP:9100
【注意:】
boss:是节点的名字,可能和你不一样
右边红框里面一开始是没有的,不要谎,你可以通过左上角的索引-创建索引 来实现
二、Logstash
1、Logstash是什么
Logstash是一款开源的数据收集引擎,具备实时管道处理能力。简单来说,logstash作为数据源与数据存储分析工具之间的桥梁,结合ElasticSearch以及Kibana,能够极大方便数据的处理与分析。通过200多个插件,logstash可以接受几乎各种各样的数据。包括日志、网络请求、关系型数据库、传感器或物联网等等。
Logstash的工作过程
2、下载并安装
官方下载
直接解压即可
3、使用
在logstash目录下执行以下命令
1.测试Logstash是否可以运行成功
bin/logstash -e 'input{ stdin{} } output{ stdout{} }'
2.设置编码格式
- ruby格式
bin/logstash -e 'input{ stdin{} } output{ stdout{codec => {"rubydebug"}} }'
- json格式
bin/logstash -e 'input{ stdin{} } output{ stdout{codec => {"json"}} }'
3.连接到ES上
bin/logstash -e 'input{ stdin{} } output{ stdout{codec => "rubydebug"} elasticsearch{ hosts=>["192.168.159.XXX:9200"] } }'
4.测试读文件
第一步,建立文件:在Logstash文件夹下创建test/a.txt,内容随便写点
第二步,建立文件:在Logstash文件夹下创建test/new.conf,内容如下
input{
file{
path => "/opt/soft/logstash/test/a.txt" #自己的文件
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
output{
elasticsearch{
hosts => ["192.168.XXX.100:9200"] #自己的IP
}
}
再执行
bin/logstash -f test/news.conf #这里注意是news.conf的路径
再去head上看一下,就会发现也过来了
三、Kibana
1、Kibana是什么
Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。
Elasticsearch、Logstash和Kibana这三个技术就是我们常说的ELK技术栈,可以说这三个技术的组合是大数据领域中一个很巧妙的设计。一种很典型的MVC思想,模型持久层,视图层和控制层。Logstash担任控制层的角色,负责搜集和过滤数据。Elasticsearch担任数据持久层的角色,负责储存数据。而我们这章的主题Kibana担任视图层角色,拥有各种维度的查询和分析,并使用图形化的界面展示存放在Elasticsearch中的数据。
2、下载并安装
3、配置文件
进入kibana/config
(1)kibama.yml
最后添加如下代码
server.host: "IP"
elasticsearch.url: "http://IP:9200"
4、启动
进入Kibana安装文件夹
./bin/kibana #普通启动
nohup ./bin/kibana & #后台启动
浏览器输入
IP:5601
在红色框中可以写增删改查的命令
四、使用
ES的具体使用:利用Kibana和head插件共同使用ES
1、插入数据
在Kibana中写如下代码
put /usr/student/1
{
"id":1,
"name":"张器",
"age":20,
"classname":"大一",
"gender":"男"
}
put /usr/student/2
{
"id":2,
"name":"李四",
"age":23,
"classname":"大一",
"gender":"男"
}
put /usr/student/3
{
"id":3,
"name":"五四",
"age":22,
"classname":"大三",
"gender":"男"
}
head中可以看到数据已经插入进来了
【注意:当批量插入时,使用curl命令会更快,因为可以把信息全部存到json文件中,利用bulk读取json文件即可】
使用curl命令进行插入
【Tips:由于插入的信息是json文件(按照字段名的),所以插入的时候可以不考虑顺序】
- 单个插入
curl -H "Content-type: application/json" -X pPUT http://192.168.XXX.100:9/student/3 -d '{"id":3,"name":"古天乐","age":45,"classname":"大四","gender":"男"}'
- 批量插入
curl -H "Content-type: application/json" -X PUT http://192.168.XXX.100:9200/_bulk --data-binary @/opt/soft/request.json
2、修改
(1)put修改
和插入方式一样
(2)post修改
post usr/student/3/_update
{
"doc":{
"name":"刘能",
"age":34
}
}
再去查看一下head
3、查询
GET /索引 查询结果是元数据
GET /索引/类型/id 查询单个id的信息
GET /索引/类型/_search 遍历所有id对应信息
get /usr/student/_search?q=id:2 #指定id查询
get /usr/student/_meget #指定查询
{
"docs":[{"_id":1},{"_id":2}]
}
get /usr/student/_meget
{
"ids":[1,2]
}
4、删除
delete usr/student/3 #根据id删除指定信息