ELK日志收集分析平台 (Elasticsearch+Logstash+Kibana)分布式集群

ELK安装准备工作
准备3台机器,这样才能完成分布式集群的实验,当然能有更多机器更好:
配置三台机器的hosts文件内容如下:
vim /etc/hosts
192.168.254.133 master-node
192.168.254.134 data-node1
192.168.254.135 data-node2
角色划分:
• 3台机器全部安装jdk1.8,因为elasticsearch是java开发的
• 3台全部安装elasticsearch (后续都简称为es)
• 192.168.254.133 作为主节点
• 192.168.254.134以及192.168.254.135作为数据节点
• 主节点上需要安装kibana
• 在192.168.254.134上安装 logstash

安装JDK1.8及以上版本!
删除自带的OpenJDK,一些开发版的centos会自带jdk,我们一般用自己的jdk,把自带的删除。先看看有没有安装:
java -version
查找他们的安装位置:
rpm -qa | grep java
删除全部,noarch文件可以不用删除
rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.161-0.b14.el7_4.x86_64
rpm -e --nodeps java-1.8.0-openjdk-1.8.0.161-0.b14.el7_4.x86_64
rpm -e --nodeps java-1.7.0-openjdk-1.7.0.161-2.6.12.0.el7_4.x86_64
rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.161-2.6.12.0.el7_4.x86_64
检查有没有删除
java -version
-bash: /usr/bin/java: 没有那个文件或目录
如果还没有删除,则用yum -y remove去删除他们
下载并安装:进入 /usr/local 目录,执行:
wget http://download.oracle.com/otn-pub/java/jdk/8u162-b12/0da788060d494f5095bf8624735fa2f1/jdk-8u162-linux-x64.tar.gz?AuthParam=1516699305_3ad4fe7353a00babea8146d5257b92e4
下载JDK压缩包,如果不行就自己上传到服务器
下载完成后解压tar包
tar -zxvf jdk-8u162-linux-x64.tar.gz
将解压后的文件夹剪切到usr/local 目录下,并改名为 jdk8
mv jdk1.8.0_162 /usr/local/jdk1.8
配置环境变量 :
vim /etc/profile
在export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL下面添加如下代码:
#jdk
export JAVA_HOME=/usr/local/jdk1.8
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
追加完成后更新配置:source /etc/profile 查看是否安装成功:java -version

ELK版本信息:(也可以在官网自己选择版本)
https://www.elastic.co/downloads

我这里也是通过官方给的源进行安装,以下操作3台机器上都要执行,因为三台机器都需要安装es:
安装es
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/elastic.repo # 增加以下内容
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

yum install -y elasticsearch
已安装:
elasticsearch.noarch 0:6.3.0-1
如果使用官方的源下载实在太慢的话,也可以直接下载rpm包进行安装

配置es
elasticsearch配置文件在这两个地方,有两个配置文件:
ll /etc/elasticsearch
elasticsearch.yml
jvm.options
log4j2.properties

ll /etc/sysconfig/elasticsearch
/etc/sysconfig/elasticsearch

elasticsearch.yml 文件用于配置集群节点等相关信息的,elasticsearch 文件则是配置服务本身相关的配置,例如某个配置文件的路径以及java的一些路径配置什么的。
开始配置集群节点,在 192.168.254.133 上编辑配置文件:
[root@master-node ~]# vim /etc/elasticsearch/elasticsearch.yml # 增加或更改以下内容
cluster.name: master-node # 集群中的名称
node.name: master # 该节点名称
node.master: true # 意思是该节点为主节点
node.data: false # 表示这不是数据节点
network.host: 0.0.0.0 # 监听全部ip,在实际环境中应设置为一个安全的ip
http.port: 9200 # es服务的端口号
discovery.zen.ping.unicast.hosts: ["192.168.254.133", "192.168.254.134", "192.168.254.135"] # 配置自动发现
[root@master-node ~]#
然后将配置文件发送到另外两台机器上去:
[root@master-node ~]# scp /etc/elasticsearch/elasticsearch.yml data-node1:/tmp/
[root@master-node ~]# scp /etc/elasticsearch/elasticsearch.yml data-node2:/tmp/
到两台机器上去更改该文件,修改以下几处地方:
192.168.254.134:
[root@data-node1 ~]# vim /tmp/elasticsearch.yml
node.name: data-node1
node.master: false
node.data: true
[root@data-node1 ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml
cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
[root@data-node1 ~]#
192.168.254.135:
[root@data-node2 ~]# vim /tmp/elasticsearch.yml
node.name: data-node2
node.master: false
node.data: true
[root@data-node2 ~]# cp /tmp/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml
cp: overwrite ‘/etc/elasticsearch/elasticsearch.yml’? yes
[root@data-node2 ~]#
完成以上的配置之后,到主节点上,启动es服务:
systemctl start elasticsearch.service
主节点启动完成之后,再启动其他节点的es服务。
排错记录:
我这里启动主节点的时候没有启动成功,于是查看es的日志,但是却并没有生成,那就只能去看系统日志了:
[root@master-node ~]# ls /var/log/elasticsearch/
[root@master-node ~]# tail -n50 /var/log/messages
报错解决:
如果java安装了查看相关路径版本(如果没有请安装)
echo $JAVA_HOME
这是无法在环境变量中找到java可执行文件,那就好办了,做一个软链接过去即可:
[root@master-node ~]# ln -s /usr/local/jdk1.8/bin/java /usr/bin/
再次启动es服务,这次就终于启动成功了:
[root@master-node elasticsearch]# systemctl restart elasticsearch.service
[root@master-node elasticsearch]# ps aux |grep elasticsearch
elastic+ 1695 90.2 14.7 1678052 570592 ? Ssl 19:48 0:07 /bin/java -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.io.tmpdir=/tmp/elasticsearch.ioUbRBxw -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:ErrorFile=/var/log/elasticsearch/hs_err_pid%p.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -Xloggc:/var/log/elasticsearch/gc.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=32 -XX:GCLogFileSize=64m -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -Des.distribution.flavor=default -Des.distribution.type=rpm -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet
root 1747 0.0 0.0 112720 988 pts/0 S+ 19:48 0:00 grep --color=auto elasticsearch

9300端口是集群通信用的,9200则是数据传输时用的。
[root@master-node elasticsearch]# netstat -tunpl
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp6 0 0 :::9200 ::: LISTEN 1695/java
tcp6 0 0 :::9300 :::
LISTEN 1695/java

主节点启动成功后,依次启动其他节点即可,这里其他节点都是启动正常的就OK。

curl查看es集群情况
[root@master-node elasticsearch]# curl '192.168.254.133:9200/_cluster/health?pretty'
{
"cluster_name" : "master-node",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 3,
"number_of_data_nodes" : 2,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}

查看集群的详细信息:
[root@master-node elasticsearch]# curl '192.168.254.133:9200/_cluster/state?pretty'
会显示一长串信息!

检查没有问题后,我们的es集群就搭建完成了。
这个集群的状态信息也可以通过浏览器查看:
ELK日志收集分析平台 (Elasticsearch+Logstash+Kibana)分布式集群

但是显示出来的也是一堆字符串,我们希望这些信息能以图形化的方式显示出来,那就需要安装kibana来为我们展示这些数据了。

安装kibana
由于上一篇中我们已经配置过yum源,这里就不用再配置了,直接yum安装即可,安装命令如下,在主节点上安装:
[root@master-node ~]# yum -y install kibana
安装完成后,对kibana进行配置:
[root@master-node ~]# vim /etc/kibana/kibana.yml # 增加以下内容
server.port: 5601 # 配置kibana的端口
server.host: 192.168.254.133 # 配置监听ip
elasticsearch.url: "http://192.168.254.133:9200" # 配置es服务器的ip,如果是集群则配置该集群中主节点的ip
logging.dest: /var/log/kibana.log # 配置kibana的日志文件路径,不然默认是messages里记录日志
创建日志文件:
[root@master-node ~]# touch /var/log/kibana.log
[root@master-node ~]# chmod 777 /var/log/kibana.log
启动kibana服务,并检查进程和监听端口:
[root@master-node ~]# systemctl start kibana
[root@master-node ~]# ps aux |grep kibana
kibana 1731 119 5.7 1232028 222268 ? Rsl 10:31 0:13 /usr/share/kibana/bin/../node/bin/node --no-warnings /usr/share/kibana/bin/../src/cli -c /etc/kibana/kibana.yml
root 1743 0.0 0.0 112720 984 pts/0 S+ 10:31 0:00 grep --color=auto kibana
[root@master-node elasticsearch]# netstat -tunpl |grep 5601
tcp 0 0 192.168.254.133:5601 0.0.0.0:* LISTEN 1731/node
注:由于kibana是使用node.js开发的,所以进程名称为node
然后在浏览器里进行访问,如:http://192.168.254.133:5601/ ,由于我们并没有安装x-pack,所以此时是没有用户名和密码的,可以直接访问的:
ELK日志收集分析平台 (Elasticsearch+Logstash+Kibana)分布式集群
到此我们的kibana就安装完成了,很简单,接下来就是安装logstash,不然kibana是没法用的。

安装logstash
在192.168.254.134上安装logstash,但是要注意的是目前logstash不支持JDK1.9。
直接yum安装,安装命令如下:
[root@data-node1 ~]# yum install -y logstash
安装完之后,先不要启动服务,先配置logstash收集syslog日志:
[root@data-node1 ~]# vim /etc/logstash/conf.d/syslog.conf # 加入如下内容
input { # 定义日志源
syslog {
type => "system-syslog" # 定义类型
port => 10514 # 定义监听端口
}
}
output { # 定义日志输出
stdout {
codec => rubydebug # 将日志输出到当前的终端上显示
}
}
检测配置文件是否有错:
[root@data-node1 ~]# cd /usr/share/logstash/bin
[root@data-node1 /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK # 为ok则代表配置文件没有问题
[root@data-node1 /usr/share/logstash/bin]#
命令说明:
• --path.settings 用于指定logstash的配置文件所在的目录
• -f 指定需要被检测的配置文件的路径
• --config.test_and_exit 指定检测完之后就退出,不然就会直接启动了
配置kibana服务器的ip以及配置的监听端口:
[root@data-node1 ~]# vim /etc/rsyslog.conf

RULES

. @@192.168.254.134:10514
重启rsyslog,让配置生效:
[root@data-node1 ~]# systemctl restart rsyslog
指定配置文件,启动logstash:
[root@data-node1 ~]# cd /usr/share/logstash/bin
[root@data-node1 /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties

这时终端会停留在这里,因为我们在配置文件中定义的是将信息输出到当前终端

打开新终端检查一下10514端口是否已被监听:
[root@data-node1 ~]# netstat -lntp |grep 10514
tcp6 0 0 :::10514 :::* LISTEN 4312/java
然后在别的机器ssh登录到这台机器上,测试一下有没有日志输出:
[root@data-node1 /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
{
"severity" => 6,
"pid" => "4575",
"program" => "sshd",
"message" => "Accepted password for root from 192.168.77.128 port 58336 ssh2\n",
"type" => "system-syslog",
"priority" => 86,
"logsource" => "data-node1",
"@timestamp" => 2018-03-03T18:12:27.000Z,
"@version" => "1",
"host" => "192.168.77.130",
"facility" => 10,
"severity_label" => "Informational",
"timestamp" => "Mar 4 02:12:27",
"facility_label" => "security/authorization"
}
{
......(省略一长串字符)
如上,可以看到,终端中以JSON的格式打印了收集到的日志,测试成功。
配置logstash
以上只是测试的配置,这一步我们需要重新改一下配置文件,让收集的日志信息输出到es服务器中,而不是当前终端:
[root@data-node1 ~]# vim /etc/logstash/conf.d/syslog.conf # 更改为如下内容
input {
syslog {
type => "system-syslog"
port => 10514
}
}
output {
elasticsearch {
hosts => ["192.168.254.133:9200"] # 定义es服务器的ip
index => "system-syslog-%{+YYYY.MM}" # 定义索引
}
}
同样的需要检测配置文件有没有错:
[root@data-node1 ~]# cd /usr/share/logstash/bin
[root@data-node1 /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK
[root@data-node1 /usr/share/logstash/bin]#
没问题后,启动logstash服务,并检查进程以及监听端口:
[root@data-node1 ~]# systemctl start logstash
[root@data-node1 ~]# ps aux |grep logstash
logstash 5364 285 20.1 3757012 376260 ? SNsl 04:36 0:34 /bin/java -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -XX:+DisableExplicitGC -Djava.awt.headless=true -Dfile.encoding=UTF-8 -XX:+HeapDumpOnOutOfMemoryError -Xmx1g -Xms256m -Xss2048k -Djffi.boot.library.path=/usr/share/logstash/vendor/jruby/lib/jni -Xbootclasspath/a:/usr/share/logstash/vendor/jruby/lib/jruby.jar -classpath : -Djruby.home=/usr/share/logstash/vendor/jruby -Djruby.lib=/usr/share/logstash/vendor/jruby/lib -Djruby.script=jruby -Djruby.shell=/bin/sh org.jruby.Main /usr/share/logstash/lib/bootstrap/environment.rb logstas/runner.rb --path.settings /etc/logstash
root 5400 0.0 0.0 112652 964 pts/0 S+ 04:36 0:00 grep --color=auto logstash
错误解决:
我这里启动logstash后,进程是正常存在的,但是9600以及10514端口却没有被监听。于是查看logstash的日志看看有没有错误信息的输出,但是发现没有记录日志信息,那就只能转而去查看messages的日志,发现错误信息如下:
这是因为权限不够,既然是权限不够,那就设置权限即可:
[root@data-node1 ~]# chown logstash /var/log/logstash/logstash-plain.log
[root@data-node1 ~]# ll !$
ll /var/log/logstash/logstash-plain.log
-rw-r--r-- 1 logstash root 7597 Mar 4 04:35 /var/log/logstash/logstash-plain.log
[root@data-node1 ~]# systemctl restart logstash
设置完权限重启服务之后,发现还是没有监听端口,查看logstash-plain.log文件记录的错误日志信息如下:
可以看到,依旧是权限的问题,这是因为之前我们以root的身份在终端启动过logstash,所以产生的相关文件的属组属主都是root,同样的,也是设置一下权限即可:
[root@data-node1 ~]# ll /var/lib/logstash/
total 4
drwxr-xr-x 2 root root 6 Mar 4 01:50 dead_letter_queue
drwxr-xr-x 2 root root 6 Mar 4 01:50 queue
-rw-r--r-- 1 root root 36 Mar 4 01:58 uuid
[root@data-node1 ~]# chown -R logstash /var/lib/logstash/
[root@data-node1 ~]# systemctl restart logstash
这次就没问题了,端口正常监听了,这样我们的logstash服务就启动成功了:
[root@data-node1 ~]# netstat -lntp |grep 9600
tcp6 0 0 127.0.0.1:9600 ::: LISTEN 9905/java
[root@data-node1 ~]# netstat -lntp |grep 10514
tcp6 0 0 :::10514 :::
LISTEN 9905/java
[root@data-node1 ~]#
但是可以看到,logstash的监听ip是127.0.0.1这个本地ip,本地ip无法远程通信,所以需要修改一下配置文件,配置一下监听的ip:
[root@data-node1 ~]# vim /etc/logstash/logstash.yml
http.host: "192.168.254.134"
[root@data-node1 ~]# systemctl restart logstash
[root@data-node1 ~]# netstat -lntp |grep 9600
tcp6 0 0 192.168.254.134:9600 :::* LISTEN 10091/java
[root@data-node1 ~]#


kibana上查看日志
完成了logstash服务器的搭建之后,回到kibana服务器上查看日志,执行以下命令可以获取索引信息:
[root@master-node ~]# curl '192.168.254.134:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana TMvURwZ2Ru2HMjLKSqCtrA 1 1 1 0 8kb 4kb
green open system-syslog-2018.06 01OnHOR_TcqvImgsQk8mkQ 5 1 25 0 33.7kb 460b
[root@master-node ~]#
如上,可以看到,在logstash配置文件中定义的system-syslog索引成功获取到了,证明配置没问题,logstash与es通信正常。
获取指定索引详细信息:
[root@master-node ~]# curl -XGET '192.168.254.134:9200/system-syslog-2018.06?pretty'
{
"system-syslog-2018.06" : {
"aliases" : { },
"mappings" : {
"doc" : {
"properties" : {
"@timestamp" : {
"type" : "date"
},
"@version" : {
"type" : "text",
"fields" : {
"keyword" : {
"type" : "keyword",
"ignore_above" : 256
......(省略一长串字符)

如果日后需要删除索引的话,使用以下命令可以删除指定索引:
curl -XDELETE 'localhost:9200/system-syslog-2018.06'

es与logstash能够正常通信后就可以去配置kibana了,浏览器访问192.168.254.133:5601,到kibana页面上配置索引:
我们也可以使用通配符,进行批量匹配:
ELK日志收集分析平台 (Elasticsearch+Logstash+Kibana)分布式集群
步骤和之前一样!(之后添加也一样)
(测试之类的之前有都是一样的步骤)

logstash收集nginx日志
和收集syslog一样,首先需要编辑配置文件,这一步在logstash服务器上完成:
[root@data-node1 ~]# vim /etc/logstash/conf.d/nginx.conf # 增加如下内容
input {
file { # 指定一个文件作为输入源
path => "/tmp/elk_access.log" # 指定文件的路径
start_position => "beginning" # 指定何时开始收集
type => "nginx" # 定义日志类型,可自定义
}
}
filter { # 配置过滤器
grok {
match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} [%{HTTPDATE:timestamp}] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"} # 定义日志的输出格式
}
geoip {
source => "clientip"
}
}
output {
stdout { codec => rubydebug }
elasticsearch {
hosts => ["192.168.254.133:9200"]
index => "nginx-test-%{+YYYY.MM.dd}"
}
}
同样的编辑完配置文件之后,还需要检测配置文件是否有错:
[root@data-node1 ~]# cd /usr/share/logstash/bin
[root@data-node1 /usr/share/logstash/bin]# ./logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx.conf --config.test_and_exit
Sending Logstash's logs to /var/log/logstash which is now configured via log4j2.properties
Configuration OK
[root@data-node1 /usr/share/logstash/bin]#
检查完毕之后,进入你的nginx虚拟主机配置文件所在的目录中,新建一个虚拟主机配置文件:
例如配置文件位于:vi /usr/local/nginx/conf/nginx.conf
在http {}的最后,添加如下行:
include vhosts/*.conf;

[root@data-node1 ~]# cd /usr/local/nginx/conf/vhost/
[root@data-node1 /usr/local/nginx/conf/vhost]# vim elk.conf
server {
listen 80;
server_name elk.test.com;

  location / {
      proxy_pass      http://192.168.254.133:5601;
      proxy_set_header Host   $host;
      proxy_set_header X-Real-IP      $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  access_log  /tmp/elk_access.log main2;

}
配置nginx的主配置文件,因为需要配置日志格式,在 log_format combined_realip 那一行的下面增加以下内容:
[root@data-node1 ~]# vim /usr/local/nginx/conf/nginx.conf
log_format main2 '$http_host $remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$upstream_addr" $request_time';
完成以上配置文件的编辑之后,检测配置文件有没有错误,没有的话就reload重新加载:
[root@data-node1 ~]# /usr/local/nginx/sbin/nginx -t
nginx: [warn] conflicting server name "aaa.com" on 0.0.0.0:80, ignored
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@data-node1 ~]# /usr/local/nginx/sbin/nginx -s reload
[root@data-node1 ~]#
由于我们需要在windows下通过浏览器访问我们配置的 elk.test.com 这个域名,所以需要在windows下编辑它的hosts文件增加以下内容:
192.168.254.134 elk.test.com
ELK日志收集分析平台 (Elasticsearch+Logstash+Kibana)分布式集群
访问成功后,查看生成的日志文件:
[root@data-node1 ~]# ls /tmp/elk_access.log
/tmp/elk_access.log
[root@data-node1 ~]# wc -l !$
wc -l /tmp/elk_access.log
45 /tmp/elk_access.log
[root@data-node1 ~]#
如上,可以看到,nginx的访问日志已经生成了。
重启logstash服务,生成日志的索引:
systemctl restart logstash
重启完成后,在es服务器上检查是否有nginx-test开头的索引生成:
[root@master-node ~]# curl '192.168.254.133:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open .kibana 6JfXc0gFSPOWq9gJI1ZX2g 1 1 2 0 14.4kb 7.2kb
green open system-syslog-2018.03 bUXmEDskTh6fjGD3JgyHcA 5 1 902 0 1.1mb 608.9kb
green open nginx-test-2018.03.04 GdKYa6gBRke7mNgrh2PBUA 5 1 45 0 199kb 99.5kb

在 192.168.254.135 上安装filebeat,filebeat是beats体系中用于收集日志信息的工具:
[root@data-node2 ~]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.0.0-x86_64.rpm
[root@data-node2 ~]# rpm -ivh filebeat-6.0.0-x86_64.rpm
安装完成之后编辑配置文件:
[root@data-node2 ~]# vim /etc/filebeat/filebeat.yml # 增加或者更改为以下内容
filebeat.prospectors:

  • type: log
    #enabled: false 这一句要注释掉
    paths:
    • /var/log/messages # 指定需要收集的日志文件的路径

#output.elasticsearch: # 先将这几句注释掉

Array of hosts to connect to.

hosts: ["localhost:9200"]

output.console: # 指定在终端上输出日志信息
enable: true
配置完成之后,执行以下命令,看看是否有在终端中打印日志数据,有打印则代表filebeat能够正常收集日志数据:
[root@data-node2 ~]# /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml
以上的配置只是为了测试filebeat能否正常收集日志数据,接下来我们需要再次修改配置文件,将filebeat作为一个服务启动:
[root@data-node2 ~]# vim /etc/filebeat/filebeat.yml
#output.console: 把这两句注释掉

enable: true

把这两句的注释去掉

output.elasticsearch:

Array of hosts to connect to.

hosts: ["192.168.254.133:9200"] # 并配置es服务器的ip地址
修改完成后就可以启动filebeat服务了:
[root@data-node2 ~]# systemctl start filebeat
[root@data-node2 ~]# ps axu |grep filebeat
root 3021 0.3 2.3 296360 11288 ? Ssl 22:27 0:00 /usr/share/filebeat/bin/filebeat -c /etc/filebeat/filebeat.yml -path.home /usr/share/filebeat -path.config /etc/filebeat -path.data /var/lib/filebeat -path.logs /var/log/filebeat
root 3030 0.0 0.1 112660 960 pts/0 S+ 22:27 0:00 grep --color=auto filebeat
启动成功后,到es服务器上查看索引,可以看到新增了一个以filebeat-6.0.0开头的索引,这就代表filesbeat和es能够正常通信了:
[root@master-node ~]# curl '192.168.254.133:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open system-syslog-2018.03 bUXmEDskTh6fjGD3JgyHcA 5 1 73076 0 24.8mb 11.6mb
green open nginx-test-2018.03.04 GdKYa6gBRke7mNgrh2PBUA 5 1 91 0 1mb 544.8kb
green open .kibana 6JfXc0gFSPOWq9gJI1ZX2g 1 1 3 0 26.9kb 13.4kb
green open filebeat-6.0.0-2018.03.04 MqQJMUNHS_OiVmO26NEWTw 3 1 66 0 64.5kb 39.1kb
[root@master-node ~]#
ELK日志收集分析平台 (Elasticsearch+Logstash+Kibana)分布式集群
到此结束!

转载于:https://blog.51cto.com/10158955/2133420

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值