注:本教程是为较旧版本的ELK,这是不符合最新版本兼容。 本教程的最新版本可在如何在CentOS 7安装Elasticsearch,Logstash和Kibana(ELK) 。
介绍
在本教程中,我们将讨论在CentOS 7上安装Elasticsearch ELK Stack,即Elasticsearch 1.7.3,Logstash 1.5.4和Kibana 4.1.1。 我们还将向您展示如何配置它,以便在集中的位置收集和可视化系统的系统日志。 Logstash是一个用于收集,解析和存储日志以供将来使用的开源工具。 Kibana是一个Web界面,可用于搜索和查看Logstash索引的日志。 这两个工具都基于Elasticsearch。
集中日志记录在尝试识别服务器或应用程序的问题时非常有用,因为它允许您在单个位置搜索所有日志。 它也很有用,因为它允许您通过在特定时间范围内关联其日志来识别跨多个服务器的问题。
可以使用Logstash收集所有类型的日志,但我们将本教程的范围限制为syslog收集。
我们的目标
本教程的目标是设置Logstash以收集多个服务器的syslog,并设置Kibana以可视化收集的日志。
我们的Logstash / Kibana设置有四个主要组件:
- Logstash:用于处理传入的日志Logstash的服务器组件
- Elasticsearch:存储所有的日志
- Kibana:网络接口,用于搜索和可视日志,这将在通过Nginx的代理
- Logstash转发器 :安装在将派出自己的日志Logstash服务器,Logstash货代作为一个利用樵夫网络协议与Logstash通信的日志转发代理
我们将一台服务器,其中,我们将参照作为我们Logstash服务器上安装的前三个分量。 该Logstash转发器将被安装在所有我们要收集原木,我们将把统称为我们的客户服务器客户端服务器。
先决条件
要完成本教程,您需要root用户访问CentOS 7 VPS。 说明设置,最多可以在这里找到(第3步和4): 初始服务器设置在CentOS 7 。
如果您希望使用Ubuntu,而不是,看看这个教程: 如何在Ubuntu 14.04安装ELK 。
Logstash服务器将需要的CPU,RAM和存储量取决于您要收集的日志的量。 在本教程中,我们将使用具有以下规格的VPS用于Logstash服务器:
- 操作系统:CentOS 7
- RAM:4GB
- CPU:2
除了您的Logstash服务器,您将需要一些其他服务器,您将收集日志。
让我们开始设置我们的Logstash服务器!
安装Java 8
Elasticsearch和Logstash需要Java,所以我们现在就安装它。 我们将安装最新版本的Oracle Java 8,因为这是Elasticsearch推荐的版本。 但是,它应该与OpenJDK,如果你决定走这条路线工作正常。 遵循本节中的步骤意味着您接受Java SE的Oracle二进制许可证协议。
切换到您的主目录并使用以下命令下载Oracle Java 8(Update 65)JDK RPM:
cd ~
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u65-b17/jdk-8u65-linux-x64.rpm"
然后使用此yum命令安装RPM(如果您下载了不同的版本,请在此处替换文件名):
sudo yum localinstall jdk-8u65-linux-x64.rpm
现在的Java应安装/usr/java/jdk1.8.0_65/jre/bin/java
,并从/ usr /斌/ java的链接。
您可以删除先前下载的归档文件:
rm ~/jdk-8u65-linux-x64.rpm
现在安装了Java 8,我们安装ElasticSearch。
安装Elasticsearch
Elasticsearch可以通过添加Elastic的软件包仓库与软件包管理器一起安装。
运行以下命令将Elasticsearch公共GPG密钥导入rpm:
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
为Elasticsearch创建和编辑新的yum存储库文件:
sudo vi /etc/yum.repos.d/elasticsearch.repo
添加以下存储库配置:
[elasticsearch-1.7]
name=Elasticsearch repository for 1.7.x packages
baseurl=http://packages.elastic.co/elasticsearch/1.7/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
保存并退出。
使用此命令安装Elasticsearch:
sudo yum -y install elasticsearch
Elasticsearch现已安装。 让我们编辑配置:
sudo vi /etc/elasticsearch/elasticsearch.yml
您将要限制对Elasticsearch实例(端口9200)的外部访问,因此外部人员无法读取您的数据或通过HTTP API关闭Elasticsearch集群。 查找指定线路network.host
,取消它,并与“localhost”的,所以它看起来像这样替换它的价值:
network.host: localhost
保存并退出elasticsearch.yml
。
现在启动Elasticsearch:
sudo systemctl start elasticsearch
然后运行以下命令在启动时自动启动Elasticsearch:
sudo systemctl enable elasticsearch
现在Elasticsearch启动并运行,让我们安装Kibana。
安装Kibana
Kibana软件包与Elasticsearch共享相同的GPG密钥,并且我们已经安装了该公钥,所以让我们为Kibana创建和编辑一个新的Yum存储库文件:
为Kibana创建和编辑新的yum存储库文件:
sudo vi /etc/yum.repos.d/kibana.repo
添加以下存储库配置:
[kibana-4.1]
name=Kibana repository for 4.1.x packages
baseurl=http://packages.elastic.co/kibana/4.1/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
保存并退出。
使用此命令安装Kibana:
sudo yum -y install kibana
打开Kibana配置文件以进行编辑:
sudo vi /opt/kibana/config/kibana.yml
在Kibana配置文件,找到指定行host
,并替换为“本地主机”的IP地址(由“0.0.0.0”默认值):
host: "localhost"
保存并退出。 这个设置使得Kibana只能访问localhost。 这是很好,因为我们将在同一服务器上安装一个Nginx反向代理,以允许外部访问。
现在启动Kibana服务,并启用它:
sudo systemctl start kibana
sudo chkconfig kibana on
在我们可以使用Kibana Web界面之前,我们必须设置一个反向代理。 让我们现在做,与Nginx。
安装Nginx
因为我们配置Kibana为监听localhost
,我们必须建立一个反向代理,允许它的外部访问。 我们将使用Nginx为此目的。
注意:如果你已经有了要使用Nginx的情况下,随意使用来代替。 只要确保配置Kibana所以它是由你的Nginx服务器访问(您可能要更改的host
值, /opt/kibana/config/kibana.yml
,您Kibana服务器的专用IP地址)。 此外,建议您启用SSL / TLS。
将EPEL存储库添加到yum:
sudo yum -y install epel-release
现在使用yum安装Nginx和httpd-tools:
sudo yum -y install nginx httpd-tools
使用htpasswd创建一个名为“kibanaadmin”的管理员用户(您应该使用其他名称),可以访问Kibana Web界面:
sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin
在提示符处输入密码。 记住此登录信息,因为您需要访问Kibana Web界面。
现在打开你喜欢的编辑器中的Nginx配置文件。 我们将使用vi:
sudo vi /etc/nginx/nginx.conf
查找默认的服务器块(与启动server {
,文件中的最后一个配置块),并将其删除。 完成后,文件中的最后两行应如下所示:
include /etc/nginx/conf.d/*.conf;
}
保存并退出。
现在我们将在一个新文件中创建一个Nginx服务器块:
sudo vi /etc/nginx/conf.d/kibana.conf
将以下代码块粘贴到文件中。 请务必更新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;
}
}
保存并退出。 这Nginx的配置您的服务器的HTTP流量直接到Kibana应用程序,它监听localhost:5601
。 此外,Nginx的将使用htpasswd.users
文件,我们前面创建和要求基本身份验证。
现在启动并启用Nginx以使我们的更改生效:
sudo systemctl start nginx
sudo systemctl enable nginx
注:本教程假设的SELinux被禁用。 如果不是这种情况,您可能需要运行以下命令Kibana到正常工作: sudo setsebool -P httpd_can_network_connect 1
Kibana现在是通过您的FQDN或Logstash服务器即公网IP地址访问的http:// logstash \ _ SERVER \ _Public \ _ip / 。 如果您在网络浏览器中访问,输入“kibanaadmin”凭据后,您应该看到一个Kibana欢迎页面,它将要求您配置索引模式。 让我们回到那以后,在我们安装所有其他组件。
安装LogStash
Logstash包与Elasticsearch共享相同的GPG密钥,并且我们已经安装了该公钥,因此让我们为Logstash创建和编辑新的Yum存储库文件:
sudo vi /etc/yum.repos.d/logstash.repo
添加以下存储库配置:
[logstash-1.5]
name=logstash repository for 1.5.x packages
baseurl=http://packages.elasticsearch.org/logstash/1.5/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
保存并退出。
使用此命令安装Logstash 1.5:
sudo yum -y install logstash
已安装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 => 5043
type => "logs"
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
保存并退出。 这指定了一个lumberjack
的输入,将监听TCP端口5043
,它将使用我们前面创建的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 systemctl restart logstash
现在我们的Logstash服务器准备就绪,让我们继续设置Logstash转发器。
设置Logstash转发器(添加客户端服务器)
做这些步骤要日志发送到您的Logstash每个服务器的CentOS或RHEL 7服务器。 有关在基于Debian的Linux发行版(如Ubuntu的,Debian的,等等)安装Logstash代理的说明,请参阅构建和打包Logstash代理部分本教程的Ubuntu的变化。
复制SSL证书和Logstash转发程序包
在Logstash服务器 ,SSL证书复制到客户端服务器 (替代客户端服务器的IP地址,以及自己的登录):
scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp
提供登录凭据后,请确保证书复制成功。 它是客户端服务器和Logstash服务器之间通信所必需的。
安装Logstash转发程序包
在客户端服务器上 ,创建运行以下命令来导入Elasticsearch公共GPG钥匙插入转:
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
为Logstash转发器创建和编辑新的yum存储库文件:
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
保存并退出。
然后安装Logstash转发程序包:
sudo yum -y install logstash-forwarder
现在将Logstash服务器的SSL证书复制到适当的位置(/ etc / pki / tls / certs):
sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
配置Logstash转发器
在客户端服务器 ,创建和编辑Logstash转发器配置文件,该文件是JSON格式:
sudo vi /etc/logstash-forwarder.conf
根据network
部分,添加以下行到该文件中,在你Logstash服务器的专用IP地址替换logstash_server_private_IP
:
"servers": [ "logstash_server_private_IP:5043" ],
"ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
"timeout": 15
根据该files
部分(方括号中),添加以下行,
{
"paths": [
"/var/log/messages",
"/var/log/secure"
],
"fields": { "type": "syslog" }
}
保存并退出。 这将Logstash转发器配置为在端口5043(我们为之前指定的输入端口)上连接到Logstash服务器,并使用之前创建的SSL证书。 路径部分指定哪些日志文件发送(这里我们指定messages
和secure
), 类型节指定这些日志型“的syslog *(这是我们的过滤器正在寻找的类型)。
请注意,这是您将添加更多文件/类型以将Logstash转发器配置为其他日志文件到端口5043上的Logstash。
现在启动并启用Logstash转发器将我们的更改:
sudo systemctl start logstash-forwarder
sudo chkconfig logstash-forwarder on
现在Logstash转发器发送你的系统日志messages
和secure
文件到您的Logstash服务器! 对于您要收集日志的所有其他服务器重复此部分。
连接到Kibana
当您在要收集日志的所有服务器上完成Logstash Forwarder的设置后,让我们看看我们之前安装的Web界面Kibana。
在Web浏览器中,转到Logstash服务器的FQDN或公共IP地址。 输入“kibanaadmin”凭据后,您应该看到一个页面,提示您配置索引模式:
来吧,从下拉菜单中选择@timestamp,然后点击创建按钮创建的第一个索引。
现在点击顶部导航栏中的链接发现 。 默认情况下,这将显示过去15分钟内的所有日志数据。 您应该会看到带有日志事件的直方图,其中包含以下日志消息:
现在,在那里不会有太多,因为你只是从您的客户端服务器收集系统日志。 在这里,您可以搜索和浏览您的日志。 您还可以自定义信息中心。
尝试以下事项:
- 搜索“root”以查看是否有人尝试以root身份登录到您的服务器
- 搜索一个特定的主机名(搜索
host: " hostname "
) - 通过在直方图上或从上面的菜单中选择一个区域来更改时间范围
- 点击直方图下面的消息,查看数据是如何过滤的
Kibana有许多其他功能,如图形和过滤,所以随便捅!
结论
现在你的系统日志通过Elasticsearch和Logstash集中,你可以用Kibana可视化它们,你应该有一个很好的开始,集中所有重要的日志。 记住,你可以发送几乎任何类型的日志到Logstash,但数据变得更有用,如果它被解析和结构与grok。
要改进您的新ELK,您应该查看使用Logstash收集和过滤其他日志,并创建Kibana仪表板。 这些主题在本系列的第二和第三个教程中介绍。 此外,如果您有您的设置的麻烦,按照我们如何解决常见ELK问题教程。
向下滚动链接以了解有关使用ELK的更多信息!