ELK 企业级日志分析系统(完整版)
1、ELK 概述
ELK 平台是一套完整的日志集中处理解决方案,将 ElasticSearch、Logstash 和 Kibana 三个开源工具配合使用,完成更强大的用户对日志的查询、排序、统计需求。
ELK 是 Elasticsearch、Logstash、Kibana 的缩写,三者协同实现 “数据收集→处理→存储→可视化” 全链路,角色分工明确:
- Elasticsearch:核心搜索和分析引擎,负责存储数据并提供快速的全文搜索、聚合分析功能。
- Logstash:数据收集和处理管道,从多源采集数据(日志、数据库等),经过滤转换后发送到目标存储(如 Elasticsearch)。
- Kibana:数据可视化工具,提供 Web 界面展示 Elasticsearch 中的数据,支持图表、仪表盘、日志检索等功能。
简单理解
ELK Stack 是 “一体化数据工具包”,解决 “分布式环境下日志分散、查询低效” 的痛点,适用于日志分析、系统监控、业务数据可视化等场景,帮助运维 / 开发人员快速定位问题、挖掘数据价值。
2、Elasticsearch 介绍
Elasticsearch(简称 ES)是基于 Lucene(全文检索引擎架构)开发的分布式存储检索引擎,主打 “实时、可扩展、高可用”,专门用于存储和分析大容量日志 / 结构化数据。
ES 采用 Java 开发,支持通过 RESTful Web 接口 通信(可直接用浏览器、curl 命令调用),无需复杂的客户端适配。
2.1 核心功能
- 全文搜索:基于 Lucene 的倒排索引技术,支持模糊查询、关键词高亮、短语匹配,能快速检索海量文本数据(如日志中的错误关键词)。
- 实时数据分析:数据写入后秒级可查,支持聚合运算(如 “统计 1 小时内各服务器的错误日志数量”),适合实时监控场景。
- 分布式架构:自动分片(Shard)和副本(Replica)机制,数据分散存储在多节点,兼顾扩展性和容错性。
- RESTful API:通过 HTTP 请求即可完成 “创建索引、写入数据、查询分析” 等操作,支持多语言集成(Python、Java 等)。
- 多数据类型支持:除文本外,还支持数值、日期、地理坐标等类型,可存储结构化(如 JSON)、半结构化数据。
2.2 架构与组件
组件 | 定义与作用 |
---|---|
集群(Cluster) | 由 1 个或多个 ES 节点组成的集合,集群名唯一(如my-elk-cluster ),节点间协同工作、共享数据。 |
节点(Node) | 单个 ES 实例,可配置不同角色:- 主节点(Master):管理集群元数据(如索引结构),不存储业务数据;- 数据节点(Data):存储数据分片,处理查询和写入请求;- 协调节点(Coordinating):转发请求,汇总查询结果(默认所有节点都是协调节点)。 |
索引(Index) | 类似传统数据库的 “表”,是一组结构相似的文档集合(如 “system-2024.09.24” 表示 9 月 24 日的系统日志索引)。 |
文档(Document) | ES 的最小数据单元,以 JSON 格式存储(如一条日志就是一个文档),每个文档有唯一 ID。 |
分片(Shard) | 索引的 “分块”,每个索引默认分为 5 个主分片(Primary Shard),主分片不可修改;分片可分布在不同节点,实现并行处理。 |
副本(Replica) | 主分片的 “备份”,默认 1 个副本,副本可提升查询性能和数据安全性(主分片故障时,副本自动切换为主分片)。 |
2.3 使用场景
- 日志 / 事件分析:集中存储分布式系统的日志(如 ES、Nginx、应用日志),支持按时间、关键词、服务器 IP 快速检索。
- 全文搜索应用:电商产品搜索(按名称、描述匹配)、企业文档检索(如内部知识库)。
- 实时监控:结合 Kibana 展示系统 CPU、内存使用率,或业务指标(如接口调用量、错误率),设置阈值报警。
- 商业智能(BI):分析用户行为数据(如访问路径、购买偏好),生成可视化报表辅助决策。
2.4 Elasticsearch 特点与缺点
优点:
- 高性能:倒排索引 + 内存缓存,千万级数据查询响应时间可控制在毫秒级。
- 易扩展:新增节点即可扩展集群容量,无需停机,支持横向扩容至数百节点。
- 灵活性强:无需预先定义表结构(动态映射),可根据文档内容自动识别字段类型。
- 开源免费:Apache 协议,社区活跃,文档丰富,支持多种插件(如 Elasticsearch-head、IK 分词器)。
缺点:
- 资源消耗高:内存密集型应用,建议数据节点内存≥4G(JVM 堆内存默认占物理内存的 50%,最大不超过 32G)。
- 学习曲线陡:查询依赖 DSL(领域特定语言),复杂聚合(如嵌套聚合)需理解语法规则;集群调优(如分片分配、熔断机制)需专业知识。
- 数据一致性弱:默认采用 “最终一致性”,写入数据后副本同步有延迟(毫秒级),不适合强事务场景(如金融交易记录)。
2.5 依赖环境说明
ES 基于 Java 运行,需提前安装 JDK(推荐 1.8 版本,对应 ES 6.x;ES 7.x + 支持 JDK 11):
- 检查 Java 环境:
java -version
,若未安装,执行yum -y install java-1.8.0-openjdk
。 - 官方 JDK 下载:https://www.oracle.com/java/technologies/downloads/ (需注册 Oracle 账号)。
3、Logstash 介绍
Logstash 是 ELK 中的 “数据处理中枢”,由 Ruby 语言编写(运行在 JVM 上),核心能力是 “从多源采集数据→过滤转换→输出到目标”,支持丰富的插件扩展,是日志集中处理的关键组件。
3.1 核心架构:三阶段流程
Logstash 的工作流程分为 Input(输入)→ Filter(过滤)→ Output(输出),每个阶段通过插件实现灵活扩展:
-
Input(数据采集):从数据源获取数据,常用插件包括:
file
:读取本地日志文件(如/var/log/messages
);beats
:接收 Filebeat 发送的日志(默认端口 5044);jdbc
:从 MySQL、PostgreSQL 等数据库读取数据;kafka
:从 Kafka 消息队列消费数据(高并发场景常用)。
-
Filter(数据处理):对采集的原始数据进行清洗、转换,常用插件包括:
grok
:用正则表达式解析非结构化日志(如将 Nginx 访问日志拆分为 “IP、时间、请求方法” 等字段);mutate
:修改字段(如重命名、删除、类型转换,如将 “status” 字段从字符串转为数值);date
:解析日志中的时间字段,统一格式为 ES 的@timestamp
(便于按时间筛选);drop
:丢弃无用日志(如过滤掉 DEBUG 级别的冗余日志)。
-
Output(数据输出):将处理后的数据发送到目标存储,常用插件包括:
elasticsearch
:输出到 ES 集群(最常用场景);stdout
:输出到控制台(调试用,如codec=>rubydebug
显示详细格式);file
:输出到本地文件;kafka
:发送到 Kafka(用于后续其他系统消费)。
3.2 主要特点
- 多源采集:支持日志文件、数据库、消息队列等数十种数据源,无需开发自定义采集脚本。
- 灵活处理:通过 Filter 插件组合,可实现 “解析→清洗→ enrichment(字段补充)” 全流程,满足复杂业务需求(如给日志添加 “服务器 IP”“业务线” 标签)。
- 可扩展性:官方提供数百种插件,也可自定义插件(基于 Ruby 开发),适配特殊场景(如解析自定义格式的应用日志)。
- 实时性:采用流处理模式,数据采集后立即处理并输出,延迟可控制在秒级(适合实时监控)。
3.3 使用场景
- 日志集中处理:采集多台服务器的系统日志、应用日志,统一解析格式后存入 ES(如监控分布式应用的错误日志)。
- 数据格式标准化:将不同来源的日志(如 Nginx、Tomcat、MySQL)转换为统一结构(如 JSON),便于后续分析。
- 数据流中转:作为 “中间件” 连接数据源和存储,如从 Kafka 采集数据,处理后转发到 ES 和 HDFS(同时满足实时分析和离线存储需求)。
3.4 轻量级替代方案:Beats 系列
Logstash 虽功能强大,但存在 “资源占用高(JVM 进程内存常达数百 MB)、不适合边缘节点部署” 的问题,因此 Elastic 推出了 Beats 系列 轻量级采集工具(基于 Go 语言,资源占用 < 100MB),常用工具包括:
① Filebeat(最常用)
- 定位:轻量级日志文件采集器,专门替代 Logstash 的
file
输入插件,部署在需要采集日志的 “边缘节点”(如应用服务器、数据库服务器)。 - 核心优势:
- 低资源消耗:内存占用通常 < 50MB,CPU 使用率 < 5%,适合部署在资源紧张的边缘节点。
- 断点续传:记录日志读取位置(存储在
sincedb
文件),即使重启或断网,恢复后也不会重复采集或丢失日志。 - 内置模块:支持 Nginx、Apache、MySQL 等常见服务的日志解析模板,无需手动写 grok 规则(如
filebeat modules enable nginx
快速开启 Nginx 日志采集)。
- 与 Logstash 配合:Filebeat 负责 “采集 + 初步过滤”(如按日志级别过滤),Logstash 负责 “复杂处理”(如 grok 解析、字段补充),两者结合兼顾 “轻量采集” 和 “灵活处理”。
② 其他 Beats 工具
- Metricbeat:采集系统 / 应用指标(如 CPU、内存、接口调用量),替代 Logstash 的
metric
输入插件。 - Packetbeat:采集网络流量数据(如 TCP/UDP 包),用于网络监控(如分析接口响应时间、排查网络丢包)。
- Winlogbeat:专门采集 Windows 系统日志(如事件查看器中的日志),适配 Windows 服务器场景。
3.5 高并发场景优化:引入消息队列
当采集节点数量多(如数百台服务器)、日志量巨大(如每秒数万条)时,直接用 Filebeat 连接 Logstash 可能导致 Logstash 过载,此时需引入 Kafka/RabbitMQ 消息队列,架构如下:Filebeat(多节点)→ Kafka → Logstash → Elasticsearch
- 作用:
- 削峰填谷:日志峰值时,Kafka 暂存数据,避免 Logstash 被 “压垮”;
- 解耦:Filebeat 和 Logstash 独立部署,Logstash 重启或扩容时,Filebeat 无需修改配置;
- 提高可用性:Kafka 集群可避免单点故障,确保日志不丢失。
4、Kibana 介绍
Kibana 是 ELK 中的 “可视化门面”,与 ES 深度集成,提供 Web 界面实现 “日志检索、数据可视化、仪表盘监控、报警配置” 等功能,让非技术人员也能通过图形化操作分析 ES 中的数据。
4.1 核心功能模块
1. 发现(Discover):日志检索与浏览
- 核心能力:按时间范围、关键词、字段筛选 ES 中的日志,支持 “全文搜索”“精确匹配”“范围查询”(如查询 “status:500” 的错误日志,或 “response_time>1000ms” 的慢请求日志)。
- 实用功能:
- 字段筛选:可隐藏无用字段,只显示 “IP、时间、请求路径、错误信息” 等关键信息;
- 日志导出:将筛选后的日志导出为 CSV 格式(用于离线分析或报表);
- 保存查询:将常用查询条件(如 “近 1 小时的 5xx 错误日志”)保存为 “查询模板”,下次直接调用。
2. 可视化(Visualize):自定义图表
- 支持多种图表类型,满足不同分析需求:
- 基础图表:柱状图(统计各服务器的错误日志数量)、折线图(展示 1 小时内接口调用量趋势)、饼图(占比分析,如不同错误类型的占比);
- 聚合图表:数据表格(展示 “IP、请求次数、平均响应时间” 聚合结果)、热力图(按时间和服务器 IP 展示日志密度)、目标线图表(对比实际值与目标值,如 “接口错误率是否超过 1% 阈值”);
- 地理图表:结合 GeoIP 数据,在地图上展示访问来源分布(如分析网站的地域访问量)。
- 操作逻辑:基于 ES 的 “聚合查询(Aggregation)”,无需手动写 DSL,通过界面配置 “聚合字段、统计方式(如 count、avg、sum)” 即可生成图表。
3. 仪表盘(Dashboard):多图表组合监控
- 将多个 Visualize 图表组合成 “仪表盘”,集中展示核心指标(如 “系统监控仪表盘” 包含 “CPU 使用率、内存使用率、错误日志数量、接口调用量” 等图表)。
- 实用功能:
- 时间联动:所有图表共享一个时间范围(如切换 “近 10 分钟”,所有图表同步更新数据);
- 筛选联动:通过仪表盘顶部的 “筛选器”(如选择 “服务器 IP=192.168.10.15”),所有图表只显示该条件下的数据;
- 自动刷新:设置刷新频率(如 5 秒 / 次),实现实时监控(适合运维监控场景)。
4. 管理(Management):系统配置
- 索引模式(Index Patterns):Kibana 通过 “索引模式” 关联 ES 中的索引(如
system-*
匹配所有以system-
开头的索引),是后续查询、可视化的基础。 - 用户权限:通过 “角色(Role)” 控制用户权限(如给开发人员 “只读权限”,只能查看日志;给管理员 “全权限”,可配置仪表盘、报警)。
- 插件管理:安装扩展插件(如
kibana-plugin install x-pack
,提供报警、监控、安全等增强功能)。 - 高级设置:配置 Kibana 的外观(如语言、主题)、ES 连接参数(如超时时间)。
5. 报警与监控(Alerts & Monitoring)
- 报警(Alerts):基于 ES 的数据设置阈值报警(如 “错误日志数量 5 分钟内超过 10 条”“CPU 使用率超过 90%”),支持邮件、Slack、Webhook 等通知方式。
- 监控(Monitoring):内置 “Elastic Stack 监控” 功能,展示 ES 集群、Logstash、Kibana 的运行状态(如 ES 节点的 CPU、内存使用率,Logstash 的管道处理速率),便于排查组件故障。
6. 其他功能
- Canvas:创建自定义报告(如业务周报、运维月报),支持拖拽式布局,可插入图表、文本、图片,生成可视化文档。
- 机器学习(Machine Learning):通过无监督学习算法自动检测数据异常(如 “接口响应时间突然增长 10 倍”“某 IP 的访问量异常升高”),适合复杂场景的异常监控。
- 日志分析(Logs):专门的日志浏览界面,支持 “按字段筛选”“日志上下文查看”(如点击一条错误日志,查看前后 10 条相关日志,快速定位问题)。
4.2 使用场景
- 运维监控:搭建 “系统监控仪表盘”,实时查看多台服务器的 CPU、内存、磁盘使用率,以及错误日志数量,快速发现硬件或服务故障。
- 应用排障:通过 “Discover” 检索特定关键词的日志(如 “NullPointerException”),按时间排序查看错误上下文,定位代码 bug。
- 业务分析:分析用户行为数据(如 “近 7 天各页面的访问量”“不同地区的注册用户数”),生成业务报表辅助决策(如优化高访问量页面的性能)。
- 安全审计:采集防火墙、登录日志,通过 “可视化” 展示异常登录 IP 的分布,或按时间统计登录失败次数,排查暴力破解风险。
5、ELK 的工作原理
(1)在所有需要收集日志的服务器上部署Logstash;或者先将日志进行集中化管理在日志服务器上,在日志服务器上部署 Logstash。 (2)Logstash 收集日志,将日志格式化并输出到 Elasticsearch 群集中。 (3)Elasticsearch 对格式化后的数据进行索引和存储。 (4)Kibana 从 ES 群集中查询数据生成图表,并进行前端数据的展示。
6、部署环境ELK
配置与名称 | IP | 服务 |
---|---|---|
Node1节点(2C/4G) | node1/192.168.10.13 | Elasticsearch(集群) Kibana |
Node2节点(2C/4G) | node2/192.168.10.14 | Elasticsearch(集群) |
Apache节点 | apache/192.168.10.15 | Logstash Apache |
官方网站(中文) :https://www.elastic.co/cn/downloads/
6.1 环境准备
1、关闭防火墙与增强功能
systectl stop firewalld #关闭防火墙
setenforce 0 #关闭增强功能
2、更改主机名、配置域名解析、查看Java环境
Node1节点:hostnamectl set-hostname node1
Node2节点:hostnamectl set-hostname node2
3、主机名与IP解析
vim /etc/hosts
192.168.10.13 node1
192.168.10.14 node2
4、java安装
注:版本问题
java -version #如果没有安装,yum -y install java
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
也可使用 jdk
6.2 Elasticsearch 集群部署
(在Node1、Node2节点上操作)1、部署 Elasticsearch 软件
(1)安装elasticsearch—rpm包
#上传elasticsearch-6.6.1.rpm到/opt目录下
cd /opt
rpm -ivh elasticsearch-6.6.1.rpm
(2)加载系统服务
systemctl daemon-reload
systemctl enable elasticsearch.service
(3)修改elasticsearch主配置文件
cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
vim /etc/elasticsearch/elasticsearch.yml
--17--取消注释,指定集群名字
cluster.name: my-elk-cluster
--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"]
grep -v "^#" /etc/elasticsearch/elasticsearch.yml
(4)创建数据存放路径并授权
mkdir -p /data/elk_data
chown elasticsearch:elasticsearch /data/elk_data/
(5)启动elasticsearch是否成功开启
systemctl start elasticsearch.service
netstat -antp | grep 9200
(6)查看节点信息
浏览器访问 http://192.168.10.13:9200 、 http://192.168.10.14:9200 查看节点 Node1、Node2 的信息。
浏览器访问 http://192.168.10.13:9200/_cluster/health?pretty 、 http://192.168.10.14:9200/_cluster/health?pretty查看群集的健康情况,可以看到 status 值为 green(绿色), 表示节点健康运行。
绿色:健康 数据和副本 全都没有问题
红色:数据都不完整
黄色:数据完整,但副本有问题
浏览器访问 http://192.168.10.13:9200/_cluster/state?pretty 检查群集状态信息。
#使用上述方式查看群集的状态对用户并不友好,可以通过安装 Elasticsearch-head 插件,可以更方便地管理群集。
2.安装 Elasticsearch-head 插件
Elasticsearch 在 5.0 版本后,Elasticsearch-head 插件需要作为独立服务进行安装,需要使用npm工具(NodeJS的包管理工具)安装。
安装 Elasticsearch-head 需要提前安装好依赖软件 node 和 phantomjs。
node:是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
phantomjs:是一个基于 webkit 的JavaScriptAPI,可以理解为一个隐形的浏览器,任何基于 webkit 浏览器做的事情,它都可以做到。
java -jar weifuwu.jar/war
(1)编译安装 node
#上传软件包 node-v8.2.1.tar.gz 到/opt
yum install gcc gcc-c++ make -y
cd /opt
tar zxvf node-v8.2.1.tar.gz
cd node-v8.2.1/
./configure
make && make install
(2)安装 phantomjs(前端的框架)
#上传软件包 phantomjs-2.1.1-linux-x86_64.tar.bz2 到
cd /opt
tar jxvf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src/
cd /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin
cp phantomjs /usr/local/bin
(3)安装 Elasticsearch-head 数据可视化工具
#上传软件包 elasticsearch-head.tar.gz 到/opt
cd /opt
tar zxvf elasticsearch-head.tar.gz -C /usr/local/src/
cd /usr/local/src/elasticsearch-head/
npm install
(4)修改 Elasticsearch 主配置文件
vim /etc/elasticsearch/elasticsearch.yml
......
--末尾添加以下内容--
http.cors.enabled: true #开启跨域访问支持,默认为 false
http.cors.allow-origin: "*" #指定跨域访问允许的域名地址为所有
systemctl restart elasticsearch
(5)启动 elasticsearch-head 服务
#必须在解压后的 elasticsearch-head 目录下启动服务,进程会读取该目录下的 gruntfile.js 文件,否则可能启动失败。
cd /usr/local/src/elasticsearch-head/
npm run start &
> elasticsearch-head@0.0.0 start /usr/local/src/elasticsearch-head
> grunt server
Running "connect:server" (connect) task
Waiting forever...
Started connect web server on http://localhost:9100
#elasticsearch-head 监听的端口是 9100
netstat -natp |grep 9100
(6)通过 Elasticsearch-head 查看 Elasticsearch 信息
通过浏览器访问 http://192.168.10.13:9100/ 地址并连接群集。如果看到群集健康值为 green 绿色,代表群集很健康。
(7)插入索引
#通过命令插入一个测试索引,索引为 index-demo,类型为 test。
//输出结果如下:curl -X PUT 'localhost:9200/index-demo1/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
{
"_index" : "index-demo",
"_type" : "test",
"_id" : "1",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 2,
"failed" : 0
},
"created" : true
}
浏览器访问 http://192.168.10.13:9100/ 查看索引信息,可以看见索引默认被分片5个,并且有一个副本。
点击“数据浏览”,会发现在node1上创建的索引为 index-demo,类型为 test 的相关信息。
6.3 Logstash 部署
(在 Apache 节点上操作)Logstash 一般部署在需要监控其日志的服务器。在本案例中,Logstash 部署在 Apache 服务器上,用于收集 Apache 服务器的日志信息并发送到 Elasticsearch。
1.更改主机名
hostnamectl set-hostname apache
2.安装Apahce服务(httpd)
yum -y install httpd
systemctl start httpd
3.安装Java环境
yum -y install java
java -version
4.安装logstash
#上传软件包 logstash-6.6.1.rpm 到/opt目录下
cd /opt
rpm -ivh logstash-6.6.1.rpm
systemctl start logstash.service
systemctl enable logstash.service
ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
5.测试 Logstash
Logstash 命令常用选项:
-f:通过这个选项可以指定 Logstash 的配置文件,根据配置文件配置 Logstash 的输入和输出流。
-e:从命令行中获取,输入、输出后面跟着字符串,该字符串可以被当作 Logstash 的配置(如果是空,则默认使用 stdin 作为输入,stdout 作为输出)。
-t:测试配置文件是否正确,然后退出。
定义输入和输出流:
#输入采用标准输入,输出采用标准输出(类似管道)
logstash -e 'input { stdin{} } output { stdout{} }'
......
www.baidu.com #键入内容(标准输入)
2020-12-22T03:58:47.799Z node1 www.baidu.com #输出结果(标准输出)
www.sina.com.cn #键入内容(标准输入)
2017-12-22T03:59:02.908Z node1 www.sina.com.cn #输出结果(标准输出)
//执行 ctrl+c 退出
#使用 rubydebug 输出详细格式显示,codec 为一种编解码器
logstash -e 'input { stdin{} } output { stdout{ codec=>rubydebug } }'
......
www.baidu.com #键入内容(标准输入)
{"@timestamp" => 2020-12-22T02:15:39.136Z, #输出结果(处理后的结果)"@version" => "1","host" => "apache","message" => "www.baidu.com"
}
#使用 Logstash 将信息写入 Elasticsearch 中
logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.10.13:9200"] } }'输入 输出 对接
......
www.baidu.com #键入内容(标准输入)
www.sina.com.cn #键入内容(标准输入)
www.google.com #键入内容(标准输入)
//结果不在标准输出显示,而是发送至 Elasticsearch 中,可浏览器访问 http://192.168.10.13:9100/ 查看索引信息和数据浏览。
6.定义 logstash配置文件
Logstash 配置文件基本由三部分组成:input、output 以及 filter(可选,根据需要选择使用)。
input:表示从数据源采集数据,常见的数据源如Kafka、日志文件等
filter:表示数据处理层,包括对数据进行格式化处理、数据类型转换、数据过滤等,支持正则表达式
output:表示将Logstash收集的数据经由过滤器处理之后输出到Elasticsearch。
#格式如下:
input {...}
filter {...}
output {...}
#在每个部分中,也可以指定多个访问方式。例如,若要指定两个日志来源文件,则格式如下:
input {file { path =>"/var/log/messages" type =>"syslog"}file { path =>"/var/log/httpd/access.log" type =>"apache"}
}
#修改 Logstash 配置文件,让其收集系统日志/var/log/messages,并将其输出到 elasticsearch 中。
chmod +r /var/log/messages #让 Logstash 可以读取日志
vim /etc/logstash/conf.d/system.conf
input {file{path =>"/var/log/messages" #指定要收集的日志的位置type =>"system" #自定义日志类型标识start_position =>"beginning" #表示从开始处收集}
}
output {elasticsearch { #输出到 elasticsearchhosts => ["192.168.10.13:9200"] #指定 elasticsearch 服务器的地址和端口index =>"system-%{+YYYY.MM.dd}" #指定输出到 elasticsearch 的索引格式}
}
systemctl restart logstash
浏览器访问 http://192.168.10.13:9100/ 查看索引信息
6.4 Kiabana 部署
(
在 Node1 节点上操作)
官方网站 :https://www.elastic.co/cn/downloads/kibana/
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.1-linux-x86_64.tar.gz
1.安装 Kiabana
#上传软件包 kibana-6.6.1-x86_64.rpm 到/opt目录
cd /opt
rpm -ivh kibana-6.6.1-x86_64.rpm
2.设置 Kibana 的主配置文件
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.13:9200"]
--37--取消注释,设置在 elasticsearch 中添加.kibana索引
kibana.index: ".kibana"
3.启动 Kibana 服务
systemctl start kibana.service
systemctl enable kibana.service
netstat -natp | grep 5601
4.验证 Kibana
浏览器访问 http://192.168.10.13:5601
第一次登录需要添加一个 Elasticsearch 索引:
Index Patterns---》create index Patterns
//输入:system-* #在索引名中输入之前配置的 Output 前缀“system”
然后--》Next step(下一步)--》Time Filter field name--》@timestarmp
单击 “create index Patterns” 按钮创建,单击 “Discover” 按钮可查看图表信息及日志信息。
数据展示可以分类显示,在“Available Fields”中的“host”,然后单击 “add”按钮,可以看到按照“host”筛选后的结果
后面再次创建的步骤---》Management--》index Patterns--》单击 “create index Patterns” 按钮创建
5.将 Apache 服务器的日志(访问的、错误的)添加到 Elasticsearch 并通过 Kibana 显示
vim /etc/logstash/conf.d/apache_log.conf
input {file{path => "/etc/httpd/logs/access_log"type => "access"start_position => "beginning"}file{path => "/etc/httpd/logs/error_log"type => "error"start_position => "beginning"}
}
output {if [type] == "access" {elasticsearch {hosts => ["192.168.10.13:9200"]index => "apache_access-%{+YYYY.MM.dd}"}}if [type] == "error" {elasticsearch {hosts => ["192.168.10.13:9200"]index => "apache_error-%{+YYYY.MM.dd}"}}
}
cd /etc/logstash/conf.d/
/usr/share/logstash/bin/logstash -f apache_log.conf
浏览器访问 http://192.168.10.13:9100 查看索引是否创建
浏览器访问 http://192.168.10.13:5601 登录 Kibana,单击“Create Index Pattern”按钮添加索引, 在索引名中输入之前配置的 Output 前缀 apache_access-*,并单击“Create”按钮。在用相同的方法添加 apache_error-*索引。 选择“Discover”选项卡,在中间下拉列表中选择刚添加的 apache_access-* 、apache_error-* 索引, 可以查看相应的图表及日志信息。
7、Filebeat+ELK 部署
配置与名称 | IP | 服务 |
---|---|---|
Node1节点(2C/4G) | node1/192.168.10.13 | Elasticsearch(集群) Kibana |
Node2节点(2C/4G) | node2/192.168.10.14 | Elasticsearch(集群) |
Apache节点 | apache/192.168.10.15 | Logstash Apache |
Filebeat节点 | filebeat/192.168.10.16 | Filebeat |
官方网站(中文下载):https://www.elastic.co/cn/downloads/beats/filebeat
####在 Filebeat节点 节点上操作
https://www.elastic.co/cn/downloads/beats/filebeat
1.安装 Filebeat 两种
① 二进制解包即可
#上传软件包 filebeat-6.6.1-linux-x86_64.tar.gz 到/opt目录
tar zxvf filebeat-6.6.1-linux-x86_64.tar.gz
mv filebeat-6.2.4-linux-x86_64/ /usr/local/filebeat
② 使用rpm包安装 上传包
[root@kgc16 opt]# rpm -ivh filebeat-6.6.1-x86_64.rpm
2.设置 filebeat 的主配置文件
① 如果使用第一种方式按照如下配置
cd /usr/local/filebeat
vim filebeat.yml
filebeat.prospectors:
- type: log #指定 log 类型,从日志文件中读取消息enabled: truepaths:- /var/log/messages #指定监控的日志文件- /var/log/*.logfields: #可以使用 fields 配置选项设置一些参数字段添加到 output 中service_name: filebeatlog_type: logservice_id: 192.168.10.16
--------------Elasticsearch output-------------------
(全部注释掉)
----------------Logstash output---------------------
output.logstash:hosts: ["192.168.10.15:5044"] #指定 logstash 的 IP 和端口
#启动 filebeat
./filebeat -e -c filebeat.yml
② rpm包方式安装 配置都一样
vim /etc/filebeat/filebeat.yml
3.在 Logstash 组件所在节点上新建一个 Logstash 配置文件
cd /etc/logstash/conf.d
vim logstash.conf
input {beats {port => "5044"}
}
output {elasticsearch {hosts => ["192.168.10.13:9200"]index => "%{[fields][service_name]}-%{+YYYY.MM.dd}"}stdout {codec => rubydebug}
}
#启动 logstash
logstash -f logstash.conf
4.浏览器访问 http://192.168.10.13:5601 登录 Kibana,
先点击Management--》“Index Pattern”--》“Create Index Pattern”按钮创建--》选择输入“Index Pattern”--》然后Next step(下一步)--》Time Filter field name--》@timestarmp
单击 “Discover” 按钮可查看图表信息及日志信息。 按钮添加索引“filebeat-*”