如何使用Logstash和Kibana集中日志在Ubuntu 14.04

注:本教程是为较旧版本的ELK,这是不符合最新版本兼容。 本教程的最新版本可在如何在Ubuntu 14.04安装Elasticsearch,Logstash和Kibana(ELK)

介绍

在本教程中,我们将讨论Logstash 1.4.2和Kibana 3的安装,以及如何配置它们以便在集中位置收集和可视化系统的syslog。 Logstash是一个用于收集,解析和存储日志以供将来使用的开源工具。 Kibana 3是一个Web界面,可用于搜索和查看Logstash索引的日志。 这两个工具都基于Elasticsearch。 Elasticsearch,Logstash和Kibana在一起使用时称为ELK。

集中日志记录在尝试识别服务器或应用程序的问题时非常有用,因为它允许您在单个位置搜索所有日志。 它也很有用,因为它允许您通过在特定时间范围内关联其日志来识别跨多个服务器的问题。

可以使用Logstash收集所有类型的日志,但我们将本教程的范围限制为syslog收集。

我们的目标

本教程的目标是设置Logstash以收集多个服务器的syslog,并设置Kibana以可视化收集的日志。

我们的Logstash / Kibana设置有四个主要组件:

  • Logstash:用于处理传入的日志Logstash的服务器组件
  • Elasticsearch:存储所有的日志
  • Kibana:Web界面,用于搜索和可视化日志
  • Logstash转发器 :安装在将派出自己的日志Logstash服务器,Logstash货代作为一个利用樵夫网络协议与Logstash通信的日志转发代理

我们将一台服务器,其中,我们将参照作为我们Logstash服务器上安装的前三个分量。 该Logstash转发器将被安装在所有我们要收集原木,我们将把统称为我们的服务器的服务器。

先决条件

要完成本教程,您需要root用户访问Ubuntu 14.04 VPS。 说明设置,最多可以在这里找到(第3步和4): 初始服务器设置与Ubuntu 14.04

Logstash服务器将需要的CPU,RAM和存储量取决于您要收集的日志的量。 在本教程中,我们将使用具有以下规格的VPS用于Logstash服务器:

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

除了您的Logstash服务器,您将需要有一些其他服务器,您将收集日志。

让我们开始设置我们的Logstash服务器!

安装Java 7

Elasticsearch和Logstash需要Java 7,所以我们现在就安装它。 我们将安装Oracle Java 7,因为这是Elasticsearch推荐的。 然而,它应该与OpenJDK,如果你决定走这条路线工作正常。

添加Oracle Java PPA到apt:

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

更新apt包数据库:

sudo apt-get update

使用此命令安装最新稳定版本的Oracle Java 7(并接受弹出的许可协议):

sudo apt-get -y install oracle-java7-installer

现在安装了Java 7,让我们安装ElasticSearch。

安装Elasticsearch

:Logstash 1.4.2建议Elasticsearch 1.1.1。

运行以下命令将Elasticsearch公共GPG密钥导入apt:

wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

创建Elasticsearch源列表:

echo 'deb http://packages.elasticsearch.org/elasticsearch/1.1/debian stable main' | sudo tee /etc/apt/sources.list.d/elasticsearch.list

更新apt包数据库:

sudo apt-get update

使用此命令安装Elasticsearch:

sudo apt-get -y install elasticsearch=1.1.1

Elasticsearch现已安装。 让我们编辑配置:

sudo vi /etc/elasticsearch/elasticsearch.yml

在文件中的某处添加以下行,以禁用动态脚本:

script.disable_dynamic: true

您还将要限制对Elasticsearch实例(端口9200)的外部访问,因此外部人员无法读取您的数据或通过HTTP API关闭Elasticseach集群。 查找指定的行network.host ,所以它看起来像这样取消其注释:

network.host: localhost

保存并退出elasticsearch.yml

现在启动Elasticsearch:

sudo service elasticsearch restart

然后运行以下命令在启动时启动Elasticsearch:

sudo update-rc.d elasticsearch defaults 95 10

现在Elasticsearch启动并运行,让我们安装Kibana。

安装Kibana

:Logstash 1.4.2建议Kibana 3.0.1

使用以下命令将Kibana下载到您的主目录:

cd ~; wget https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz

使用tar提取Kibana存档:

tar xvf kibana-3.0.1.tar.gz

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

sudo vi ~/kibana-3.0.1/config.js

在Kibana配置文件,找到指定行elasticsearch ,并与取代的端口号(9200默认) 80

   elasticsearch: "http://"+window.location.hostname+":80",

(也就是因为我们对80端口访问Kibana规划这是必要的:// logstash \ _ SERVER \ _Public \ _ip / HTTP )。

我们将使用Nginx为我们的Kibana安装服务,所以让我们将文件移动到适当的位置。 使用以下命令创建目录:

sudo mkdir -p /var/www/kibana3

现在将Kibana文件复制到新创建的目录中:

sudo cp -R ~/kibana-3.0.1/* /var/www/kibana3/

在我们可以使用Kibana Web界面之前,我们必须安装Nginx。 让我们现在做吧。

安装Nginx

使用apt安装Nginx:

sudo apt-get install nginx

由于Kibana将用户与Elasticsearch接口(用户需要能够直接访问Elasticsearch),我们需要配置Nginx将端口80请求代理到端口9200(Elasticsearch默认监听的端口)。 幸运的是,Kibana提供了一个示例Nginx配置,设置大部分。

从Kibana的github存储库下载示例Nginx配置到您的主目录:

cd ~; wget https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf

打开示例配置文件进行编辑:

vi nginx.conf

查找和更改的值server_name (如果您不使用域名或本地主机)和你的FQDN root的地方,我们安装了Kibana,让它们看起来像下面的条目:

  server_name FQDN;
  root /var/www/kibana3;

保存并退出。 现在使用以下命令将其复制到您的Nginx默认服务器块:

sudo cp nginx.conf /etc/nginx/sites-available/default

现在我们将安装apache2-utils ,所以我们可以用htpasswd生成一个用户名和密码对:

sudo apt-get install apache2-utils

然后生成将在Kibana用来保存和共享的仪表盘 (替换为自己的用户名)登录:

sudo htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd user

然后输入密码并验证。 刚刚创建的htpasswd文件在最近配置的Nginx配置中引用。

现在重新启动Nginx,使我们的更改生效:

sudo service nginx restart

Kibana现在是通过您的FQDN或Logstash服务器即公网IP地址访问的http:// logstash \ _ SERVER \ _Public \ _ip / 如果您在网络浏览器中访问,您应该看到一个Kibana欢迎页面,它将允许您查看仪表板,但没有日志要查看,因为Logstash尚未设置。 让我们现在做吧。

安装Logstash

Logstash包可以从与Elasticsearch相同的存储库获得,我们已经安装了该公钥,因此让我们创建Logstash源列表:

echo 'deb http://packages.elasticsearch.org/logstash/1.4/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list

更新apt包数据库:

sudo apt-get update

使用此命令安装Logstash:

sudo apt-get install logstash=1.4.2-1-2c0f5a1

已安装Logstash,但尚未配置。

生成SSL证书

由于我们要使用Logstash转发器将日志从我们的服务器发送到我们的Logstash服务器,我们需要创建一个SSL证书和密钥对。 Logstash转发器使用该证书来验证Logstash服务器的身份。 使用以下命令创建将存储证书和私钥的目录:

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

现在,您有两个选项用于生成SSL证书。 如果你有一个DNS设置,让您的客户端服务器解析Logstash服务器的IP地址,使用选项2,否则, 选项1将允许您使用IP地址。

选项1:IP地址

如果没有DNS设置,这将让你的服务器,你会收集日志从,解决您Logstash的服务器的IP地址,你将有你的Logstash服务器的私有IP地址添加到subjectAltName (SAN)字段,我们将要生成的SSL证书。 为此,请打开OpenSSL配置文件:

sudo vi /etc/ssl/openssl.cnf

找到[ v3_ca ]文件中的部分,并根据它(代在Logstash服务器的私有IP地址)添加这一行:

subjectAltName = IP: logstash_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的服务器,但我们会做到这一点稍晚。 让我们完成我们的Logstash配置。 如果您使用此选项去了,跳过选项2并移动到配置Logstash。

选项2:FQDN(DNS)

如果您使用专用网络进行DNS设置,则应创建一个包含Logstash服务器的私有IP地址(将在下一个命令中使用此域名)的A记录,以生成SSL证书。 或者,您可以使用指向服务器的公共IP地址的记录。 只需确保您的服务器(您将收集日志的服务器)将能够将域名解析到Logstash服务器。

现在使用以下命令(在Logstash服务器的FQDN中替换)在适当的位置(/ etc / pki / tls / ...)中生成SSL证书和私钥:

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

logstash-forwarder.crt文件将被复制到所有将日志发送到Logstash的服务器,但我们会做到这一点稍晚。 让我们完成我们的Logstash配置。

配置Logstash

Logstash配置文件采用JSON格式,位于/etc/logstash/conf.d中。 该配置由三个部分组成:输入,滤波器和输出。

让我们创建一个名为的配置文件01-lumberjack-input.conf ,并成立了“伐木工人”输入(即Logstash代理使用的协议):

sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf

插入下面的输入配置:

input {
  lumberjack {
    port => 5000
    type => "logs"
    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
  }
}

保存并退出。 这指定了一个lumberjack的输入,将监听TCP端口5000 ,它将使用我们前面创建的SSL证书和私钥。

现在,让我们创建一个配置文件名为10-syslog.conf ,在这里我们将添加一个过滤系统日志消息:

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

插入下面的系统日志过滤器配置:

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" ]
    }
  }
}

保存并退出。 此过滤器将查找标记为“syslog”类型(由Logstash转发器)的日志,并且将尝试使用“grok”解析传入的syslog日志以使其结构化和可查询。

最后,我们将创建一个配置文件名为30-lumberjack-output.conf

sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf

插入下面的输出配置:

output {
  elasticsearch { host => localhost }
  stdout { codec => rubydebug }
}

保存并退出。 此输出基本上配置Logstash以将日志存储在Elasticsearch中。

使用此配置,Logstash也将接受与过滤器不匹配的日志,但数据不会被结构化(例如,未过滤的Nginx或Apache日志将显示为平面消息,而不是通过HTTP响应代码,源IP地址,已提供文件,等等)。

如果要为使用Logstash转发器输入的其他应用程序添加过滤器,请确保对文件命名,以便在输入和输出配置之间进行排序(即在01和30之间)。

重新启动Logstash以使配置更改生效:

sudo service logstash restart

现在我们的Logstash服务器准备就绪,让我们继续设置Logstash转发器。

设置Logstash转发器

注意:做这些步骤要日志发送到您的Logstash服务器每个服务器。 有关在基于Red Hat Linux发行版(如RHEL,CentOS的,等等)安装Logstash代理的说明,请参阅构建和打包Logstash代理部分本教程的CentOS的变化。

复制SSL证书和Logstash转发程序包

Logstash服务器 ,SSL证书复制到服务器 (替代用自己的登录):

scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp

安装Logstash转发程序包

服务器上 ,创建Logstash转发源列表:

echo 'deb http://packages.elasticsearch.org/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list

它还使用与Elasticsearch相同的GPG密钥,可以使用此命令安装:

wget -O - http://packages.elasticsearch.org/GPG-KEY-elasticsearch | sudo apt-key add -

然后安装Logstash转发程序包:

sudo apt-get update
sudo apt-get install logstash-forwarder

注:如果您使用Ubuntu的32位版本,并得到一个“无法找到包logstash-代理”的错误,则需要手动安装Logstash转发:

wget https://assets.digitalocean.com/articles/logstash/logstash-forwarder_0.3.1_i386.deb
sudo dpkg -i logstash-forwarder_0.3.1_i386.deb

接下来,您将要安装Logstash Forwarder init脚本,因此它在启动时启动:

cd /etc/init.d/; sudo wget https://raw.githubusercontent.com/elasticsearch/logstash-forwarder/a73e1cb7e43c6de97050912b5bb35910c0f8d0da/logstash-forwarder.init -O logstash-forwarder
sudo chmod +x logstash-forwarder
sudo update-rc.d logstash-forwarder defaults

现在将SSL证书复制到适当的位置(/ etc / pki / tls / certs):

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

配置Logstash转发器

服务器 ,创建和编辑Logstash转发器配置文件,该文件是JSON格式:

sudo vi /etc/logstash-forwarder

现在,添加以下行到该文件中,在你Logstash服务器的专用IP地址替换logstash_server_private_IP

{
  "network": {
    "servers": [ "logstash_server_private_IP:5000" ],
    "timeout": 15,
    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
  },
  "files": [
    {
      "paths": [
        "/var/log/syslog",
        "/var/log/auth.log"
       ],
      "fields": { "type": "syslog" }
    }
   ]
}

保存并退出。 这将Logstash转发器配置为在端口5000(我们为之前指定的输入端口)连接到Logstash服务器,并使用我们之前创建的SSL证书。 路径部分指定哪些日志文件发送(这里我们指定syslog和auth.log), 类型节指定这些日志型“的syslog *(这是我们的过滤器正在寻找的类型)。

请注意,这里将添加更多文件/类型以将Logstash转发器配置为其他日志文件到5000端口上的Logstash。

现在重新启动Logstash转发器,以将我们的更改到位:

sudo service logstash-forwarder restart

现在Logstash转发器发送syslog和auth.log到您的Logstash服务器! 对您希望收集日志的所有其他服务器重复此过程。

连接到Kibana

当您在要收集日志的所有服务器上完成Logstash Forwarder的设置后,让我们看看我们之前安装的Web界面Kibana。

在Web浏览器中,转到Logstash服务器的FQDN或公共IP地址。 您应该看到Kibana欢迎页面。

点击Logstash仪表板转到预制仪表板。 您应该看到一个带有日志事件的直方图,以及以下日志消息(如果没有看到任何事件或消息,那么您的四个Logstash组件之一未正确配置)。

在这里,您可以搜索和浏览您的日志。 您还可以自定义信息中心。 这是您的Kibana实例可能是什么样子的示例:

Kibana 3示例仪表板

尝试以下事项:

  • 搜索“root”以查看是否有人尝试以root身份登录到您的服务器
  • 搜索特定的主机名
  • 通过在直方图上或从上面的菜单中选择一个区域来更改时间范围
  • 点击直方图下面的消息,查看数据是如何过滤的

Kibana有许多其他功能,如图形和过滤,所以随便捅!

结论

现在,您的系统日志通过Logstash集中,并且您能够使用Kibana可视化它们,您应该有一个良好的开始,集中所有重要的日志。 记住,你可以发送几乎任何类型的日志到Logstash,但数据变得更有用,如果它被解析和结构与grok。

请注意,任何可以访问您的服务器的人都可以访问您的Kibana仪表板,因此您需要使用类似htaccess的安全保护。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏