不灭的焱

加密类型:SHA/AES/RSA下载Go
复合类型:切片(slice)、映射(map)、指针(pointer)、函数(function)、通道(channel)、接口(interface)、数组(array)、结构体(struct) Go类型+零值nil
引用类型:切片(slice)、映射(map)、指针(pointer)、函数(function)、通道(channel) Go引用

作者:AlbertWen  添加时间:2026-01-03 09:26:07  修改时间:2026-01-04 13:06:22  分类:IT运维/网络管理  编辑

ELK 是一套开源的日志收集、存储、分析与可视化的技术栈,早期由 Elasticsearch、Logstash、Kibana 三个核心组件组成,后来随着 Beats 的加入,官方也将其更名为 Elastic Stack

以下是 ELK/Elastic Stack 的核心组件及功能说明:

  1. Elasticsearch

    • 定位:分布式、RESTful 风格的搜索引擎和数据存储中心,是整个技术栈的核心
    • 核心功能
      • 存储结构化 / 非结构化数据(如日志、指标),支持高并发读写。
      • 提供全文检索、模糊匹配、聚合分析等能力。
      • 支持集群部署,具备高可用、水平扩展特性。
    • 运维关注点:分片与副本配置、集群健康状态监控、索引生命周期管理(ILM)。
  2. Logstash

    • 定位:开源的数据管道工具,用于数据的采集、过滤、转换和传输。
    • 核心功能
      • 输入(Input):从多种数据源采集数据(如文件、Kafka、Redis、TCP/UDP)。
      • 过滤(Filter):对数据进行清洗、转换(如字段提取、格式标准化、敏感信息脱敏)。
      • 输出(Output):将处理后的数据发送到 Elasticsearch、文件、消息队列等目标。
    • 运维关注点:配置文件编写、性能调优(避免内存溢出)、多管道部署。
  3. Kibana

    • 定位:基于 Web 的可视化平台,用于和 Elasticsearch 交互。
    • 核心功能
      • 数据可视化:通过仪表盘(Dashboard)、图表(折线图、柱状图)展示分析结果。
      • 日志查询:提供开发者友好的查询界面,支持 Lucene 语法。
      • 告警配置:设置监控规则,触发邮件、钉钉等告警通知。
      • 索引管理:查看索引状态、配置索引模式。
    • 运维关注点:权限控制(对接 LDAP/SSO)、仪表盘模板化、性能优化。
  4. Beats

    • 定位:轻量级的数据采集器,替代 Logstash 完成边缘节点的数据采集,降低资源消耗。
    • 常见子组件
      • Filebeat:最常用的日志采集器,监控文件变化并发送日志,适合替代传统的 rsyslog。
      • Metricbeat:采集系统和服务的指标数据(如 CPU、内存、磁盘、Nginx 状态)。
      • Packetbeat:网络数据包采集器,分析 TCP/UDP 流量,用于网络监控。
      • Heartbeat:服务可用性监控工具,通过 ICMP/TCP/HTTP 检测服务是否在线。
    • 运维关注点:轻量化部署、采集规则配置、与 Logstash/Elasticsearch 的对接方式。

扩展组件

  • Elastic Agent:新一代的统一采集器,整合 Beats 和 Logstash 的功能,支持集中式配置管理。
  • Elastic Alerting:集成在 Kibana 中的告警模块,支持复杂告警规则配置。
  • Elastic Security:提供安全分析、威胁检测、合规审计等能力,适用于安全运维场景。

组件协作流程

数据源(日志/指标) → Beats(采集) → Logstash(过滤转换) → Elasticsearch(存储分析) → Kibana(可视化/告警)

 


ELK 基础运维部署清单

本清单基于 CentOS 8 系统,采用 Filebeat + Logstash + Elasticsearch + Kibana 经典架构,包含核心组件的安装、配置和验证步骤,适合快速搭建测试或生产环境。

一、环境准备

1. 基础依赖安装

# 安装Java(Elasticsearch/Logstash依赖,推荐JDK 11)
yum install -y java-11-openjdk-devel
java -version # 验证安装

# 关闭防火墙和SELinux(生产环境建议配置规则,而非直接关闭)
systemctl stop firewalld && systemctl disable firewalld
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

2. Elastic 官方源配置

# 创建yum源文件
cat > /etc/yum.repos.d/elastic.repo << EOF
[elastic-8.x]
name=Elastic repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
EOF

二、核心组件部署

1. Elasticsearch 部署(核心存储)

(1)安装

yum install -y elasticsearch

(2)核心配置

编辑配置文件 /etc/elasticsearch/elasticsearch.yml,修改以下关键参数:

# 集群名称(同一集群必须一致)
cluster.name: elk-cluster
# 节点名称(每个节点唯一)
node.name: es-node-1
# 数据存储路径
path.data: /data/elasticsearch
# 日志存储路径
path.logs: /var/log/elasticsearch
# 监听地址(0.0.0.0 允许外部访问)
network.host: 0.0.0.0
# HTTP端口
http.port: 9200
# 集群初始化节点(单节点部署填当前节点IP)
discovery.seed_hosts: ["192.168.1.100"]
# 主节点选举候选
cluster.initial_master_nodes: ["es-node-1"]
# 跨域配置(允许Kibana访问)
http.cors.enabled: true
http.cors.allow-origin: "*"

(3)系统优化(必做)

# 1. 修改系统限制(编辑 /etc/security/limits.conf)
cat >> /etc/security/limits.conf << EOF
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
elasticsearch soft nofile 65535
elasticsearch hard nofile 65535
EOF

# 2. 修改内核参数(编辑 /etc/sysctl.conf)
cat >> /etc/sysctl.conf << EOF
vm.max_map_count=262144
EOF
sysctl -p # 生效配置

(4)启动与验证

# 创建数据目录并授权
mkdir -p /data/elasticsearch && chown -R elasticsearch:elasticsearch /data/elasticsearch

# 启动并设置开机自启
systemctl start elasticsearch && systemctl enable elasticsearch

# 验证(返回集群信息则成功)
curl http://192.168.1.100:9200

2. Logstash 部署(数据过滤)

(1)安装

yum install -y logstash

(2)核心配置(Filebeat 输入 → Elasticsearch 输出)

创建配置文件 /etc/logstash/conf.d/filebeat-es.conf

input {
  # 监听Filebeat的数据
  beats {
    port => 5044
  }
}

filter {
  # 示例:解析Nginx日志(根据实际日志格式调整)
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  # 日期格式化
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
}

output {
  # 输出到Elasticsearch
  elasticsearch {
    hosts => ["http://192.168.1.100:9200"]
    index => "logstash-%{+YYYY.MM.dd}" # 按天生成索引
  }
  # 控制台输出(调试用,生产环境可注释)
  stdout { codec => rubydebug }
}

(3)启动与验证

systemctl start logstash && systemctl enable logstash
# 验证端口监听(5044端口被占用则成功)
netstat -tlnp | grep 5044

3. Kibana 部署(可视化)

(1)安装

yum install -y kibana

(2)核心配置

编辑配置文件 /etc/kibana/kibana.yml

# 监听地址(允许外部访问)
server.host: "0.0.0.0"
# Elasticsearch 地址
elasticsearch.hosts: ["http://192.168.1.100:9200"]
# 中文界面配置(可选)
i18n.locale: "zh-CN"

(3)启动与验证

systemctl start kibana && systemctl enable kibana
# 访问验证:浏览器打开 http://192.168.1.100:5601

4. Filebeat 部署(日志采集)

(1)安装

yum install -y filebeat

(2)核心配置(采集 Nginx 日志为例)

编辑配置文件 /etc/filebeat/filebeat.yml

filebeat.inputs:
- type: log
  enabled: true
  # 要采集的日志路径(支持通配符)
  paths:
    - /var/log/nginx/access.log
    - /var/log/nginx/error.log
  # 自定义字段(便于分类)
  fields:
    log_source: nginx
    env: prod

# 输出到Logstash(优先选择,而非直接输出ES)
output.logstash:
  hosts: ["192.168.1.100:5044"]

# 关闭直接输出ES
# output.elasticsearch:
#   hosts: ["localhost:9200"]

(3)启动与验证

systemctl start filebeat && systemctl enable filebeat
# 查看日志确认无报错
tail -f /var/log/filebeat/filebeat

三、基础验证与运维

1. 全链路验证

  1. 访问 Nginx 产生测试日志:curl http://localhost
  2. 打开 Kibana → Stack Management → Index Patterns → 创建索引模式 logstash-*
  3. 进入 Discover 页面,即可查看采集的日志数据

2. 日常运维要点

组件 常用命令 运维关注点
Elasticsearch curl http://IP:9200/_cat/health?v 集群健康状态、分片数量、磁盘使用率
Logstash systemctl status logstash 配置语法错误、管道性能、内存占用
Kibana grep "error" /var/log/kibana/kibana.log 界面访问异常、ES 连接失败
Filebeat filebeat test config 日志路径权限、采集规则生效状态

3. 安全加固建议(生产环境必做)

  1. 开启 Elasticsearch 账号密码认证
  2. 配置 Kibana 权限控制(对接 LDAP/SSO)
  3. 限制防火墙端口访问(仅允许内部服务器连接 9200/5044 端口)