lua-resty-kafka的使用

2024-05-31 17:38
文章标签 使用 lua kafka resty

本文主要是介绍lua-resty-kafka的使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景
在我们的系统架构中,Nginx作为所有HTTP请求的入口,是非常重要的一层。每天产生大量的Nginx Access Log,闲置在硬盘上实在是太浪费资源了。所以,能不能把Nginx日志利用起来,实时监控每个业务的访问趋势、用户行为、请求质量和后端异常呢,这就是本文要探讨的主题。

目的
错误码告警(499、500、502和504);
upstream_response_time超时告警;
request_time超时告警;
数据分析;
关于错误和超时监控有一点要考虑的是收到告警时,要能够快速知道是哪个后端服务节点出现了问题。
在这之前,我们都是通过随机进入一个Nginx节点tail log才能定位到,效率有些低。

架构
废话不多说,先上架构图。整体架构没太复杂的地方,随便画了一张,莫笑话我~

架构图

日志采集
这部分结合lua-resty-kafka使用Lua扩展将数据按照一定格式拼接后写入Kafka集群。Nginx+Lua的性能就不用多说了,这样一来完全可以关掉Nginx本身的日志开关,减少磁盘消耗;

消息队列
我们数据分析组的同事在这之前就已经建立Kafka集群,无需再搞一套消息队列服务。另外一个很重要的点是,我们不希望日志数据取完就删掉了,运维组除了要做监控告警之外,数据组也要读取数据做分析。因此,如Redis此类的消息队列就直接被我们pass掉了;

异常监控计算
这部分使用Heka来做,Heka使用Go语言编写,内置丰富的插件可以满足大部分的需求。若不满足需求,可以使用Go或者Lua自行开发扩展。之前使用过Logstash做业务日志收集,但它有时的CPU占用实在太吓人,不敢再在业务机上使用,并且感觉扩展不方便。就我们目前的应用来看,Heka 的性能和资源占用还是很不错的。

可以使用Filter做计算,有错误时向Heka消息流中写入告警消息,SMTPOuter匹配到告警消息后通过自定义的Encoder定制好邮件内容后再发送。

可视化
Heka层一方面做异常监控,另一方面使用Message Matcher Syntax匹配异常数据写入到Elasticsearch, 再架设一个Kibana。我们在收到告警邮件后,就可以进入Kibana后台查看异常的Log。

不足
邮件告警机制需要优化, 我们目前的设置是每分钟检查一次,发现错误就会一直告警。之后可以优化为发现异常时告警一次,异常结束时再发一次汇总邮件;
Heka服务管理和进程监控需要优化,支持自动重启,不然进程挂了都不知道;
Heka配置接入配置中心并支持自动重启(目前的配置主要是各业务的告警阀值,需要进入机器修改);
总结
整个开发过程还是比较顺利的,唯一比较耗时的是熟悉Heka的整个消息处理的流程和机制,以及如何开发扩展。另一个比较坑的是Heka的错误提示不全和调试不方便,有时完全靠猜,不过好在它本身并没有多复杂,有些问题看一看源代码就明白了。

关于消息队列的选择,前面已经提到我们已有Kafka集群就直接拿来用了。如果仅仅做异常监控,不需要消息留存, 倒可以考虑使用Redis之类轻量些的消息队列, Kafka未免有些重了。

https://github.com/doujiang24/lua-resty-kafka/tree/master/lib/resty/kafka

这篇关于lua-resty-kafka的使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1018602

相关文章

Java使用Javassist动态生成HelloWorld类

《Java使用Javassist动态生成HelloWorld类》Javassist是一个非常强大的字节码操作和定义库,它允许开发者在运行时创建新的类或者修改现有的类,本文将简单介绍如何使用Javass... 目录1. Javassist简介2. 环境准备3. 动态生成HelloWorld类3.1 创建CtC

使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解

《使用Python批量将.ncm格式的音频文件转换为.mp3格式的实战详解》本文详细介绍了如何使用Python通过ncmdump工具批量将.ncm音频转换为.mp3的步骤,包括安装、配置ffmpeg环... 目录1. 前言2. 安装 ncmdump3. 实现 .ncm 转 .mp34. 执行过程5. 执行结

Java使用jar命令配置服务器端口的完整指南

《Java使用jar命令配置服务器端口的完整指南》本文将详细介绍如何使用java-jar命令启动应用,并重点讲解如何配置服务器端口,同时提供一个实用的Web工具来简化这一过程,希望对大家有所帮助... 目录1. Java Jar文件简介1.1 什么是Jar文件1.2 创建可执行Jar文件2. 使用java

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Java中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca