介绍
在本教程中,我们将讨论在CentOS 7上安装Logstash 1.4.2和Kibana 3,以及如何配置它们以在集中位置收集和可视化系统的syslog。 Logstash是一个用于收集,解析和存储日志以供将来使用的开源工具。 Kibana 3是一个Web界面,可用于搜索和查看Logstash索引的日志。 这两个工具都基于Elasticsearch。 Elasticsearch,Logstash和Kibana在一起使用时称为ELK。
集中日志记录在尝试识别服务器或应用程序的问题时非常有用,因为它允许您在单个位置搜索所有日志。 它也很有用,因为它允许您通过在特定时间范围内关联其日志来识别跨多个服务器的问题。
可以使用Logstash收集所有类型的日志,但我们将本教程的范围限制为syslog收集。
注意:本指南的更新版本可以在这里找到: 如何在CentOS 7安装Elasticsearch,Logstash和Kibana 4 。
我们的目标
本教程的目标是设置Logstash以收集多个服务器的syslog,并设置Kibana以可视化收集的日志。
我们的Logstash / Kibana设置有四个主要组件:
- Logstash:用于处理传入的日志Logstash的服务器组件
- Elasticsearch:存储所有的日志
- Kibana:Web界面,用于搜索和可视化日志
- Logstash转发器 :安装在将派出自己的日志Logstash服务器,Logstash货代作为一个利用樵夫网络协议与Logstash通信的日志转发代理
我们将一台服务器,其中,我们将参照作为我们Logstash服务器上安装的前三个分量。 该Logstash转发器将被安装在所有我们要收集原木,我们将把统称为我们的服务器的服务器。
先决条件
要完成本教程,您需要root用户访问CentOS 7 VPS。 说明设置,最多可以在这里找到(第3步和4): 初始服务器设置在CentOS 6 。
Logstash服务器将需要的CPU,RAM和存储量取决于您要收集的日志的量。 在本教程中,我们将使用具有以下规格的VPS用于Logstash服务器:
- 操作系统:CentOS 7
- RAM:2GB
- CPU:2
除了您的Logstash服务器,您将需要有一些其他服务器,您将收集日志。
让我们开始设置我们的Logstash服务器!
安装Java 7
Elasticsearch和Logstash需要Java 7,所以我们现在就安装它。 我们将安装OpenJDK 7。
使用此命令安装最新稳定版本的OpenJDK 7:
sudo yum -y install java-1.7.0-openjdk
现在安装了Java 7,让我们安装ElasticSearch。
安装Elasticsearch
注 :Logstash 1.4.2建议Elasticsearch 1.1.1。
运行以下命令将Elasticsearch公共GPG密钥导入rpm:
sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch
为Elasticsearch创建和编辑新的yum存储库文件:
sudo vi /etc/yum.repos.d/elasticsearch.repo
添加以下存储库配置:
[elasticsearch-1.1]
name=Elasticsearch repository for 1.1.x packages
baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
保存并退出。
使用此命令安装Elasticsearch 1.1.1:
sudo yum -y install elasticsearch-1.1.1
Elasticsearch现已安装。 让我们编辑配置:
sudo vi /etc/elasticsearch/elasticsearch.yml
在文件中的某处添加以下行,以禁用动态脚本:
script.disable_dynamic: true
您还将要限制对Elasticsearch实例的外部访问,因此外部人员无法读取您的数据或通过HTTP API关闭Elasticseach集群。 查找指定的行network.host
,所以它看起来像这样取消其注释:
network.host: localhost
然后通过寻找禁用组播discovery.zen.ping.multicast.enabled
项目,并取消注释,所以它看起来是这样的:
discovery.zen.ping.multicast.enabled: false
保存并退出elasticsearch.yml
。
现在启动Elasticsearch:
sudo systemctl start elasticsearch.service
然后运行以下命令在启动时启动Elasticsearch:
sudo systemctl enable elasticsearch.service
现在Elasticsearch启动并运行,让我们安装Kibana。
安装Kibana
注 :Logstash 1.4.2建议Kibana 3.0.1。
使用以下命令将Kibana下载到您的主目录:
cd ~; curl -O https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz
使用tar提取Kibana存档:
tar xvf kibana-3.0.1.tar.gz
打开Kibana配置文件进行编辑:
vi ~/kibana-3.0.1/config.js
在Kibana配置文件,找到指定行elasticsearch
服务器URL,并与取代的端口号(9200默认) 80
:
elasticsearch: "http://"+window.location.hostname+":80",
(也就是因为我们对80端口访问Kibana规划这是必要的:// logstash \ _ SERVER \ _Public \ _ip / HTTP )。
我们将使用Apache来服务我们的Kibana安装,所以让我们将文件移动到适当的位置。 使用以下命令创建目录:
sudo mkdir -p /var/www/kibana3
现在将Kibana文件复制到新创建的目录中:
sudo cp -R ~/kibana-3.0.1/* /var/www/kibana3/
在我们可以使用Kibana Web界面之前,我们必须安装Apache。 让我们现在做吧。
安装Apache HTTP
使用Yum安装Apache HTTP:
sudo yum -y install httpd
由于Kibana将用户与Elasticsearch接口(用户需要能够直接访问Elasticsearch),我们需要配置Apache以代理端口80请求到端口9200(Elasticsearch默认监听的端口)。 我们将提供一个示例VirtualHost文件开始。
下载示例VirtualHost配置:
cd ~; wget https://assets.digitalocean.com/articles/logstash/kibana3.conf
打开示例配置文件进行编辑:
vi kibana3.conf
查找和更改的突出显示的值VirtualHost
和ServerName
到你的FQDN(或本地主机,如果你没有使用域名)和root
的地方,我们安装了Kibana,让它们看起来像下面的条目:
<VirtualHost FQDN:80>
ServerName FQDN
保存并退出。 现在将其复制到您的Apache配置配置:
sudo cp ~/kibana3.conf /etc/httpd/conf.d/
然后生成将用于访问Kibana的登录名(替换您自己的用户名):
sudo htpasswd -c /etc/httpd/conf.d/kibana-htpasswd user
然后输入密码并验证。 刚刚创建的htpasswd文件在您最近配置的Apache配置中引用。
现在启动Apache,使我们的更改生效:
sudo systemctl start httpd.service
另外,配置Apache在启动时启动:
sudo systemctl enable httpd.service
Kibana现在是通过您的FQDN或Logstash服务器即公网IP地址访问的http:// logstash \ _ SERVER \ _Public \ _ip / 。 如果您在网络浏览器中访问,您应该看到一个Kibana欢迎页面,它将允许您查看仪表板,但没有日志要查看,因为Logstash尚未设置。 让我们现在做吧。
安装Logstash
Logstash包与Elasticsearch共享相同的GPG密钥,并且我们已经安装了该公钥,因此让我们为Logstash创建和编辑新的Yum存储库文件:
sudo vi /etc/yum.repos.d/logstash.repo
添加以下存储库配置:
[logstash-1.4]
name=logstash repository for 1.4.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.4/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
保存并退出。
使用此命令安装Logstash 1.4.2:
sudo yum -y install logstash-1.4.2
已安装Logstash,但尚未配置。
生成SSL证书
由于我们要使用Logstash转发器将日志从我们的服务器发送到我们的Logstash服务器,我们需要创建一个SSL证书和密钥对。 Logstash转发器使用该证书来验证Logstash服务器的身份。
现在,您有两个选项用于生成SSL证书。 如果你有一个DNS设置,让您的客户端服务器解析Logstash服务器的IP地址,使用选项2,否则, 选项1将允许您使用IP地址。
选项1:IP地址
如果没有DNS设置,这将让你的服务器,你会收集日志从,解决您Logstash的服务器的IP地址,你将有你的Logstash服务器的私有IP地址添加到subjectAltName
(SAN)字段,我们将要生成的SSL证书。 为此,请打开OpenSSL配置文件:
sudo vi /etc/pki/tls/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/pki/tls/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服务器每个服务器。 有关在基于Debian的Linux发行版(如Ubuntu的,Debian的,等等)安装Logstash代理的说明,请参阅建立和本教程的Ubuntu的变异包装Logstash代理部分 。
复制SSL证书和Logstash转发程序包
在Logstash服务器 ,SSL证书复制到服务器 (替代用自己的登录):
scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp
安装Logstash转发程序包
在服务器 ,下载Logstash转发RPM到你的主目录:
cd ~; curl -O http://download.elasticsearch.org/logstash-forwarder/packages/logstash-forwarder-0.3.1-1.x86_64.rpm
然后安装Logstash转发程序包:
sudo rpm -ivh ~/logstash-forwarder-0.3.1-1.x86_64.rpm
接下来,您将要安装Logstash Forwarder init脚本,因此它在启动时启动。 我们将使用由logstashbook.com提供的init脚本:
cd /etc/init.d/; sudo curl -o logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_init
sudo chmod +x logstash-forwarder
初始化脚本依赖于一个名为/etc/sysconfig/logstash-forwarder
。 可以下载示例文件:
sudo curl -o /etc/sysconfig/logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_sysconfig
打开它进行编辑:
sudo vi /etc/sysconfig/logstash-forwarder
并修改LOGSTASH_FORWARDER_OPTIONS
值,所以它看起来像如下:
LOGSTASH_FORWARDER_OPTIONS="-config /etc/logstash-forwarder -spool-size 100"
保存并退出。
现在将SSL证书复制到适当的位置(/ 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/messages",
"/var/log/secure"
],
"fields": { "type": "syslog" }
}
]
}
保存并退出。 这将Logstash转发器配置为在端口5000(我们为之前指定的输入端口)连接到Logstash服务器,并使用我们之前创建的SSL证书。 路径部分指定哪些日志文件发送(这里我们指定的信息和安全 ), 类型节指定这些日志型“的syslog *(这是我们的过滤器正在寻找的类型)。
请注意,这里将添加更多文件/类型以将Logstash转发器配置为其他日志文件到5000端口上的Logstash。
现在我们将要与chkconfig的添加Logstash代理服务:
sudo chkconfig --add logstash-forwarder
现在启动Logstash转发器将我们的更改:
sudo service logstash-forwarder start
现在Logstash转发器发送消息和auth.log您Logstash服务器! 对您希望收集日志的所有其他服务器重复此过程。
连接到Kibana
当您在要收集日志的所有服务器上完成Logstash Forwarder的设置后,让我们看看我们之前安装的Web界面Kibana。
在Web浏览器中,转到Logstash服务器的FQDN或公共IP地址。 您将需要输入您创建的登录(在Apache设置期间),然后您应该看到Kibana欢迎页面。
点击Logstash仪表板转到预制仪表板。 您应该看到一个带有日志事件的直方图,以及以下日志消息(如果没有看到任何事件或消息,那么您的四个Logstash组件之一未正确配置)。
在这里,您可以搜索和浏览您的日志。 您还可以自定义信息中心。 这是您的Kibana实例可能是什么样子的示例:
尝试以下事项:
- 搜索“root”以查看是否有人尝试以root身份登录到您的服务器
- 搜索特定的主机名
- 通过在直方图上或从上面的菜单中选择一个区域来更改时间范围
- 点击直方图下面的消息,查看数据是如何过滤的
Kibana有许多其他功能,如图形和过滤,所以随便捅!
结论
现在,您的系统日志通过Logstash集中,并且您能够使用Kibana可视化它们,您应该有一个良好的开始,集中所有重要的日志。 记住,你可以发送几乎任何类型的日志到Logstash,但数据变得更有用,如果它被解析和结构与grok。
请注意,任何可以访问您的服务器的人都可以访问您的Kibana仪表板,因此您需要使用类似htaccess的安全保护。