在 CentOS 8.2.2004 上部署 ELK 栈实现日志归集
在现代分布式系统中,日志的集中管理和分析至关重要。ELK(Elasticsearch, Logstash, Kibana)是一个强大的日志处理和分析平台,能够帮助我们实现日志的集中管理。在本文中,我将详细介绍如何在 CentOS 8.2.2004 环境下部署 ELK 栈,并在 CentOS 6.6 服务器上使用 Filebeat 收集日志。
环境概述
- 日志归集服务端: CentOS 8.2.2004
- Java 应用服务器: CentOS 6.6
- 日志收集工具: Filebeat
- 日志处理和可视化工具: Elasticsearch, Logstash, Kibana
ELK 栈及 Filebeat 组件介绍
-
Elasticsearch: Elasticsearch 是一个分布式搜索和分析引擎。它在日志归集中起到了日志数据存储和快速检索的核心作用。日志数据被发送到 Elasticsearch 进行索引,随后可以通过 Kibana 快速搜索和可视化。
-
Logstash: Logstash 是一个数据处理管道,能够从多种来源收集数据、解析并进行过滤,然后将处理后的数据发送到 Elasticsearch。它在日志归集中充当数据转换和处理的角色,可以根据需要对日志数据进行丰富的过滤和解析操作。
-
Kibana: Kibana 是一个开源数据可视化工具,专门为与 Elasticsearch 配合使用而设计。它为日志数据提供了图形化的用户界面,可以方便地进行搜索、分析和可视化展示。在日志归集中,Kibana 是前端展示和分析日志数据的主要工具。
-
Filebeat: Filebeat 是一个轻量级的日志收集器,安装在日志来源服务器上(如 Java 应用服务器)。它负责监控日志文件并将日志数据发送到 Logstash 或 Elasticsearch。在日志归集中,Filebeat 是日志数据从来源服务器传输到日志处理平台的入口。
部署步骤概述
-
在 CentOS 8 上安装和配置 ELK 栈
- 安装 Java
- 安装并配置 Elasticsearch
- 安装并配置 Kibana
- 安装并配置 Logstash
-
在 Java 应用服务器(CentOS 6.6)上安装和配置 Filebeat
- 安装 Filebeat
- 配置并启动 Filebeat
步骤 1:在 CentOS 8 上安装和配置 ELK 栈
1. 安装 Java
在 CentOS 8 上安装 OpenJDK 11:
sudo dnf install java-11-openjdk-devel -y
作用: Java 是 Elasticsearch 和 Logstash 运行所必需的基础依赖。Elasticsearch 和 Logstash 都是基于 Java 构建的,因此需要安装 Java 运行时环境(JRE)来支持它们的运行。
2. 安装 Elasticsearch
-
添加 Elasticsearch 官方 GPG 密钥:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
-
创建 Elasticsearch 的 yum 源:
sudo vi /etc/yum.repos.d/elasticsearch.repo
在文件中输入以下内容:
[elasticsearch-7.x] name=Elasticsearch 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
-
安装 Elasticsearch:
sudo dnf install elasticsearch -y --disablerepo=docker-ce-stable
注意: 如果遇到 Docker YUM 源相关的错误,可以通过禁用 Docker YUM 源来解决。
-
配置 Elasticsearch:
修改配置文件
/etc/elasticsearch/elasticsearch.yml
:sudo vi /etc/elasticsearch/elasticsearch.yml
设置以下内容:
cluster.name: my-elk-cluster node.name: elk-node-1 network.host: 0.0.0.0 discovery.seed_hosts: ["localhost"]
-
启动并设置 Elasticsearch 为开机自启:
sudo systemctl start elasticsearch sudo systemctl enable elasticsearch
作用: Elasticsearch 是日志归集的核心存储引擎,它将接收来自 Logstash 或 Filebeat 的日志数据,并对这些数据进行索引和存储。Elasticsearch 支持快速检索和查询,使得我们可以通过 Kibana 快速访问和分析日志数据。
单节点 Elasticsearch 集群配置
如果你使用的是单节点集群,并且遇到了 master_not_discovered_exception
错误,可能是因为主节点配置不当。以下是解决方案:
- 检查
elasticsearch.yml
配置
确保 elasticsearch.yml
配置正确:
cluster.name: my-elk-cluster
node.name: elk-node-1
network.host: 0.0.0.0# 配置该节点为主节点
node.master: true
node.data: true# 设置单节点模式
discovery.type: single-node
保存配置后,重启 Elasticsearch:
sudo systemctl restart elasticsearch
- 检查网络配置
确保所有节点能够互相通信,尤其是在多节点配置下。检查防火墙设置,确保集群内部的通信端口(默认 9300)是开放的。
- 检查 Elasticsearch 日志
查看 Elasticsearch 日志文件 /var/log/elasticsearch/elasticsearch.log
,以获取更详细的错误信息:
sudo tail -f /var/log/elasticsearch/elasticsearch.log
总结
通过调整 elasticsearch.yml
配置和检查日志,你应该能够解决 master_not_discovered_exception
问题。一旦 Elasticsearch 集群恢复正常,Kibana 应该也能正常连接并启动。
3. 安装 Kibana
-
在 CentOS 8 上安装 Kibana:
sudo dnf install kibana -y
-
配置 Kibana:
修改配置文件
/etc/kibana/kibana.yml
:sudo vi /etc/kibana/kibana.yml
设置以下内容:
server.host: "0.0.0.0" elasticsearch.hosts: ["http://localhost:9200"]
-
配置
encryptionKey
:如果没有安装
openssl
,请先安装:sudo dnf install openssl -y
使用 OpenSSL 生成三个加密密钥,分别用于 Kibana 的
encryptionKey
配置:openssl rand -base64 32
将生成的三个密钥分别添加到
kibana.yml
配置文件中:xpack.encryptedSavedObjects.encryptionKey: "YOUR_GENERATED_ENCRYPTION_KEY" xpack.security.encryptionKey: "YOUR_GENERATED_SECURITY_KEY" xpack.reporting.encryptionKey: "YOUR_GENERATED_REPORTING_KEY"
-
启动并设置 Kibana 为开机自启:
sudo systemctl start kibana sudo systemctl enable kibana
-
检查 Kibana 的状态:
sudo systemctl status kibana
-
查看 Kibana 日志:
sudo tail -f /var/log/kibana/kibana.log
作用: Kibana 为日志数据提供了一个可视化界面。通过 Kibana,我们可以搜索和分析存储在 Elasticsearch 中的日志数据,创建仪表板,生成图表,实时监控系统和应用的运行状态。
汉化 Kibana
要将 Kibana 的界面汉化,可以通过以下步骤进行配置:
-
编辑 Kibana 配置文件:
sudo vi /etc/kibana/kibana.yml
将语言设置为中文:
i18n.locale: "zh-CN"
-
重启 Kibana:
保存配置文件后,重启 Kibana 服务:
sudo systemctl restart kibana
-
验证汉化效果:
通过浏览器访问 Kibana 界面,界面应该已经切换为简体中文。
4. 安装 Logstash
- 安装 Logstash:
sudo dnf install logstash -y
-
配置 Logstash:
在
/etc/logstash/conf.d/
目录下创建一个配置文件,例如filebeat-input.conf
:sudo vi /etc/logstash/conf.d/filebeat-input.conf
输入以下内容:
input {beats {port => 5044} } filter {# 这里可以添加一些解析或过滤规则 } output {elasticsearch {hosts => ["http://localhost:9200"]index => "app-logs-%{+YYYY.MM.dd}"} }
-
启动并设置 Logstash 为开机自启:
sudo systemctl start logstash sudo systemctl enable logstash
作用: Logstash 是一个强大的数据处理引擎,它能够处理来自 Filebeat 的日志数据,并进行必要的过滤和解析,然后将处理后的数据传输到 Elasticsearch 进行存储。它的灵活性使得我们可以根据需求对日志数据进行复杂的处理和转换。
步骤 2:在 Java 应用服务器(CentOS 6.6)上安装和配置 Filebeat
1. 安装 Filebeat
下载并安装 Filebeat:
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.12.0-x86_64.rpm
sudo rpm -vi filebeat-7.12.0-x86_64.rpm
作用: Filebeat 是一个轻量级的日志转发器,安装在日志来源服务器上(例如你的 Java 应用服务器)。它负责监控指定的日志文件,并将日志数据安全地传输到 Logstash 或 Elasticsearch。在分布式系统中,Filebeat 是日志数据收集的第一步。
2. 配置 Filebeat
修改 Filebeat 配置文件 /etc/filebeat/filebeat.yml
:
sudo vi /etc/filebeat/filebeat.yml
配置 Filebeat 读取 Java 应用日志文件:
filebeat.inputs:
- type: logenabled: truepaths:- /var/log/app/*.log # 修改为你的实际日志路径output.logstash:hosts: ["<Logstash_Server_IP>:5044"] # 指定 Logstash 的 IP 和端口
3. 启动并设置 Filebeat 为开机自启
-
测试 Filebeat 配置:
sudo filebeat test config
-
启动并设置 Filebeat 为开机自启:
sudo systemctl start filebeat sudo systemctl enable filebeat
作用: 配置并启动 Filebeat 后,它将开始监控指定的日志文件,并将日志数据传输到配置的 Logstash 或 Elasticsearch 节点。这一步确保了日志数据可以实时、安全地传输到日志处理平台。
步骤 3:验证和调试
1. 验证日志传输
在 Kibana 上访问 http://<Logstash_Server_IP>:5601
,使用 Kibana 的“Discover”功能来查看是否接收到了 Java 应用服务器的日志。
2. 调试
如果日志没有正常传输,可以通过检查 Filebeat、Logstash 和 Elasticsearch 的日志来排查问题:
sudo tail -f /var/log/filebeat/filebeat.log
sudo tail -f /var/log/logstash/logstash-plain.log
sudo tail -f /var/log/elasticsearch/elasticsearch.log
3. 检查 Elasticsearch 集群的健康状况
确保其状态为 green
或 yellow
:
curl -X GET "localhost:9200/_cluster/health?pretty"
如果状态为 red
,需要检查 Elasticsearch 日志以找出可能的原因。
通过这篇文章,我们了解了如何在 CentOS 8.2.2004 上安装和配置 ELK 栈,并使用 Filebeat 从 Java 应用服务器上收集日志数据。这种日志归集方案能够有效地集中管理分布式系统中的日志,为系统运维和故障排查提供了极大的便利。
希望这篇文章对你有所帮助,如果你在配置过程中遇到任何问题,欢迎随时与我交流!
附录:配置 encryptionKey
的作用
encryptionKey
是 Kibana 中用于加密和解密保存的敏感数据的关键配置。敏感数据包括 API 密钥、凭据、报警规则等,encryptionKey
是 Kibana 的 xpack.encryptedSavedObjects
功能的一部分,尤其在使用 Kibana 的安全和监控功能时,它变得尤为重要。
配置 encryptionKey
的作用
-
保护敏感数据:
- 在 Kibana 中,有些数据是加密保存的(例如报警规则、API 密钥、连接凭据等),
encryptionKey
用于加密和解密这些数据。没有这个密钥,Kibana 将无法正确地读取和写入这些加密的数据。
- 在 Kibana 中,有些数据是加密保存的(例如报警规则、API 密钥、连接凭据等),
-
确保 Kibana 的安全功能正常工作:
- 如果你使用了 Kibana 的某些功能,如报警、报告、监控等,Kibana 需要加密一些配置数据。在这种情况下,配置
encryptionKey
是必须的。
- 如果你使用了 Kibana 的某些功能,如报警、报告、监控等,Kibana 需要加密一些配置数据。在这种情况下,配置
-
跨实例保持一致:
- 在一个多实例 Kibana 集群中,所有实例都必须使用相同的
encryptionKey
,以确保它们可以共同处理和解密相同的数据。
- 在一个多实例 Kibana 集群中,所有实例都必须使用相同的
不配置 encryptionKey
的后果
-
功能限制:
- 如果
encryptionKey
未配置,Kibana 将无法启用或使用依赖于加密对象的功能,如报警、行动、报告、监控等。这会导致 Kibana 显示警告,并且相关功能将被禁用。
- 如果
-
潜在的启动问题:
- 虽然 Kibana 可能仍然能够启动,但如果使用这些功能,缺少
encryptionKey
会导致 Kibana 的某些部分无法正常工作,表现为功能不可用或者在尝试使用这些功能时遇到错误。
- 虽然 Kibana 可能仍然能够启动,但如果使用这些功能,缺少
-
警告信息:
- 你可能会看到类似于以下的警告:
Saved objects encryption key is not set. This will severely limit Kibana functionality.
这些警告明确指出了未配置
encryptionKey
的后果。 - 你可能会看到类似于以下的警告:
解决方案
如果你遇到了 Kibana 启动后功能受限或显示 Kibana server is not ready yet
的问题,并且日志中显示关于 encryptionKey
的警告,那么配置 encryptionKey
是必要的。如下是配置步骤:
-
生成一个随机的 32 字符加密密钥:
-
你可以使用 OpenSSL 生成一个安全的密钥:
openssl rand -base64 32
-
-
在
kibana.yml
中配置该密钥:编辑
kibana.yml
配置文件:sudo vi /etc/kibana/kibana.yml
添加以下行:
xpack.encryptedSavedObjects.encryptionKey: "YOUR_GENERATED_ENCRYPTION_KEY"
-
重启 Kibana:
-
保存配置文件后,重启 Kibana 服务以应用新的设置:
sudo systemctl restart kibana
-
总结
配置 encryptionKey
对于确保 Kibana 的某些核心功能正常工作是至关重要的。如果不配置它,某些功能将被禁用或无法使用。因此,如果你在日志中看到相关警告或 Kibana 功能受限的问题,务必按照上述步骤配置 encryptionKey
。通过正确配置,你可以确保 Kibana 完整且安全地运行所有功能。