热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

搭建一个简单的日志实时分析平台---ELK

一、前言人们常常说数据如金,可是,能被利用起的数据,才是“金”。而互联网的数据,常常以日志的媒介的形式存在,并需要从中提取其中的数据。从这些数据中,我们可以做用户画像(每个用户
一、前言
    人们常常说数据如金,可是,能被利用起的数据,才是“金”。而互联网的数据,常常以日志的媒介的形式存在,并需要从中提取其中的"数据"。
    从这些数据中,我们可以做用户画像(每个用户都点了什么广告,对哪些开源技术感兴趣),安全审计,安全防护(如果1小时内登录请求数到达一定值就报警),业务数据统计(如开源中国每天的博客数是多少,可视化编辑格式和markdown格式各占比例是多少)等等。
    之所以能做这些,是因为用户的所有的行为,都将被记录在nginx日志中或其它web服务器的日志中。日志分析要做的就是将这些日志进行结构化,方便我们的业务人员快速查询。日志分析平台要做的就是这些。
    说完这些,你是不是觉得日志分析平台很难做,需要十人的团队加班几个月才能完成?
    自从有了Elasticsearch、Logstash、Kibana,俗称ELK,小公司也可以很轻松地做日志分析了。说白了,1天几G的日志,ELK完全可以吃得消。就像标题说的,只需要1个人半小时就可以搭建好了(刚开始的时候折腾了一天,等熟练之后半个小时完成还是可以的)。

    本文目的就是教你如何在搭建一个日志分析平台的雏形。有了这个雏形,你可以慢慢迭代出更强大,更适合你业务的日志分析平台。


二、简介
    在我们日常生活中,我们经常需要回顾以前发生的一些事情;或者,当出现了一些问题的时候,可以从某些地方去查找原因,寻找发生问题的痕迹。无可避免需要用到文字的、图像的等等不同形式的记录。用计算机的术语表达,就是 LOG,或日志。
    日志,对于任何系统来说都是及其重要的组成部分。在计算机系统里面,更是如此。但是由于现在的计算机系统大多比较复杂,很多系统都不是在一个地方,甚至都是跨国界的;即使是在一个地方的系统,也有不同的来源,比如,操作系统,应用服务,业务逻辑等等。他们都在不停产生各种各样的日志数据。根据不完全统计,我们全球每天大约要产生2EB(10的18次方)的数据。
    面对如此海量的数据,又是分布在各个不同地方,如果我们需要去查找一些重要的信息,难道还是使用传统的方法,去登陆到一台台机器上查看?看来传统的工具和方法已经显得非常笨拙和低效了。于是,一些聪明人就提出了建立一套集中式的方法,把不同来源的数据集中整合到一个地方。
    一个完整的集中式日志系统,是离不开以下几个主要特点的。
# 收集--能够采集多种来源的日志数据
# 传输--能够稳定的把日志数据传输到中央系统
# 存储--如何存储日志数据
# 分析--可以支持UI分析
# 警告--能够提供错误报告,监控机制
    ELK完美的解决上述场景。


三、市场上的产品
    基于上述思路,于是许多产品或方案就应运而生了。比如,简单的Rsyslog,Syslog-ng;商业化的Splunk ;开源的有FaceBook公司的Scribe,Apache的Chukwa,Linkedin的Kafak,Cloudera的Fluentd,ELK等等。
    在上述产品中,Splunk是一款非常优秀的产品,但是它是商业产品,价格昂贵,让许多人望而却步。
    直到ELK的出现,让大家又多了一种选择。相对于其他几款开源软件来说,本文重点介绍ELK。


四、ELK Stack(ELK 协议栈)
    ELK不是一款软件,而是Elasticsearch、Logstash和Kibana三种软件产品的首字母缩写。这三者都是开源软件,通常配合使用,而且又先后归于Elastic.co公司名下,所以被简称为ELK Stack(ELK 协议栈)。根据Google Trend的信息显示,ELK Stack已经成为目前最流行的集中式日志解决方案。
# Elasticsearch:分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于Apache Lucene构建,使用Java语言编写,能对大容量的数据进行接近实时的存储、搜索和分析操作。通常被用作某些应用的基础搜索引擎,使其具有复杂的搜索功能;
# Logstash:数据收集引擎。使用JRuby语言编写,它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;
# Kibana:数据分析和可视化平台。使用Javascript语言编写,为Elasticsearch提供分析和可视化的Web平台。它可以在Elasticsearch的索引中查找,交互数据,并生成各种维度的表图;
# Filebeat:ELK协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于Logstash-Forwarder源代码开发,是对它的替代。在需要采集日志数据的server上安装Filebeat,并指定日志目录或日志文件后,Filebeat就能读取数据,迅速发送到Logstash进行解析,亦或直接发送到Elasticsearch进行集中式存储和分析。
    特别还提到一下Logstash-forwarder,这是一款使用Go语言编写的日志传输工具。由于Logstash是使用Java来运行,为了提升网络传输效率,我们并不在客户系统上面使用Logstash来传输数据。这款软件就是原来的Lumberjack,今后慢慢将被Elastic.co公司的另外一款产品Beat吸收合并到Filebeat中。


五、ELK常用架构及使用场景
最简单架构
在这种架构中,只有一个Logstash、Elasticsearch和Kibana实例。Logstash通过输入插件从多种数据源(比如日志文件、标准输入Stdin等)获取数据,再经过滤插件加工数据,然后经Elasticsearch输出插件输出到Elasticsearch,通过Kibana展示。详见图 1。 


这种架构非常简单,使用场景也有限。初学者可以搭建这个架构,了解ELK如何工作。


Logstash作为日志搜集器
这种架构是对上面架构的扩展,把一个Logstash数据搜集节点扩展到多个,分布于多台机器,将解析好的数据发送到Elasticsearch server进行存储,最后在Kibana查询、生成日志报表等。详见图 2。 


这种结构因为需要在各个服务器上部署Logstash,而它比较消耗CPU和内存资源,所以比较适合计算资源丰富的服务器,否则容易造成服务器性能下降,甚至可能导致无法正常工作。


Beats作为日志搜集器
这种架构引入Beats作为日志搜集器。目前Beats包括四种:
# Packetbeat(搜集网络流量数据);
# Topbeat(搜集系统、进程和文件系统级别的CPU和内存使用情况等数据);
# Filebeat(搜集文件数据);
# Winlogbeat(搜集Windows事件日志数据)。
Beats 将搜集到的数据发送到 Logstash,经 Logstash 解析、过滤后,将其发送到 Elasticsearch 存储,并由 Kibana 呈现给用户。详见图 3。


这种架构解决了Logstash在各服务器节点上占用系统资源高的问题。相比Logstash,Beats所占系统的CPU和内存几乎可以忽略不计。另外,Beats和Logstash之间支持SSL/TLS加密传输,客户端和服务器双向认证,保证了通信安全。 
因此这种架构适合对数据安全性要求较高,同时各服务器性能比较敏感的场景。


引入消息队列机制的架构
这种架构使用Logstash从各个数据源搜集数据,然后经消息队列输出插件输出到消息队列中。目前Logstash支持Kafka、Redis、RabbitMQ等常见消息队列。然后Logstash通过消息队列输入插件从队列中获取数据,分析过滤后经输出插件发送到Elasticsearch,最后通过Kibana展示。详见图 4。


这种架构适合于日志规模比较庞大的情况。但由于Logstash日志解析节点和Elasticsearch的负荷比较重,可将他们配置为集群模式,以分担负荷。引入消息队列,均衡了网络传输,从而降低了网络闭塞,尤其是丢失数据的可能性,但依然存在Logstash占用系统资源过多的问题。


基于Filebeat架构的配置部署详解
前面提到Filebeat已经完全替代了Logstash-Forwarder成为新一代的日志采集器,同时鉴于它轻量、安全等特点,越来越多人开始使用它。这个章节将详细讲解如何部署基于Filebeat的ELK集中式日志解决方案,具体架构见图 5。


因为免费的ELK没有任何安全机制,所以这里使用了Nginx作反向代理,避免用户直接访问Kibana服务器。加上配置Nginx实现简单的用户认证,一定程度上提高安全性。另外,Nginx本身具有负载均衡的作用,能够提高系统访问性能。


六、在Debian 8.6 64位中实战
具体安装过程如下
步骤 1,安装 JDK
步骤 2,安装 Elasticsearch
步骤 3,安装 Kibana
步骤 4,安装 Nginx
步骤 5,安装 Logstash
步骤 6,配置 Logstash
步骤 7,安装 Logstash-forwarder
步骤 8,最终验证
注:我这里用了两台Debian 8.6 64位(你用Ubuntu也行)虚拟机,IP为192.168.102.34和192.168.102.35


步骤 1,安装JDK
Elasticsearch要求至少Java 7。一般推荐使用Oracle JDK 1.8或者OpenJDK 1.8。我们这里使用Oracle JDK 1.8。


root@h34:~# tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr
root@h34:~# vi /etc/profile
export JAVA_HOME=/usr/jdk1.8.0_91
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
root@h34:~# source /etc/profile
root@h34:~# java -version
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
注意:在我这个Debian 8.6虚拟机/etc/profile中配置java的环境变量的时候还必须按上面那样写,按下面这样写(在Centos和RedHat中就好使)还不行,可能是Linux不同?完全不明所以。
export JAVA_HOME=/usr/jdk1.8.0_91
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$HOME/bin:$JAVA_HOME/bin


创建elk用户并赋予sudo权限:
root@h34:~# adduser elk
注意:Centos 7.2分两步,adduser elk和passwd elk
root@h34:~# chmod +w /etc/sudoers
root@h34:~# vi /etc/sudoers
添加:
elk     ALL=(ALL:ALL) ALL
root@h34:~# chmod -w /etc/sudoers


步骤 2,安装Elasticsearch
elk@h34:~$ wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/2.1.0/elasticsearch-2.1.0.tar.gz
elk@h34:~$ tar -zxvf elasticsearch-2.1.0.tar.gz
elk@h34:~$ cd elasticsearch-2.1.0/config/
elk@h34:~/elasticsearch-2.1.0/config$ vi elasticsearch.yml
找到 # network.host 一行,修改成以下:
network.host: localhost


启动elasticsearch:
elk@h34:~/elasticsearch-2.1.0/config$ cd ../bin/
elk@h34:~/elasticsearch-2.1.0/bin$ ./elasticsearch


验证elasticsearch:

elk@h34:~$ curl 'localhost:9200/'{
"name" : "Bombshell",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "2.1.0",
"build_hash" : "72cd1f1a3eee09505e036106146dc1949dc5dc87",
"build_timestamp" : "2015-11-18T22:40:03Z",
"build_snapshot" : false,
"lucene_version" : "5.3.1"
},
"tagline" : "You Know, for Search"
}
注:如果没有curl命令,则可用apt-get install curl来安装


步骤 3,安装Kibana
elk@h34:~$ wget https://download.elastic.co/kibana/kibana/kibana-4.3.0-linux-x64.tar.gz
elk@h34:~$ tar -zxvf kibana-4.3.0-linux-x64.tar.gz
elk@h34:~$ cd kibana-4.3.0-linux-x64/config/
elk@h34:~/kibana-4.3.0-linux-x64/config$ vi kibana.yml
找到 # server.host,修改成以下:
server.host: "localhost"

启动Kibana:
elk@h34:~/kibana-4.3.0-linux-x64/config$ cd ../bin/
elk@h34:~/kibana-4.3.0-linux-x64/bin$ ./kibana


验证Kibana:
由于我们是配置在localhost,所以是无法直接访问Web页面的。
可以使用netstat来检查缺省端口5601,或者使用curl:

elk@h34:~$ curl localhost:5601
步骤 4,安装Nginx
Nginx提供了反向代理服务,可以使外面的请求被发送到内部的应用上。

在/etc/apt/sources.list中添加如下内容:
deb http://nginx.org/packages/debian/ jessie nginx
deb-src http://nginx.org/packages/debian/ jessie nginx
然后,还需要更新并导入升级Key,否则无法使用;
elk@h34:~$ wget http://nginx.org/keys/nginx_signing.key && sudo apt-key add nginx_signing.key && sudo apt-get update && sudo apt-get install nginx apache2-utils


修改Nginx配置文件:
elk@h34:~$ sudo vi /etc/nginx/conf.d/default.conf
找到server_name,可以修改为用IP,或者使用FQDN。我这里没有修改,还是为默认的localhost
注意:这里我把listen       80;改为了81。因为如果不改的话我这个虚拟机的apache2已经在占用80端口了,所以会导致Nginx启不来
elk@h34:~$ sudo lsof -i:80

COMMAND  PID     USER   FD   TYPE DEVICE SIZE/OFF NODE NAMEapache2  925     root    4u  IPv6  15008      0t0  TCP *:http (LISTEN)apache2 1445 www-data    4u  IPv6  15008      0t0  TCP *:http (LISTEN)apache2 1446 www-data    4u  IPv6  15008      0t0  TCP *:http (LISTEN)apache2 1447 www-data    4u  IPv6  15008      0t0  TCP *:http (LISTEN)
然后再加入下面一段内容:
server {    listen 82;    server_name example.com;    location / {    proxy_pass http://localhost:5601;    proxy_http_version 1.1;    proxy_set_header Upgrade $http_upgrade;    proxy_set_header Connection 'upgrade';    proxy_set_header Host $host;    proxy_cache_bypass $http_upgrade;    }}
重启Nginx服务:
elk@h34:~$ sudo service nginx restart

验证访问:
http://192.168.102.34:81

http://192.168.102.34:82

步骤 5,安装Logstash
elk@h34:~$ wget https://download.elastic.co/logstash/logstash/logstash-2.1.1.tar.gz
elk@h34:~$ tar -zxvf logstash-2.1.1.tar.gz

验证Logstash:
elk@h34:~$ cd logstash-2.1.1/bin/
elk@h34:~/logstash-2.1.1/bin$ ./logstash -e 'input { stdin { } } output { stdout {} }'
Settings: Default filter workers: 1
Logstash startup completed
输入:hello elk stack
输出:2018-01-05T09:30:00.946Z h34 hello elk stack
说明Logstash已经可以正常工作了。按CTRL-D退出


步骤 6,配置Logstash
我们需要配置Logstash以指明从哪里读取数据,向哪里输出数据。这个过程我们称之为定义Logstash管道(Logstash Pipeline)。
通常一个管道需要包括必须的输入(input),输出(output),和一个可选项目Filter。


每一个输入/输出块里面都可以包含多个源。Filter是定义如何按照用户指定的格式写数据。
由于我们这次是使用logstash-forwarder从客户机向服务器来传输数据,作为输入数据源。所以,我们首先需要配置SSL证书(Certification)。用来在客户机和服务器之间验证身份。


配置SSL:
elk@h34:~$ sudo mkdir -p /etc/pki/tls/certs /etc/pki/tls/private
elk@h34:~$ sudo vi /etc/ssl/openssl.cnf
找到[ v3_c ]段,添加下面一行,保存退出。
subjectAltName = IP: 192.168.102.34

elk@h34:~$ cd /etc/pki/tls
elk@h34:/etc/pki/tls$ sudo openssl req -config /etc/ssl/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
注:这里产生的logstash-forwarder.crt文件会在下一节安装配置Logstash-forwarder的时候使用到。


配置Logstash管道文件:
elk@h34:/etc/pki/tls$ cd /home/elk/logstash-2.1.1
elk@h34:~/logstash-2.1.1$ mkdir conf
elk@h34:~/logstash-2.1.1$ cd conf
elk@h34:~/logstash-2.1.1/conf$ vi simple.conf
添加以下内容:

input {  lumberjack {  port => 5043  type => "logs"  ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"  ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"  }}filter {  grok {  match => { "message" => "%{COMBINEDAPACHELOG}" }  }  date {  match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]  }}output {  elasticsearch { hosts => ["localhost:9200"] }  stdout { codec => rubydebug }}
启动Logstsh:
elk@h34:~/logstash-2.1.1/conf$ cd ../bin
elk@h34:~/logstash-2.1.1/bin$ ./logstash -f ../conf/simple.conf


步骤 7,安装Logstash-forwarder
注意:Logstash-forwarder也是一个开源项目,最早是由lumberjack改名而来。被吸收合并到了Elastic.co公司的另外一个产品Beat中的FileBeat。如果是用FileBeat,配置稍微有些不一样,具体需要去参考官网。Logstash-forwarder是安装在另外一台机器192.168.102.35上。用来模拟客户机传输数据到Logstash服务器。

配置Logstash-forwarder安装源:在/etc/apt/sources.list中添加以下内容
deb http://packages.elastic.co/logstashforwarder/debian stable main
elk@h35:~$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
OK


安装软件包:
elk@h35:~$ sudo apt-get update
elk@h35:~$ sudo apt-get install Logstash-forwarder


配置SSL:
elk@h35:~$ sudo mkdir -p /etc/pki/tls/certs
把在步骤六中在Logstash服务器192.168.102.34上产生的ssl证书文件拷贝到刚刚创建出来的目录下:
elk@h34:~$ sudo scp /etc/pki/tls/certs/logstash-forwarder.crt 192.168.102.35:/etc/pki/tls/certs/


配置Logstash-forwarder:
elk@h35:~$ sudo vi /etc/logstash-forwarder.conf
在network段("network": {),修改如下:
    "servers": [ "192.168.102.34:5043" ],
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
    "timeout": 15
在files段("files": [),修改如下:
    {
      "paths": [
      "/var/log/syslog",
      "/var/log/auth.log"
      ],
      "fields": { "type": "syslog" }
    }


启动Logstash-forwarder:
sudo service logstash-forwarder start


验证Logstash-forwarder:

sudo service logstash-forwarder status● logstash-forwarder.service - LSB: no description given   Loaded: loaded (/etc/init.d/logstash-forwarder)   Active: active (running) since Mon 2018-01-08 14:56:30 CST; 20s ago  Process: 1765 ExecStart=/etc/init.d/logstash-forwarder start (code=exited, status=0/SUCCESS)   CGroup: /system.slice/logstash-forwarder.service           └─1767 /opt/logstash-forwarder/bin/logstash-forwarder -config /etc/logstash-forwarder.confJan 08 14:56:30 h35 /etc/init.d/logstash-forwarder[1766]: Attempting 'start' on logstash-forwarderJan 08 14:56:30 h35 /etc/init.d/logstash-forwarder[1768]: logstash-forwarder startedJan 08 14:56:30 h35 logstash-forwarder[1765]: logstash-forwarder startedJan 08 14:56:30 h35 systemd[1]: Started LSB: no description given.
注意:如果有错误,则需要去/var/log/logstash-forwarder目录下面检查。

步骤 8,最后验证
在前面安装Kibana的时候,曾经有过验证。不过,当时没有数据,打开Web页面的时候,将如下所示:无数据初始页面


现在,由于logstash-forwarder已经开始传输数据了,再次打开Web页面,将如下所示:配置索引页面


点击创建按钮(Create),再选择Discover,可以看到如下画面:数据展示页面


至此,所有部件的工作都可以正常使用了。关于如何具体使用Kibana就不在本文中加以描述了,有兴趣的同学可以参考官网。
注:步骤一在两台虚拟中都执行,步骤2-6在192.168.102.34中执行,步骤7在192.168.102.35中执行


七、在Centos 7.2 64位中实战
注:我这里用了两台Centos虚拟机,ip分别为192.168.205.154和192.168.205.155
    除了和上面在Debian中实战的步骤4、步骤6中配置SSL和步骤7不一样外,其他步骤都一样
注意:在开始之前首先要两台虚拟机都要关闭防火墙,要不然会出现各种问题,很烦
systemctl disable firewalld
systemctl stop firewalld


步骤 4,安装Nginx
配置Nginx官方yum源
[elk@localhost ~]$ sudo vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
或者执行sudo rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
如果是Centos6版本的话就执行rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm


安装软件
[elk@localhost ~]$ sudo yum -y install nginx httpd-tools
注意:你有可能会遇到这个报错

Error: Package: 1:nginx-1.12.2-1.el7_4.ngx.x86_64 (nginx)           Requires: libcrypto.so.10(OPENSSL_1.0.2)(64bit) You could try using --skip-broken to work around the problem You could try running: rpm -Va --nofiles --nodigest
解决:执行sudo yum clean all


[elk@localhost ~]$ sudo vi /etc/nginx/nginx.conf
检查是否 http 块(http{...})含有下面这一行:
include /etc/nginx/conf.d/*conf

为Kibana创建一个配置文件
[elk@localhost ~]$ sudo vi /etc/nginx/conf.d/kibana.conf

server {    listen 81;    server_name example.com;    location / {    proxy_pass http://localhost:5601;    proxy_http_version 1.1;    proxy_set_header Upgrade $http_upgrade;    proxy_set_header Connection 'upgrade';    proxy_set_header Host $host;    proxy_cache_bypass $http_upgrade;    }}
启动Nginx服务
[elk@localhost ~]$ sudo systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[elk@localhost ~]$ sudo systemctl start nginx或者sudo systemctl start nginx.service


验证访问
http://192.168.205.154:80
http://192.168.205.154:81
注意:一开始我访问81的时候出现这个报错,后来才发现是没有关闭SELinux的原因,其实再这里关闭的有点晚(当我只关掉192.168.205.154的SELinux就可以了,但最好还是两台虚拟机都关了吧),你完全可以在一开始和关闭防火墙的时候一块把SELinux也关闭了

解决:
临时关闭,不用重启机器:
setenforce 0
永久关闭,修改配置文件后需要重启机器:
vi /etc/sysconfig/selinux
SELINUX=disabled


步骤6中的配置SSL:
[elk@localhost ~]$ sudo vi /etc/pki/tls/openssl.cnf
找到[ v3_ca ]段,添加下面一行,保存退出。
subjectAltName = IP: 192.168.205.154
elk@h34:~$ cd /etc/pki/tls
elk@h34:/etc/pki/tls$ sudo openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt


步骤 7,安装Logstash-forwarder(192.168.205.155中执行)
配置Logstash-forwarder安装源
[elk@localhost ~]$ sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
[elk@localhost ~]$ sudo vi /etc/yum.repos.d/logstash-forwarder.repo
[logstash-forwarder]
name=logstash-forwarder repository
baseurl=http://packages.elastic.co/logstashforwarder/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1


安装软件包
[elk@localhost ~]$ sudo yum -y install logstash-forwarder


配置SSL
把在步骤六中在Logstash服务器上产生的ssl证书文件拷贝到刚刚创建出来的目录下:
[elk@localhost ~]$ sudo scp /etc/pki/tls/certs/logstash-forwarder.crt 192.168.205.155:/etc/pki/tls/certs/(这一步192.168.205.154中执行)


配置Logstash-forwarder
[elk@localhost ~]$ sudo vi /etc/logstash-forwarder.conf
在network段("network": {),修改如下:
    "servers": [ "192.168.205.154:5043" ],
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
    "timeout": 15
在files段("files": [),修改如下:
    {
      "paths": [
      "/var/log/*log",
      "/var/log/messages"
      ],
      "fields": { "type": "syslog" }
    }


启动Logstash-forwarder:
sudo service logstash-forwarder start


验证Logstash-forwarder:
sudo service logstash-forwarder status
logstash-forwarder is running


八、安装中所遇到的坑:
1.虚拟机的内存太小
一开始我的两个虚拟机都是512M内存的,结果logstash接收一会儿数据就会循环反复报下面这个错,后来我把192.168.205.154内存大小改为了3052,192.168.205.155还是512,我的win10本地内存为8G

Lumberjack input: the pipeline is blocked, temporary refusing new connection. {:level=>:warn}Lumberjack input: the pipeline is blocked, temporary refusing new connection. {:level=>:warn}Lumberjack input: the pipeline is blocked, temporary refusing new connection. {:level=>:warn}Lumberjack input: the pipeline is blocked, temporary refusing new connection. {:level=>:warn}Lumberjack input: the pipeline is blocked, temporary refusing new connection. {:level=>:warn}
2.虚拟机的系统时间最好同步一下
在Debian 8.6中安装时:时间没同步的话Logstash-forwarder可能启动不起来,也可能Logstash-forwarder启动后无法将数据传给Logstash,Linux时间同步请参考 http://blog.csdn.net/m0_37739193/article/details/77850469

在Centos 7.2中:点击创建按钮(Create),再选择Discover,可以看到如下画面:

解决:
yum -y install ntpdate
ntpdate 0.uk.pool.ntp.org


文章参考出处:
https://my.oschina.net/zjzhai/blog/751246
https://www.zybuluo.com/dume2007/note/665868
https://www.ibm.com/developerworks/cn/opensource/os-cn-elk/index.html


推荐阅读
author-avatar
欧美盛
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有