数据总体分为两类:
· 结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。
· 非机构化数据:指不定场或无固定格式的数据,入邮件,worf文档等磁盘上的文件
elasticsearch安装
1.下载elasticsearch
官网可以直接下载,可以选择最新版本,也可以下载历史版本(箭头所示为历史版本),本案例中选择的是6.2.4版本
2.安装elasticsearch
2.1.上传压缩包并解压
tar zxvf elasticsearch-6.2.4.tar.gz
目录重命名:mv elasticsearch-6.2.4 elasticsearch
2.2.创建ES用户
默认ES 6.X 是不允许root用户运行的,否则ES运行的时候会报错,所以我们需要创建新的用户
命令:useradd es
命令:passwd es(设置密码)
修改权限 : chown -R es:es elasticsearch-6.2.4
切换用户:su es
2.3.修改配置
进入config目录,有两个配置文件需要修改:
2.3.1 修改jvm.options
命令:vi jvm.options
默认配置:
-Xms1g
-Xmx1g
修改配置:内存占用太多,可以调小一点
-Xms512m
-Xmx512m
2.3.2 修改elasticsearch.yml
命令:vi elasticsearch.yml
修改数据和日志目录:
path.data: /opt/elasticsearch/data # 数据目录位置
path.logs: /opt/elasticsearch/logs # 日志目录位置
修改绑定的ip:
network.host: 0.0.0.0 # 绑定到0.0.0.0,允许任何ip来访问(默认是只有本机访问)
2.3.3 创建data目录
刚才我们修改配置,把data和logs目录修改指向了elasticsearch的安装目录。但是data目录并不存在,因此我们需要创建出来:
mkdir /opt/elasticsearch/data
修改配置
进入到es安装目录下的config文件夹中,修改elasticsearch.yml 文件
#配置es的集群名称,同一个集群中的多个节点使用相同的标识(单机版可不配置)
#如果在同一网段下有多个集群,就可以用这个属性来区分不同的集群。
cluster.name: my-es
#节点名称
node.name: node-1
#初始化,master节点名
cluster.initial_master_nodes: node-1
#数据存储路径
path.data: usr/local/elasticsearch-7.4.0/data
#日志存储路径
path.logs: usr/local/elasticsearch-7.4.0/logs
#节点所绑定的IP地址,并且该节点会被通知到集群中的其他节点
#通过指定相同网段的其他节点会加入该集群中 0.0.0.0任意IP都可以访问elasticsearch
network.host: 0.0.0.0
#对外提供服务的http端口,默认为9200
http.port: 9200
#设置集群中master节点的初始列表,可以通过这些节点来自动发现新加入集群的节点
discovery.seed_hosts: ["127.0.0.1:9200"]
#ES默认开启了内存地址锁定,为了避免内存交换提高性能。但是Centos6不支持SecComp功能,启动会报错,所以需要将其设置为false
bootstrap.memory_lock: false
# 是否支持跨域
http.cors.enabled: true
# *表示支持所有域名
http.cors.allow-origin: "*"
2.4 运行
进入elasticsearch/bin目录,执行命令:
./bin/elasticsearch -d
发现报错了,有以下几个错误,逐个解决:
错误1:内核过低
我们使用的是centos6,其linux内核版本为2.6。而Elasticsearch的插件要求至少3.5以上版本。禁用插件即可
修改elasticsearch.yml文件,在最下面添加如下配置:
bootstrap.system_call_filter: false
错误2:文件权限不足
先切换到root用户,然后再修改如下配置:
vi /etc/security/limits.conf
添加配置如下:
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
错误3:线程不够
继续修改配置:vi /etc/security/limits.d/90-nproc.conf
* soft nproc 1024 修改为 * soft nproc 4096
错误4:elasticsearch用户拥有的内存权限太小
继续修改配置:vi /etc/sysctl.conf
添加内容:vm.max_map_count=655360
然后执行命令:sysctl -p
所有错误修改完毕,一定要重启你的 Xshell终端,否则配置无效。
es启动报错bootstrap checks failed如何解决
编辑 /etc/security/limits.conf,追加以下内容;
* soft nofile 65536
* hard nofile 65536
此文件修改后需要重新登录用户,才会生效
[2]: max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
编辑 /etc/sysctl.conf,追加以下内容:
vm.max_map_count=655360
保存后,执行:
sysctl -p
再次启动运行,成功了
2.5 解决浏览器访问不到的问题
启动之后可以看到绑定了两个端口:
9300:集群节点间通讯接口
9200:客户端访问接口
浏览器访问:http://192.168.39.4:9200
如果访问不到,需要关闭防火墙或添加端口号9200
再次访问可以看到如下效果:
三、设置开机自启动
1. 在/etc/init.d目录下新建文件elasticsearch,配置如下内容:
#!/bin/sh
#chkconfig: 2345 80 05
#description: elasticsearch
export JAVA_HOME=/opt/jdk1.8.0_231
export JAVA_BIN=/opt/jdk1.8.0_231/bin
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
case "$1" in
start)
su es<<!
cd /opt/elasticsearch
./bin/elasticsearch -d
!
echo "elasticsearch startup"
;;
stop)
es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
kill -9 $es_pid
echo "elasticsearch stopped"
;;
restart)
es_pid=`ps aux|grep elasticsearch | grep -v 'grep elasticsearch' | awk '{print $2}'`
kill -9 $es_pid
echo "elasticsearch stopped"
su es<<!
cd /home/yinlian/elasticsearch
./bin/elasticsearch -d
!
echo "elasticsearch startup"
;;
*)
echo "start|stop|restart"
;;
esac
exit $
Or-------------------------------------------------------------------------------------------------------------------
(c)编写启动脚本
#!/bin/bash
#chkconfig: 345 63 37
#description: elasticsearch
#processname: elasticsearch-5.4.0
export ES_HOME=/opt/elasticsearch #这个目录是你Es所在文件夹的目录
case $1 in
start)
su elk<<! #es 这个是启动es的账户,如果你的不是这个记得调整
cd $ES_HOME
./bin/elasticsearch -d -p pid
exit
!
echo "elasticsearch is started"
;;
stop)
pid=`cat $ES_HOME/pid`
kill -9 $pid
echo "elasticsearch is stopped"
;;
restart)
pid=`cat $ES_HOME/pid`
kill -9 $pid
echo "elasticsearch is stopped"
sleep 1
su elk<<! #es 这个是启动es的账户,如果你的不是这个记得调整
cd $ES_HOME
./bin/elasticsearch -d -p pid
exit
!
echo "elasticsearch is started"
;
*)
echo "start|stop|restart"
;;
esac
exit 0
2. 保存退出,赋予执行权限
chmod +x /etc/init.d/elasticsearch
3. 添加开机自启动
chkconfig --add /etc/init.d/elasticsearch
chkconfig --list
systemctl list-unit-files |grep elasticsearch
四、安装ik分词器
Lucene的IK分词器早在2012年已经没有维护了,现在我们要使用的是在其基础上维护升级的版本,并且开发为Elasticsearch的集成插件了,与Elasticsearch一起维护升级,版本也保持一致:6.2.4
elasticsearch-analysis-ik 分词器下载地址:https://github.com/medcl/elasticsearch-analysis-ik/releases
1.上传ik分词器,将ik分词器压缩包上传到elasticsearch目录的plugins中
2.使用unzip命令解压压缩包:unzip elasticsearch-analysis-ik-6.2.4.zip,得到一个elasticsearch 文件目录
3.修改文件名:mv elasticsearch ik-analyzer
4.重启elasticsearch
五、Kibana安装
1. 下载kibana,官网即可下载,版本跟elasticsearch保持一致
2. 上传压缩包并解压:tar -zxvf kibana-6.2.4-linux-x86_64.tar.gz
3. 修改文件名:mv kibana-6.2.4-linux-x86_64 kibana
4. 修改kibana.yml配置文件:
#主机名,改为服务器地址
server.host: "192.168.39.4"
#es地址
elasticsearch.url: "http://192.168.39.4:9200"
5. 启动服务:./bin/kibana
浏览器访问,进入kibana界面,效果如下:
http://192.168.39.4:5601
配置文件
在启动运行前,我们介绍下?Elasticsearch 配置文件,即?config/elasticsearch.yml。这里我们需要在配置中增加以下配置,为了允许?elasticsearch-head 运行时的跨域:
# allow origin
http.cors.enabled: true
http.cors.allow-origin: "*"
安装 logstash
4.1 简单介绍
Logstash 是一个具有实时管道的开源数据收集引擎。可以动态地统一不同来源的数据,并将数据归到不同目的地。也是一个管理事件和日志工具。你可以用它来收集日志,分析它们,并将它们储存起来以供以后使用。
Logstash 通常都是和 Kibana 以及 Elasticsearch 一起使用,但是在 ELK 中,Logstash 不是必须安装的。
4.2 第一步:上传解压
依然是上传压缩包到/opt 路径下,然后解压缩:
//解压缩
tar -zxvf logstash-6.2.4.tar.gz
//重命名
mv logstash-6.2.4 logstash
4.3 第二步:修改配置
logstash 最关键的就在于配置上,打开/opt/logstash/config/目录,然后根据自己的需求创建一个配置文件。
比如,我的需求是利用 logstash 读取一个.json 文件,然后将其内容发送给 Elasticsearch,那么我要创建一个配置文件:logstash.conf(名称随意)
文件内容如下:
#读取json文件
input {
file {
#设置json文件路径,多个文件路径可设置成数组[],模糊匹配用*
#指定单一文件
path => "/opt/suricataFile/eve.json"
#指定数组文件
#path => ["/data/es/jsonstash-5.6.1/files/test-1.json","/data/es/jsonstash-5.6.1/files/test-2.json"]
#指定同级目录模糊匹配
#path => "/data/es/jsonstash-5.6.1/files/test*.json"
#指定多级目录模糊匹配
#path => "/data/es/jsonstash-5.6.1/files/**/test*.json"
start_position => "beginning"
#设置编码
codec => json {charset => "UTF-8"}
#当存在多个文件的时候可使用type指定输入输出路径
type => "json_index"
# 删除之前发送过的数据,每次从头解析读取
sincedb_path => "/dev/null"
}
}
#2.过滤格式化数据阶段
filter {
mutate{
#删除无效的字段
remove_field => ["@version","message","host","path"]
}
#新增timestamp字段,将@timestamp时间增加8小时
ruby { code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" }
}
#3.数据输出到ES阶段
output {
#日志输出格式,json_lines;rubydebug等
stdout {
codec => rubydebug
}
# 输出到es
if[type] == "json_index"{
#无法解析的json不记录到elasticsearch中
if "_jsonparsefailure" not in [tags] {
elasticsearch {
#es地址ip端口
hosts => "127.0.0.1:9200"
#索引
index => "json_index"
#类型
document_type => "json_index"
#覆盖模板,不需要可注释掉,通用模板下载:https://download.csdn.net/download/alan_liuyue/11241484
#template_overwrite=>true
#template=>"/data/es/logstash-5.6.1/template/logstash.json"
}
}
}
}
配置文件主要内容是:读取"/opt/suricataFile/eve.json"文件内容,然后经过过滤后,发送给 Elasticsearch 的索引 json_index,如果没有索引,则要创建该索引。
上面的注释介绍的很详细,具体不再多说。
4.4 第三步:启动 logstash
运行命令如下:
/opt/logstash/bin/logstash -f /opt/logstash/config/logstash.conf
运行命令中要指定配置文件(第二步中创建的)。
4.5 遇到问题
4.5.1 卡在:Successfully started Logstash API endpoint {:port=>9600}
如上图所示,就是卡在这里了,我一开始以为这是成功了,但是去查询索引,没有任何增加和导入,不知道是哪里的问题,各种更改配置文件。
最后参考下面两个博客解决问题:
logstash 导入数据到 Elasticsearch 踩过的坑详解(https://blog.csdn.net/LJFPHP/article/details/89340807)
配置 sincedb_path 让 logstash 每次都从头读取文件(https://www.4spaces.org/sincedb-path-logstash/)
出现该问题的原因是一开始 logstash 读取 eve.json 文件时,全部读取完了,但是并没有发送(可能出现了某个 bug,暂时不知道),这时生成了一个 sincedb 文件,以后每次读取 eve.json 文件都是从最后开始读取,导致读取不出来。
需要增加 sincedb_path => "/dev/null",这是第一个博客获得的信息,但是并没有说增加在哪里?
第二个博客上知道了在哪里增加,于是顺利解决问题。
4.5.2 配置文件中需不需要写用户和密码
在解决第一个问题的时候,看了很多 logstash 的配置文件,发现有一部分博客中提到要在配置文件中写明 Elasticsearch 所在主机的用户名和密码。
但是,最后解决上面后,重新在 root 用户运行(配置文件中并没有写用户和密码),发现依然可以运行,说明并不需要




