如何在 CentOS 6 上使用 Logstash 和 Kibana 集中日志
状态:已弃用
本文涵盖不再受支持的 CentOS 版本。如果您当前正在运行运行 CentOS 6 的服务器,我们强烈建议您升级或迁移到受支持的 CentOS 版本。
原因:
请参阅:
以下 DigitalOcean 教程系列可能会立即引起您的兴趣,因为它概述了如何在 CentOS 7 服务器上使用 Logstash 和 Kibana 集中记录日志:
- 在 CentOS 7 上使用 Logstash 和 Kibana 进行集中式日志记录
介绍
在本教程中,我们将介绍 Logstash 1.4.2 和 Kibana 3 的安装,以及如何配置它们以在集中位置收集和可视化我们系统的系统日志。 Logstash 是一个开源工具,用于收集、解析和存储日志以备将来使用。 Kibana 3 是一个 Web 界面,可用于搜索和查看 Logstash 已编制索引的日志。这两个工具都基于 Elasticsearch。 Elasticsearch、Logstash 和 Kibana 一起使用时称为 ELK 堆栈。
集中式日志记录在尝试识别服务器或应用程序问题时非常有用,因为它允许您在一个地方搜索所有日志。它也很有用,因为它允许您通过关联特定时间范围内的日志来识别跨越多个服务器的问题。
可以使用 Logstash 收集所有类型的日志,但我们将本教程的范围限制为系统日志收集。
我们的目标
本教程的目标是设置 Logstash 以收集多个服务器的系统日志,并设置 Kibana 以可视化收集的日志。
我们的 Logstash/Kibana 设置有四个主要组件:
- Logstash:Logstash 的服务器组件,用于处理传入的日志
- Elasticsearch:存储所有日志
- Kibana:用于搜索和可视化日志的 Web 界面
- Logstash Forwarder:安装在将日志发送到 Logstash 的服务器上,Logstash Forwarder 用作日志转发代理,利用lumberjack网络协议与 Logstash 通信
我们将在单个服务器上安装前三个组件,我们将其称为我们的 Logstash 服务器。 Logstash Forwarder 将安装在我们要为其收集日志的所有服务器上,我们将统称为我们的服务器。
先决条件
要完成本教程,您将需要对 CentOS 6.5 VPS 的根访问权限。可以在此处找到设置说明(步骤 3 和 4):Initial Server Setup with CentOS 6。
Logstash 服务器所需的 CPU、RAM 和存储量取决于您打算收集的日志量。对于本教程,我们将为我们的 Logstash 服务器使用具有以下规格的 VPS:
- 操作系统:CentOS 6.5
- 内存:2GB
- 中央处理器: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
弹性搜索现已安装。让我们编辑配置:
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 service elasticsearch restart
然后运行以下命令以在启动时启动 Elasticsearch:
sudo /sbin/chkconfig --add elasticsearch
现在 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(即 http://logstash_server_public_ip/)。
我们将使用 Nginx 来为我们的 Kibana 安装提供服务,所以让我们将文件移动到适当的位置。使用以下命令创建目录:
sudo mkdir -p /usr/share/nginx/kibana3
现在将 Kibana 文件复制到新创建的目录中:
sudo cp -R ~/kibana-3.0.1/* /usr/share/nginx/kibana3/
在使用 Kibana Web 界面之前,我们必须安装 Nginx。让我们现在开始吧。
安装 Nginx
添加包含 Nginx 的 Yum 存储库:
sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
使用 Yum 安装 Nginx:
sudo yum -y install nginx
由于 Kibana 用户与 Elasticsearch 的接口方式(用户需要能够直接访问 Elasticsearch),我们需要配置 Nginx 将端口 80 请求代理到端口 9200(Elasticsearch 默认监听的端口)。幸运的是,Kibana 提供了一个示例 Nginx 配置来设置其中的大部分内容。
从 Kibana 的 github 存储库将示例 Nginx 配置下载到您的主目录:
cd ~; curl -OL https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf
打开示例配置文件进行编辑:
vi nginx.conf
查找并将 server_name
的值更改为您的 FQDN(如果您未使用域名,则为您的公共 IP 地址)并将 root
的值更改为我们安装 Kibana 的位置,因此它们看起来像以下条目:
server_name FQDN;
root /usr/share/nginx/kibana3;
保存并退出。现在使用以下命令将其复制到 Nginx 默认服务器块上:
sudo cp ~/nginx.conf /etc/nginx/conf.d/default.conf
现在我们将安装 apache2-utils
以便我们可以使用 htpasswd
生成用户名和密码对:
sudo yum install httpd-tools-2.2.15
然后生成将在 Kibana 中用于保存和共享仪表板的登录名(替换您自己的用户名):
sudo htpasswd -c /etc/nginx/conf.d/kibana.myhost.org.htpasswd user
然后输入密码并验证。您最近配置的 Nginx 配置中引用了刚刚创建的 htpasswd 文件。
现在重新启动 Nginx 以使我们的更改生效:
sudo service nginx restart
另外,将 Nginx 配置为开机启动:
sudo chkconfig --levels 235 nginx on
现在可以通过您的 FQDN 或您的 Logstash 服务器的公共 IP 地址访问 Kibana,即 http://logstash_server_public_ip/。如果您在 Web 浏览器中访问该页面,您应该会看到一个 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 Forwarder 将日志从我们的服务器发送到我们的 Logstash 服务器,因此我们需要创建一个 SSL 证书和密钥对。 Logstash Forwarder 使用该证书来验证 Logstash Server 的身份。
现在您有两种生成 SSL 证书的选项。如果您的 DNS 设置允许您的客户端服务器解析 Logstash 服务器的 IP 地址,请使用选项 2。否则,选项 1 将允许您使用 IP 地址。
选项 1:IP 地址
如果您没有 DNS 设置——这将允许您的服务器(您将从中收集日志)解析您的 Logstash 服务器的 IP 地址——您将必须将您的 Logstash 服务器的私有 IP 地址添加到 subjectAltName
我们将要生成的 SSL 证书的 (SAN) 字段。为此,打开 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 设置,你应该创建一个 A 记录,其中包含 Logstash 服务器的私人 IP 地址——这个域名将在下一个命令中使用,以生成 SSL 证书。或者,您可以使用指向服务器公共 IP 地址的记录。只需确保您的服务器(您将从中收集日志的服务器)能够将域名解析为您的 Logstash 服务器。
现在在适当的位置 (/etc/pki/tls/…) 使用以下命令生成 SSL 证书和私钥(替换为 Logstash 服务器的 FQDN):
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
的配置文件并设置我们的“lumberjack”输入(Logstash Forwarder 使用的协议):
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"
}
}
保存并退出。这指定了将在 tcp 端口 5000
上侦听的 lumberjack
输入,并且它将使用我们之前创建的 SSL 证书和私钥。
现在让我们创建一个名为 10-syslog.conf
的配置文件,我们将在其中添加一个系统日志消息过滤器:
sudo vi /etc/logstash/conf.d/10-syslog.conf
插入以下 syslog filter 配置:
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 地址、服务文件对消息进行分类, ETC。)。
如果要为使用 Logstash Forwarder 输入的其他应用程序添加过滤器,请确保命名文件,以便它们在输入和输出配置之间排序(即在 01 和 30 之间)。
重新启动 Logstash 以使我们的配置更改生效:
sudo service logstash restart
现在我们的 Logstash 服务器已准备就绪,让我们继续设置 Logstash 转发器。
设置 Logstash 转发器
注意:对要将日志发送到 Logstash 服务器的每个服务器执行这些步骤。有关在基于 Debian 的 Linux 发行版(例如 Ubuntu、Debian 等)上安装 Logstash Forwarder 的说明,请参阅本教程的 Ubuntu 变体的设置 Logstash Forwarder 部分。
复制 SSL 证书和 Logstash 转发器包
在 Logstash 服务器上,将 SSL 证书复制到服务器(替换为您自己的登录名):
scp /etc/pki/tls/certs/logstash-forwarder.crt user@server_private_IP:/tmp
安装 Logstash 转发器包
在服务器上,将 Logstash Forwarder 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 初始化脚本,以便它在启动时启动。我们将使用 logstashbook.com 提供的初始化脚本:
cd /etc/init.d/; sudo curl -o logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_init
sudo chmod +x logstash-forwarder
init 脚本依赖于名为 /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 转发器
在 Server 上,创建并编辑 JSON 格式的 Logstash Forwarder 配置文件:
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 Forwarder 配置为连接到端口 5000(我们之前指定输入的端口)上的 Logstash 服务器,并使用我们之前创建的 SSL 证书。 paths 部分指定要发送的日志文件(这里我们指定 messages 和 secure),type 部分指定这些日志的类型为“syslog*”(这是我们的过滤器正在寻找的类型)。
请注意,您可以在此处添加更多文件/类型以将 Logstash Forwarder 配置为将其他日志文件发送到端口 5000 上的 Logstash。
现在我们要使用 chkconfig 添加 Logstash Forwarder 服务:
sudo chkconfig --add logstash-forwarder
现在启动 Logstash Forwarder 以放置我们的更改:
sudo service logstash-forwarder start
现在 Logstash Forwarder 正在向您的 Logstash 服务器发送消息和auth.log!对您希望为其收集日志的所有其他服务器重复此过程。
连接到 Kibana
在所有要为其收集日志的服务器上完成 Logstash Forwarder 的设置后,让我们看看 Kibana,这是我们之前安装的 Web 界面。
在 Web 浏览器中,转到您的 Logstash 服务器的 FQDN 或公共 IP 地址。您应该会看到 Kibana 欢迎页面。
单击 Logstash 仪表板 转到预制仪表板。您应该看到一个带有日志事件的直方图,下面是日志消息(如果您没有看到任何事件或消息,则您的四个 Logstash 组件之一未正确配置)。
在这里,您可以搜索和浏览您的日志。您还可以自定义仪表板。这是您的 Kibana 实例的示例:

尝试以下操作:
- 搜索“root”以查看是否有人试图以 root 身份登录您的服务器
- 搜索特定主机名
- 通过在直方图上或从上面的菜单中选择一个区域来更改时间范围
- 单击直方图下方的消息以查看数据是如何被过滤的
Kibana 还有许多其他功能,例如绘图和过滤,所以请随意浏览!
结论
既然您的系统日志通过 Logstash 集中,并且您可以使用 Kibana 可视化它们,那么您应该开始集中所有重要日志。请记住,您几乎可以将任何类型的日志发送到 Logstash,但如果使用 grok 对其进行解析和结构化,数据将变得更加有用。
请注意,任何可以访问您的服务器的人都可以访问您的 Kibana 仪表板,因此您需要使用 htaccess 之类的东西来保护它。