手机版
你好,游客 登录 注册
背景:
阅读新闻

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

[日期:2016-06-23] 来源:Linux社区  作者:blacktime [字体: ]

前言:

在这个教程中,将会全面介绍怎么在 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 

使用Elasticsearch + Logstash + Kibana搭建日志集中分析平台实践  http://www.linuxidc.com/Linux/2015-12/126587.htm

Linux上安装部署ElasticSearch全程记录  http://www.linuxidc.com/Linux/2015-09/123241.htm

Elasticsearch安装使用教程 http://www.linuxidc.com/Linux/2015-02/113615.htm

ElasticSearch 配置文件译文解析 http://www.linuxidc.com/Linux/2015-02/114244.htm

ElasticSearch集群搭建实例  http://www.linuxidc.com/Linux/2015-02/114243.htm

分布式搜索ElasticSearch单机与服务器环境搭建  http://www.linuxidc.com/Linux/2012-05/60787.htm

ElasticSearch的工作机制  http://www.linuxidc.com/Linux/2014-11/109922.htm 

我们的目的:

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

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

  • Logstash:在server端,处理传入的日志。

  • Elasticsearch:存储所有的日志。

  • KibanaWeb界面,用来搜索和可视化日志;使用 Nginx 代理实现。

  • Filebeat:安装在client端(也就是你需要收集日志的目标服务器),将日志发送给LogstashFilebeat端作为一个日志传送代理,使用的是lumberjack网络协议与Logstash通信。

 

wKiom1dqeEDx1cNpAAA73z4MvYw863.png

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

安装前:

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

如果你想用 CentOS,看这个教程:How To Install Elasticsearch, Logstash, and Kibana (ELK Stack) on CentOS 

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

  • OS:Ubuntu 14.04

  • RAM:4GB

  • CPU:2

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

现在开始配置ELK服务端。

安装 Java 8:

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

添加 Oracle JavaPPA 到 apt

1
sudo add-apt-repository -y ppa:webupd8team/java

更新apt包数据库:

1
sudo apt-get update

安装稳定版 Oracle Java8(接受弹出的协议内容):

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

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

安装 Elasticsearch:

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

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

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

如果你的终端提示停在这里不动了,可能是在等你输入用户密码(为了授权 sudo 命令)。

创建 Elasticsearch 资源列表:

1
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 包数据库并安装elasticsearch:

1
2
sudo apt-get update
sudo apt-get -y install elasticsearch

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

1
sudo vi /etc/elasticsearch/elasticsearch.yml

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

1
network.host: localhost

保存并退出 elasticsearch.yml。

现在,打开 Elasticsearch:

1
sudo service elasticsearch restart

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

1
sudo update-rc.d elasticsearch defaults 95 10

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

安装 Kibana:

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

创建 Kibana 资源列表:

1
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 包数据源并安装:

1
2
sudo apt-get update
sudo apt-get -y install kibana

这样就安装好了。

打开 Kibana 配置文件编辑:

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

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

1
server.host: "localhost"

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

现在启用 Kibana 服务:

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

在使用 Kibana Web 界面的之前,我们必须安装反向代理。接下来就来安装 Ngnix 吧!(著:如果不用反向代理的话,上一步是不需要把server.host改为localhost,直接访问该主机的5601端口即可

安装 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:

1
sudo apt-get install nginx apache2-utils

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

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

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

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

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

删除文件中的内容,复制下面的代码块到文件中。请确保 server_name 和你的 server_name 匹配:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# cat /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 的配置通过监听 localhost5601,让你的服务器的 HTTP 流量直接到 Kibana 应用程序。此外,Nginx 的将使用我们前面创建的 htpasswd.users 文件,也会要求基本身份验证。

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

1
sudo service nginx restart

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

安装 Logstash:

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

1
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 包数据源并安装:

1
2
sudo apt-get update
sudo apt-get install logstash

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

生成 SSL 证书:

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

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

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

选项1IP 地址

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

1
sudo vi /etc/ssl/openssl.cnf

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

1
subjectAltName = IP: ELK_server_private_IP

保存,退出。

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

1
2
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 证书和私钥:

1
2
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 的服务器上——稍候,我们会做这一步。让我们继续完成 Logstash 配置。

配置 Logstash:

Logstash 配置文件是 JSON 格式的,放在

1
/etc/logstash/conf.d

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

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

输入下面的配置信息:

1
2
3
4
5
6
7
8
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:

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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 配置文件:

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

输入下面的 output 配置信息:

1
2
3
4
5
6
7
8
9
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 的配置信息:

1
sudo service logstash configtest

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

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

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

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

加载 Kibana仪表盘:

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

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

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

安装 unzip 包并解压:

1
2
sudo apt-get -y install unzip
unzip beats-dashboards-*.zip

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

1
2
cd beats-dashboards-*
./load.sh

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

  • [packetbeat-]YYYY.MM.DD

  • [topbeat-]YYYY.MM.DD

  • [filebeat-]YYYY.MM.DD

  • [winlogbeat-]YYYY.MM.DD

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

 

更多详情见请继续阅读下一页的精彩内容http://www.linuxidc.com/Linux/2016-06/132616p2.htm

 

linux
本文评论   查看全部评论 (0)
表情: 表情 姓名: 字数

       

评论声明
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款