第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-6.x]
name=Elastic repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
复制代码
yum install elasticsearch
复制代码
完成 Elasticsearch 安装后,在编辑器中打开其主配置文件 elasticsearch.yml
Elasticsearch的配置文件采用YAML格式,这意味着缩进非常重要!编辑此文件时,请确保不添加任何额外的空格, 并且不能使用 tag 缩进符,
:
后必须存在空格
Elasticsearch 侦听来自端口 9200
上的任何流量。所以需要限制对 Elasticsearch 实例的外部访问,以防止外人通过 REST API 读取您的数据或关闭您的 Elasticsearch 集群。找到指定的行network.host
,取消注释,并替换它的值为 : localhost
(这里如果是内网访问, 可以替换成内网地址, 这样外部也无法进行访问) 如下所示:
. . .
network.host: localhost
. . .
复制代码
保存并关闭 elasticsearch.yml
。然后,使用 systemctl
命令启动 Elasticsearch 服务:
sudo systemctl start elasticsearch
复制代码
接下来,运行以下命令以使 Elasticsearch 在每次服务器启动时启动:
sudo systemctl enable elasticsearch
复制代码
你可以通过发送 HTTP 请求来测试你的 Elasticsearch 服务是否正在运行:
curl "localhost: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 的其余组件:
sudo yum install kibana
复制代码
然后启用并启动Kibana服务:
sudo systemctl enable kibana
sudo systemctl start 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
复制代码
此状态页面显示有关服务器资源使用情况的信息,并列出已安装的插件。
第三步 — 安装和配置 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
复制代码
以下便是运行效果