18、设计与部署 ELK 栈:从规划到实施

设计与部署 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
  1. 刷新存储库元数据 :运行 yum makecache 命令。
  2. 安装 OpenJDK :运行 yum install java-1.8.0-openjdk 命令。
  3. 确认 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)
  1. 安装 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
  1. 格式化文件系统 :运行 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
  1. 刷新存储库 :运行 yum makecache 命令。
  2. 安装 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 仪表板的创建。合理的配置和优化可以确保系统高效、稳定地运行,满足不同场景下的日志管理和数据可视化需求。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值