博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ELK部署笔记
阅读量:7254 次
发布时间:2019-06-29

本文共 15871 字,大约阅读时间需要 52 分钟。

ELK安装准备工作

准备3台机器,这样才能完成分布式集群的实验,当然能有更多机器更好:

  • 192.168.0.46 
  • 192.168.0.150
  • 192.168.0.76

角色划分:

  • 3台机器全部安装jdk1.8以上版本,因为elasticsearch是java开发的
  • 3台全部安装elasticsearch (后续都简称为es)
  • 192.168.0.46作为主节点
  • 192.168.0.65以及192.168.0.150作为数据节点
  • 主节点上需要安装kibana
  • 在192.168.0.65上安装 logstash

ELK版本信息:

  • Elasticsearch-6.3.2
  • logstash-6.3.2
  • kibana-6.3.2
  • filebeat-6.0.0

配置三台机器的hosts文件内容如下:

$ vim /etc/hosts192.168.77.128 master-node192.168.77.130 data-node1192.168.77.134 data-node2

然后三台机器都得关闭防火墙或清空防火墙规则。

一、安装java 

http://www.oracle.com/technetwork/java/javase/downloads/index.html

get下来,解压

tar -xf XXX.tar.gz

mv jdk-10.0.2 /usr/local/src/

export JAVA_HOME=/usr/local/src/jdk-10.0.2

export PATH=$PATH:${JAVA_HOME}/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

验证安装是否OK

 

 二、安装elasticserach

主节点

https://www.elastic.co/cn/downloads

rpm安装方法说明:https://www.elastic.co/guide/en/elasticsearch/reference/6.3/rpm.html

修改配置文件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,在实际环境中应设置为一个安全的iphttp.port: 9200 # es服务的端口号discovery.zen.ping.unicast.hosts: ["192.168.0.46"]

 

systemctl deamon-reload 

systemctl restart elasticsearch 启动

排错记录:

我这里启动主节点的时候没有启动成功,于是查看es的日志,但是却并没有生成,那就只能去看系统日志了:

[root@master-node ~]# ls /var/log/elasticsearch/[root@master-node ~]# tail -n50 /var/log/messages

错误日志如下:

搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群

如图,可以看到是JDK的路径配置得不对,没法在PATH里找到相应的目录。

于是查看JAVA_HOME环境变量的值指向哪里:

[root@master-node ~]# echo $JAVA_HOME/usr/local/jdk1.8/[root@master-node ~]# ls /usr/local/jdk1.8/bin        db       javafx-src.zip  lib      man          release  THIRDPARTYLICENSEREADME-JAVAFX.txtCOPYRIGHT  include  jre             LICENSE  README.html  src.zip  THIRDPARTYLICENSEREADME.txt[root@master-node ~]#

发现指向的路径并没有错,那就可能是忘记在profile里写export了,于是在profile的末尾加上了这一句:

export JAVA_HOME JAVA_BIN JRE_HOME PATH CLASSPATH

使用source命令重新加载了profile之后,重新启动es服务,但是依旧启动不起来,于是我发现我忽略了一条错误日志:

搭建ELK日志分析平台(上)—— ELK介绍及搭建 Elasticsearch 分布式集群

这是无法在环境变量中找到java可执行文件,那就好办了,做一个软链接过去即可:

[root@master-node ~]#ln -s /usr/local/src/jdk-10.0.2/bin/java    {/usr/local/sbin/,/usr/local/bin/,/usr/sbin/}

 

再次启动es服务,这次就终于启动成功了:

[root@master-node ~]# systemctl restart elasticsearch.service [root@master-node ~]# ps aux |grep elasticsearchelastic+   2655  9.4 31.8 3621592 1231396 ?     Ssl  15:42   0:14 /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.4M9NarAc -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -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 -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quietroot       2735  0.0  0.0 112660   968 pts/0    S+   15:44   0:00 grep --color=auto elasticsearch[root@master-node ~]# netstat -lntp |grep java  # es服务会监听两个端口tcp6       0      0 :::9200                 :::*                    LISTEN      2655/java           tcp6       0      0 :::9300                 :::*                    LISTEN      2655/java           [root@master-node ~]#

 

9300端口是集群通信用的,9200则是数据传输时用的。

启动成功

 

curl查看es集群情况

集群的健康检查:

[root@master-node ~]#

# curl '192.168.0.46:9200/_cluster/health?pretty'

{
"cluster_name" : "zhangmingda-es-cluster",
"status" : "green", # 为green则代表健康没问题,如果是yellow或者red则是集群有问题

"timed_out" : false, 

"number_of_nodes" : 3,  #节点总数
"number_of_data_nodes" : 2,  #data节点数量
"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
}

 

集群详细信息http://49.4.13.98:9200/_cluster/state?pretty

es 安装完毕!!!

 

装kibana

由于上一篇中我们已经配置过yum源,这里就不用再配置了,直接yum安装即可,安装命令如下,在主节点上安装:

[root@master-node ~]# yum -y install kibana

 

若yum安装的速度太慢,可以直接下载rpm包来进行安装:

[root@master-node ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.2-x86_64.rpm[root@master-node ~]# rpm -ivh kibana-6.3.2-x86_64.rpm

 

安装完成后,对kibana进行配置:

[root@master-node ~]# vim /etc/kibana/kibana.yml  # 增加以下内容server.port: 5601  # 配置kibana的端口server.host: 192.168.0.46# 配置监听ip elasticsearch.url: "http://192.168.0.46:9200" # 配置es服务器的ip,如果是集群则配置该集群中主节点的ip logging.dest: /var/log/kibana.log # 配置kibana的日志文件路径,不然默认是messages里记录日志

 

创建日志文件:

[root@master-node ~]# touch /var/log/kibana.log; chown kibana /var/log/kibana.log

 

启动kibana服务,并检查进程和监听端口:

[root@master-node ~]# systemctl start kibana[root@master-node ~]# ps aux |grep kibanakibana     3083 36.8  2.9 1118668 112352 ?      Ssl  17:14   0:03 /usr/share/kibana/bin/../node/bin/node --no-warnings /usr/share/kibana/bin/../src/cli -c /etc/kibana/kibana.ymlroot       3095  0.0  0.0 112660   964 pts/0    S+   17:14   0:00 grep --color=auto kibana[root@master-node ~]# netstat -lntp |grep 5601tcp        0      0 192.168.77.128:5601     0.0.0.0:*               LISTEN      3083/node    [root@master-node ~]#

注:由于kibana是使用node.js开发的,所以进程名称为node

然后在浏览器里进行访问,如: ,由于我们并没有安装x-pack,所以此时是没有用户名和密码的,可以直接访问的:

搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器

到此我们的kibana就安装完成了,很简单,接下来就是安装logstash,不然kibana是没法用的。

安装logstash

在192.168.0.150上安装logstash,但是要注意的是目前logstash不支持JDK1.9。

jdk10 不支持,无奈卸载重新安装

下载jdk 1.8

wget http://download.oracle.com/otn/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-linux-x64.rpm?AuthParam=1533198198_eec89ab6f7e09601305775e5dba29d1bmv jdk-8u172-linux-x64.rpm\?AuthParam\=1533198198_eec89ab6f7e09601305775e5dba29d1b jdk-8u172-linux-x64.rpmyum -y install jdk-8u172-linux-x64.rpm

 

 

直接yum安装logstach,安装命令如下:

[root@data-node1 ~]# yum install -y  logstash

 

如果yum源的速度太慢的话就下载rpm包来进行安装:

[root@data-node1 ~]# wget https://artifacts.elastic.co/downloads/logstash/logstash-6.3.2.rpm[root@data-node1 ~]# rpm -ivh logstash-6.3.2.rpm

 

 

安装完之后,先不要启动服务,先配置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_exitSending Logstash's logs to /var/log/logstash which is now configured via log4j2.propertiesConfiguration OK  # 为ok则代表配置文件没有问题[root@data-node1 /usr/share/logstash/bin]#

 

 

命令说明:

  • --path.settings 用于指定logstash的配置文件所在的目录
  • -f 指定需要被检测的配置文件的路径
  • --config.test_and_exit 指定检测完之后就退出,不然就会直接启动了

指定配置文件,启动logstash:

/usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf

 

打开新终端检查一下10514端口是否已被监听:

[root@data-node1 ~]# netstat -lntp |grep 10514tcp6       0      0 :::10514                :::*                    LISTEN      4312/java
[root@data-node1 ~]# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf
当前在将受到的日志信息输出到屏幕

 

 然后在别的机器ssh登录到这台机器上,测试一下有没有日志输出:如上截图

配置logstash

以上只是测试的配置,这一步我们需要重新改一下配置文件,让收集的日志信息输出到es服务器中,而不是当前终端:

[root@data-node2 ~]# cat /etc/logstash/conf.d/syslog.conf input { syslog {type => "system-syslog" port => 10514 }}output { elasticsearch { #定义输出地址hosts => ["192.168.0.46:9200"] # 定义es服务器的ipindex => "system-syslog-%{+YYYY.MM}" # 定义索引}}

 

重新检查配置文件

 

没问题后,启动logstash服务,并检查进程以及监听端口:

/usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf

 

但是可以看到,logstash的监听ip是127.0.0.1这个本地ip,本地ip无法远程通信,所以需要修改一下配置文件,配置一下监听的ip:

重启服务/usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/syslog.conf

这次就没问题了,端口正常监听了,这样我们的logstash服务就启动成功了:

kibana上查看日志

完成了logstash服务器的搭建之后,回到kibana服务器上查看日志,执行以下命令可以获取索引信息:

[root@data-node2 ~]# curl '192.168.0.46:9200/_cat/indices?v'health status index uuid pri rep docs.count docs.deleted store.size pri.store.sizegreen open .kibana yHeAKZczSMqztZI5yif_Vw 1 1 1 0 8kb 4kbgreen open system-syslog-2018.08 hCaRT0eQQmWQ-9r1GjOtrQ 5 1 20 0 262.3kb 131.1kb

如上,可以看到,在logstash配置文件中定义的system-syslog索引成功获取到了,证明配置没问题,logstash与es通信正常。

获取指定索引详细信息:

[root@data-node2 ~]#  curl -XGET '192.168.0.46:9200/system-syslog-2018.08?pretty'{  "system-syslog-2018.08" : {    "aliases" : { },    "mappings" : {      "doc" : {        "properties" : {          "@timestamp" : {            "type" : "date"          },          "@version" : {            "type" : "text",            "fields" : {              "keyword" : {                "type" : "keyword",                "ignore_above" : 256              }            }          },          "facility" : {            "type" : "long"          },          "facility_label" : {            "type" : "text",            "fields" : {              "keyword" : {                "type" : "keyword",                "ignore_above" : 256              }            }          },          "host" : {            "type" : "text",            "fields" : {              "keyword" : {                "type" : "keyword",                "ignore_above" : 256              }            }          },          "logsource" : {            "type" : "text",            "fields" : {              "keyword" : {                "type" : "keyword",                "ignore_above" : 256              }            }          },          "message" : {            "type" : "text",            "fields" : {              "keyword" : {                "type" : "keyword",                "ignore_above" : 256              }            }          },          "pid" : {            "type" : "text",            "fields" : {              "keyword" : {                "type" : "keyword",                "ignore_above" : 256              }            }          },          "priority" : {            "type" : "long"          },          "program" : {            "type" : "text",            "fields" : {              "keyword" : {                "type" : "keyword",                "ignore_above" : 256              }            }          },          "severity" : {            "type" : "long"          },          "severity_label" : {            "type" : "text",            "fields" : {              "keyword" : {                "type" : "keyword",                "ignore_above" : 256              }            }          },          "timestamp" : {            "type" : "text",            "fields" : {              "keyword" : {                "type" : "keyword",                "ignore_above" : 256              }            }          },          "type" : {            "type" : "text",            "fields" : {              "keyword" : {                "type" : "keyword",                "ignore_above" : 256              }            }          }        }      }    },    "settings" : {      "index" : {        "creation_date" : "1533204542056",        "number_of_shards" : "5",        "number_of_replicas" : "1",        "uuid" : "hCaRT0eQQmWQ-9r1GjOtrQ",        "version" : {          "created" : "6030299"        },        "provided_name" : "system-syslog-2018.08"      }    }  }}

如果日后需要删除索引的话,使用以下命令可以删除指定索引:

curl -XDELETE '192.168.0.46:9200/system-syslog-2018.08'

es与logstash能够正常通信后就可以去配置kibana了,浏览器访问192.168.0.46:5601,到kibana页面上配置索引:

 

我们也可以使用通配符,进行批量匹配:

搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器

配置成功后点击 “Discover” :

 如果搜不到东西

就换几个时间试试,换了几个时间都不行的话,就在浏览器中直接访问es服务器看看是否有反馈出信息:

http://49.4.13.98:9200/system-syslog-2018.08/_search?q=*

如下,这是正常返回信息的情况,如果有问题的话是会返回error的:

 

如果es服务器正常返回信息,但是 “Discover” 页面却依旧显示无法查找到日志信息的话,就使用另一种方式,进入设置删除掉索引:

搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器
搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器
搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器

重新添加索引,但是这次不要选择 @timestampe 了:

搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器

但是这种方式只能看到数据,没有可视化的柱状图:

搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器

其实这里显示的日志数据就是 /var/log/messages 文件里的数据,因为logstash里配置的就是收集messages 文件里的数据。

以上这就是如何使用logstash收集系统日志,输出到es服务器上,并在kibana的页面上进行查看。

 

参考:博客http://blog.51cto.com/zero01/2082794

 

Logstash收集nginx日志

(本例:nginx 和Logstash服务端在同一台服务器上,)

如果收集远程的nginx服务器上的日志,nginx服务器上也要安装logstash 将logstash配置为客户端向Logstash服务器转发nginx日志数据) 例如同时收集tomcat和nginx服务器日志   https://blog.csdn.net/u013619834/article/details/53221383

和收集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.77.128: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_exitSending Logstash's logs to /var/log/logstash which is now configured via log4j2.propertiesConfiguration OK[root@data-node1 /usr/share/logstash/bin]#

检查完毕之后,进入你的nginx虚拟主机配置文件所在的目录中,新建一个虚拟主机配置文件:

[root@data-node1 ~]# cd /usr/local/nginx/conf/vhost/[root@data-node1 /usr/local/nginx/conf/vhost]# vim elk.confserver {      listen 80;      server_name elk.test.com;      location / {          proxy_pass      http://192.168.77.128: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.conflog_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 -tnginx: [warn] conflicting server name "aaa.com" on 0.0.0.0:80, ignorednginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is oknginx: 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.77.130 elk.test.com

这时在浏览器上就可以通过这个域名进行访问了:

搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器

访问成功后,查看生成的日志文件:

[root@data-node1 ~]# ls /tmp/elk_access.log /tmp/elk_access.log[root@data-node1 ~]# wc -l !$wc -l /tmp/elk_access.log45 /tmp/elk_access.log[root@data-node1 ~]#

如上,可以看到,nginx的访问日志已经生成了。

重启logstash服务,生成日志的索引:

systemctl restart logstash

重启完成后,在es服务器上检查是否有nginx-test开头的索引生成:

[root@master-node ~]# curl '192.168.77.128:9200/_cat/indices?v' health status index                 uuid                   pri rep docs.count docs.deleted store.size pri.store.sizegreen  open   .kibana               6JfXc0gFSPOWq9gJI1ZX2g   1   1          2            0     14.4kb          7.2kbgreen  open   system-syslog-2018.03 bUXmEDskTh6fjGD3JgyHcA   5   1        902            0      1.1mb        608.9kbgreen  open   nginx-test-2018.03.04 GdKYa6gBRke7mNgrh2PBUA   5   1         45            0      199kb         99.5kb[root@master-node ~]#

可以看到,nginx-test索引已经生成了,那么这时就可以到kibana上配置该索引:

搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器
搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器
搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器

配置完成之后就可以在 “Discover” 里进行查看nginx的访问日志数据了:

搭建ELK日志分析平台(下)—— 搭建kibana和logstash服务器

 

转载于:https://www.cnblogs.com/zhangmingda/p/9406871.html

你可能感兴趣的文章
Zimber 8.8.12卸载后重新安装报错解决办法
查看>>
Git 自救指南
查看>>
spring boot配置项目访问路径,配置拦截器,配置静态虚拟路径
查看>>
linux运维笔记
查看>>
Lake Counting (DFS)
查看>>
信息安全影响因素
查看>>
hadoop安装
查看>>
delegate事件委托
查看>>
Linux Process VS Thread VS LWP
查看>>
杭电多校第二场 1005 hack it
查看>>
VMM2012应用指南之9-向VMM中添加VMware ESX Server主机
查看>>
Exchange日常管理之二十二:配置保留策略
查看>>
Android -- Webview自适应屏幕
查看>>
从Delphi 7升级到Delphi XE
查看>>
android圆形图像
查看>>
Oracle数据库备份还原工具之Expdp/IMPdp
查看>>
【转】android JNI编程 一些技巧(整理)
查看>>
MySQL之终端(Terminal)管理数据库、数据表、数据的基本操作
查看>>
各种排序算法汇总
查看>>
C#巧用Excel模版变成把Table打印出来
查看>>