ELK:
[root@room9pc01 ~]# ls /var/ftp/elk/
filebeat-1.2.3-x86_64.rpm
elasticsearch-2.3.4.rpm
kibana-4.5.2-1.x86_64.rpm
logstash-2.3.4-1.noarch.rpm
elasticsearch-kopf-master.zip
elasticsearch-head-master.zip
bigdesk-master.zip
[root@room9pc01 ~]#createrepo /var/ftp/elk/
[root@room9pc01 ~]#createrepo --update /var/ftp/elk/
[root@es1 ~]# vim /etc/yum.repos.d/dvd.repo
[elk]
name=elk
baseurl=ftp://192.168.8.254/elk/
enabled=1
gpgcheck=0
[rhel7]
name=rhel7
baseurl=ftp://192.168.8.254/rhel7/
enabled=1
gpgcheck=0
3、安装并配置Elasticsearch(以es1为例,其余es主机类似)
[root@es1 ~]#yum -y install java-1.8.0-openjdk
[root@es1 ~]#yum -y install elasticsearch
[root@es1 ~]# vim /etc/hosts
192.168.8.41 es1
192.168.8.42 es2
192.168.8.43 es3
192.168.8.44 es4
192.168.8.45 es5
[root@es1 ~]# vim /etc/elasticsearch/elasticsearch.yml
17 cluster.name: nsd1812
23 node.name: es1
54 network.host: 0.0.0.0
68 discovery.zen.ping.unicast.hosts: ["es1", "es2", "es3"]
[root@es1 ~]# systemctl start elasticsearch
[root@es1 ~]# systemctl enable elasticsearch
[root@es1 ~]# netstat -ntulap |grep :9200 //查看服务是否启动(9200为客户端访问端口)
[root@es1 ~]# netstat -ntulap |grep :9300 //查看服务是否启动(9300为集群访问端口)
[root@es1 ~]# firefox http://192.168.8.41:9200 //访问9200端口查看是否安装成功
[root@es1 ~]# firefox http://192.168.8.44:9200/_cluster/health?pretty //ES集群验证,显示5台节点
...
"cluster_name" : "nsd1812",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 5,
"number_of_data_nodes" : 5,
...
4、curl命令的使用
系统命令curl:是一个利用URL规则在命令行下工作的文件传输工具,可以说是一款很强大的http命令行工具,它支持多种请求模式、自定义请求头等等强大功能,是一款综合工具
curl常用参数介绍:
-A 修改请求头
-X设置请求方法
-i显示返回头信息
例如:
[root@es1 ~]# curl -X GET http://192.168.8.42:9200/_cat //索引的分片信息
[root@es1 ~]# curl -X GET http://192.168.8.42:9200/_cat/health?v //显示health的详细信息
[root@es1 ~]# curl -X GET http://192.168.8.42:9200/_cat/nodes?help //查看nodes的帮助
5、部署插件(插件部署在那一台机器上,只能在那台机器上使用,这里以安装在es5上为例)
[root@es5 ~]# cd /usr/share/elasticsearch/bin/
[root@es5 bin]# ./plugin install ftp://192.168.8.254/elk/elasticsearch-head-master.zip
[root@es5 bin]# ./plugin install ftp://192.168.8.254/elk/elasticsearch-kopf-master.zip
[root@es5 bin]# ./plugin install ftp://192.168.8.254/elk/bigdesk-master.zip
[root@es5 bin]# ./plugin list //查看安装的插件
[root@room9pc01 ~]# firefox http://192.168.8.45:9200/_plugin/head/ //真机访问es5的head插件
[root@room9pc01 ~]# firefox http://192.168.8.45:9200/_plugin/kopf/ //真机访问es5的kopf插件
[root@room9pc01 ~]# firefox http://192.168.8.45:9200/_plugin/bigdesk/ //真机访问es5的bigdesk插件
6、使用curl实现ES数据库的增、删、改、查
增 PUT
curl -XPUT http://es3:9200/索引/类型/id -d ‘json数据’
改 POST
curl -XPOST http://es3:9200/索引/类型/id/_update -d ‘json数据’
查 GET
curl -XGET http://es3:9200/索引/类型/id?pretty
删除 DELETE
curl -XDELETE http://es3:9200/索引/类型/id?pretty
例如:
[root@es5 ~]# curl -XPUT http://es3:9200/tea -d '{"settings":{"index":{"number_of_shards":5,"number_of_replicas":1}}}' //创建索引tedu
[root@es5 ~]# curl -XPUT http://es3:9200/tea/teacher/1 -d '{ "姓名": "张三","爱好": "篮球","阶段": "2阶段","年龄": "22" }' //增加数据1
[root@es5 ~]# curl -XPUT http://es3:9200/tea/teacher/2 -d '{ "姓名": "李四","爱好": "足球","阶段": "3阶段","年龄": "25" }' //增加数据2
[root@es5 ~]# curl -XPUT http://es3:9200/tea/teacher/3 -d '{ "姓名": "王五","爱好": "乒乓球","阶段": "2阶段","年龄": "23" }' //增加数据3
[root@es5 ~]# curl -XPOST http://es3:9200/tea/teacher/3/_update -d '{"doc":{"年龄":""20"}}' //修改王五的年龄为20
[root@es5 ~]# curl -XGET http://es3:9200/tea/teacher/3?pretty //查询id为3的数据信息
[root@es5 ~]# curl -XDELETE http://es3:9200/tea/teacher/3?pretty //删除id为3的数据信息
[root@es5 ~]# curl -XDELETE http://es3:9200/* //删除所有索引
7、安装kibana(192.168.8.40,yum源与前面es主机一致)
[root@kibana ~]# vim /etc/hosts
192.168.8.40 kibana
192.168.8.41 es1
192.168.8.42 es2
192.168.8.43 es3
192.168.8.44 es4
192.168.8.45 es5
[root@kibana ~]# yum -y install kibana
[root@kibana ~]# vim /opt/kibana/config/kibana.yml
2 server.port: 5601 //服务端口
5 server.host: "0.0.0.0" //服务器监听地址
15 elasticsearch.url: "http://192.168.8.41:9200" //声明地址,集群群中任意一个
23 kibana.index: ".kibana" //kibana自己创建的索引
26 kibana.defaultAppId: "discover" //打开kibana页面时,默认打开的叶页面discover
53 elasticsearch.pingTimeout: 1500 //ping检测超时时间
57 elasticsearch.requestTimeout: 30000 //请求超时
64 elasticsearch.startupTimeout: 5000 //启动超时
[root@kibana ~]# systemctl start kibana
[root@kibana ~]# systemctl enable kibana
[root@room9pc01 ~]# firefox http://192.168.8.40:5601/ //访问kibana,点击status,全部是绿色的对勾,说明安装成功
8、调试导入数据
[root@es5 ~]# ls
accounts.json logs.jsonl shakespeare.json
[root@es5 ~]# curl -XPOST http://es2:9200/_bulk --data-binary @shakespeare.json
[root@es5 ~]# curl -XPOST http://es2:9200/_bulk --data-binary @accounts.json
[root@es5 ~]# curl -XPOST http://es2:9200/_bulk --data-binary @logs.jsonl
9、安装logstash(192.168.8.47,yum源同es主机)
[root@logstash ~]# yum -y install java-1.8.0-openjdk
[root@logstash ~]# yum -y install logstash
[root@logstash ~]# vim /etc/hosts
192.168.8.41 es1
192.168.8.42 es2
192.168.8.43 es3
192.168.8.44 es4
192.168.8.45 es5
192.168.8.40 kibana
192.168.8.47 logstash
配置文件(编写配置文件帮助文档https://www.elastic.co/guide/en/logstash/current/index.html)
[root@logstash ~]# vim /etc/logstash/logstash.conf
input{
beats{
port => "5044" //配置接收filebeat传输的数据,默认端口
}
stdin{ codec=> "json" } //声明输入数据格式为json格式
file {
path => ["/tmp/a.log"] //自定义日志文件的读取路径(多个日志用“,”隔开)
sincedb_path => "/var/lib/logstash/since.db" //定义指针记录文件,记录读取日志文件的位置
start_position => "beginning" //配置第一次读取日志文件时从什么地方开始
type => "nsd1812" //自定义日志类型(nginx日志、apache日志或者mysql日志等)
}
tcp { //配置日志文件远程读写
mode => "server" //mode为server时,表示监听客户端的连接;mode为client时,表示连接服务器
host => "0.0.0.0" //mode为server时,表示监听的地址;mode为client时,表示要连接的服务器地址
port => 8888 //自定义监听端口号
type => "tcplog" //自定义接收日志的协议标签
}
udp { //配置日志文件远程读写
port => 8888 //与tcp共用同一端口号(通信五元素:源地址、目标地址、源端口、目标端口,协议,只要有一个不一样,都可以共用同一个端口)
type => "udplog" //自定义接收日志的协议标签
}
syslog {
type => "syslog" //配置前端web服务器向logstash主机远程发送系统日志数据(默认监听端口号为514),与web服务器的配置文件/etc/rsyslog.conf相关
}
filter{
if [type]== "apache_log" { //判断是否为apache日志
grok { //grok模块用于从语法上分析非结构化日志数据并将其结构化
match => {
"message" => "%{COMBINEDAPACHELOG}" //正则匹配apache日志数据的宏COMBINEDAPACHELOG
}}
}
}
output{
#stdout{ codec=> "rubydebug" } //用于调试,这里注释掉
if [type] == "apache_log"{
elasticsearch { //指定向elasticsearch服务器输出数据
hosts => ["es1:9200", "es2:9200", "es3:9200"] //指定elasticsearch服务器地址(至少保证一台不宕机)
index => "weblog" //自定义输出的索引(库名)
flush_size => 2000 //参数调优,数据达到2000字节时开始写入
idle_flush_time => 10 //参数调优,写入空闲时间
}}
}
[root@logstash ~]# cd /etc/logstash/
[root@logstash logstash]# /opt/logstash/bin/logstash -f logstash.conf //启动logstash
[root@logstash logstash]# ss -ltun //查看监听端口号(5044、514、8888)
10、准备一台web服务器(192.168.8.46,yum源同上),安装filebeat(负责发送日志至logstash)
[root@web46 ~]# vim /etc/rsyslog.conf
local0.notice @@192.168.8.47:514 //配置web服务器向logstash主机远程发送系统日志数据
[root@web46 filebeat]# yum -y install filebeat httpd
[root@web46 filebeat]# cd /etc/filebeat
[root@web46 filebeat]# vim filebeat.yml
14 paths:
15 - /var/log/httpd/access_log //要传输至logstash的日志
72 document_type: apache_log //对应logstash配置文件output指定的type
(183和188行加注释) //取消输出数据至elasticsearch
278 logstash: //输出数据至logstash
280 hosts: ["192.168.8.47:5044"]
11、测试ELK数据连通性
不同客户端192.168.8.254和192.168.8.31通过浏览器访问web主机(192.168.8.46)的index.html和abc.html主页,访问请求次数在kibana中的统计结果如下图: