专栏首页云计算教程系列如何在CentOS 7上安装Elasticsearch 1.7,Logstash 1.5和Kibana 4.1(ELK Stack)
原创

如何在CentOS 7上安装Elasticsearch 1.7,Logstash 1.5和Kibana 4.1(ELK Stack)

注意:本教程适用于较旧版本的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设置有四个主要组件:

  • LogstashLogstash的服务器组件,用于处理传入的日志
  • Elasticsearch:存储所有日志
  • Kibana:用于搜索和可视化日志的Web界面,将通过Nginx进行代理
  • Logstash Forwarder:安装在将日志发送到Logstash的服务器上,Logstash Forwarder作为日志转发代理,利用伐木工人网络协议与Logstash通信

我们将在单个服务器上安装前三个组件,我们将其称为Logstash Server。Logstash Forwarder将安装在我们要收集日志的所有客户端服务器上,我们将统称为客户端服务器

准备

一台已经设置好可以使用sudo命令的非root账号的CentOS服务器,并且已开启防火墙。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器

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

  • 操作系统:CentOS 7
  • 内存: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 / bin / java中链接。

您可以删除先前下载的存档文件:

rm ~/jdk-8u65-linux-x64.rpm

现在已经安装了Java 8,让我们安装ElasticSearch。

安装Elasticsearch

通过添加Elastic的包存储库,可以将Elasticsearch与包管理器一起安装。

运行以下命令将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,并用“localhost”替换IP地址(默认情况下为“0.0.0.0”):

host: "localhost"

保存并退出。此设置使得Kibana只能被本地主机访问。这很好,因为我们将在同一台服务器上安装一个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.ymlKibana服务器的私有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流量定向到正在侦听localhost:5601的Kibana应用程序。此外,Nginx将使用我们之前创建的htpasswd.users文件,并需要基本身份验证。

现在启动并启用Nginx以使我们的更改生效:

sudo systemctl start nginx
sudo systemctl enable nginx

注意:本教程假定SELinux已禁用。如果不是这种情况,您可能需要运行以下命令才能使Kibana正常工作:sudo setsebool -P httpd_can_network_connect 1

现在可以通过您的FQDN或Logstash服务器的公共IP地址访问Kibana,即http:// logstash \ _server \ _public \ _ip /。如果您在Web浏览器中访问,在输入“kibanaadmin”凭据后,您应该会看到一个Kibana欢迎页面,该页面将要求您配置索引模式。在我们安装所有其他组件之后,让我们回过头来看看。

安装Logstash

Logstash包与Elasticsearch共享相同的GPG Key,我们已经安装了该公钥,所以让我们为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 Forwarder将日志从我们的服务器发送到Logstash服务器,因此我们需要创建SSL证书和密钥对。Logstash Forwarder使用该证书来验证Logstash Server的身份。

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

选项1:IP地址

如果您没有DNS设置 - 允许您的服务器,您将从中收集日志以解析Logstash服务器的IP地址 - 您必须将Logstash服务器的专用IP地址添加到subjectAltName(SAN)字段我们即将生成的SSL证书。为此,请打开OpenSSL配置文件:

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

找到[ v3_ca ]文件中的部分,并在其下添加此行(替换为Logstash Server的专用IP地址):

openssl.cnf摘录

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 Server的专用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并设置我们的“lumberjack”输入(Logstash Forwarder使用的协议):

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,我们将为syslog消息添加一个过滤器:

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

插入以下syslog 过滤器配置:

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

插入以下输出配置:

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

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

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

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

重新启动并启用Logstash以使我们的配置更改生效:

sudo systemctl restart logstash

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

设置Logstash转发器(添加客户端服务器)

对要将日志发送到Logstash Server的每个CentOS或RHEL 7服务器执行以下步骤。

复制SSL证书和Logstash转发器包

Logstash Server上,将SSL证书复制到客户端服务器(替换客户端服务器的IP地址和您自己的登录名):

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

提供登录凭据后,请确保证书副本成功。它是客户端服务器和Logstash服务器之间通信所必需的。

安装Logstash转发器包

客户端服务器上,创建运行以下命令以将Elasticsearch公共GPG密钥导入rpm:

sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch

为Logstash Forwarder创建和编辑新的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 Forwarder包:

sudo yum -y install logstash-forwarder

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

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

配置Logstash转发器

客户端服务器上,创建和编辑Logstash Forwarder配置文件,该文件采用JSON格式:

sudo vi /etc/logstash-forwarder.conf

在该network部分下,将以下行添加到文件中,在您的Logstash Server的私有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 Forwarder配置为在端口5043(我们之前为其指定输入的端口)上连接到Logstash Server,并使用我们之前创建的SSL证书。该路径部分指定哪些日志文件发送(这里我们指定messagessecure),以及类型节指定这些日志型“系统日志*(这是我们的过滤器正在寻找的类型)。

请注意,您可以在此处添加更多文件/类型,以将Logstash Forwarder配置为其他日志文件到端口5043上的Logstash。

现在启动并启用Logstash Forwarder将我们的更改放到位:

sudo systemctl start logstash-forwarder
sudo chkconfig logstash-forwarder on

现在Logstash Forwarder正在将您的系统日志messagessecure文件发送到您的Logstash服务器!对要为其收集日志的所有其他服务器重复此部分。

连接Kibana

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

在Web浏览器中,转到Logstash Server的FQDN或公共IP地址。输入“kibanaadmin”凭据后,您应该会看到一个提示您配置索引模式的页面:

继续从下拉菜单中选择@timestamp,然后单击“ 创建”按钮以创建第一个索引。

现在单击顶部导航栏中的Discover链接。默认情况下,这将显示过去15分钟内的所有日志数据。您应该看到带有日志事件的直方图,其中包含以下日志消息:

现在,因为您只从客户端服务器收集系统日志,因此不会有太多内容。在这里,您可以搜索和浏览日志。您还可以自定义仪表板。

请尝试以下方法:

  • 搜索“root”以查看是否有人尝试以root身份登录您的服务器
  • 搜索特定主机名(搜索host: "hostname"
  • 通过选择直方图上的区域或上面的菜单来更改时间范围
  • 单击直方图下方的消息以查看数据的过滤方式

Kibana还有许多其他功能,例如图形和过滤功能,所以请随意逛逛!

结论

既然您的系统日志是通过Elasticsearch和Logstash集中进行的,并且您可以使用Kibana将它们可视化,那么您应该集中精力处理所有重要日志。请记住,您可以向Logstash发送几乎任何类型的日志,但如果使用grok解析和构建数据,则数据会变得更加有用。

要改进新的ELK堆栈,您应该研究使用Logstash收集和过滤其他日志,以及创建Kibana仪表板。

更多CentOS教程请前往腾讯云+社区学习更多知识。

参考文献:《How To Install Elasticsearch 1.7, Logstash 1.5, and Kibana 4.1 (ELK Stack) on CentOS 7》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何在Ubuntu 16.04上安装和保护phpMyAdmin

    虽然许多用户需要像MySQL这样的数据库管理系统的功能,但他们可能不会仅仅通过MySQL提示与系统进行交互。

    苏子晨
  • 给你的数据库加一道缓存:Redis入门教程

    Redis是一个使用ANSI C编写的开源、支持网络、基于内存、可选持久性的键值对存储数据库。 本教程将会教你如何在Ubuntu 18.04 上安装、配置Red...

    苏子晨
  • 如何在Debian 9上安装MariaDB

    MariaDB是一个开源数据库管理系统,通常作为流行的LAMP(Linux,Apache,MySQL,PHP / Python / Perl)堆栈的一部分代替M...

    苏子晨
  • 如何在Ubuntu 14.04上安装Elasticsearch 1.7,Logstash 1.5和Kibana 4.1(ELK Stack)

    在本教程中,我们将在Ubuntu 14.04上重新安装Elasticsearch ELK Stack,即Elasticsearch 1.7.3,Logstash...

    水门
  • 一文快速上手Logstash

    Elasticsearch是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的全文本检索能力,广泛应用于日志检索,全站搜索等领域。Logstash作为E...

    michelmu
  • ELK总结——第二篇Logstash的搭建

    Elasticsearch是当前主流的分布式大数据存储和搜索引擎,可以为用户提供强大的全文本检索能力,广泛应用于日志检索,全站搜索等领域。Logstash作为E...

    胡齐
  • engineercms文档流程完善

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

    hotqin888
  • 单元测试框架系列教程9-测试方法、类以及组的概念

    本篇来介绍Test Methods, Test classes ,Test groups的基本概念。了解这三个基本概念,有助于我们学习其他的功能。前面介绍了@T...

    凯哥Java
  • 大数据技术之_03_Hadoop学习_01_入门_大数据概论+从Hadoop框架讨论大数据生态+Hadoop运行环境搭建(开发重点)

    HDFS(Hadoop Distributed File System)的架构概述,如图2-4所示。

    黑泽君
  • 开源 | Salesforce开源TransmogrifAI:用于结构化数据的端到端AutoML库

    在过去的十年中,尽管机器学习取得了巨大的进步,但是建立生产就绪的机器学习系统仍然十分困难。三年前,当我们开始将机器学习功能构建到 Salesforce 平台上时...

    机器之心

扫码关注云+社区

领取腾讯云代金券