标签归档:ELK

使用ELK Stack分析Nginx日志

在之前的ELK日志分析平台部署教程(Ubuntu)一文中介绍了如何部署ELK Stack。部署完成后,我们当然是需要用它来对日志文件进行分析。Nginx日志自然是其中的一个重要部分。在本文中将介绍如何使用ELK分析Nginx日志。

使用ELK Stack分析Apache2日志一文中介绍的直接调用Logstash的预配置模式不同,在Logstash中并没有预先配置好的Nginx日志模式。因此,我们需要手动进行配置。

前期准备

ELK服务器

  • Logstash被安装在了/opt/logstash目录下
  • Logstash的配置文件储存在/etc/logstash/conf.d
  • 在配置文件夹下有输入配置文件02-beats-input.conf
  • 在配置文件夹下有输出配置文件30-elasticsearch-output.conf

这里,我们再为Logstash创建一个用来储存模式(pattern)文件的目录:

ELK$ sudo mkdir -p /opt/logstash/patterns
ELK$ sudo chown logstash: /opt/logstash/patterns

Client服务器

Grok捕获机制说明

Grok依靠对文本信息的语法分析对内容进行标注。Grok使用语法如下:

%{PATTERN:IDENTIFIER}

在Logstash的筛选器中会存在一系列的Grok捕获器来捕获日志中相关的字段,并将他们结构化成方便阅读的模式。

具体的Grok的规则配置可以在这篇文章中找到。Logstash预配置的Grok也可以用来对照参考。

配置Logstash

在ELK服务器创建一个新的模式,并并名为nginx:

ELK$ sudo vi /opt/logstash/patterns/nginx

向其中加入以下配置

NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent}

保存并退出。在NGINXACCESS的语法模式中,定义了一些例如clientip、ident、auth的关键字以用来结构化日志数据。

更改配置文件的用户组:

ELK$ sudo chown logstash: /opt/logstash/patterns/nginx

接着,在Logstash的配置文件目录下创建一个新的筛选器配置文件(11-nginx-filter.conf)用来筛选Nginx的日志:

ELK$ sudo vi /etc/logstash/conf.d/11-nginx-filter.conf

向其中写入以下配置信息:

filter {
    if [type] == "nginx-access" {
        grok {
            match => { "message" => "%{NGINXACCESS}" }
        }
    }
}

保存并退出。在这个配置中,筛选器将试图匹配到type为nginx-access日志文件条目(message)中呗标记为NGINXACCESS的字段,这个字段我们在上文中定义过。

重启Logstash使配置生效

ELK$ sudo service logstash restart

这样,我们在ELK服务器端对Logstash的配置就完成了。下面进入客户端对Filebeat进行配置。

配置Filebeat

这一部分与Apache日志分析的配置大致相同。首先修改Client Server的Filebeat配置文件:

client$ sudo vi /etc/filebeat/filebeat.yml

修改配置文件中的采集器(Prospector)的相关配置。如下:

    -
    paths:
      - /var/log/nginx/access.log

    document_type: nginx-access

注意,这里只是修改了Filebeat配置文件中的Prospector字段,其他字段的修改请参照前文(ELK日志分析平台部署教程(Ubuntu))。

保存并退出,重启Filebeat服务使配置生效:

client$ sudo service filebeat restart

至此,所有配置完成,应该可以在Kibana的Web页面看到获取到的Log信息了。

20160311163100

参考文章:Adding Logstash Filters To Improve Centralized Logging

使用ELK Stack分析Apache2日志

在之前的ELK日志分析平台部署教程(Ubuntu)一文中介绍了如何部署ELK Stack。部署完成后,我们当然是需要用它来对日志文件进行分析。Apache日志自然是其中的一个重要部分。在本文中将介绍如何使用ELK分析Apache日志。

Apache的日志模式在Logstash中有预配置好的日志模式。这里只需要调用即可。

配置ELK服务器

首先,在ELK服务器上添加一个新的过滤器,命名为12-apache.conf:

ELK$ sudo vi /etc/logstash/conf.d/12-apache.conf

加入以下筛选规则:

filter {
    if [type] == "apache-access" {
        grok {
            match => { "message" => "%{COMBINEDAPACHELOG}" }
        }
    }
}

保存并退出。在这个筛选器中,我们指定将type为apache-access的日志使用COMBINEDAPACHELOG这个预定义在Logstash中的模式进行格式化。

重启Logstash在使配置生效。

ELK$ sudo service logstash restart

接下来,我们需要在Client Server上配置Filebeat以获得我们想要的日志。

配置Filebeat

在Client上编辑Filebeat的配置文件:

client$ sudo vi /etc/filebeat/filebeat.yml

在配置文件中的filebeat字段中添加日志采集器的配置。并将Apache的access log的type命名为apache-access:

    -
      paths:
        - /var/log/apache2/access.log

      document_type: apache-access

注意,这里只是修改了Filebeat配置文件中的Prospector字段,其他字段的修改请参照前文(ELK日志分析平台部署教程(Ubuntu))。

保存并退出。重启Filebeat使配置生效:

client$ sudo service filebeat restart

现在ELK服务器已经开始收集Apache的access日志并用预定义的模式进行处理。

下图是使用ELK简单分析Apache日志的结果。使用筛选器筛选出时间、IP和客户端三个字段。

20160310195546

这时候,点击左侧的filter(例如clientip),可能提示为未索引状态,无法可视化,如下图:

20160311121543

下面,我们进行数据的可视化。

Kibana数据可视化

进入Kibana的Web界面,点击上方导航条中的Settings标签。选择filebeat-*。点击下方的黄色刷新按钮。

20160311113242

刷新完成后,可以看到下方Fields列表中多出了我们新加入的索引,并被标记为了indexed。这意味着我们已经将这些字段索引,并可以用来进行数据可视化。

下面以分析clientip为例,完成一个访问量Top 10的IP统计。步骤如下:

  • 点击顶部导航条的Visualize选卡
  • 选择其中的Pie chart,即制作饼状图
  • 选择From a new search
  • 在select an index pattern中选择filebeat

20160311122921

以上步骤后,我们获得一个空白的饼状图。因为我们还没对其中的元素进行配置。下面我们继续:

  • 在左侧的buckets中选择Split Slices
  • Aggergation选项中选择Terms
  • 接下来,在Field中选择clientip
  • 然后,我们把Size调正10,这样就能选择前10的IP
  • 最后点击上方的绿色执行按钮

20160311111746

这样,一张饼状图就生成好了。我们可以点击右上方的保存按钮保存这次操作,下次就可以直接调用这个查询了。

参考文章:Adding Logstash Filters To Improve Centralized Logging

ELK日志分析平台部署教程(Ubuntu)

    译者序,ELK平台是指基于 Elasticsearch、 Logstash和 Kibana的日志分析平台。通过 Elasticsearch强大的文档搜索能力对日志进行分析并通过 Kibana以可视化的方式展示。本文译自 DigitalOcean上的文章:How To Install Elasticsearch, Logstash, and Kibana (ELK Stack) on Ubuntu 14.04 。

简介

在本文中,我们将会完整的完成一次ELK平台的部署,包括Elasticsearch 2.2.x、Logstash 2.2.x和Kibana 4.4.x,以及对它们的配置。同时也将展示给大家如何通过Filebeat 1.1.x对日志进行收集和将系统日志可视化。Logstash是一个开源的日志收集分析存储工具;Kibana是一个用于展示日志分析结果和日志内容搜索的Web前端界面。他们都基于Elasticsearch所提供的服务。

日志集中管理有助于尽早的发现服务器/应用可能存在的问题,因为这样做将能够在一处管理所有的日志而无需查看各个服务器/应用状态。同时这也有助于发现可能存在的多服务器共同存在的问题。

当然,可以用Logstash去收集各种类型的日志进行分析,但是作为基础的教程,在本文中将只使用系统日志(syslog)这一个部分的日志作介绍。

目标

此教程的目标是部署Logstash对多台服务器的系统日志进行分析并部署Kibana将这些数据可视化。

我们的ELK平台部署主要包含以下四个部分:

  • Logstash:部署在服务器端(Server)用于处理来自客户端(Client)的日志
  • Elasticsearch:存储所有的日志为分析做准备
  • Kibana:用于数据可视化和搜索的Web界面。使用Nginx代理。
  • Filebeat:在客户端安装,用于将日志文件传送给服务器端。Filebeat提供了一个可以与Logstash进行交互的日志传送接口。

elk-infrastructure

我们将在服务器端先安装三个主要组件,即ELK平台。之后,将在各个客户端安装Filebeat以用于将日志传送给服务器端。

前期准备

为了完成这个教程,你需要拥有一台VPS(有root权限)。VPS需求的配置取决于你需要处理的日志量。本文使用的配置如下:

  • 操作系统:Ubuntu 14.04
  • RAM:4GB
  • CPU:2

另外还需要一些客户端机器用于收集日志。

下面就让我们开始部署我们的ELK服务器吧!

安装Java 8

Elasticsearch和Logstash都需要使用Java,因此我们需要先安装Java环境。这里我们使用Java 8,这也同时是Elasticsearch的默认Java需求版本。当然使用OpenJDK也是可以的。

将Oracle Java PPA加入apt包管理器:

$ sudo add-apt-repository -y ppa:webupd8team/java

更新程序包源

$ sudo apt-get update

用以下命令安装最新的Java 8

$ sudo apt-get -y install oracle-java8-installer

至此,Java包安装完毕。

安装Elasticsearch

Elasticsearch可以通过Elastic的应用包源列表来安装。执行下面的命令来向apt包管理器中引入Elasticsearch的GPG密钥。

$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

如果在此过程中提示符光标在原地闪烁这可能是因为shell窗口正在等待你键入密码。

创建Elasticsearch安装源包列表

$ echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list

更新程序包源

$ sudo apt-get update

用以下命令安装Elasticsearch

$ sudo apt-get -y install elasticsearch

至此,Elasticsearch安装完毕。下面我们来对它进行配置

$ sudo vi /etc/elasticsearch/elasticsearch.yml

因为你需要对Elasticsearch的外部访问进行限制,以阻止外部用户读取Elasticsearch的数据或者关闭Elasticsearch。找到下面这行,取消它的注释并将它的值修改为“localhost”。

network.host: localhost

保存并退出 elasticsearch.yml

下面我们启动Elasticsearch服务

$ sudo service elasticsearch restart

最后我们将Elasticsearch服务加入启动项

$ sudo update-rc.d elasticsearch defaults 95 10

至此,Elasticsearch开始正常运行。下面我们安装Kibana

安装Kibana

Kibana也可以通过Elastic的应用包源列表来安装。

创建Elasticsearch安装源包列表:

$ echo "deb http://packages.elastic.co/kibana/4.4/debian stable main" | sudo tee -a /etc/apt/sources.list.d/kibana-4.4.x.list

更新程序包源:

$ sudo apt-get update

用以下命令安装Kibana:

$ sudo apt-get -y install kibana

至此,Elasticsearch安装完毕。

打开Kibana的配置文件进行编辑:

$ sudo vi /opt/kibana/config/kibana.yml

在Kibana的配置文件中,找到以下行,将IP地址修改为“localhost”(此处默认为“0.0.0.0”):

server.host: "localhost"

保存并退出。通过以上设置,Kibana将智能通过localhost的方式访问。这样设置是合理的因为我们将通过Nginx的反向代理来用外部方式进行访问。

现在,我们将Kibana加入启动项并启动Kibana服务:

$ sudo update-rc.d kibana defaults 96 9
$ sudo service kibana start

在我们能够正常使用之前,我们需要先为Kibana配置一个代理用于访问。现在我们用Nginx来实现。

安装Nginx

上文中我们将Kibana的监听端口设置为了localhost,因此我们需要利用Nginx配置一个反向代理来指向Kibana的服务以使得我们的服务能从外部访问。

提示:如果你已经有了Nginx的一些实例,你可以以你的方式来配置Kibana。只需确保Kibana的服务能够通过Nginx的代理访问即可(你可能需要改变/opt/kibana/config/kibana.yml中host的值,将其改变为服务器端的IP地址或者是主机名,这点下文会详细说明)。同时建议你使用SSL/TLS服务。

使用apt的方式安装Nginx和Apache2-utils工具:

$ sudo apt-get install nginx apache2-utils

使用htpasswd命令来创建admin用户,例如“kibanaadmin”(你应当使用不同于本文这个),这样就可以用这个用户去访问Kibana的web界面了:

$ sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin

在光标提示处键入两次密码确认。请不要忘记这里设置的帐号密码,之后登录Kibana的Web界面时会用到。

现在,使用vi命令编辑Nginx的默认server代码段:

$ sudo vi /etc/nginx/sites-available/default

删除文件内容,粘贴下面的代码块。将其中的server_name字段替换成自己的域名:

server {
    listen 80;

    server_name example.com;

    auth_basic "Restricted Access";
    auth_basic_user_file /etc/nginx/htpasswd.users;

    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; 
    }
}

保存并退出。以上配置将HTTP访问(80端口)转向到Kibana的服务(localhost:5601)。同时Nginx使用htpasswd.user这个文件对访问请求进行控制。需要键入之前设置的帐号密码才能访问。

译者注:这里我采用的是和原文有所不同的配置。原文修改 default这个配置文件,而我是在 sites-available中添加了一个配置文件 kibana,内容与上面相同。之后在 sites-enabled中建立对这个文件的软连接。

现在我们重启Nginx来使配置生效:

$ sudo service nginx restart

现在,Kibana可以通过完整域名(FQDN)或者服务器端的公网IP进行访问,例如:http://elk_server_public_ip/ 。如果使用浏览器访问该页面,在键入“kibanaadmin”并验证密码后你将能够看到Kibana的欢迎页面,在这个页面上将需要你对索引(index)进行配置。这些我们之后将具体进行配置,现在我们先安装剩下的组件。

安装Logstash

Logstash可以同样通过Elastic的应用包源列表来安装。我们在之前的步骤中已经向其中引入了GPG密钥,所以我们可以直接进行安装。首先创建Logstash的程序源列表

$ echo 'deb http://packages.elastic.co/logstash/2.2/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash-2.2.x.list

更新程序包源:

$ sudo apt-get update

用下面的命令安装Logstash:

$ sudo apt-get install logstash

至此,Logstash安装完毕,但是现在还处于未配置的状态。

生成SSL认证证书

由于我们接下来需要使用Filebeat来将日志文件从客户端发送给服务器端(ELK服务器),所以我们需要创建密钥对来进行认真。这个证书将用于Filebeat对ELK服务器的认证。使用以下命令来创建用于存储证书和私钥的目录。

$ sudo mkdir -p /etc/pki/tls/certs
$ sudo mkdir /etc/pki/tls/private

现在,我们有两种方式来生成SSL证书。如果你可以对服务器端的DNS进行配置,将一个域名指向服务器端(ELK服务器)的公网IP地址(即可以通过域名访问到ELK服务器),那么请使用方案2;否则使用方案1,即直接使用公网IP地址访问ELK服务器。

方案1:IP地址方式

如果你不能够通过配置DNS的方式访问ELK服务器——这意味着你的客户端将无法通过一个域名来访问到ELK服务器——那么你需要将ELK的IP地址加入到SSL证书的subjectAltName(SAN)字段中用于生成证书。为此,需要编辑OpenSSL的配置文件:

$ sudo vi /etc/ssl/openssl.cnf

找到文件中的[ v3_ca ]字段,在下方加入下面一行(将红色字体部分用ELK服务器的IP地址替换)

$ subjectAltName = IP: ELK_server_private_IP

保存并退出。

下面我们将使用以下命令在预定的目录(/etc/pki/tls/)生成SSL证书和私钥文件:

$ cd /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的配置,如果你使用了方案1,请跳过下面的方案2部分,直接进入“配置Logstash”一章。

方案2:完整域名方式(FQDN),需要配置DNS

如果你想通过DNS解析的方式进行配置,那么需要在DNS解析服务器处配置一个A记录指向ELK服务的IP地址——这里使用的域名将在之后被用于SSL证书的生成。当然,你也可以设置一个记录指向ELK服务器的公网IP。只需要保证客户端可以通过这个域名访问到ELK服务器即可。

下面我们将使用以下命令在预定的目录(/etc/pki/tls/)生成SSL证书和私钥文件(使用ELK服务器的完整域名替换命令中红色字体部分):

$ cd /etc/pki/tls; sudo openssl req -subj '/CN=ELK_server_fqdn/' -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt

在之后的操作中,logstash-forwarder.crt这个文件将被拷贝到各个需要收集日志的客户端。下面我们完成Logstash的配置。

译者注:这里我使用的是方案2。在 DNS解析处配置二级域名 elk.zivers.com指向 ELK服务器的公网 IP。在上述命令中使用 elk.zivers.com替换 ELK_server_fqdn字段用于生成证书。

配置Logstash

Logstash的配置文件在/etc/logstash/conf.d中,采用JSON格式书写。配置文件包含三个字段:inputs(输入)、filters(选择器)和outputs(输出)。

下面我们创建02-beat2-input.conf文件并配置“filebeat”作为input:

$ sudo vi /etc/logstash/conf.d/02-beats-input.conf

键入下述input配置:

input {
    beats {
        port => 5044
        ssl => true
        ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
        ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
    }
}

保存并退出。以上操作在TCP端口5044声明了一个beats输入连接,它将使用之前配置的SSL证书和私钥。

下面我们创建10-syslog-filter.conf配置文件,在这里配置一个筛选器用于分析syslog(系统日志):

$ sudo vi /etc/logstash/conf.d/10-syslog-filter.conf

键入下述筛选器配置,对syslog进行分析:

filter {
    if [type] == "syslog" {
    grok {
        match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
        add_field => [ "received_at", "%{@timestamp}" ]
        add_field => [ "received_from", "%{host}" ]
    }
    syslog_pri { }
        date {
            match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
        }
    }
}

保存并退出。这个筛选器将在log文件中寻找标签为“syslog”的日志文件(通过Filebeat传输),并使用grok将收到的日志处理使之结构化和队列化。

之后,我们创建配置文件30-elasticsearch-output.conf:

$ sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

键入下述输出配置:

output {
    elasticsearch {
    hosts => ["localhost:9200"]
    sniffing => true
    manage_template => false
    index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
    document_type => "%{[@metadata][type]}"
    }
}

保存并退出。这个Logstash的配置文件对Elasticsearch所储存的来自于Filebeats的数据的输出进行了基本的配置,将输出索引为filebeat。

如果你想为其他应用添加更多的筛选器,确保将他们被正确的命名,使得他们能够筛选出正确的输入和输出信息(比如在02-和03-之间)。

用以下命令测试Logstash配置是否正确:

sudo service logstash configtest

如果配置无误将输出 Configuration OK字样。否则,配置有误你需要查看错误信息并纠正配置。

重启Logstash并使配置文件生效:

$ sudo service logstash restart
$ sudo update-rc.d logstash defaults 96 9

下面我们将载入一个Kibana的控制面板样例。

载入Kibana控制面板

Elastic提供了Kibana控制面板和Beats索引字段的样例来帮助我们开始使用Kibana。虽然,在这个教程中我们将不会深入使用Kibana控制面板,但是我们依然会进入到Kibana的控制面板使用其中Filebeat的目录索引。

首先,下载一个控制面板包样例到用户目录

$ cd ~
$ curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip

安装unzip命令程序包

$ sudo apt-get -y install unzip

接着,使用unzip命令解压

$ unzip beats-dashboards-*.zip

然后使用以下命令将控制面板样例、可视化页面和Beats索引字段载入到Elasticsearch中:

$ cd beats-dashboards-*
$ ./load.sh

下面是我们刚刚所载入的索引字段

  • [packetbeat-]YYYY.MM.DD
  • [topbeat-]YYYY.MM.DD
  • [filebeat-]YYYY.MM.DD
  • [winlogbeat-]YYYY.MM.DD

我们选择Filebeat字段作为默认字段以开始使用Kibana。

在Elasticsearch中载入Filebeat索引模版

由于我们准备使用Filebeat来将日志发送给Elasticsearch,所以我们需要先载入一个Filebeat的索引模版。在这个索引模版中,我们将会使Elasticsearch能用智能化的方式去分析来自Filebeat的日志。

首先,将Filebeat索引模版下载到用户目录

$ cd ~
$ curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json

用以下命令加载模版

$ curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json

如果模版加载成功,你将看到以下提示信息:

Output:
{
    "acknowledged" : true
}

至此,我们的ELK服务器已经准备好接受来自Filebeat的数据了。下面我们开始在每台客户端上部署Filebeat用以传送日志。

配置Filebeat(加入客户端)

在所有需要向ELK服务器发送日志的客户端服务器(Client Server)中按以下步骤执行,用以配置Filebeat。

复制SSL证书

ELK服务器中复制SSL证书——在本教程的前面步骤中所配置的——拷贝到客户端服务器中(用客户端服务器的配置替换下述命令中红字部分):

elk$ scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp

译者注:这里的 user即客户端服务器的用户名,例如 root;client_server_private_address 即客户端服务器的IP地址。具体可以搜索 scp命令使用方法。

提供了正确的(Client Server)登录信息后,请确保这次证书拷贝成功执行,因为这是客户端和服务器端能够交换信息的必要准备。

下面,在客户端服务器,拷贝EKL服务器的SSL证书到正确的目录(/etc/pki/tls/certs):

client$ sudo mkdir -p /etc/pki/tls/certs
client$ sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/

下面,我们安装Topbeat包。

安装Filebeat包

在客户端,创建Beats的安装源列表:

$ echo "deb https://packages.elastic.co/beats/apt stable main" | sudo tee -a /etc/apt/sources.list.d/beats.list

它同样使用了Elasticsearch的GPG密钥,所以我们也以同样的方式安装:

$ wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

然后安装Filebeat包

$ sudo apt-get update
$ sudo apt-get install filebeat

至此,Filebeat安装完毕,但需要对它进行进一步的配置。

配置Filebeat

下面我们将对Filebeat进行配置以连接到ELK服务器上的Logstash服务。在这一部分,我们将一步步的告诉你如何对Filebeat进行配置。当你完成了以下配置,Filebeat的配置文件应当和这个文件类似

在客户端服务器,创建并编辑Filebeat的配置文件:

$ sudo vi /etc/filebeat/filebeat.yml

特别注意:Filebeat的配置文件使用 YAML格式书写的,这意味着缩进非常重要!确保你在缩进中使用了和源格式相同数量的空格。

在配置文件的头部左右的地方,你可以看到一个叫做prospectors的字段,在这里,你可以定义“日志采集器”,他们将定义需要传送的日志包括哪些以及需要对它们进行怎样的处理。每一个“采集器”使用“-”符指示。

我们将对已经存在的“采集器”进行修改以用来传送syslog和auth.log到Logstash中。在paths字段中,注释掉- var/log/*.log这一行,这一行标识将该目录下所有的.log文件传送给Logstash。接下来,我们为syslog和auth.log分别加入新的路径。完成后,这一部分的配置文件应该大致如下:

...
    paths:
      - /var/log/auth.log
      - /var/log/syslog
#      - /var/log/*.log
...

下面,找到document_type: 字段,删除它前面的注释符号,并把它的值修改为“syslog”。修改完后,大致如下

...
      document_type: syslog
...

这个字段表明采集器所获得的日志类型为syslog(在Logstash有对应的过滤器对其进行处理)。

如果你想向你的ELK服务器中传递其他的文件或者是修改Filebeat对日志文件的处理方式,你可以通过修改或者添加采集器来完成。

接下来,在output字段,找到elasticsearch: 这一行,它表明我们将使用Elasticsearch进行输出(这并不是我们想要的,我们需要的是Logstash)。删除或者是注释掉整个Elasticsearch的output字段区域(直到#logstash:)这一行。

找到声明Logstash为输出(output)的字段——用#logstash: 进行标识,删除掉前面的“#”符号取消注释。在这段代码中,删除hosts: [“localhost:5044”]前面的注释符号“#”,将localhost字段用服务器端(ELK Server的)IP地址替代(如果你在上面两章中选择了方案2,则用完整域名替代)。

  ### Logstash as output
  logstash:
    # The Logstash hosts
    hosts: ["ELK_server_private_IP:5044"]

以上配置使得Filebeat能通过5044端口连接到ELK服务器上的Logstash服务(这个端口是在之前的配置中定义的)。

然后,就在hosts字段的下方,加上下面一行:

    bulk_max_size: 1024

接着,找到tls字段,取消掉它的注释。并取消掉它下面的certificate_authorities字段注释。将certificate_authorities的值修改为[“/etc/pki/tls/certs/logstash-forwarder.crt”]。完成后,这个字段大致如下:

...
    tls:
      # List of root certificates for HTTPS server verifications
      certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

以上配置表明Filebeat将使用在ELK服务器上创建的SSL证书。

保存并退出。

现在,我们重启Filebeat服务使配置生效:

$ sudo service filebeat restart
$ sudo update-rc.d filebeat defaults 95 10

同样的,如果你并不确定你的Filebeat配置是否正确,你可以和这个版本进行比较Filebeat样例

现在,Filebeat已经开始向ELK服务器上的Logstash服务发送syslog和auth.log了!重复以上步骤到所有需要获得日志的网站。

测试Filebeat的安装

如果你的ELK平台部署正确,那么,Filebeat(部署在客户端服务器上)已经将日志发送到ELK服务器上的Logstash服务中了。Logstash将把Filebeat传送过来的数据以日期戳的形式存入到Elasticsearch中。

接下来,在你的ELK服务器,通过下面的命令验证Elasticsearch是否真的收到了来自Filebeat索引的数据:

ELK$ curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

上面命令的输出应该类似如下:

Sample Output:
...
{
      "_index" : "filebeat-2016.01.29",
      "_type" : "log",
      "_id" : "AVKO98yuaHvsHQLa53HE",
      "_score" : 1.0,
      "_source":{"message":"Feb 3 14:34:00 rails sshd[963]: Server listening on :: port 22.","@version":"1","@timestamp":"2016-01-29T19:59:09.145Z","beat":{"hostname":"topbeat-u-03","name":"topbeat-u-03"},"count":1,"fields":null,"input_type":"log","offset":70,"source":"/var/log/auth.log","type":"log","host":"topbeat-u-03"}
}
...

如果输出显示为0 total hits,那么意味着Elasticsearch没有收到任何的日志文件。你需要去查看下你的配置是否正确。如果输出正确,那么继续下面步骤。

连接到Kibana

当你已经完成了所有客户端上的Filebeat的配置,这时候我们就可以打开我们早先配置好的Kibana的Web界面看看了。

在浏览器中输入ELK服务器的域名(或者IP),输入用户名(kibanaadmin)密码验证后,你将看到如下界面。它要求你选择一个默认的索引:

1-filebeat-index

我们继续,选择左侧Index Pattern(索引列表)菜单中的[filebeat]-YYY.MM.DD,然后点击右侧的星星图标(表示设为默认)

然后点击顶部导航条Discover链接。默认情况下,这个页面将展示最近15分钟的数据。这里你将可以看到一个柱状图,下方是具体的日志数据:

2-filebeat-discover

此时,这里并没有太多的数据,因为我们只是收集了客户端的syslogs数据。在这里,你可以搜索和浏览这些数据。同时,你也可以对控制面板进行自定义。

试试以下的一些操作吧:

  • 搜索“root”以查看是否有人试图用root帐号登录服务器
  • 搜索特定的主机名(搜索 host: “hostname”)
  • 通过修改柱状图或者是顶部的菜单按钮更改时间周期
  • 点击柱状图下方的信息来看看数据是如何被筛选的

Kibana还有许多的特性,例如图标和筛选器,所以开心的玩吧!

总结

现在,你的日志文件已经通过Elasticsearch和Logstash进行集中化管理,同时你也已经可以通过Kibana将这些数据可视化,这时你已经有了一个良好的日志集中管理的开始。请记住,你当然可以将大量的日志传送给Logstash进行分析,但是,更加聪明的做法应该是使用grok先将这些数据结构化使它们能够更好的被利用。

好运常伴!