一, ELK 概述
ELK 是 Elasticsearch、Logstash、Kibana 三款开源工具的组合缩写,是 Elastic 公司推出的日志收集、存储、分析与可视化解决方案,后因加入 Beats(轻量数据采集器)扩展为 ELK Stack(也常称 Elastic Stack)。它被广泛用于日志监控、运维分析、安全审计、业务数据可视化等场景,核心优势是实时处理、分布式扩展能力强且可视化友好。
1.1核心组件详解
1.1.1. Elasticsearch
- 定位:分布式、RESTful 风格的搜索引擎,也是 ELK 的 "数据存储与检索核心"。
- 功能 :
- 接收 Logstash/Beats 传输的数据,以 JSON 格式存储(基于倒排索引),支持快速全文检索、聚合分析;
- 分布式架构可横向扩展,通过分片(Shard)和副本(Replica)保证数据高可用和查询性能;
- 提供丰富的 REST API,支持数据的增删改查、集群管理等操作。
- 核心特性:实时性(近实时索引,秒级查询)、高扩展性、容错性、支持复杂聚合(如统计日志中不同错误类型的数量)。
1.1.2. Logstash
- 定位:开源的数据收集与处理管道(ETL 工具)。
- 功能 :
- 采集(Input):从多源采集数据(如日志文件、Redis、Kafka、TCP/UDP 端口等);
- 处理(Filter):对数据进行清洗、转换(如解析日志格式、提取关键字段、过滤无用数据、字段类型转换);
- 输出(Output):将处理后的数据发送到 Elasticsearch、文件、Kafka 等目标。
- 特点:插件生态丰富(内置数百个插件),支持自定义插件,但资源消耗相对较高(JVM 运行)。
1.1.3. Kibana
- 定位:Elasticsearch 的可视化与管理工具。
- 功能 :
- 数据可视化:通过仪表盘(Dashboard)、图表(折线图、柱状图、饼图)、地图等展示 Elasticsearch 中的数据;
- 日志检索:提供交互式查询界面,支持 Lucene 语法,可实时搜索、过滤日志;
- 集群管理:监控 Elasticsearch 集群状态(节点、分片、磁盘使用率等),管理索引生命周期;
- 告警配置:设置阈值告警(如错误日志数量超过阈值时触发通知)。
- 特点:界面直观,支持自定义仪表盘,可嵌入到其他系统中。
1.2.ELK 典型工作流程
- 数据采集:Beats(如 Filebeat)部署在业务服务器上,实时采集日志 / 指标数据;
- 数据处理:Beats 将数据发送到 Logstash,Logstash 对数据进行清洗、解析、过滤;
- 数据存储:Logstash 将处理后的数据输出到 Elasticsearch,Elasticsearch 建立索引并存储;
- 数据可视化 / 分析:Kibana 连接 Elasticsearch,通过搜索、聚合、可视化展示数据,支持告警配置。
简化流程(无 Logstash):Beats → Elasticsearch → Kibana(适用于数据无需复杂处理的场景)。
1.3ELK 核心优势与适用场景
1.3.1 优势
- 实时性:端到端近实时处理,满足日志监控、故障排查的实时需求;
- 扩展性:分布式架构,支持集群横向扩展,应对海量数据;
- 灵活性:插件丰富,支持多源数据采集、自定义处理规则;
- 可视化:Kibana 提供开箱即用的可视化能力,降低分析门槛。
1.3.2 适用场景
- 运维监控:收集服务器、应用日志,实时排查故障(如定位接口报错原因);
- 安全审计:采集防火墙、系统登录日志,检测异常访问(如暴力破解、越权操作);
- 业务分析:分析用户行为日志(如页面访问量、接口调用频次),优化产品;
- 日志集中管理:替代传统分散的日志文件,实现日志统一存储与检索。
安装示例
准备环境 需要干净环境,9200端口未占用
Node1、,192.168.10.4
Node2,,192.168.10.5
1, 关闭安全增强服务

确认java版本

修改主机名


开始部署


修改elasticsearch主配置文件
vim /etc/elasticsearch/elasticsearch.yml
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
--33--取消注释,指定数据存放路径
path.data: /data/elk_data
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/
--43--取消注释,改为在启动的时候不锁定内存
bootstrap.memory_lock: false
--55--取消注释,设置监听地址,0.0.0.0代表所有地址
network.host: 0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200
--68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
discovery.zen.ping.unicast.hosts: ["node1", "node2"]
验证结果


在网站上测试

插入索引
命令作用 :向本地 Elasticsearch 服务(端口 9200)的index-demo1索引中,新增 / 更新test类型、ID 为 1 的文档,文档内容为{"user":"zhangsan","msg":"hello world"}。

查询 Elasticsearch 中已存在的索引列表

返回结果index-demo1是当前 Elasticsearch 中存在的索引名称,对应之前通过PUT命令创建的索引。
安装 ela 7.8.1 版本
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--23--取消注释,指定节点名字:Node1节点为node1,Node2节点为node2
node.name: node1
添加 设置该节点为主节点候选人
node.master: true
添加 设置该节点可以存储数据
node.data: true
--33--取消注释,指定数据存放路径
path.data: /data/elk_data
--37--取消注释,指定日志存放路径
path.logs: /var/log/elasticsearch/
--43--取消注释,改为在启动的时候不锁定内存
bootstrap.memory_lock: false
--55--取消注释,设置监听地址,
0.0.0.0
代表所有地址
network.host:
0.0.0.0
--59--取消注释,ES 服务的默认监听端口为9200
http.port: 9200
transport.tcp.port: 9300
--68--取消注释,集群发现通过单播实现,指定要发现的节点 node1、node2
添加(7.8比较特殊)
discovery.seed_hosts: ["
192.168.10.105:9300
", "
192.168.10.106:9300
"]
cluster.initial_master_nodes: ["node1", "node2"]

验证

Logstash部署

给系统配置

配置log1主机
修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch中。

修改log2主机

输入logstash -e 'input { stdin{} } output { stdout{} }'交互式测试命令,用于快速验证 Logstash 是否能正常运行,无需编写配置文件即可测试数据输入输出链路。
验证输出结果如(hello logstash)并回车

Kiabana部署
安装完后配置文件 vim /etc/kibana/kibana.yml
--2--取消注释,Kiabana 服务的默认监听端口为5601
server.port: 5601
--7--取消注释,设置 Kiabana 的监听地址,0.0.0.0代表所有地址
server.host: "0.0.0.0"
--28--取消注释,设置和 Elasticsearch 建立连接的地址和端口
elasticsearch.hosts: ["http://192.168.10.105:9200"]
--37--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
3.启动 Kibana 服务
systemctl start kibana.service
systemctl enable kibana.service
netstat -natp | grep 5601
验证

浏览器验证



filebeat部署
准备安装包

配置文件

监控的日志文件(按需修改,这里用系统日志示例) filebeat.inputs: - type: log enabled: true paths: - /var/log/messages - /var/log/*.log # 自定义字段(可选) fields: service_name: filebeat log_type: log service_id: 192.168.10.4 # 替换为你的节点IP # 注释Elasticsearch输出 #output.elasticsearch: # hosts: ["localhost:9200"] # 配置Logstash输出(替换为你的Logstash IP) output.logstash: hosts: ["192.168.10.4:5044"] # 把192.168.10.107改成192.168.10.4

logstash写入配置文件

验证

登录kibana验证

MySQL 日志的采集流程
安装logstash服务
配置文件
编写 Logstash 配置文件(采集 + 传输)
cat > /etc/logstash/conf.d/mysql-log.conf <<EOF
input {
file {
path => "/usr/local/mysql/logs/mysql_general.log"
start_position => "beginning"
tags => ["mysql-general"]
}
file {
path => "/usr/local/mysql/logs/mysql_slow.log"
start_position => "beginning"
tags => ["mysql-slow"]
}
}
output {
elasticsearch {
hosts => ["192.168.10.4:9200"]
index => "mysql-%{tags}-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug } # 调试用,可后续注释
}
EOF
.验证配置语法
/usr/share/logstash/bin/logstash --config.test_and_exit -f /etc/logstash/conf.d/mysql-log.conf
# 输出Configuration OK即为语法正确
修复日志权限(Logstash 可读取)
chown -R logstash:logstash /usr/local/mysql/logs
chmod -R 755 /usr/local/mysql/logs
启动 Logstash 验证日志接收(192.168.10.4)
curl -X GET "http://192.168.10.4:9200/_cat/indices?v" | grep mysql-

浏览器访问验证


