设计与部署 ELK 栈:从规划到实施
1. OOM 杀手机制及内存建议
在系统运行中,内存管理至关重要。OOM(Out-of-Memory)杀手机制的主要目的是避免系统因内存不足而崩溃。每个进程都有一个
oom_score
值,OOM 杀手会根据这个分数决定在内存不足时杀死哪个进程,分数越高,进程在内存不足时被杀死的可能性就越大。这个分数是基于进程被杀死后能释放多少内存来计算的。
以 Elasticsearch 为例,它启动至少需要 2.5GB 内存。随着索引和数据源的增加,Elasticsearch 对系统内存的需求也会不断增加,当内存耗尽时,系统接近崩溃,OOM 杀手就会介入,通常会杀死占用内存最多的 Elasticsearch 进程。我们可以在
/var/log/messages
中查看相关事件,了解 OOM 杀手的工作情况。
以下是不同场景下 Elasticsearch 的内存建议:
| 场景 | 内存建议 | 说明 |
| ---- | ---- | ---- |
| 测试 | 2.5GB | 可用于少量数据源或索引的测试,但性能会受影响 |
| 生产 | 至少 4GB | 确保 Elasticsearch 能正常启动并处理多数据源和索引,同时要相应增加 JVM 堆大小,并考虑为页面缓存分配一些内存以提高文件系统交互的响应速度 |
2. Elasticsearch 存储配置
Elasticsearch 的存储需求可分为存储容量和存储性能两个主要类别。
2.1 存储容量
存储容量直接影响 Elasticsearch 能够存储的数据量。这是一个复杂的考量因素,因为它取决于许多影响空间利用率的变量,其中主要变量是发送到 Elasticsearch 的日志或指标的大小,这又取决于每日(或每月)生成的日志数量。例如,如果每日日志生成量为 100MB,那么要存储一个月的日志,至少需要 3GB 的可用空间(100MB x 30 天 = 3GB)。需要注意的是,这只是单个数据源的最小空间要求,实际中应考虑一定的额外空间,因为数据会不断变化,而且不同月份的日志生成量可能不同。此外,随着数据源(或客户端)的增加,数据使用量也会相应增长。默认情况下,Elasticsearch 将数据存储在
/var/lib/elasticsearch
目录下。
2.2 存储性能
Elasticsearch 的一个主要特性是能够快速检索数据。虽然它通过将文档存储为 JSON 文件的增强机制实现这一点,但合适的存储性能配置有助于实现近乎实时的搜索结果。虽然 Elastic 没有提供具体的存储性能要求,但使用固态硬盘(SSD)作为
/var/lib/elasticsearch
目录的存储设备有助于减少搜索时的延迟,因为与传统硬盘(HDD)相比,SSD 的延迟要低得多。此外,SSD 在数据摄入时也有优势,因为写入操作能更快得到确认,从而允许更多并发的传入索引。这可以在 Kibana 监控仪表板上看到每秒索引数的提升。
在云环境中,存储性能的配置取决于云服务提供商。有些提供商根据磁盘大小来确定磁盘性能,而有些则允许手动配置(如 IOPS 和吞吐量)。较慢的存储配置会导致搜索时间延长和数据摄入速度变慢。
以下是存储配置的考虑要点:
-
空间方面
:考虑为意外的数据增长预留足够的空间。例如,如果预计一个月的数据使用量为 500GB,建议配置至少 700GB 的空间,以避免 Elasticsearch 索引空间不足的情况。500GB 是一个不错的起始点,可在计算实际数据使用量和变化时用于测试或生产。
-
性能方面
:考虑使用 SSD 等高速存储解决方案,以实现低延迟搜索和更快的索引速度。在云环境中,大多数提供商都提供可用于 Elasticsearch 的 SSD 选项。为了获得最佳性能,建议至少配置 500 IOPS。例如,在 Azure 中,可以使用 P10 磁盘(可提供高达 500 IOPS 的 SSD),或者选择成本较低的 E10 磁盘,它也能达到相同的效果。
3. Logstash 和 Kibana 要求
虽然 Logstash 和 Kibana 没有特定的严格要求,但在设计 Elastic Stack 时,有一些要点需要考虑。
3.1 Logstash
Logstash 对 CPU 和 RAM 的要求不高,但这完全取决于有多少数据源向其提供数据。因为 Logstash 解析每个事件都需要一定的开销。如果 Logstash 单独安装(即同一系统上没有其他组件),对于小型或测试部署,一个 vCPU 和 2GB 的 RAM 通常就足够了。理想情况下,应监控实际使用情况并相应地调整系统。
Logstash 默认使用内存队列来临时存储事件,但可以将其配置为使用持久队列来处理事件。这样可以保证数据的持久一致性,避免在停机期间的数据丢失。此外,持久队列可以作为客户端和 Logstash 之间的缓冲区,吸收突发的事件。当使用持久队列时,
/var/lib/logstash
目录需要有足够的空间来存储正在处理的事件。所需空间取决于向 Elasticsearch 发送数据的出口速度和发送到 Logstash 的事件数量。最小空间要求为 1GB,并且随着数据源数量的增加,空间需求也应相应增加。
3.2 Kibana
Kibana 的资源需求完全取决于同时访问仪表板的用户数量。分配给 Kibana 的资源应根据预期的使用情况来确定,例如预期的用户基数以及同时访问 Kibana 的用户数量。对于小型部署或测试,JVM 规定的最低要求是一个 vCPU 和 2GB 的 RAM,这可以满足几个用户的需求。但随着用户数量的增加,RAM 通常会成为第一个瓶颈资源。
总体而言,Elastic Stack 的要求较为灵活,主要取决于使用情况和数据源的数量。软件方面,主要要求是 Java,因为所有组件都使用 JVM,可以使用 OpenJDK 或官方 JDK。
4. 部署 ELK Stack
部署 Elasticsearch、Logstash 和 Kibana(ELK Stack)相对简单,但在安装这些组件时需要考虑几个因素。
4.1 部署概述
本次部署将使用 Elasticsearch 6.5 版本,因此所有后续组件也必须使用相同版本。基础操作系统为 CentOS 7.6。虽然本次部署是在本地虚拟机(VM)上进行的,但相关概念也适用于云环境。
Elasticsearch 将部署在两个 2 vCPU、4GB RAM 的 VM 节点上,每个节点的磁盘空间为 64GB,并将磁盘挂载到
/var/lib/elasticsearch
目录。Logstash 和 Kibana 将部署在同一个 2 vCPU、4GB RAM 的 VM 上,同时为 Logstash 的持久队列使用一个 32GB 的专用磁盘,并将其挂载到
/var/lib/logstash
目录。
以下是部署的总结:
- 基础操作系统:CentOS 7.6
- 组件版本:Elasticsearch v6.5、Logstash v6.5、Kibana v6.5
- Elasticsearch:2 个节点,每个节点 2 vCPU、4GB RAM、64GB 磁盘
- Logstash 和 Kibana:同一 VM,2 vCPU、4GB RAM,Logstash 持久队列使用 32GB 磁盘
4.2 安装 Elasticsearch
安装 Elasticsearch 有多种方式,包括从源代码安装、为基于 Debian 的 Linux 发行版安装 deb 包、为 Red Hat Enterprise Linux(RHEL)、CentOS 等安装 rpm 包、为 Windows 安装 msi 包以及部署 Docker 镜像。本次部署将使用 RPM 存储库,以确保版本一致性并简化更新过程。
以下是安装步骤:
1.
创建 RPM 存储库文件
:在
/etc/yum.repos.d
目录下创建一个名为
elastic.repo
的文件,内容如下:
[elasticsearch-6.x]
name=Elasticsearch 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 makecache命令。 -
安装 OpenJDK
:运行
yum install java-1.8.0-openjdk命令。 -
确认 Java 安装
:运行
java -version命令,确保输出类似如下内容:
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
-
安装 Elasticsearch
:运行
yum install elasticsearch命令。
在启动 Elasticsearch 之前,还需要进行一些配置。默认情况下,Elasticsearch 的数据目录设置为
/var/lib/elasticsearch
,可通过
/etc/elasticsearch/elasticsearch.yml
文件中的
path.data
配置选项进行控制。
以下是磁盘分区和格式化的步骤:
1.
初始化磁盘为 gpt
:运行
sudo parted /dev/sdX mklabel gpt
命令。
2.
创建分区
:运行
sudo parted /dev/sdX mkpart xfs 0GB 64GB
命令,创建一个从 0GB 到 64GB 的 xfs 分区。
3.
验证分区创建
:运行
sudo parted /dev/sdX print
命令,确保输出类似如下内容:
[root@elastic1 ~]# parted /dev/sdb print
Model: ATA VBOX HARDDISK (scsi)
Disk /dev/sdb: 68.7GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 64.0GB 64.0GB xfs
-
格式化文件系统
:运行
mkfs.xfs /dev/sdb1命令,使用 XFS 文件系统格式化分区。
5. 总结
设计和部署 ELK Stack 需要综合考虑多个因素,包括 Elasticsearch 的 CPU、内存和存储配置,以及 Logstash 和 Kibana 的资源需求。合理的配置可以确保系统的性能和稳定性,满足不同场景下的使用需求。在实际部署过程中,应根据具体情况进行调整和优化。
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([开始]):::startend --> B(设计 Elastic Stack):::process
B --> B1(确定 Elasticsearch 资源需求):::process
B1 --> B11(CPU: 至少 2 vCPU,速度 > 2 GHz):::process
B1 --> B12(内存: 测试 2.5GB,生产至少 4GB):::process
B1 --> B13(存储: 容量和性能考虑):::process
B --> B2(确定 Logstash 和 Kibana 需求):::process
B2 --> B21(Logstash: 持久队列空间):::process
B2 --> B22(Kibana: 根据用户数量分配资源):::process
B --> C(部署 ELK Stack):::process
C --> C1(安装 Elasticsearch):::process
C1 --> C11(创建 RPM 存储库):::process
C1 --> C12(安装 Java):::process
C1 --> C13(安装 Elasticsearch):::process
C1 --> C14(配置数据目录):::process
C1 --> C15(磁盘分区和格式化):::process
C --> C2(安装 Logstash 和 Kibana):::process
C --> C3(安装 Beats):::process
C --> C4(配置 Kibana 仪表板):::process
C --> D([结束]):::startend
设计与部署 ELK 栈:从规划到实施
6. 安装和配置 Logstash 与 Kibana
6.1 安装 Logstash
安装 Logstash 可参考官方的安装指南,本次部署使用与 Elasticsearch 相同的版本 6.5。具体步骤如下:
1.
添加存储库
:由于使用的是 CentOS 7.6,可使用 RPM 存储库。在
/etc/yum.repos.d
目录下添加 Logstash 的存储库文件,内容如下:
[logstash-6.x]
name=Elasticsearch 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 makecache命令。 -
安装 Logstash
:运行
yum install logstash命令。
6.2 配置 Logstash
Logstash 的配置文件结构遵循特定规则。以下是一个简单的配置示例,用于接收来自 Beats 的数据并将其发送到 Elasticsearch:
input {
beats {
port => 5044
}
}
filter {
# 可以添加各种过滤器来处理数据
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-%{+YYYY.MM.dd}"
}
}
在这个配置中:
-
input
部分定义了数据的来源,这里使用
beats
输入插件监听端口 5044。
-
filter
部分可用于对数据进行转换和处理,如解析日志、添加字段等。
-
output
部分将处理后的数据发送到 Elasticsearch,指定了 Elasticsearch 的主机地址和索引名称。
对于 Logstash 的持久队列,确保
/var/lib/logstash
目录有足够的空间。该目录的大小取决于向 Elasticsearch 发送数据的速度和接收的事件数量。
6.3 安装 Kibana
Kibana 的安装同样可使用 RPM 包。步骤如下:
1.
添加存储库
:在
/etc/yum.repos.d
目录下添加 Kibana 的存储库文件,内容与 Logstash 存储库类似,只需将名称改为
kibana-6.x
。
2.
刷新存储库
:运行
yum makecache
命令。
3.
安装 Kibana
:运行
yum install kibana
命令。
6.4 配置 Kibana
Kibana 的配置文件位于
/etc/kibana/kibana.yml
。主要配置项如下:
server.port: 5601
server.host: "localhost"
elasticsearch.hosts: ["http://localhost:9200"]
-
server.port:指定 Kibana 监听的端口。 -
server.host:指定 Kibana 绑定的主机地址。 -
elasticsearch.hosts:指定 Elasticsearch 的地址,Kibana 将从这里获取数据。
7. 安装和解释 Beats
Beats 是轻量级的数据采集器,可用于收集各种类型的数据并发送到 Logstash 或 Elasticsearch。常见的 Beats 包括 Filebeat 和 Metricbeat。
7.1 安装 Filebeat
Filebeat 用于收集日志文件。安装步骤如下:
1.
下载并安装
:可从 Elastic 官方网站下载适用于 CentOS 7.6 的 Filebeat RPM 包,然后运行
yum install filebeat-6.5.0-x86_64.rpm
命令进行安装。
2.
配置 Filebeat
:编辑
/etc/filebeat/filebeat.yml
文件,配置输入和输出。以下是一个简单的配置示例:
filebeat.inputs:
- type: log
paths:
- /var/log/*.log
output.logstash:
hosts: ["localhost:5044"]
在这个配置中,Filebeat 会收集
/var/log
目录下的所有日志文件,并将其发送到 Logstash 的 5044 端口。
7.2 安装 Metricbeat
Metricbeat 用于收集系统和服务的指标数据。安装步骤与 Filebeat 类似:
1.
下载并安装
:下载适用于 CentOS 7.6 的 Metricbeat RPM 包,然后运行
yum install metricbeat-6.5.0-x86_64.rpm
命令进行安装。
2.
配置 Metricbeat
:编辑
/etc/metricbeat/metricbeat.yml
文件,配置输入和输出。以下是一个简单的配置示例:
metricbeat.modules:
- module: system
metricsets:
- cpu
- memory
- network
period: 10s
output.logstash:
hosts: ["localhost:5044"]
在这个配置中,Metricbeat 会每 10 秒收集系统的 CPU、内存和网络指标数据,并将其发送到 Logstash 的 5044 端口。
8. 配置 Kibana 仪表板
Kibana 仪表板用于可视化 Elasticsearch 中的数据。配置步骤如下:
1.
访问 Kibana
:在浏览器中访问
http://localhost:5601
,打开 Kibana 界面。
2.
创建索引模式
:在 Kibana 的管理界面中,选择
Stack Management
->
Index Patterns
,然后点击
Create index pattern
。输入索引名称(如
logstash-*
),选择时间字段,点击
Create index pattern
完成创建。
3.
创建可视化
:在 Kibana 的
Visualize
界面中,选择要使用的可视化类型(如柱状图、折线图等),然后选择要可视化的数据索引和字段,进行相应的配置。
4.
创建仪表板
:在 Kibana 的
Dashboard
界面中,点击
Create dashboard
,然后将之前创建的可视化添加到仪表板中,进行布局和调整。
9. 技术要点总结
| 组件 | 关键配置要点 |
|---|---|
| Elasticsearch | 内存至少 2.5GB(测试)或 4GB(生产),使用 SSD 存储,配置数据目录,磁盘分区和格式化 |
| Logstash | 持久队列空间,配置输入、过滤和输出 |
| Kibana | 根据用户数量分配资源,配置 Elasticsearch 地址 |
| Beats | 配置输入和输出,收集不同类型的数据 |
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
A([开始配置 Kibana 仪表板]):::startend --> B(访问 Kibana 界面):::process
B --> C(创建索引模式):::process
C --> C1(输入索引名称):::process
C --> C2(选择时间字段):::process
C --> C3(点击创建):::process
C --> D(创建可视化):::process
D --> D1(选择可视化类型):::process
D --> D2(选择数据索引和字段):::process
D --> D3(进行配置):::process
D --> E(创建仪表板):::process
E --> E1(点击创建):::process
E --> E2(添加可视化):::process
E --> E3(布局和调整):::process
E --> F([完成配置]):::startend
通过以上步骤,我们完成了 ELK 栈的设计与部署,包括 Elasticsearch、Logstash、Kibana 和 Beats 的安装与配置,以及 Kibana 仪表板的创建。合理的配置和优化可以确保系统高效、稳定地运行,满足不同场景下的日志管理和数据可视化需求。
超级会员免费看
1216

被折叠的 条评论
为什么被折叠?



