怎么在 Ubuntu14.04上安装 Elasticsearch, Logstash, Kibana (ELK Stack)

前言

在这个教程中,将会全面介绍怎么在 Ubuntu 14.04上安装 Elasticsearch ELK Stack,也就是 Elasticsearch 2.2.x, Logstash 2.2.x, 以及 Kibana 4.4.x。当然,这里也会涉及在一个集中点中怎么配置 Filebeat1.1x 来收集和可视化的系统日志的教程。Logstash 是收集、分析和存储日志以供日后使用的开源工具。Kibana 是一个 Web 界面,可用于搜索和查看 Logstash 已索引的日志。这两个工具都基于用于存储日志的 Elasticsearch。

在你试图找出服务器或应用程序问题时,集中化日志是非常有用的,因为它可以让你在一个地方搜索所有的日志。在确定跨多个服务器的问题这一点也非常有用,因为它在一个特定的时间范围内收集多个服务器的日志。

用 Logstash 可以收集很多类型的日志,但是在这个教程中我们限定范围为 syslog。

我们的目的

这篇教程的目的是安装 Logstash 来收集多个 server 的 syslog,然后安装 Kibana 来可视化收集到的日志。

ELK stack 的安装有4个主要的组件:

  • Logstash:在 server 端,处理传入的日志。
  • Elasticsearch:存储所有的日志。
  • Kibana:Web 界面,用来搜索和可视化日志;使用 Nginx 代理实现。
  • Filebeat:安装在 client 端(也就是你需要收集日志的目标服务器),将日志发送给 Logstash。Filebeat 端作为一个日志传送代理,使用的是 lumberjack 网络协议与 Logstash 通信。

我们先安装前三个组件,它们需要安装在同一个 server 上,这个 server 就是我们的 ELK Server。Filebeat 会安装在所有我们想要收集 log 的客户端,统称为 Client Servers。

安装前

要完成这个教程,需要 Ubuntu 14.04 VPS 的 root 权限。配置的教程可以在这里找到: Initial Server Setup with Ubuntu 14.04(steps 3 and 4)。

如果你想用 CentOS,看这个教程:How To Install ELK on CentOS 7.

ELK Server 的 CPU、RAM 和存储量的需求取决于你将要收集的 log 的数量。在这个教程中,我们将使用以下规格的一个 VPS 作为我们 ELK Server:

  • OS:Ubuntu 14.04
  • RAM:4GB
  • CPU:2

除了 ELK Server,你需要有其他的 Servers 作为日志来源。

废话不啰嗦了,开始配置吧!

安装 JAVA 8

Elasticsearch 和 Logstash 需要 Java,所以我们需要安装。Elasticsearch 需要安装最新的 Oracle Java 8。当然,如果你要用 OpenJDK 的话,应该也不错。

添加 Oracle JavaPPA 到 apt:
sudo add-apt-repository -y ppa:webupd8team/java
更新apt包数据库:
sudo apt-get update
安装稳定版 Oracle Java8(接受弹出的协议内容):

sudo apt-get -y install oracle-java8-installer

Java 8 安装好了,接下来安装 Elasticsearch

安装 Elasticsearch

Elasticsearch 可以用包管理器通过添加 Elastic 的包源列表进行安装。

用下面的命令来导入 Elasticsearch 公共 GPG 密钥到 apt:

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
如果你的终端提示停在这里不动了,可能是在等你输入用户密码(为了授权 sudo 命令)。遇到了的话,输入你的密码就好。

创建 Elasticsearch 资源列表:

echo "deb http://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list

更新 apt 包数据库:

sudo apt-get update

安装 Elasticsearch:

sudo apt-get -y install elasticsearch

安装好了,接下来编辑配置文档:

sudo vi /etc/elasticsearch/elasticsearch.yml

要限制你的 Elasticsearch 接口(端口9200)外的访问,这样外人无法通过 HTTP API 读取数据或关闭您的 Elasticsearch 集群。找到 network.host,取消注释,用 localhost 替换它的值:

network.host: localhost

 保存并退出 elasticsearch.yml。

现在,打开 Elasticsearch:

sudo service elasticsearch restart

然后运行以下命令将在系统启动时启动 Elasticsearch:

sudo update-rc.d elasticsearch defaults 95 10

现在 Elaticsearch 设置好也启动了,现在来安装 Kibana。

安装 Kibana

Kibana 可以用包管理器通过添加 Elastic 的包源列表进行安装。

创建 Kibana 资源列表:

echo "deb http://packages.elastic.co/kibana/4.4/debian stable main" | sudo tee -a /etc/apt/sources.list.d/kibana-4.4.x.list

更新 apt 包数据库:

sudo apt-get update

安装 Kibana:

sudo apt-get -y install kibana

这样就安装好了。

打开 Kibana 配置文件编辑:

sudo vi /opt/kibana/config/kibana.yml

在文件中找到 server.host,用 localhost 替换0.0.0.0:

server.host: "localhost"

保存,退出。这个操作让 Kibana 只能被 localhost访问。不要担心,我们会用 Nginx反向代理来允许外部访问。

现在启用 Kibana 服务:

sudo update-rc.d kibana defaults 96 9
sudo service kibana start

在使用 Kibana Web 界面的之前,我们必须安装反向代理。接下来就来安装 Ngnix 吧!

安装 Ngnix

因为我们配置了 Kibana 监听 localhost,我们必须安装反向代理来允许外部访问。这里就使用 Ngnix 来达成这个目的。

注意:如果你已经有要用的 Ngnix 实例,那就直接使用。只要记得去配置 Kibana,让 Ngnix server 可以访问(你可能需要在 /opt/kibana/config/kibana.yml 改变 host 的值为你的 Kibana server 的 private IP 或者 hostname)。此外,建议您启用 SSL / TLS。

用 apt 安装 Ngnix 和 Apache2-utils:

sudo apt-get install nginx apache2-utils

htpasswd创建一个 admin 用户,叫 Kibanaadmin(根据自己喜好命名),用来访问 Kibana Web 界面:

sudo htpasswd -c /etc/nginx/htpasswd.users kibanaadmin

在命令提示终端输入密码。记住用户名和密码,稍候你需要用它来访问Kibana Web界面。

现在用你喜欢的编辑器打开 Nginx 的默认服务器模块。我们将用 vi:

sudo vi /etc/nginx/sites-available/default

删除文件中的内容,复制下面的代码块到文件中。请确保 server_name 和你的 server_name 匹配:
/etc/nginx/sites-available/default
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 的配置通过监听 localhost:5601,让你的服务器的 HTTP 流量直接到 Kibana 应用程序。此外,Nginx 的将使用我们前面创建的 htpasswd.users 文件,也会要求基本身份验证。

现在重启 Nginx 让之前的改变生效:

sudo service nginx restart

Kibana 现在是可访问的,通过 FQDN 也就是你的 ELKServer 公共 IP 地址。http://elk_server_public_ip/ 如果你在浏览器中访问这个地址,然后输入 “kibanaadmin” 验证。这样,你就可以看到 Kibana 的欢迎界面,在这里它会要求你配置 index 类型。不要管那么多拉,我们待会再来研究,先回去安装其他组件。

安装 Logstash

Logstash 软件包和 Elasticsearch 的在同一个版本库,之前我们已经添加了这个公共密钥。所以,直接创建 Lostash 的资源列表:

echo 'deb http://packages.elastic.co/logstash/2.2/debian stable main' | sudo tee /etc/apt/sources.list.d/logstash-2.2.x.list

更新 apt 包数据库:

sudo apt-get update

安装 Logstash:

sudo apt-get install logstash

安装好了!但是还没有配置。

生成 SSL 证书

因为我们是使用 Filebeat 从 Client Server 传输日志到服务器 ELK Server,所以需要创建一个 SSL 证书和密钥对。Filebeat 用该证书验证 ELK Server 的身份。创建将存储证书和私钥使用目录:

sudo mkdir -p /etc/pki/tls/certs
sudo mkdir /etc/pki/tls/private

你有生成 SSL 证书的两种选择。如果你有一个 DNS 设置,让您的客户端服务器解析服务器 ELK 的 IP 地址,使用选项2。否则,使用选项1,将允许您使用 IP 地址。

选项1:IP 地址

如果你没有 DNS 设置——它允许你收集 log 的服务器,解析你的 ELK Server 的 IP 地址——你必须添加 ELK Server 的 private IP 地址到的 SSL 证书的 SubjectAltName(SAN)。要做这一步,打开 OpenSSL 的配置文件:
sudo vi /etc/ssl/openssl.cnf

找到文件中[ v3_ca ]板块,在下面添加这一行(替换 ELK Server 的 private IP 地址):

subjectAltName = IP: ELK_server_private_IP

保存,退出。

现在砸死相应位置产生 SSL 证书和私钥(在 /etc/PKI/TLS/),使用下面的命令:

cd /etc/pki/tls
sudo 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 的服务器上——稍候,我们会做这一步。让我们继续完成 Logstash 配置。如果您使用了此选项,跳过选项2并到配置 Logstash 这一步。

选项2

如果你有个人网络的 DNS 设置,你应创建一个包含 ELK Server 的 private IP 地址的 A 记录——这个域名将在接下来的命令中使用,来生成 SSL 证书。或者,你可以用一个指向该服务器的公共 IP 地址的记录。只要确保你的服务器(收集日志的服务器)将能够解析域名到你的 ELK Server。

现在生成 SSL 证书和私钥,,在相应的位置(在

cd /etc/pki/tls; sudo openssl req -subj '/CN=ELK_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

创建一个叫 02-beats-input.conf 的配置文件,并配置 “filebeat” 的input:

sudo vi /etc/logstash/conf.d/02-beats-input.conf

输入下面的配置信息:

02-beats-input.conf
input {
beats {
port => 5044
ssl => true
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}

保存,退出。指定的 beats 输入会监听 TCP 端口5044,它将使用我们前面创建的 SSL 证书和私钥。

现在来创建 10-syslog-filter.conf 配置文件,在这里面我们会添加 syslog 信息的 filter:

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

输入下面的 syslog filter 配置信息:

10-syslog-filter.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" ]
}
}
}

保存,退出。这个 filter 查询 syslog 类型的 logs(通过 Filebeat),而且它会使用grok来解析传入的 syslog 日志,使之结构化和可查询。

最后,我们创建 30-elasticsearch-output.conf 配置文件:
sudo vi /etc/logstash/conf.d/30-elasticsearch-output.conf

输入下面的 output 配置信息:

/etc/logstash/conf.d/30-elasticsearch-output.conf
output {
elasticsearch {
hosts => ["localhost:9200"]
sniffing => true
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}

保存,退出。这个 output 主要是配置 Logstash 去存储运行在 localhost:9200上的Elasticsearch beat 数据,这里有一个命名要求,由被使用的 beat 来命名(在这个情况下是 filebeat)。

如果你想给其他使用 Filebeat input 的 application 添加 filters,请确保命名文件让它们在 input 和 output 的配置之间排序(即,02-和30-之间)。

测试 Logstash 的配置信息:

sudo service logstash configtest

显示 Configuration OK 是对的,否则是错误的。请查看错误信息以确定 Logstash 配置信息那里出错了。

重启 Logstash,并启动,让改变的配置信息生效:

sudo service logstash restart
sudo update-rc.d logstash defaults 96 9

现在,我们来加载样例 Kibana 仪表盘。

加载 Kibana仪表盘

Elastic 提供了几种 Kibana 的仪表盘样例和 beat 索引模式,来帮助你开始使用 Kibana。虽然在我们的教程中不会使用仪表盘,但是不管怎么我们都可以用它包含的 Filebeat 和索引模式加载它们。

首先,下载仪表盘样例,存到你的 home 目录:

cd ~
curl -L -O https://download.elastic.co/beats/dashboards/beats-dashboards-1.1.0.zip

安装 unzip 包:

unzip beats-dashboards-*.zip

然后加载仪表盘样例、可视化和 beat 索引模式到 Elasticsearch:

cd beats-dashboards-*
./load.sh

这些是刚才我们加载的索引模式:

  • [packetbeat-]YYYY.MM.DD
  • [topbeat-]YYYY.MM.DD
  • [filebeat-]YYYY.MM.DD
  • [winlogbeat-]YYYY.MM.DD

当我们使用 Kibana,选择 Filebeat 索引模式作为我们的默认模式。

加载 Filebeat 索引模版到 Elasticsearch

因为我们计划使用 Fliebeat 传输 logs 到 Elasticsearch,所以我们因该加载 Filebeat 索引模版。该索引模板将配置 Elasticsearch 以一种智能的方式来分析传入的 Filebeat 信息。

首先,下载 Filebeat 索引模版到 home 目录:

cd ~
curl -O https://gist.githubusercontent.com/thisismitch/3429023e8438cc25b86c/raw/d8c479e2a1adcea8b1fe86570e42abab0f10f364/filebeat-index-template.json

然后加载它:

curl -XPUT 'http://localhost:9200/_template/filebeat?pretty' -d@filebeat-index-template.json

如果模板正确加载,你会看到这样的消息:

Output:{  "acknowledged" : true}

现在,我们的 ELK Server 已准备好接收 Filebeat 数据,让我们到每个 Client Server 上设置 Filebeat。

设置 Filebeat(添加 Client Servers)

在你要发送日志到 Logstash ELK Server 的所有 Ubuntu 或 Debian 的 server 做这一步。有关在基于 Red Hat Linux 发行版(RHEL 例如,CentOS 的,等等)安装 Filebeat 说明,请参阅在 CentOS 设置 Filebeat(添加客户端服务器)部分

复制 SSL 证书

在你的 ELK Server,复制 SSL 证书——这个教程之前创建的——到你的 Client Sever(用你自己的登录信息替换下面的 client server’s address):

scp /etc/pki/tls/certs/logstash-forwarder.crt user@client_server_private_address:/tmp
提供您的登录凭据后,确保证书复制成功。在 client servers 和 ELK Server 之间的通信,这是必须要的。

现在,我们将安装 Topbeat 包。

安装 Filebeat 包

在 Client Server,创建 Beats 资源列表:

echo "deb https://packages.elastic.co/beats/apt stable main" |  sudo tee -a /etc/apt/sources.list.d/beats.list

它也和 Elasticsearch 使用相同的 GPG 密钥,可以使用下面的命令进行安装:

wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add –

然后,安装 Filebeat 包:

sudo apt-get update
sudo apt-get install filebeat

安装好了,接下来来配置。

配置 Filebeat

现在,我们将配置 Filebeat 连接到 ELK Server 上的 Logstash。本节将引导你完成修改 Filebeat 自带示例的配置文件。当你完成这些步骤,你应该有一个看起来像这样的文件。

在 Client Server,创建和修改 Filebeat 配置文件:

sudo vi /etc/filebeat/filebeat.yml

注意:Filebeat 的配置文件是 YAML 格式,这意味着缩进是非常重要的!一定要使用相同数量的空格。

接近文件的顶部,你会看到 prospectors 部分,这是你可以定义指定 prospectors 哪些日志文件可以传送,以及他们应该如何处理。每个 prospectors 用“-”标明:

filebeat.yml excerpt 1 of 5
...
paths:
- /var/log/auth.log
- /var/log/syslog
#        - /var/log/*.log
...

然后,找到指定 DOCUMENT_TYPE: ,取消注释该行并改变其值设置为“syslog”。它修改后是这样的:

...
document_type: syslog
...

这指定 prospectors 的日志类型是 syslog(这是我们 Logstash filter 正在寻找的类型)。

如果你想发送其他的文件到你的 ELK 服务器,或对 Filebeat 如何处理你的日志进行任何更改,随意修改或添加 prospectors 条目。

接下来,在 output 部分,找到 elasticsearch: ,这表明 Elasticsearch 输出部分(我们不打算使用)。删除或注释掉整个 Elasticsearch output 部分(最多,到 #logstash:)行。

找到注释掉的 Logstash 输出部分——#logstash:,取消注释(删除前面的#)。在本节中,取消hosts:[“localhost:5044”]行注释。改变 localhost 为你的 ELK 服务器的 private IP 地址(或主机名):

### Logstash as output
logstash:
# The Logstash hosts
hosts: ["ELK_server_private_IP:5044"]

这将配置 Filebeat 连接到 ELK Server 上的 Logstash 通过5044端口(我们指定的 Logstash 输入的端口)。

直接在 hosts 下面,添加这一行:

bulk_max_size: 1024

接着,找到 tls 部分,取消注释;并取消 certificate_authorities,注释,改变它的值为[“/etc/pki/tls/certs/logstash-forwarder.crt”]:

...
tls:
# List of root certificates for HTTPS server verifications
certificate_authorities: ["/etc/pki/tls/certs/logstash-forwarder.crt"]

配置 Filebeat 使用我们的 ELK Server 上创建的 SSL 证书。

保存、退出。

重启 Fliebeat

sudo service filebeat restart
sudo update-rc.d filebeat defaults 95 10

如果你不确定你的文件配置是否争取,可以查看这里

测试 Filebeat 安装

如果您的 ELK stack 正确安装,Filebeat(客户端服务器上)应该传送 log 到 ELK Server 上的 Logstash。 Logstash 应加载 Filebeat 数据到 Elasticsearch 以这样一个时间戳 filebeat-YYYY.MM.DD。

在你的 ELK Server,验证 Elasticsearch 确实通过 Filebeat 查询索引接收的数据:

curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'

你应该会看到这样的输出:

Sample Output:
...
{
      "_index" : "filebeat-2016.01.29",
      "_type" : "log",
      "_id" : "AVKO98yuaHvsHQLa53HE",
      "_score" : 1.0,
      "_source":{"message":"Feb  3 14:34:00 rails sshd[963]: Server listening on :: port 22.","@version":"1","@timestamp":"2016-01-29T19:59:09.145Z","beat":{"hostname":"topbeat-u-03","name":"topbeat-u-03"},"count":1,"fields":null,"input_type":"log","offset":70,"source":"/var/log/auth.log","type":"log","host":"topbeat-u-03"}
}
...

如果总点击数(hits)输出结果0,Elasticsearch 没有在你搜索的索引下加载任何日志,你应该检查你的设置。如果你收到了预期的输出,继续下一步。

连接到 Kibana

当您完成所有要收集日志的服务器的 Filebeat 设置,让我们来看看我们之前安装的 Web 界面 Kibana。

在 Web 浏览器中,转到 FQDN 或 ELK Server 的公共 IP 地址。使用“kibanaadmin”身份进入后,你会看到一个页面,提示您配置默认索引图案:

https://assets.digitalocean.com/articles/elk/1-filebeat-index.gif
继续,然后从索引模式菜单(左侧)中选择 [filebeat]-YYY.MM.DD,然后单击星(设置为默认索引)按钮设置 Filebeat 指数为默认值。

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

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

尝试这些操作:

  • 搜索“root”来看看是否有人尝试用root身份登录你的服务器;
  • 搜索特殊的 hostname;
  • 通过对直方图选择一个区域或从上面的菜单中改变时间帧;
  • 点击下面的柱状图信息,看数据是如何被过滤的。

总结

现在你的 syslogs 通过 Elasticsearch 和 Logstash 集中化了,并且你可以通过 Kibana 查看它们。到这里,你应该有一个集中化重要 logs 很好的开始了。请记住你可以发送各种各样的 log 或者是索引数据到 Logstash,但是如果是使用 grok 解析和结构化的数据会更加有用。

为了提升 ELK stack,你应该考虑使用 Logstash 收集和过滤其他日志,并创建 Kibana 仪表板 。您可能还需要通过使用Topbeat与 ELK stack 收集系统指标。所有这些主题均包含在本系列的其他教程中。

 

LinuxStory 译文链接:http://www.linuxstory.org/how-to-install…n-ubuntu-14-04/ ‎

转载于:https://my.oschina.net/3233123/blog/834316

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值