如何在 CentOS 6 上使用 Logstash 和 Kibana 集中管理日志

金钱(警告)

状态: 被剥夺

本文涵盖了不再受支持的 CentOS 版本. 如果您目前正在运行运行 CentOS 6 的服务器,我们强烈建议升级或迁移到受支持的 CentOS 版本。

** 原因**: CentOS 6于2020年11月30日到期(EOL)并且不再收到安全补丁或更新。

** 参见相反**: 此指南可能仍然有用作为参考,但可能不适用于其他 CentOS 版本. 如果可用,我们强烈建议使用为您正在使用的 CentOS 版本撰写的指南。

下面的DigitalOcean教程系列可能立即感兴趣,因为它描述了如何在CentOS 7服务器上集中使用Logstash和Kibana的日志记录:

美元

介绍

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

当尝试识别与您的服务器或应用程序的问题时,集中日志可以非常有用,因为它允许您在一个地方搜索所有日志,它也是有用的,因为它允许您通过在特定时间框架内对应其日志来识别跨多个服务器的问题。

可以使用 Logstash 收集各种类型的日志,但我们将本教程的范围限制在 syslog 收集上。

我们的目标

该教程的目的是设置Logstash来收集多个服务器的syslogs,并设置Kibana来可视化收集的日志。

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

  • Logstash:处理入口日志的Logstash服务器组件
  • Elasticsearch:存储所有日志
  • Kibana:搜索和可视化日志的Web接口
  • Logstash Forwarder:安装在将其日志发送到Logstash的服务器上,Logstash Forwarder作为一个日志转发代理,使用 _lumberjack_网络协议与Logstash 通信

我们将在一个服务器上安装前三个组件,我们将称之为我们的 Logstash Server. Logstash Forwarder将安装在我们想要收集日志的所有服务器上,我们将共同称之为我们的 服务器

前提条件

要完成本教程,您将需要 root 访问 CentOS 6.5 VPS. 设置此设置的说明可以在这里找到(步骤 3 和 4): CentOS 6 初始服务器设置

您的 Logstash 服务器所需的 CPU、RAM 和存储量取决于您打算收集的日志量。

  • 操作系统: CentOS 6.5
  • RAM: 2GB
  • CPU: 2

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

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

安装Java 7

Elasticsearch 和 Logstash 需要 Java 7,所以我们现在将安装它。

使用此命令安装最新稳定版本的 OpenJDK 7:

1sudo yum -y install java-1.7.0-openjdk

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

安装 Elasticsearch

注:Logstash 1.4.2 推荐 Elasticsearch 1.1.1。

运行以下命令将 Elasticsearch 公共 GPG 键导入 rpm:

1sudo rpm --import http://packages.elasticsearch.org/GPG-KEY-elasticsearch

创建和编辑用于 Elasticsearch 的新的 yum 存储文件:

1sudo vi /etc/yum.repos.d/elasticsearch.repo

添加以下存储配置:

1[elasticsearch-1.1]
2name=Elasticsearch repository for 1.1.x packages
3baseurl=http://packages.elasticsearch.org/elasticsearch/1.1/centos
4gpgcheck=1
5gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
6enabled=1

保存和退出。

使用此命令安装 Elasticsearch 1.1.1:

1sudo yum -y install elasticsearch-1.1.1

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

1sudo vi /etc/elasticsearch/elasticsearch.yml

将下列行添加到文件中的某个地方,以禁用动态脚本:

1script.disable_dynamic: true

您还希望限制对您的 Elasticsearch 实例的外部访问,以便外部人员无法通过 HTTP API 读取您的数据或关闭您的 Elasticseach 集群。

1network.host: localhost

然后通过查找discovery.zen.ping.multicast.enabled项目并无评论以使其看起来如下:

1discovery.zen.ping.multicast.enabled: false

保存并退出elasticsearch.yml

现在开始 Elasticsearch:

1sudo service elasticsearch restart

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

1sudo /sbin/chkconfig --add elasticsearch

现在Elasticsearch正在运行,让我们安装Kibana。

安装Kibana

注:Logstash 1.4.2 建议 Kibana 3.0.1。

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

1cd ~; curl -O https://download.elasticsearch.org/kibana/kibana/kibana-3.0.1.tar.gz

用 tar 提取 Kibana 档案:

1tar xvf kibana-3.0.1.tar.gz

打开 Kibana 配置文件以编辑:

1vi ~/kibana-3.0.1/config.js

在Kibana配置文件中,找到指定elasticsearch服务器URL的行,并将端口号(默认情况下9200)替换为80:

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

这是必要的,因为我们计划在端口80上访问Kibana(即 http://logstash_server_public_ip/)。

我們將使用 Nginx 來服務我們的 Kibana 安裝,所以讓我們將檔案移動到適當的位置。

1sudo mkdir -p /usr/share/nginx/kibana3

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

1sudo cp -R ~/kibana-3.0.1/* /usr/share/nginx/kibana3/

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

安装 Nginx

添加包含 Nginx 的 Yum 存储库:

1sudo rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm

使用 Yum 来安装 Nginx:

1sudo yum -y install nginx

由于Kibana将用户与Elasticsearch接口的方式(用户需要能够直接访问Elasticsearch),我们需要配置Nginx来代理端口80请求到端口9200(默认情况下Elasticsearch倾听的端口)。

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

1cd ~; curl -OL https://gist.githubusercontent.com/thisismitch/2205786838a6a5d61f55/raw/f91e06198a7c455925f6e3099e3ea7c186d0b263/nginx.conf

打开样本配置文件进行编辑:

1vi nginx.conf

查找并更改server_name值到您的 FQDN(或公共IP地址,如果您不使用域名)和root到我们安装了Kibana的地方,以便它们看起来像下列条目:

1server_name FQDN;
2  root  /usr/share/nginx/kibana3;

现在用以下命令将其复制到您的 Nginx 默认服务器块上:

1sudo cp ~/nginx.conf /etc/nginx/conf.d/default.conf

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

1sudo yum install httpd-tools-2.2.15

然后生成一个登录,在Kibana中将用于保存和共享仪表板(取代自己的用户名):

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

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

现在重新启动 Nginx 以实施我们的更改:

1sudo service nginx restart

此外,配置 Nginx 开始启动:

1sudo chkconfig --levels 235 nginx on

Kibana现在可以通过您的 FQDN 或您的 Logstash 服务器的公共 IP 地址访问,即 http://logstash_server_public_ip/. 如果您在 Web 浏览器中到达那里,您应该看到一个 Kibana 欢迎页面,这将允许您查看仪表板,但没有日志可查看,因为 Logstash 尚未设置。

安装Logstash

Logstash 包共享与 Elasticsearch 相同的 GPG 密钥,我们已经安装了该公共密钥,所以让我们为 Logstash 创建和编辑一个新的 Yum 存储文件:

1sudo vi /etc/yum.repos.d/logstash.repo

添加以下存储配置:

1[logstash-1.4]
2name=logstash repository for 1.4.x packages
3baseurl=http://packages.elasticsearch.org/logstash/1.4/centos
4gpgcheck=1
5gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
6enabled=1

保存和退出。

使用此命令安装 Logstash 1.4.2:

1sudo yum -y install logstash-1.4.2

Logstash 已安装,但尚未配置。

创建SSL证书

由于我们将使用 Logstash Forwarder 将日志从我们的服务器发送到我们的 Logstash 服务器,我们需要创建一个 SSL 证书和密钥对。

现在你有两个选择来生成你的SSL证书. 如果你有一个DNS设置,将允许你的客户端服务器解决Logstash服务器的IP地址,使用 选项2

选项1:IP地址

如果您没有 DNS 设置,这将允许您收集日志的服务器解决您的 Logstash 服务器的 IP 地址,您将需要将 Logstash 服务器的私人 IP 地址添加到我们即将生成的 SSL 证书的subjectAltName (SAN) 字段。

1sudo vi /etc/pki/tls/openssl.cnf

查找文件中的[ v3_ca ]部分,并在其下方添加此行(代替Logstash服务器的私人IP地址):

1subjectAltName = IP: logstash_server_private_ip

保存和退出。

现在,用以下命令在适当的位置(/etc/pki/tls/)生成SSL证书和私钥:

1cd /etc/pki/tls
2sudo 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 的所有服务器,但我们将稍后完成。

选项2:FQDN(DNS)

如果您有 DNS 设置与您的私人网络,您应该创建一个 A 记录,其中包含 Logstash 服务器的私人 IP 地址 - 这个域名将在下一个命令中使用,以生成 SSL 证书。

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

1cd /etc/pki/tls
2sudo 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 配置文件是 JSON 格式,位于 /etc/logstash/conf.d. 配置由三个部分组成:输入、过滤器和输出。

让我们创建一个名为01-lumberjack-input.conf的配置文件,并设置我们的lumberjack输入(Logstash Forwarder使用的协议):

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

插入以下 input 配置:

1input {
2  lumberjack {
3    port => 5000
4    type => "logs"
5    ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
6    ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
7  }
8}

这指定了一个lumberjack输入,它会听到tcp端口5000,它将使用我们之前创建的SSL证书和私钥。

现在,让我们创建一个名为10-syslog.conf的配置文件,在那里我们将添加 syslog 消息的过滤器:

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

插入下列 syslog filter 配置:

 1filter {
 2  if [type] == "syslog" {
 3    grok {
 4      match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
 5      add_field => [ "received_at", "%{@timestamp}" ]
 6      add_field => [ "received_from", "%{host}" ]
 7    }
 8    syslog_pri { }
 9    date {
10      match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
11    }
12  }
13}

此过滤器寻找被标记为syslog类型的日志(由 Logstash Forwarder),并将尝试使用grok来分析入口的syslog日志,使其结构化和可查询。

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

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

输入以下 output 配置:

1output {
2  elasticsearch { host => localhost }
3  stdout { codec => rubydebug }
4}

保存和退出. 此输出基本上会配置 Logstash 以便在 Elasticsearch 中存储日志。

通过此配置,Logstash还会接受不匹配过滤器的日志,但数据不会被结构化(例如,未过滤的Nginx或Apache日志将以平面消息显示,而不是按HTTP响应代码分类消息,源IP地址,服务文件等)。

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

重新启动 Logstash 以实施我们的配置更改:

1sudo service logstash restart

现在我们的 Logstash 服务器已经准备好了,让我们继续设置 Logstash Forwarder。

创建 Logstash 预订器

** 注意**: 对于您要向 Logstash 服务器发送日志的每个服务器,请执行这些步骤. 有关在 Debian 基于的 Linux 发行版上安装 Logstash Forwarder 的说明(例如 Ubuntu、Debian 等),请参阅本教程的 Ubuntu 变体中的 设置 Logstash Forwarder 部分

复制 SSL 证书和 Logstash 托管包

Logstash Server上,将SSL证书复制到 Server(用自己的登录代替):

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

安装 Logstash Forwarder 包

Server上,下载Logstash Forwarder RPM到您的主目录:

1cd ~; curl -O http://download.elasticsearch.org/logstash-forwarder/packages/logstash-forwarder-0.3.1-1.x86_64.rpm

然后安装 Logstash Forwarder 包:

1sudo rpm -ivh ~/logstash-forwarder-0.3.1-1.x86_64.rpm

接下来,您将需要安装 Logstash Forwarder init 脚本,以便在启动时启动。

1cd /etc/init.d/; sudo curl -o logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_init
2sudo chmod +x logstash-forwarder

init 脚本取决于一个名为 /etc/sysconfig/logstash-forwarder 的文件。

1sudo curl -o /etc/sysconfig/logstash-forwarder http://logstashbook.com/code/4/logstash_forwarder_redhat_sysconfig

打开它来编辑:

1sudo vi /etc/sysconfig/logstash-forwarder

然后修改LOGSTASH_FORWARDER_OPTIONS值,使其看起来如下:

1LOGSTASH_FORWARDER_OPTIONS="-config /etc/logstash-forwarder -spool-size 100"

保存和停止。

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

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

配置 Logstash 预装器

Server上,创建和编辑 Logstash Forwarder 配置文件,该文件是 JSON 格式:

1sudo vi /etc/logstash-forwarder

现在将下列行添加到文件中,在您的 Logstash 服务器的私人 IP 地址中取代logstash_server_private_IP:

 1{
 2  "network": {
 3    "servers": [ "logstash_server_private_IP:5000" ],
 4    "timeout": 15,
 5    "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt"
 6  },
 7  "files": [
 8    {
 9      "paths": [
10        "/var/log/messages",
11        "/var/log/secure"
12       ],
13      "fields": { "type": "syslog" }
14    }
15   ]
16}

这将配置 Logstash Forwarder 连接到您的 Logstash 服务器在端口 5000(我们之前指定的输入端口),并使用我们之前创建的 SSL 证书。 paths 部分指定要发送哪些日志文件(在这里我们指定 messagessecure),而 type 部分指定这些日志是syslog*类型(这是我们的过滤器正在寻找的类型)。

请注意,这就是你会添加更多的文件 / 类型来配置 Logstash Forwarder 到其他日志文件到 Logstash 在端口 5000。

现在我们将要添加Logstash Forwarder服务 chkconfig:

1sudo chkconfig --add logstash-forwarder

现在开始使用 Logstash Forwarder 来实施我们的更改:

1sudo service logstash-forwarder start

现在 Logstash Forwarder 正在将 messagesauth.log 发送到您的 Logstash 服务器! 对您想要收集日志的所有其他服务器重复此过程。

连接Kibana

当您完成在您想要收集日志的所有服务器上设置 Logstash Forwarder 时,让我们看看先前我们安装的网络接口 Kibana。

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

点击 Logstash Dashboard 进入预装仪表板. 您应该看到具有日志事件的历史图,下面的日志消息(如果您没有看到任何事件或消息,您的四个 Logstash 组件中的一个没有正确配置)。

在这里,您可以搜索并浏览您的日志,您也可以自定义您的仪表板,这是您的Kibana实例可能看起来是什么样子的示例:

Kibana 3 Example Dashboard

尝试以下几点:

  • 搜索以查看是否有人试图登录您的服务器作为根
  • 搜索特定主机名
  • 通过选择 histogram 上或从上面的菜单中选择一个区域来更改时间框 * 点击 histogram 下面的消息以查看数据是如何过滤

Kibana有许多其他功能,如图形和过滤,所以请自由游览!

结论

现在你的 syslogs 通过 Logstash 集中化,你可以使用 Kibana 可视化它们,你应该开始集中所有重要的日志,记住,你可以向 Logstash 发送几乎任何类型的日志,但如果用 grok 进行分析和结构,数据就会变得更加有用。

请注意,您的Kibana仪表板可供任何可以访问您的服务器的人访问,因此您将希望使用像htaccess这样的东西来保护它。

Published At
Categories with 技术
comments powered by Disqus