第1步 - 安装和配置 Elasticsearch
默认情况下,Elastic Stack 组件不能通过包管理器获得,但 yum 可以通过添加 Elastic 的包存储库来安装它们。
所有 Elastic Stack 的软件包都使用 Elasticsearch 签名密钥进行签名,以保护您的系统免受软件包欺骗。使用密钥进行身份验证的软件包将被包管理器视为可信的。在此步骤中,将导入 Elasticsearch 公共 GPG 密钥并添加 Elastic 存储库以安装 Elasticsearch。
下载并且安装公共签名密钥
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
安装 Rpm Repo
在 /etc/yum.repos.d/
下创建 elastic.repo
[elastic-7.x]
name=Elastic repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
# yum update
# yum install elasticsearch
完成 Elasticsearch 安装后,在编辑器中打开其主配置文件 elasticsearch.yml
Elasticsearch的配置文件采用YAML格式,这意味着缩进非常重要!编辑此文件时,请确保不添加任何额外的空格, 并且不能使用 tag 缩进符,
:
后必须存在空格
Elasticsearch 侦听来自端口 9200
上的任何流量。所以需要限制对 Elasticsearch 实例的外部访问,以防止外人通过 REST API 读取您的数据或关闭您的 Elasticsearch 集群。找到指定的行network.host
,取消注释,并替换它的值为 : 192.168.1.21
(这里如果是内网访问, 可以替换成内网地址, 这样外部也无法进行访问) 如下所示:
# . . .
network.host: 192.168.1.21
# . . .
# 这里 7.0 需要打开
cluster.initial_master_nodes: ["node-1"]
# . . .
保存并关闭 elasticsearch.yml
。然后,使用 systemctl
命令启动 Elasticsearch 服务, 并且加入开机启动
# systemctl enable elasticsearch
# systemctl start elasticsearch
你可以通过发送 HTTP 请求来测试你的 Elasticsearch 服务是否正在运行:
$ curl "192.168.1.21:9200"
您将看到一个响应,显示有关本地节点的一些基本信息,类似于:
{
"name" : "lq8hbCV",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "yjl6Pw4NQpmLgm7gN__fvg",
"version" : {
"number" : "6.6.1",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "1fd8f69",
"build_date" : "2019-02-13T17:10:04.160291Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
现在 Elasticsearch 已启动并运行,让我们安装 Kibana,它是 Elastic Stack 的下一个组件。
第2步 - 安装和配置Kibana仪表板
根据官方文档中的安装顺序,你应该在 Elasticsearch 之后安装 Kibana 作为下一个组件。设置 Kibana 后,我们能够使用其界面搜索并查看 Elasticsearch 存储的数据。
因为在上一步中添加了 Elastic 存储库,所以您可以使用 yum
安装 Elastic Stack 的其余组件:
# yum install kibana
配置
# 为了在我的局域网访问, 这里我填写的地址是
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "192.168.1.21"
...
# The URLs of the Elasticsearch instances to use for all your queries.
# 这里的主机地址和 elasticsearch 监听地址需要相同
elasticsearch.hosts: ["http://192.168.1.21:9200"]
...
然后启用并启动Kibana服务:
# systemctl enable kibana
# systemctl start kibana
由于主机不一定仅仅侦听 localhost 地址, 所以也可以使用局域网访问(可能是 7.0 加入的, 暂不可考), 如果 server.host
写入的是局域网, 便可使用局域网进行访问.
Kibana 反向代理的设定
如果不侦听局域网地址我们需要配置反向代理
由于Kibana配置为仅侦听 localhost
,因此我们必须设置反向代理 以允许外部访问它。我们将使用 Nginx 来实现此目的
首先,使用该 openssl
命令创建一个管理 Kibana 用户,您将使用该用户访问 Kibana Web 界面。例如,我们将为此帐户命名kibanaadmin
,但为了确保更高的安全性,我们建议您为用户选择难以猜测的非标准名称。
以下命令将创建管理 Kibana 用户和密码,并将它们存储在 htpasswd.users
文件中。您将配置Nginx以要求此用户名和密码并立即读取此文件:
echo "kibanaadmin:`openssl passwd -apr1`" | sudo tee -a /etc/nginx/htpasswd.users
在提示符下输入并确认密码。记住或记下此登录信息,因为需要用它来访问 Kibana Web界面。
接下来,我们将创建一个 Nginx 服务器块文件。例如,我们将此文件称为example.com.conf
,尽管您可能会发现为您提供更具描述性的名称会很有帮助。例如,如果您为此服务器设置了 FQDN 和 DNS 记录,则可以在 FQDN 之后命名此文件:
sudo vi /etc/nginx/conf.d/example.com.conf
将以下代码块添加到文件中,确保更新 example.com
并匹配服务器的 FQDN 或公共 IP 地址。此代码将 Nginx 配置为将服务器的 HTTP 流量定向到正在侦听的 Kibana 应用程序。此外,它配置 Nginx 以读取文件并需要基本身份验证。www.example.com
localhost:5601
htpasswd.users
example.com.conf > /etc/nginx/conf.d/example.com.conf
server {
listen 80;
server_name example.com www.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;
}
}
完成后,保存并关闭文件。
然后检查配置是否存在语法错误:
sudo nginx -t
如果输出中报告了任何错误,请返回并仔细检查您在配置文件中放置的内容是否已正确添加。配置检测时候输出 syntax is ok
再继续并重新启动 Nginx 服务:
sudo systemctl restart nginx
现在可以通过您的FQDN或 Elastic Stack 服务器的公共IP地址访问Kibana。您可以通过导航到以下地址并在出现提示时输入登录凭据来检查Kibana服务器的状态页面:
http://{your_server_ip}/status
此状态页面显示有关服务器资源使用情况的信息,并列出已安装的插件。

第3步 — 安装和配置 Filebeat
Elastic Stack 使用几个名为 *Beats 的轻量级数据发送器来收集各种来源的数据,并将它们传输到 Logstash 或 Elasticsearch。以下是目前 Elastic 提供的Beats:这里我们
- Filebeat: 收集并发送日志文件.
- Metricbeat: 从您的系统和服务中收集指标.
- Packetbeat: 收集和分析网络数据
- Winlogbeat: 收集Windows事件日志
- Auditbeat: 收集Linux 监控框架数据并监视文件完整性
- Heartbeat: 通过主动探测监控服务的可用性
在本教程中,我们将使用 Filebeat 将本地日志转发到我们的 Elastic Stack。
使用 yum
安装 filebeat:
sudo yum install filebeat
接下来,配置 Filebeat 以连接到 Elastic Search. 在这里,我们将修改 Filebeat 附带的示例配置文件
打开 Filebeat 配置文件
sudo vi /etc/filebeat/filebeat.yml
Filebeat 支持多种输出,但通常只将事件直接发送到 Elasticsearch 或 Logstash 以进行其他处理。在本教程中,我们将使用 Elasticsearch 对 Filebeat 收集的数据执行其他处理。Filebeat 需要直接向 Elasticsearc 发送数据,所以让我们启用该输出。为此,请找到 output.elasticsearch
部分并保证此部分不会被 #
注释
/etc/filebeat/filebeat.yml
...
output.elasticsearch:
# Array of hosts to connect to.
hosts: ["localhost:9200"]
...
下面我们配置 filebeat 支持 nginx 日志的收集
现在可以使用 Filebeat模块扩展 Filebeat 的功能。在本教程中,您将使用 Nginx模块,该模块收集和分析由 Nginx 生成的访问日志和错误日志。
让我们启用他
sudo filebeat modules enable nginx
您可以通过运行以下命令查看启用和禁用模块的列表:
sudo filebeat modules list
Enabled:
nginx
Disabled:
apache2
auditd
elasticsearch
haproxy
icinga
iis
kafka
kibana
logstash
mongodb
mysql
osquery
postgresql
redis
suricata
system
traefik
接下来我们需要初始化环境, 为日志的解析铺好路
$ sudo filebeat setup -e
默认情况下,Filebeat配置为使用syslog和授权日志的默认路径。在本教程中,需要增加配置中的内容为 nginx 的日志路径。你可以在 /etc/filebeat/modules.d/nginx.yml
配置文件中查看模块的参数。
vim /etc/filebeat/modules.d/nginx.yml
- module: nginx
# Access logs
access:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths:
- /webdata/logs/*_access.log
# Error logs
error:
enabled: true
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths:
- /webdata/logs/*_error.log
配置完成后需要检测下配置文件是否正确
$ sudo filebeat test config
如果在这一步启动的话并不会成功,因为 需要 Elasticsearch 支持nginx 的文件解析还需要两个插件, 这里需要安装这两个插件
$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-user-agent
$ sudo /usr/share/elasticsearch/bin/elasticsearch-plugin install ingest-geoip
下面我们启动 filebeat
$ sudo systemctl start filebeat
以下便是运行效果