概述
本文将简单介绍运维数据分析系统 Elastic Stack,并描述其基础部署过程。
简介
ELK(Elasticsearch + Logstash + Kibana)用于日志集中分析系统,Elasticsearch
用于存储、搜索、分析数据,Logstash 用于接收并处理数据,Kibana 提供 Web UI 管理数据,客户端通过 Logstash-Forwarder
将指定的日志数据传递数据给 ELK 系统,大体流程如下图:
后来Elastic 团队收购了 Packetbeat 团队,就建立了 Beat,Beat 是一个轻量级的数据收集平台,可以将不同的数据发送 ELK
系统,例如日志、网络数据、系统信息等等。Elastic 团队在命名时最终将 ELK + Beat 命名为 Elastic
Stack,并将整个产品线的版本提升至 5.0。
之前使用 ELK 时,几个产品的版本需要对应,例如使用 Elasticsearch 1.6,Logstash 1.5,Kibana
4.1,如果版本没有正确对应,将可能导致无法正常运行。目前 Elastic 团队已将整体产品线都提升到 5.0(Kibana 已经到 4
了),这样在部署系统时免去了操心版本对应的事情。
Elastic Stack (之后简称 ES)已经不单单用于分析日志,Beat 可以代理更多类型的数据输出,Beat 可以直接输出数据至
Elasticsearch,也可输出数据给 Logstash,再由 Logstash 处理后输出到 Elasticsearch,如下图
目前发布的 Beats 产品(Beats 的几个产品均为独立发布):
- Filebeat:收集日志数据
- Packetbeat:收集网络数据
- Metricbeat:收集系统及服务数据(替代Topbeat)
- Winlogbeat:收集 Windows 事件
Elastic Stack 中还包含一个以独立产品发布的插件 X-Pack,集成了监控、报警、报表及图表的功能。X-Pack
相当于一个插件集合包,简化了以往安装相关功能插件的过程。同时 X-Pack 还提供了管理(包括用户和角色的管理)及监控的 UI
界面。本文的安装配置先不涉及这个插件,以后再独立的文章中来介绍。
安装配置 Elastic Stack 5.0
下列描述均以操作系统 Centos7 为例部署,涉及服务端和客户端两台服务器,请确保服务端所在服务器内存至少大于 2G。
步骤:
- 1 准备工作
- 2 安装配置 Elasticsearch
- 3 安装配置 Kibana
- 4 安装配置 Filebeat
- 5 安装配置 Logstash (可选)
- 6 安装配置 Nginx (可选)
- 7 单独配置一个客户端
由于 FileBeat 可以直接输出数据给 Elasticsearch,因此前 4 部完成后,ES 系统已经可以运行。Nginx 用于反向代理
Kibana,生产环境中建议配置。
1 准备工作
1.1 安装 Java 环境
使用 yum 安装 Java:
yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
[/code]
这里 ` java-1.8.0-openjdk-devel ` 非必须安装,但以后安装插件时可能会需要 Java
的编译器(javac),因此建议提前安装好。
### 1.2 配置 ES 的 yum 源
导入签名:
```code
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
[/code]
设置 yum 源
```code
[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[/code]
Elastic Stack 相关产品均需要使用这个源。
### 1.3 操作系统配置
官方提供了生产环境下 Elasticsearch 所在操作系统的相关建议,详见 [ 这里
](https://www.elastic.co/guide/en/elasticsearch/reference/current/system-
config.html)
虚拟内存设置,编辑 ` /etc/sysctl.conf ` ,追加:
```code
vm.max_map_count=262144
[/code]
修改文件句柄限制,编辑 ` /etc/security/limits.conf ` ,追加:
```code
* soft nofile 64000
* hard nofile 64000
[/code]
## 2 安装配置 Elasticsearch
通过 yum 安装
```code
yum install elasticsearch
[/code]
启动 Elasticsearch:
```code
systemctl start elasticsearch
[/code]
检查安装,执行
```code
curl http://127.0.0.1:9200
[/code]
得到类似如下结果,则说明安装正确
```code
{
"name" : "Ez3VweS",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "jJrXOfeNS06MaWKuSP1GKg",
"version" : {
"number" : "5.0.0",
"build_hash" : "253032b",
"build_date" : "2016-10-26T04:37:51.531Z",
"build_snapshot" : false,
"lucene_version" : "6.2.0"
},
"tagline" : "You Know, for Search"
}
[/code]
Elasticsearch 配置文件在 ` /etc/elasticsearch/elasticsearch.yml ` ,如果不使用 Logstash
或者 Logstash 与 Elasticsearch 不在同一服务器,那么需要使 Elasticsearch 监听到指定的 IP 地址和端口,例如修改 `
elasticsearch.yml ` 中的下边两行:
```code
network.host: 0.0.0.0
http.port: 9200
[/code]
如进行如上修改,请确保防火墙关闭或允许端口 9200 通过,可以参考这样设置
```code
firewall-cmd --zone=public --add-port=9200/tcp --permanent
firewall-cmd --reload
[/code]
## 3 安装配置 Kibana
> Kibana 读音:/kiˈbana/
通过 yum 安装
```code
yum install kibana
[/code]
编辑配置文件 ` /etc/kibana/kibana.yml ` ,修改下列两行
```code
server.port 5601
server.host 0.0.0.0
[/code]
启动 Kibana:
```code
systemctl start kibana
[/code]
这里 ` server.host ` 默认也是 localhost,使用 nginx 反向代理的话可以不修改,这里现将其修改为监听所有地址的 5601
端口,方便检查。
请确保防火墙关闭或允许端口 5601 通过,可以参考这样设置
```code
firewall-cmd --zone=public --add-port=5601/tcp --permanent
firewall-cmd --reload
[/code]
浏览器打开 ` http://192.168.1.150:5601 ` (请将 192.168.1.150 换成您服务器的 ip 地址),看到如下界面说明
Kibana 安装正确。
![ELK UI](https://www.icode9.com/i/?i=20161029033214185)
## 4 安装配置 Filebeat
这里先将 ES 服务器当作一个客户端,部署 Filebeat 将服务器的日志也输入 Elasticsearch 系统。
通过 yum 安装
```code
yum install filebeat
[/code]
Filebeat 默认配置会传输 ` /var/log/*.log ` (对于 Centos 系统来说,这下边至少会有 yum.log)传输至本地的
Elasticsearch,因此不需要修改任何配置,目前 ES 系统已经可以收集日志数据了。
启动 Filebeat
```code
systemctl start filebeat
[/code]
现在在浏览器中打开 ` http://192.168.1.150:5601 ` (192.168.1.150 请更改为您服务器的 ip 地址):
将 index name or pattern 设置为 ` filebeat.* ` ,点击 ` create ` 按钮,如下图
![设置index-pattern](https://www.icode9.com/i/?i=20161029034816293)
一切顺利的话,可以看到 ES 系统已经收集到日志数据了,如下图
![ES 系统数据](https://www.icode9.com/i/?i=20161029034936491)
## 5 安装配置 Logstash
通过 yum 安装:
```code
yum install logstash
[/code]
配置 Logstash 的输入和输出,新建输入输出配置文件:
```code
vi /etc/logstash/conf.d/first-logstash.conf
[/code]
文件内容如下:
```code
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => "localhost:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
[/code]
* 输入:设置监听 5044 端口,接收 beats 的输入数据
* 输出:将数据输出到 Elasticsearch
启动 Logstash:
```code
systemctl start logstash
[/code]
之后我们还将部署另一台服务器作为数据输入的客户端,因此这里请确保防火墙关闭或允许端口 5044 通过,可以参考这样设置
```code
firewall-cmd --zone=public --add-port=5044/tcp --permanent
firewall-cmd --reload
[/code]
### 修改 Filebeat 将日志发送给 Logstash
Filebeat 可以将日志输入到 Elasticsearh,如刚才的配置。它也可以将日志输入给 Logstash,由 Logstash
处理日志,再将处理后的日志数据输入到 Elasticsearch。下边配置 Filebeat 将日志 输入到 Logstash。
编辑 Filebeat 配置文件:
```code
vi /etc/filebeat/filebeat.yml
[/code]
注释掉 Elasticsearch output 的相关设置:
```code
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
# Optional protocol and basic auth credentials.
#protocol: "https"
#username: "elastic"
#password: "changeme"
[/code]
配置输出到 Logstash:
```code
#----------------------------- Logstash output --------------------------------
output.logstash:
# The Logstash hosts
hosts: ["localhost:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
[/code]
重新启动 Filebeat
```code
systemctl restart filebeat
[/code]
这时可以在操作系统上做一些产生日志的操作,例如使用 yum 安装一个工具
在浏览器中打开 ` http://192.168.1.150:5601 ` (更换 192.168.1.150 为您服务器的 ip
地址),就可以看到日志的输入,例如在这里我通过 yum 卸载了 screen 这个工具
![ES 系统示例图](https://www.icode9.com/i/?i=20161029042214839)
## 6 安装配置 Nginx
生产环境下,出于安全及性能的考虑,应当使用反向代理来代理 Kibana,这里反向代理工具使用 Nginx。
通过 yum 安装 Nginx,需要配置安装源,可以使用 EPEL 源或 Nginx 的源,这里使用 Nginx 的源为例:
添加 nginx.repo:
```code
vi /etc/yum.repos.d/nginx.repo
[/code]
加入下列内容:
```code
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
[/code]
通过 yum 安装 nginx:
```code
yum install nginx
[/code]
修改 nginx 配置,这里直接修改 default.conf
```code
vi /etc/nginx/conf.d/default.conf
[/code]
改为如下内容
```code
server {
listen 80;
server_name elk;
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;
}
}
[/code]
启动 Nginx
```code
systemctl start nginx
[/code]
请确保防火墙关闭或允许端口 80 通过,可以参考这样设置
```code
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload
[/code]
在浏览器中打开 ` http://192.168.1.150 ` (更换 192.168.1.150 为您服务器的 ip 地址),就可以访问 ES 系统。
有了反向代理,就可以将 Kibana 监听到本地端口了。
## 7 配置另一台服务器作为客户端
作为客户端的服务器只需要安装 Filebeat 即可,参见之前 1.2 配置 ES 的 yum 源来设置 yum。
通过 yum 安装 Filebeat
```code
yum install filebeat
[/code]
编辑 Filebeat 配置文件:
```code
vi /etc/filebeat/filebeat.yml
[/code]
注释掉 Elasticsearch output 的相关设置:
```code
#-------------------------- Elasticsearch output ------------------------------
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost:9200"]
# Optional protocol and basic auth credentials.
#protocol: "https"
#username: "elastic"
#password: "changeme"
[/code]
配置输出到 Logstash:
```code
#----------------------------- Logstash output --------------------------------
output.logstash:
# The Logstash hosts
hosts: ["192.168.1.150:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"
[/code]
> **注意 Loutput.logstash 中 hosts 需要设置为您 ES 服务器的地址。**
启动 Filebeat
```code
systemctl start filebeat
[/code]
同样可以进行一些产生日志的操作,例如 yum 安装一个工具
在浏览器中打开 ` http://192.168.1.150 ` (更换 192.168.1.150 为您服务器的 ip
地址),就可以看到日志的输入,例如在这里我通过 yum 安装了 screen 这个工具,如下图
![ES 系统示例图](https://www.icode9.com/i/?i=20161029044150136)
简单说一下 Kibana 的操作,右侧可以选择显示的数据列,如上图选择了 message 和 beat.hostname;右上角是时间设置,选择的是 15
分钟内的数据,点击可以修改。
# 总结
本文描述了 Elastic Stack 的安装过程,尽可能的简化了配置过程,目的在于可以快速完成环境的搭建,有数据输入,这样可以大体了解 ES
系统。在配置的过程中也仅对配置了进行简单描述,在之后的文章中会从实际功能出发,来进行详细配置、解释以及使用说明。
本文参考 Elstaic Stack 官方文档: [ https://www.elastic.co/guide/index.html
](https://www.elastic.co/guide/index.html)
![在这里插入图片描述](https://www.icode9.com/i/ll/?i=20210608151750993.gif)