企业ELK日志搜索引擎— Elastic Stack 实战手册

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 通过每个应用服务器上部署 filebeat,上传到 kafka;由 kafka 分发消息到 logstash; Logstatsh 写入日志到 Elasticsearch 集群;

970X90.png

· 更多精彩内容,请下载阅读全本《Elastic Stack实战手册》

· 加入创作人行列,一起交流碰撞,参与技术圈年度盛事吧

创作人:朱祝元
审稿人:朱永生

技术架构

1.png

  • 物理部署:

1master;5 Data;1 Logstash+kibana;3 kafka 3 主 3 从交叉部署

  • 应用框架:

项目采用 springboot 作为基础框架开发分布式应用;

  • 实施方案:

通过每个应用服务器上部署 filebeat,上传到 kafka;由 kafka 分发消息到 logstash; Logstatsh 写入日志到 Elasticsearch 集群;

  • 应用目标:

收集 50 台机器的日志,可以及时发现日志中的错误日志以及日志对应的上下文。

日志解决方案的演进

阶段一、项目上线一切刚开始

每个程序员通过 ssh 将数据 copy 到堡垒机。然后把数据从堡垒机下载到本地处理数据,分析日志;

遇到的问题

  1. 下载日志到本地,文件太大难以处理:每个日志文件大概 500M,这种体量,Windows 上任何文本工具打开都很吃力,还要下载多个文件,下载速率也有很大影响;
  2. 远程服务器上查找,服务器关联多:同一个服务部署的有多个节点,那么找一个需要的日志就要多个服务器都执行类似于下面的命令来查找蛛丝马迹:
more INFO-2020-12-17.0.log |grep -C 5 'scanRecord'

如果遇到关联的服务日志查询,还会让事情的复杂度变的更高。

阶段二、测试环境建立ELK环境

实践过程:

刚开始的时候 1 master+ 3 data;有一个普遍的认知就是,单个 Elasticsearch data 节点的每个分片数据大小:30GB-50GB。因为我们的系统是 4 核 8G 的配置,因此我们采用了下限,也就是每个 Shard 30G。这样子运行了 3 个月。

采用策略:

按天产生 index,一些 IP,APP 应用名等不需要分词查询的字段都禁用了 index (这样可以节省磁盘),只保留一周的日志回溯,3 天的日志 alive 查询,4 天的日志 close。一周以上的 index 直接 delete ,晚上 12点 定时执行 forcemerge。

遇到瓶颈,系统扩容:

因为随着系统票件量的提升,日志数据逐步增加。慢慢就会感到系统查询非常慢,磁盘空间慢慢的无法做到保留一周日志回溯,立马进行了系统扩容。

扩容后:

系统会自动进行索引分片重分配,会把分片均匀的分布到所有的节点上。比如刚开始 3 台 data 节点 6 个分片,平均每个机器会有 2 个分片,那么系统扩容一倍后,会变成 6 个 data 节点,那么这 6 个分片,会自动平均分布到 6 个 data 节点上。每个节点有一个 shard。

扩容步骤

修改配置文件

主要修改所有 Elasticsearch 节点的elasticsearch.yml中的 IP 地址,如果一个机器上部署多个节点,记得将端口号加上。

一个机器上部署三个节点实例

discovery.zen.ping.unicast.hosts:["192.168.207.43:9300","192.168.207.43:9301","192.168.207.43:9302"]

配合的属性:

http.port: 9202
transport.tcp.port: 9302

分批启动ES

  • 启动顺序:先启动 master 节点,再启动其他类型的节点。
  • 启动命令:nohup ./bin/elasticsearch > nohup.out 2>&1 &

心路旅程

1、资源并不是充裕的。可以使用 Stack Monitoring 上的磁盘监控功能,随时监控磁盘的剩余空间。

2.png

并且,可以在数据可靠性要求允许的情况下,在索引生命周期管理中,把冷数据的index.number_of_replicas设置为 0。

3.png

2、最佳的 Kafka 分发效率。如果使用了 Kafka,注意 Kafka 的 Partition 与 Topic 的配置关系,通常来说 Logstash 中 Worker 的数量应该等于或大于 Kafka Partition 的数量,以便于达到最优的分发效率

3、SSD 的取舍。数据量过大。磁盘 IO 也真的能成为瓶颈,对比集群没有数据和集群数据量达到磁盘容量的50%的时候,写入的速率差别很大。业务需求需要实时查询的场景能上 SSD 就上SSD。

创作人简介:
朱祝元,从事 JAVA 企业级应用开发十余年,获得 pmp,acp 项目管理认证。有扎实
的企业级开发经验,以及分布式应用开发架构经验,参与了千万级的复杂项目数据场景
业务处理。
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
2月前
|
存储 消息中间件 网络协议
日志平台-ELK实操系列(一)
日志平台-ELK实操系列(一)
|
7天前
|
Java Maven Spring
超实用的SpringAOP实战之日志记录
【11月更文挑战第11天】本文介绍了如何使用 Spring AOP 实现日志记录功能。首先概述了日志记录的重要性及 Spring AOP 的优势,然后详细讲解了搭建 Spring AOP 环境、定义日志切面、优化日志内容和格式的方法,最后通过测试验证日志记录功能的准确性和完整性。通过这些步骤,可以有效提升系统的可维护性和可追踪性。
|
18天前
|
存储 监控 安全
|
1月前
|
Java 程序员 应用服务中间件
「测试线排查的一些经验-中篇」&& 调试日志实战
「测试线排查的一些经验-中篇」&& 调试日志实战
22 1
「测试线排查的一些经验-中篇」&& 调试日志实战
|
3月前
|
SQL 运维 监控
Nest.js 实战 (十):使用 winston 打印和收集日志记录
这篇文章介绍了在Nest服务中如何使用Winston记录日志。文章首先强调了日志记录在后台服务中的重要性,接着提到Nest默认的内部日志记录器,并指出可以通过@nestjs/common包中的Logger类来全面控制日志系统的行为。文章还提到,为了在生产环境中实现更高级的日志功能,可以使用如Winston之类的Node.js日志包。接下来,文章介绍了如何在Nest服务中使用Winston记录日志,包括安装相关依赖、创建winston配置文件以及实现简单的日志记录示例。最后,文章指出更高级的自定义日志功能需要读者自己去探索。
120 2
Nest.js 实战 (十):使用 winston 打印和收集日志记录
|
2月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
116 0
|
3月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
57 0
|
3月前
|
SQL 安全 测试技术
【数据守护者必备】SQL数据备份与恢复策略全解析:从全量到日志备份,手把手教你确保企业信息万无一失的实战技巧!
【8月更文挑战第31天】数据库是企业核心业务数据的基石,为防止硬件故障、软件错误或人为失误导致的数据丢失,制定可靠的备份与恢复策略至关重要。本文通过一个在线购物平台的案例,详细介绍了使用 SQL Server 进行全量备份、差异备份及事务日志备份的方法,并演示了如何利用 SQL Server Agent 实现自动化备份任务。此外,还提供了数据恢复的具体步骤和测试建议,确保数据安全与业务连续性。
149 0
|
3月前
|
存储 消息中间件 监控
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统ELK、日志收集分析
Java日志详解:日志级别,优先级、配置文件、常见日志管理系统、日志收集分析。日志级别从小到大的关系(优先级从低到高): ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF 低级别的会输出高级别的信息,高级别的不会输出低级别的信息
|
15天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
128 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板