<$>[注]
注: 本教程适用于旧版本的ELK堆栈,不兼容最新版本。本教程的最新版本可在如何在Ubuntu 14.04上安装Elasticsearch、Logstash和Kibana(ELK Stack)
上找到。
介绍
在本教程中,我们将讨论在Ubuntu 14.04上安装Elasticsearch ELK Stack,即Elasticsearch 1.7.3,Logstash 1.5.4和Kibana 4.1.1的安装方法,我们还将向您展示如何将其配置为集中地收集和可视化您的系统的syslogs。Logstash是一个用于收集、解析和存储日志的开源工具,用于未来使用。Kibana是一个可以用于搜索和查看Logstash索引的日志的Web界面。
当尝试识别与您的服务器或应用程序的问题时,集中日志可以非常有用,因为它允许您在一个地方搜索所有日志,它也是有用的,因为它允许您通过在特定时间框架内对应其日志来识别跨多个服务器的问题。
可以使用 Logstash 收集各种类型的日志,但我们将本教程的范围限制在 syslog 收集上。
我们的目标
该教程的目的是设置Logstash来收集多个服务器的syslogs,并设置Kibana来可视化收集的日志。
我们的 Logstash / Kibana 设置有四个主要组件:
- Logstash :Logstash处理入口日志的服务器组件
- Elasticsearch :存储所有日志
- Kibana :用于搜索和可视化日志的Web接口,将通过Nginx
- Logstash Forwarder 进行代理:安装在将其日志发送到Logstash的服务器上,Logstash Forwarder作为一个日志转发代理,使用 _lumberjack_网络协议与Logstash 通信
我们将在一个服务器上安装前三个组件,我们将称之为我们的 Logstash Server . Logstash Forwarder将安装在我们想要收集日志的所有客户端服务器上,我们将共同称之为我们的 ** 客户端服务器** 。
前提条件
要完成本教程,您将需要 root 访问 Ubuntu 14.04 VPS. 设置此设置的说明可以在这里找到(步骤 3 和 4): [Ubuntu 14.04 初始服务器设置(https://andsky.com/tech/tutorials/initial-server-setup-with-ubuntu-14-04)。
如果您更喜欢使用CentOS,请参阅本教程: 如何在CentOS 7上安装ELK。
您的 Logstash 服务器所需的 CPU、RAM 和存储量取决于您打算收集的日志量。
- 操作系统:Ubuntu 14.04
- RAM: 4GB
- CPU: 2
除了您的 Logstash 服务器,您还需要一些其他服务器,您将从中收集日志。
让我们开始设置我们的Logstash服务器!
安装Java 8
Elasticsearch 和 Logstash 需要 Java,所以我们现在会安装它,我们会安装 Oracle Java 8 的最新版本,因为这就是 Elasticsearch 推荐的。
将 Oracle Java PPA 添加到 apt:
1sudo add-apt-repository -y ppa:webupd8team/java
更新您的 apt 数据库:
1sudo apt-get update
使用此命令安装 Oracle Java 8 的最新稳定版本(并接受出现的许可协议):
1sudo apt-get -y install oracle-java8-installer
现在 Java 8 已安装,让我们安装 ElasticSearch。
安装 Elasticsearch
Elasticsearch 可以通过添加 Elastic 的包源列表来与包管理器一起安装。
运行以下命令将 Elasticsearch 公共 GPG 密钥导入 apt:
1wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
如果你的提示只是挂在那里,它可能正在等待你的用户密码(授权sudo
命令)。
创建 Elasticsearch 源列表:
1echo "deb http://packages.elastic.co/elasticsearch/1.7/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-1.7.list
更新您的 apt 数据库:
1sudo apt-get update
使用此命令安装 Elasticsearch:
1sudo apt-get -y install elasticsearch
Elasticsearch 已安装,让我们编辑配置:
1sudo vi /etc/elasticsearch/elasticsearch.yml
您将想要限制对您的 Elasticsearch 实例的外部访问(端口 9200),以便外部人员无法通过 HTTP API 读取您的数据或关闭您的 Elasticsearch 集群。
1[label elasticsearch.yml excerpt (updated)]
2network.host: localhost
保存并退出elasticsearch.yml
。
现在开始 Elasticsearch:
1sudo service elasticsearch restart
然后运行以下命令启动 Elasticsearch 启动:
1sudo update-rc.d elasticsearch defaults 95 10
现在Elasticsearch正在运行,让我们安装Kibana。
安装Kibana
Kibana 可以通过添加 Elastic 的包源列表来与包管理器一起安装。
创建Kibana源列表:
1echo 'deb http://packages.elastic.co/kibana/4.1/debian stable main' | sudo tee /etc/apt/sources.list.d/kibana.list
更新您的 apt 数据库:
1sudo apt-get update
使用此命令安装 Kibana:
1sudo apt-get -y install kibana
现在Kibana已经安装了。
打开 Kibana 配置文件以编辑:
1sudo vi /opt/kibana/config/kibana.yml
在Kibana配置文件中,找到指定主机
的行,并以本地主机
取代IP地址(默认情况下0.0.0.0
):
1[label kibana.yml excerpt (updated)]
2host: "localhost"
保存和退出. 此设置使Kibana只能被 localhost 访问. 这很好,因为我们将在同一服务器上安装一个 Nginx 反向代理,以允许外部访问。
现在启用Kibana服务,并启动它:
1sudo update-rc.d kibana defaults 96 9
2sudo service kibana start
在我们可以使用Kibana Web 界面之前,我们必须设置一个反向代理程序。
安装 Nginx
由于我们将Kibana配置为聆听本地主机
,我们必须设置一个反向代理,以允许外部访问它。
** 注意:** 如果您已经拥有您想要使用的 Nginx 实例,请轻松使用它,只需确保配置 Kibana 以便您的 Nginx 服务器可以访问它(您可能希望在 /opt/kibana/config/kibana.yml
中将 host
值更改为您 Kibana 服务器的私人 IP 地址或主机名)。
使用 apt 来安装 Nginx 和 Apache2 工具:
1sudo apt-get install nginx apache2-utils
使用 htpasswd 创建一个名为kibanaadmin
的管理员用户(您应该使用另一个名称),可以访问 Kibana Web 界面:
1sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin
请记住此登录,因为您将需要它来访问Kibana Web接口。
现在在你最喜欢的编辑器中打开 Nginx 默认服务器块,我们将使用 vi:
1sudo vi /etc/nginx/sites-available/default
删除文件的内容,并将下列代码块粘贴到文件中. 请确保更新server_name
以匹配您的服务器名称:
1[label /etc/nginx/sites-available/default]
2server {
3 listen 80;
4
5 server_name example.com;
6
7 auth_basic "Restricted Access";
8 auth_basic_user_file /etc/nginx/htpasswd.users;
9
10 location / {
11 proxy_pass http://localhost:5601;
12 proxy_http_version 1.1;
13 proxy_set_header Upgrade $http_upgrade;
14 proxy_set_header Connection 'upgrade';
15 proxy_set_header Host $host;
16 proxy_cache_bypass $http_upgrade;
17 }
18}
这将 Nginx 配置为将您的服务器的 HTTP 流量导向到 Kibana 应用程序,该应用程序正在收听localhost:5601
。
现在重新启动 Nginx 以实施我们的更改:
1sudo service nginx restart
Kibana现在可以通过您的 FQDN 或您的 Logstash 服务器的公共 IP 地址访问,即 http://logstash_server_public_ip/. 如果您在网页浏览器中到达那里,在输入kibanaadmin
凭证后,您应该看到一个 Kibana 欢迎页面,该页面将要求您配置索引模式。
安装Logstash
Logstash 包可从与 Elasticsearch 相同的存储库使用,我们已经安装了该公共密钥,所以让我们创建 Logstash 源列表:
1echo 'deb http://packages.elasticsearch.org/logstash/1.5/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash.list
更新您的 apt 数据库:
1sudo apt-get update
使用此命令安装 Logstash:
1sudo apt-get install logstash
Logstash 已安装,但尚未配置。
创建SSL证书
由于我们将使用 Logstash Forwarder 将日志从我们的服务器发送到我们的 Logstash 服务器,我们需要创建一个 SSL 证书和密钥对。
1sudo mkdir -p /etc/pki/tls/certs
2sudo mkdir /etc/pki/tls/private
现在你有两个选择来生成你的SSL证书. 如果你有一个DNS设置,将允许你的客户端服务器解决Logstash服务器的IP地址,使用 选项2 。
选项1:IP地址
如果您没有 DNS 设置,这将允许您收集日志的服务器解决您的 Logstash 服务器的 IP 地址,您将需要将 Logstash 服务器的私人 IP 地址添加到我们即将生成的 SSL 证书的subjectAltName
(SAN) 字段。
1sudo vi /etc/ssl/openssl.cnf
查找文件中的[ v3_ca ]
部分,并在其下方添加此行(代替Logstash服务器的私人IP地址):
1[label openssl.cnf excerpt (updated)]
2subjectAltName = IP: logstash_server_private_ip
保存和退出。
现在,用以下命令在适当的位置(/etc/pki/tls/)生成SSL证书和私钥:
1cd /etc/pki/tls
2sudo openssl req -config /etc/ssl/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; 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 配置文件是 JSON 格式,位于 /etc/logstash/conf.d. 配置由三个部分组成:输入、过滤器和输出。
让我们创建一个名为01-lumberjack-input.conf
的配置文件,并设置我们的lumberjack
输入(Logstash Forwarder使用的协议):
1sudo vi /etc/logstash/conf.d/01-lumberjack-input.conf
插入以下 input 配置:
1[label 01-lumberjack-input.conf]
2input {
3 lumberjack {
4 port => 5043
5 type => "logs"
6 ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
7 ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
8 }
9}
这指定了一个lumberjack
输入,它会听到tcp端口5043
,它将使用我们之前创建的SSL证书和私钥。
现在,让我们创建一个名为10-syslog.conf
的配置文件,在那里我们将添加 syslog 消息的过滤器:
1sudo vi /etc/logstash/conf.d/10-syslog.conf
插入下列 syslog filter 配置:
1[label 10-syslog.conf]
2filter {
3 if [type] == "syslog" {
4 grok {
5 match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" }
6 add_field => [ "received_at", "%{@timestamp}" ]
7 add_field => [ "received_from", "%{host}" ]
8 }
9 syslog_pri { }
10 date {
11 match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ]
12 }
13 }
14}
此过滤器寻找被标记为syslog
类型的日志(由 Logstash Forwarder),并将尝试使用grok
来分析入口的syslog日志,使其结构化和可查询。
最后,我们将创建一个名为30-lumberjack-output.conf
的配置文件:
1sudo vi /etc/logstash/conf.d/30-lumberjack-output.conf
输入以下 output 配置:
1[label 30-syslog.conf]
2output {
3 elasticsearch { host => localhost }
4 stdout { codec => rubydebug }
5}
保存和退出. 此输出基本上会配置 Logstash 以便在 Elasticsearch 中存储日志。
通过此配置,Logstash还会接受不匹配过滤器的日志,但数据不会被结构化(例如,未过滤的Nginx或Apache日志将以平面消息显示,而不是按HTTP响应代码分类消息,源IP地址,服务文件等)。
如果您想为使用 Logstash Forwarder 输入的其他应用程序添加过滤器,请确保将文件命名,以便它们在输入和输出配置之间进行排序(即在 01- 和 30- 之间)。
重新启动 Logstash 以实施我们的配置更改:
1sudo service logstash restart
现在我们的 Logstash 服务器已经准备好了,让我们继续设置 Logstash Forwarder。
设置 Logstash Forwarder(添加客户端服务器)
对于您要向 Logstash 服务器发送日志的每个 Ubuntu 或 Debian 服务器,请执行这些步骤. 有关在 Red Hat 基于的 Linux 发行版上安装 Logstash Forwarder 的说明(例如 RHEL、CentOS 等),请参阅本教程的 CentOS 变体的 [构建和包装 Logstash Forwarder 部分](https://andsky.com/tech/tutorials/how-to-install-elasticsearch-logstash-and-kibana-4-on-centos-7#set-up-logstash-forwarder-(add-client-servers)。
复制 SSL 证书和 Logstash 托管包
在 Logstash Server 上,将SSL证书复制到 ** Client Server** (取代客户端服务器的地址和自己的登录):
1scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp
在提供您的登录凭证后,请确保证书副本成功,这是客户端服务器和Logstash服务器之间的通信所需的。
安装 Logstash Forwarder 包
在 客户端服务器 中,创建 Logstash Forwarder 源列表:
1echo 'deb http://packages.elastic.co/logstashforwarder/debian stable main' | sudo tee /etc/apt/sources.list.d/logstashforwarder.list
它还使用与 Elasticsearch 相同的 GPG 密钥,可以用以下命令安装:
1wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
然后安装 Logstash Forwarder 包:
1sudo apt-get update
2sudo apt-get install logstash-forwarder
** 注意:** 如果您正在使用 32 位版本的 Ubuntu,并且正在收到无法找到包的 logstash-forwarder
错误,则需要手动安装 Logstash Forwarder。
现在将Logstash服务器的SSL证书复制到适当的位置(/etc/pki/tls/certs):
1sudo mkdir -p /etc/pki/tls/certs
2sudo cp /tmp/logstash-forwarder.crt /etc/pki/tls/certs/
配置 Logstash 预装器
在 客户端服务器 上,创建和编辑 Logstash Forwarder 配置文件,该文件是 JSON 格式:
1sudo vi /etc/logstash-forwarder.conf
在网络
部分中,将下列行添加到文件中,在您的 Logstash 服务器的私人地址中取代logstash_server_private_address
:
1[label logstash-forwarder.conf excerpt 1 of 2]
2 "servers": [ "logstash_server_private_address:5043" ],
3 "ssl ca": "/etc/pki/tls/certs/logstash-forwarder.crt",
4 "timeout": 15
在文件
部分(在方块之间),添加以下行,
1[label logstash-forwarder.conf excerpt 2 of 2]
2 {
3 "paths": [
4 "/var/log/syslog",
5 "/var/log/auth.log"
6 ],
7 "fields": { "type": "syslog" }
8 }
这将配置 Logstash Forwarder 连接到您的 Logstash 服务器在端口 5043 (我们先前指定输入的端口),并使用我们之前创建的 SSL 证书。
请注意,这就是您在端口 5043 上添加更多的文件/类型来配置 Logstash Forwarder 到其他日志文件的 Logstash。
现在重新启动 Logstash Forwarder 以将我们的更改实施:
1sudo service logstash-forwarder restart
现在 Logstash Forwarder 正在将 syslog 和 auth.log 发送到您的 Logstash 服务器! 重复此部分对您想要收集日志的所有其他服务器。
连接Kibana
当您完成在您想要收集日志的所有服务器上设置 Logstash Forwarder 时,让我们看看先前我们安装的网络接口 Kibana。
在 Web 浏览器中,转到您的 Logstash 服务器的 FQDN 或公共 IP 地址. 输入kibanaadmin
凭据后,您应该看到一个提示您配置索引模式的页面:
继续从下载菜单中选择 @timestamp ,然后点击 ** Create** 按钮创建第一个索引。
现在点击顶部导航栏中的 Discover 链接. 默认情况下,这将向您显示过去 15 分钟的所有日志数据。
现在,那里不会有很多,因为你只是从客户端服务器中收集 syslogs. 在这里,你可以搜索和浏览你的日志. 你也可以自定义你的仪表板。
尝试以下几点:
- 搜索
根
以查看是否有人试图登录您的服务器为 root - 搜索特定主机名(搜索
主机:
主机名`) - 通过选择 histogram 上的区域或从上面的菜单中更改时间框
- 点击 histogram 下面的消息以查看数据是如何过滤的
Kibana有许多其他功能,如图形和过滤,所以请自由游览!
结论
现在你的 syslogs 通过 Elasticsearch 和 Logstash 集中,你可以使用 Kibana 可视化它们,你应该开始集中所有重要的日志,记住,你可以将几乎任何类型的日志发送到 Logstash,但如果用 grok 进行分析和结构,数据就会变得更加有用。
要改进您的新 ELK 堆栈,您应该考虑使用 Logstash 收集和过滤您的其他日志,并创建 Kibana 仪表板. 这些主题在本系列的第二和第三个教程中涵盖。