十四、ELK 企业日志分析系统

1 ELK 概述

1.1 日志管理背景

服务器、应用会产生系统日志、应用日志、安全日志。传统方式逐台登录服务器 grep/awk 查看日志,服务器数量多的时候效率低下。 ELK(Elastic Stack)开源集中式日志分析平台 ,实现日志统一采集、解析、存储、检索、可视化。 ELK 三大组件:Elasticsearch、Logstash、Kibana;Beats (Filebeat/Metricbeat) 为轻量采集器,替代 Logstash 做前端采集。

数据流:日志源 → Filebeat/Logstash(采集过滤处理) → Elasticsearch(存储索引) → Kibana(Web可视化) → 浏览器

1.2 三大组件作用

  1. Elasticsearch(ES):分布式搜索分析引擎,"金库"
  • 底层基于 Lucene,使用倒排索引,实现近乎实时搜索(毫秒‑1 秒延迟)。
  • 分布式架构,分片 + 副本机制,PB 级海量数据,高可用。
  • 全部操作提供 RESTful HTTP API;支持全文检索、复杂聚合统计(类似 SQL 的 group by)。
  • 端口:9200(HTTP 客户端访问),9300(集群节点之间内部通信)。
  1. Logstash:服务端数据处理管道,"预处理车间搬运工" 处理流水线三段式:Input输入 → Filter过滤解析 → Output输出
  • Input:多源采集,文件、syslog、kafka、数据库、beats、tcp 等。
  • Filter:日志清洗解析,核心插件
    • Grok:正则解析非结构化原始日志,提取字段;
    • Mutate:修改、重命名、删除字段;
    • Date:格式化时间戳;
    • GeoIP:根据 IP 解析地理位置;
    • KV:解析 key=value 格式日志。
  • Output:输出到 Elasticsearch、数据库、消息队列、文件。

Logstash 重量级,资源消耗高;生产前端推荐 Filebeat 轻量采集,再交给 Logstash 做过滤处理。

  1. Kibana:Web 可视化平台,"监控大屏"
  • Discover:交互式日志数据查询浏览,支持 KQL/Lucene 查询语法。
  • Visualize:制作图表:折线图、柱状图、饼图、地图、指标看板。
  • Dashboard:把多个图表组合成监控大屏。
  • Stack Management:索引生命周期 ILM、用户权限、导入导出仪表盘。 端口:5601。

类比理解

  • Logstash:柜台运钞,收集整理数据;
  • Elasticsearch:金库,存储建立精细索引,快速查找;
  • Kibana:监控大屏,可视化展示分析结果。

2 实验环境规划

表格

主机 系统 主机名 IP 软件
node1 CentOS7.9 node1 192.168.108.41 Elasticsearch、Kibana、elasticsearch‑head
node2 CentOS7.9 node2 192.168.108.42 Elasticsearch、elasticsearch‑head
apache CentOS7.9 apache 192.168.108.43 Apache httpd、Logstash

实验目标:搭建 2 节点 ES 集群,采集 apache 访问日志、系统日志送入 ES,Kibana 可视化查看。

3 Elasticsearch 集群部署(node1、node2)

前置准备

  1. 修改/etc/hosts主机名解析,两台节点互相解析 node1、node2。
  2. JDK 环境:openjdk 1.8。
  3. rpm 包安装 elasticsearch‑5.5.0,systemd 管理服务。

elasticsearch.yml 核心配置

复制代码
cluster.name: my‑elk‑cluster        #集群名称,所有节点必须一致
node.name: node1                    #节点名称,每台节点不同
path.data: /data/elk_data           #数据存储目录,手动创建,属主elasticsearch
path.logs: /var/log/elasticsearch/ #日志目录
bootstrap.memory_lock: false        #关闭内存锁,防止swap交换
network.host: 0.0.0.0               #监听所有IP
http.port: 9200                     #http访问端口
discovery.zen.ping.unicast.hosts: ["node1","node2"] #单播集群发现节点
http.cors.enabled: true             #开启跨域(给head插件使用)
http.cors.allow‑origin: "*"

创建数据目录:mkdir -p /data/elk_data ; chown elasticsearch:elasticsearch /data/elk_data

集群验证

  1. 启动两台节点服务;访问http://ip:9200输出节点版本信息。
  2. 集群健康检查 API:http://192.168.108.41:9200/_cluster/health?pretty
  • status 状态:
    • green:全部主分片 + 副本分片正常,集群健康;
    • yellow:主分片正常,副本分片未分配;
    • red:主分片丢失,数据损坏。
  • number_of_nodes:2代表识别 2 个节点。
  1. 查看集群状态:_cluster/state?pretty。

elasticsearch‑head 插件(可视化集群管理工具,端口 9100)

  1. 依赖 Node.js、phantomjs;源码 npm 安装依赖。
  2. ES 配置开启跨域支持,重启 ES。
  3. npm run start &后台启动 head;浏览器访问http://ip:9100,填入 ES 地址http://ip:9200连接集群。

功能:查看节点、分片、索引,执行 REST 测试请求。

curl 简单测试创建索引文档

复制代码
curl -XPUT 'localhost:9200/index‑demo/test/1?pretty' -H 'Content‑Type:application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

ES5.5 索引默认 5 个主分片 + 1 副本分片,两个节点分担分片。

4 Logstash 部署(apache 节点 192.168.108.43)

  1. 安装 httpd,产生 apache 访问日志/var/log/httpd/access_log、error_log;安装 JDK1.8,rpm 安装 logstash。
  2. logstash 常用命令参数
  • -e:命令行直接写 pipeline 配置;
  • -f:读取配置文件;
  • -t:测试配置语法是否正确。
测试 1:标准输入→标准输出
复制代码
logstash -e 'input { stdin{} } output { stdout{} }'
测试 2:rubydebug 格式化输出,观察事件字段
复制代码
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
测试 3:输入 stdin,输出写入 Elasticsearch
复制代码
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.108.41:9200"] } }'

不指定索引名,自动生成索引格式 logstash‑YYYY.MM.dd。

读取系统日志文件写入 ES(conf.d 配置文件)

配置文件/etc/logstash/conf.d/system.conf

复制代码
input {
  file {
    path => "/var/log/messages"
    type => "system"
    start_position => "beginning"
  }
}
output {
  elasticsearch {
    hosts => ["192.168.108.41:9200"]
    index => "system‑%{+YYYY.MM.dd}"
  }
}

重启 logstash,ES-head 观察自动生成system‑日期索引。

5 Kibana 部署(node1 节点,端口 5601)

  1. rpm 安装 kibana‑5.5.1;修改 kibana 配置指定 elasticsearch 集群地址。
  2. 启动服务,浏览器访问 http://192.168.108.41:5601。
  3. 配置索引模式,加载 ES 索引;使用 Discover 查看原始日志,制作可视化图表、Dashboard 大屏。

端口汇总

表格

组件 端口 说明
Elasticsearch HTTP 9200 客户端、head、kibana、logstash 访问
Elasticsearch Transport 9300 ES 集群节点内部通信
elasticsearch‑head 9100 集群管理 web 插件
Kibana 5601 可视化 web 界面
Logstash API 9600 logstash 内部监控 api

思维导图

相关推荐
程序员-Benothing1 小时前
Linux系统监控工具全家桶:sar、dstat、glances、Prometheus
linux·运维·prometheus
flytalei1 小时前
从YAML到Nginx服务访问:动手理解 Kubernetes Pod、Deployment 与 Service
运维·nginx·kubernetes
白帽攻防录2 小时前
SRC 挖洞:DHCP 服务器上的四个 UAF,内网原生 RCE 怎么打域管
运维·服务器·网络安全·内网安全
王琦03182 小时前
jenkins使用手册
运维·jenkins
VidDown2 小时前
用户说“卡顿“,服务器一切正常:播放质量监测与 QoE 指标
运维·服务器·ffmpeg·音视频·视频
瑞克-桑切斯2 小时前
13、DNS、DHCP 与 FTP 协议详解
linux·运维·云计算
程序员-Benothing2 小时前
Linux性能分析方法论:USE、RED、火焰图与perf实战
linux·运维·服务器
问心无愧05133 小时前
[ACTF2020 新生赛]Exec
运维·服务器·笔记
cg.family3 小时前
K8S:scale 与 delete pod 核心区别
运维·docker·容器