elk在Linux中搭建
搭建之前需要先查看服务器中是否安装了jdk
java -version 查看jdk是否安装
java -verbose 查看jdk安装目录
未安装:
1.查看可安装java版本
yum -y list java*
2.安装
yum install -y java-1.8.0-openjdk-devel.x86_64
~~ 下面正式开始搭建旅程 ~~
一.下载elasticsearch(两种下载方式,推荐采用rpm下载)
(一)使用tar包下载
1.直接进入elasticsearch的官网https://www.elastic.co/downloads/elasticsearch,下载最新的安装包:
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/elasticsearch-6.3.1.tar.gz
2.安装位置:
cd /usr/es
3.解压
tar -zxvf elasticsearch-6.3.1.tar.gz
4.创建用户(使用非root启动)
(1)创建elsearch用户组及elsearch用户
groupadd elastic
useradd elastic -g elastic -p elasticsearch
chown -R elsearch:elsearch elasticsearch
(2)切换到elsearch用户再启动
su elsearch #切换账户
cd elasticsearch/bin #进入你的elasticsearch目录下的bin目录
./elasticsearch
5.查看后台命令是否启动成功
ps aux|grep elasticsearch
(二)rpm下载
1、Elasticsearch下载
在官网https://www.elastic.co/downloads/elasticsearch下载elasticsearch的rpm包或者直接在终端wget下载:
[root@localhost es]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.rpm
2、安装rpm包
[root@localhost es]# rpm -ivh https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.rpm
3、开启Elasticsearch服务
[root@localhost es]# service elasticsearch start
或者
[root@localhost es]# systemctl start elasticsearch
4、测试Elasticsearch是否安装成功
[root@localhost es]# curl -XGET 'http://localhost:9200'
如果出现以下内容说明安装成功了
5.设置Elasticsearch随机自启
systemctl status elasticsearch
service elasticsearch start
service elasticsearch status
systemctl status elasticsearch
systemctl enable elasticsearch
6.开启nginx端口
(1) firewall-cmd --state 检查防火墙状态
(2)firewall-cmd --list-ports 查看已经开放的端口
(3)sudo firewall-cmd --zone=public --add-port=9200/tcp 开放9200端口
(4)systemctl restart firewalld 重启防火墙
此时如不需要开启防火墙可关闭
(三)配置es
官方的配置文档:
https://www.elastic.co/guide/en/elasticsearch/reference/6.0/rpm.html
1.elasticsearch配置文件在这两个地方,有两个配置文件:
elasticsearch.yml 文件用于配置集群节点等相关信息的
elasticsearch 文件则是配置服务本身相关的配置,例如某个配置文件的路径以及java的一些路径配置什么的。
2.开始配置集群节点,在服务器上编辑配置文件:
[root@localhost ~]# vim /etc/elasticsearch/elasticsearch.yml # 增加或更改以下内容
http.cors.enabled: true # 配置head
http.cors.allow-origin: "*" # 配置head
#http.port: 9200 # es服务的端口号,默认可不配置
#
cluster.name: es_test # 集群中的名称
#
node.name: node-1 # 该节点名称
#
node.master: true # 意思是该节点为主节点
#
node.data: true # 表示该节点是数据节点
#
network.host: ip # 监听全部ip,在实际环境中应设置为一个安全的ip
#
network.publish_host: ip
#
network.bind_host: ip
#
#discovery.zen.ping.multicast.enabled: false
#
discovery.zen.ping.unicast.hosts: ["主节点ip", "子节点ip"] # 配置自动发现所有节点
#
transport.tcp.port: 9300 # tcp外部访问
#
#index.analysis.analyer.default.tokenizer : "ik_max_word" # ik分词器
#
#index.analysis.analyer.default.type : "ik" # ik分词器
注意:以上配置每行结束都要添加空格,行与行之间空一行
3.完成以上的配置之后,到主节点上,启动es服务:
systemctl start elasticsearch.service
二、安装Head 插件
Elasticsearch Head Plugin: 对ES进行各种操作,如查询、删除、浏览索引等。
1、下载elasticsearch-head并解压
在线下载:
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
或者到github下载:(采用这一种)
https://github.com/mobz/elasticsearch-head
unzip elasticsearch-head-master.zip //解压zip文件
mv elasticsearch-head-master.zip /home/ntc/code/elasticsearch-head //解压到自定义目录并修改文件夹名为elasticsearch-head
2、安装node
由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。(npm可以理解为maven)
wget https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz
tar -xvf node-v8.11.3-linux-x64.tar.xz
3.解压完node的安装文件后,需要配置下环境变量,编辑/etc/profile,添加
#配置jdk 如果配置过可以省略
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64
JRE_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.181-3.b13.el7_5.x86_64/jre
CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
PATH=$JAVA_HOME/bin:$PATH:$JRE_HOME/bin:$PATH
#配置nodejs
export NODEJS_HOME=/usr/share/es/node-v8.11.3-linux-x64
export PATH=$PATH:$NODEJS_HOME/bin
4.保存后别忘记立即执行以下
source /etc/profile
5.这个时候可以测试一下node是否生效:
5、安装grunt
grunt是一个很方便的构建工具,可以进行打包压缩、测试、执行等等的工作,head插件就是通过grunt启动的。
(1)安装一下grunt:
cd /usr/share/es/elasticsearch-head-master
(2)安装nodejs
npm install -g grunt-cli //执行后会生成node_modules文件夹
npm install
注:5.0以上,elasticsearch-head 不能放在elasticsearch的 plugins、modules 目录下,否则elasticsearch启动会报错
6、修改head源码
vi /usr/share/es/elasticsearch-head-master/Gruntfile.js
connect: {
server: {
options: {
port: 9100,
hostname: '*',
base: '.',
keepalive: true
}
}
}
增加hostname属性,设置为*
7.修改连接地址:
(1)目录:
vi /es/install/es/elasticsearch-head-master/_site/app.js
(2)修改head的连接地址:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
把localhost修改成你es的服务器地址,如:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://ip:9200";
8、运行head 启动nodejs
(1)cd /es/install/es/elasticsearch-head-master //先跳转到head目录下
(2)grunt server //若想在后台运行,结尾追加“&”
或者使用 nohup grunt server & 启动(日志打印在nohup.out中)
9.发现head没有连接到elasticsearch
关闭elasticsearch,到config文件夹下
打开/etc/elasticsearch/elasticsearch.yml文件,在文件的末尾添加
http.cors.enabled: true
http.cors.allow-origin: "*"
10.重启elasticsearch和head
11.再次访问
http://ip:9100
三:安装kibana
1.在主节点上安装:
[root@localhost ~]# yum -y install kibana
若yum安装的速度太慢,可以直接下载rpm包来进行安装:
[root@localhost ~]# cd /es/install/kibana
[root@localhost es]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.1-x86_64.rpm
[root@localhost es]# rpm -ivh kibana-6.3.1-x86_64.rpm
2.安装完成后,对kibana进行配置:
[root@localhost ~]# vim /etc/kibana/kibana.yml # 增加以下内容
server.port: 5601 # 配置kibana的端口
server.host: ip # 配置监听ip
elasticsearch.url: "http://ip:9200" # 配置es服务器的ip,如果是集群则配置该集群中主节点的ip
logging.dest: /var/log/kibana.log # 配置kibana的日志文件路径,不然默认是messages里记录日志
3.创建日志文件:
[root@localhost ~]# touch /var/log/kibana.log
[root@localhost ~]# chmod 777 /var/log/kibana.log
4.启动kibana服务,并检查进程和监听端口:
[root@localhost ~]# systemctl start kibana
[root@localhost ~]# ps aux |grep kibana
[root@localhost ~]# netstat -lntp |grep 5601
注:由于kibana是使用node.js开发的,所以进程名称为node
5.访问
然后在浏览器里进行访问,如:http://ip:5601/,由于并没有安装x-pack,所以此时是没有用户名和密码的,可以直接访问的
到此kibana就安装完成了,很简单,接下来就是安装logstash,不然kibana是没法用的。
四.安装logstash(两种方式安装)
(一)tar安装
logstash的安装和elasticsearch的安装是一样简单的,就是那种拆箱即用的。注意版本需要和elasticsearch的版本一致。
1.下载安装
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.1.tar.gz
2.下载完之后解压
tar -xvf logstash-6.3.1.tar.gz
3.启动服务测试一下是否安装成功:
cd /usr/share/es/logstash-6.3.1/bin
./logstash -e 'input { stdin { } } output { stdout {} }'
如果出现下面的东西就表示成功:
输入随便什么内容:
HelloWorld
展示出如下内容则表示成功
(二)npm下载
1、logstash下载
在官网https://www.elastic.co/downloads/kibana下载logstash的rpm包或者直接在终端wget下载:
[root@localhost es]#wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.1.rpm
2、安装rpm包
[root@localhost es]# rpm -ivh logstash-6.3.1.rpm
3.启动服务测试一下是否安装成功:
cd /usr/share/logstash/bin
./logstash -e 'input { stdin { } } output { stdout {} }'
如果出现下面的东西就表示成功:
输入随便什么内容:
HelloWorld
展示出如下内容则表示成功
4.同步MySQL数据
(1)创建文件夹与文件
cd /usr/share/es/logstash/bin
mkdir config-mysql
cd config-mysql
touch mysql.conf
(2)配置mysql.conf --同步多表就是在input和output 中添加type,但注意type对应要一致
input {
jdbc {
type => "test1表名"
jdbc_driver_library => "/usr/es/elasticsearch-jdbc-2.3.4.0/lib/mysql-connector-java-5.1.38.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://ip:3306/数据库?useUnicode=true&characterEncoding=utf8&useSSL=false"
jdbc_user => "root"
jdbc_password => "password"
jdbc_page_size => 100
jdbc_paging_enabled => true
jdbc_default_timezone => "Asia/Shanghai"
parameters => { "favorite_artist" => "Beethoven" }
schedule => "* * 1 * *"
tracking_column => "id"
tracking_column_type => "numeric"
use_column_value => true
statement => "SELECT * from test1表名"
}
jdbc {
type => "test2表名"
jdbc_driver_library => "/usr/es/elasticsearch-jdbc-2.3.4.0/lib/mysql-connector-java-5.1.38.jar"
jdbc_driver_class => "com.mysql.jdbc.Driver"
jdbc_connection_string => "jdbc:mysql://ip:3306/数据库名?useUnicode=true&characterEncoding=utf8&useSSL=false"
jdbc_user => "root"
jdbc_password => "password"
jdbc_page_size => 100
jdbc_paging_enabled => true
jdbc_default_timezone => "Asia/Shanghai"
parameters => { "favorite_artist" => "Beethoven" }
schedule => "* * * * *"
tracking_column => "id"
tracking_column_type => "numeric"
use_column_value => true
statement => "select * from test2表名"
}
}
filter {
date {
timezone => "Asia/Shanghai"
match => [ "created_at", "yyyy-MM-dd HH:mm:ss" ]
}
}
output {
stdout { codec => rubydebug }
if [type]=="test1表名"{
elasticsearch {
hosts => ["ip:9200"]
index => "test1表名"
document_id => "%{id}"
}
}
if [type]=="test2表名"{
elasticsearch {
hosts => ["ip:9200"]
index => "test2表名"
document_id => "%{id}"
}
}
}
5.启动logstash进行同步表数据
./logstash -f /usr/share/es/mysql-config/wx_push_total.conf
6.如果想指定日志输出目录使用
./logstash --path.settings /etc/logstash/ --path.data /usr/share/log/actv_activity_info.log -f /usr/share/es/mysql-config/wx_push_total.conf
如果想释放控制台,就在命令之后加一个 & 符号,就可以后台运行了
nohup ./logstash --path.settings /etc/logstash/ -f /usr/share/es/mysql-config/wx_push_total.conf &
nohup的意思是:当终端断开(hang up)后,服务仍然在后台执行,需要注意的是,我们需要在nohup命令执行后,按任意键回到shell提示符后,再退出终端。
7.查看日志
tail -f /var/log/logstash/logstash-plain.log -n100
使用nohup命令后台启动查看日志
(1)找到nohup.out文件
2)查看日志
tail -f -n100 /usr/share/logstash/bin/nohup.out
~~ 以下仅供参考
五.安装ik中文分词器
https://github.com/medcl/elasticsearch-analysis-ik/releases
六.获取当前版本
rpm -qa|grep elasticsearch
rpm -qa|grep kibana
rpm -qa|grep logstash
七.删除版本
rpm -e kibana-6.4.2-1.x86_64