ELK太重?试试KFC日志采集

写在前面

  ELK三剑客(ElasticSearch,Logstash,Kibana)基本上可以满足日志采集、信息处理、统计分析、可视化报表等一些日志分析的工作,但是对我们来说……太重了,并且技术栈不是一路的。我们的场景是需要采集各个业务部门服务器上面的各个业务系统,所以尽量不要影响到服务器的性能,以侵入性最低的方式进行采集,不做其他多余操作。因而,在前端日志采集这块,对比其他Logstash、Flume等采集工具之后,决定采用轻量的Filebeat作为日志采集工具,Filebeat采用go开发,运行不需要额外部署环境,相比Flume依赖jdk轻量了不少,且占用内存低。

  采集链路如下所示:Filebeat日志采集、处理转换之后,推送到kafka,采用Clickhouse的kafka引擎进行消费存储。因而,我暂且称之为KFC????组合。

Filebeat部署

采集目标环境:

  系统:Window Server 2008 R2 Enterprise

  日志类别:IIS日志、业务系统日志

  日志路径:D:/IIS/www.A.com/logs/*.txt 、 

                        D:/IIS/www.B.com/logs/*.txt、

                        D:/IIS/www.C.com/logs/*.txt

  Filebeat:7.12.1

        因为采集的是windows操作系统,建议下载Filebeat压缩包,并以windows服务的方式运行,使用安装包msi安装不方便调试,需要频繁的卸载、安装操作,下载之后解压出来进行对配置文件 filebeat.yml 进行配置。

  业务系统日志格式示例:

2021-04-06 11:21:17,940 [39680] DEBUG Zc -  time:0ms update XXX set ModifyTime=GETDATE(), [State] = 190, [FuZeRen] = '张三' where [ID] = '90aa9a69-7a33-420e-808c-624693c65aef' and [CompanyID] = '9e52867e-2035-4148-b09e-55a90b3020d5' 
2021-04-06 11:21:21,612 [22128] DEBUG Service ModelBase -  time:0ms (/api/XXX/XXX/XXX?InfoID=6d43b831-6169-46d2-9518-f7c9ed6fe39c&ValidateStatus=1)更新材料状态
2021-04-06 11:21:21,612 [22128] DEBUG Zc -  time:0ms select ID from XXX where InfoRelationID='6d43b831-6169-46d2-9518-f7c9ed6fe39c' 
2021-04-06 11:21:21,612 [22128] DEBUG Zc -  time:0ms insert into XXXX(ValidateDate ,[ID],[ValidateState],[ValidateUser],[ValidateUserID],[ValidateUnit],[ValidateUnitID],[ValidateUnitType],[InfoRelationID]) values( GETDATE(),'c77cf4ab-71b5-46c7-b91b-2829d73aa700',1,'XXXX','0387f889-e1d4-48aa-b275-2241da1d2c9e','XXXXX有限公司','2f2a94c8-c23c-4e8a-98b3-c32a9b0487f7',0,'6d43b831-6119-46d2-9518-f7c9ed6fe39c')
2021-04-06 03:25:22,237 [46840] ERROR ASP.global_asax - time:0ms 客户端信息:Ip:116.238.55.21, 173.131.245.61 浏览器:Chrome 版本:68 操作系统:WinNT服务端错误信息:
页面:http://www.A.com:803/dbapp_53475dbapp_e524534.php
错误源:System.Web.Mvc
堆栈跟踪:at System.Web.Mvc.DefaultControllerFactory.GetControllerInstance(RequestContext requestContext, Type controllerType)
at System.Web.Mvc.DefaultControllerFactory.CreateController(RequestContext requestContext, String controllerName)
at System.Web.Mvc.MvcHandler.ProcessRequestInit(HttpContextBase httpContext, IController& controller, IControllerFactory& factory)
at System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state)
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

FileBeat配置:

max_procs: 2
queue:mem:events: 2048flush.min_events: 2048
# ============================== Filebeat inputs ===============================filebeat.inputs:# 管理系统 
- type: logenabled: trueencoding: GB2312paths:- D:/IIS/www.A.com/logs/*.txtmultiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}'multiline.negate: truemultiline.match: afterfields:topic: 'dlbZcZGBSyslogs'fields_under_root: true# 单位系统 
- type: logenabled: trueencoding: GB2312paths:- D:/IIS/www.B.com/logs/*.txt### Multiline optionsmultiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}'multiline.negate: truemultiline.match: afterfields:topic: 'dlbZcDWSyslogs'fields_under_root: true# 个人系统  
- type: logenabled: trueencoding: GB2312paths:- D:/IIS/www.C.com/logs/*.txt### Multiline optionsmultiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}'multiline.negate: truemultiline.match: afterfields:topic: 'dlbZcMySyslogs'fields_under_root: true# 调试输出
#output.console:
#   pretty: true
#output.file:
#  path: "D:/bigData"
#  filename: filebeat.log# -------------------------------- Kafka Output --------------------------------
output.kafka:# Boolean flag to enable or disable the output module.enabled: truehosts: ["192.168.1.10:9092"]# The Kafka topic used for produced events. The setting can be a format string# using any event field. To set the topic from document type use `%{[type]}`.topic: '%{[topic]}'# Authentication details. Password is required if username is set.#username: ''#password: ''# The number of concurrent load-balanced Kafka output workers.worker: 2max_message_bytes: 10000000# ================================= Processors =================================
processors:- add_host_metadata:when.not.contains.tags: forwarded- add_cloud_metadata: ~- add_docker_metadata: ~- add_kubernetes_metadata: ~- script:lang: javascriptid: my_filtertag: enablesource: >function process(event) {var str = event.Get("message");var sp = str.split(" "); var log_datetime = sp.slice(0,2).join(" ");var regEx = /^\d{4}-\d{2}-\d{2}$/;var prefix_date = log_datetime.substring(0, 10);if(prefix_date.match(regEx) != null){event.Put("server","221");log_datetime = log_datetime.replace(",",".");log_datetime = log_datetime.replace("'","");regEx = /^\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}.\d{3}$/;if(log_datetime.match(regEx) != null){event.Put("log_datetime",log_datetime);event.Put("log_index",sp.slice(2,3).join(" ").replace("[","").replace("]",""));event.Put("log_level",sp.slice(3,4).join(" "));if(str.match(/(?<=time:)\S*(?=ms)/)!=null){var spTime= str.split("time:");var spPre = spTime[0].split(" ");var spNext = spTime[1].split(" ");                    event.Put("log_class",spPre.slice(4).join(" ")); var log_execTime= spNext.slice(0,1).join(" ").replace("ms","");regEx = /^(\-|\+)?\d+(\.\d+)?$/;if(regEx.test(log_execTime)){event.Put("log_execTime",log_execTime);}else{event.Put("log_execTime","-1");}event.Put("log_message",spNext.slice(1).join(" "));}else{event.Put("log_class",sp.slice(4,5).join(" "));event.Put("log_execTime","-1");event.Put("log_message",sp.slice(6).join(" "));}return;}}event.Cancel();}- drop_fields:fields: ["@timestamp", "message", "host", "ecs", "agent", "@metadata", "log", "input"]

以上的配置说明:

  max_procs:设置可以同时执行的最大CPU数;

  queue :内部队列信息;

  Filebeat inputs:日志数据源采集的入口;

  其他字段如下说明:

#日志类型
- type: log        
#开启enabled: true
#编码格式,有中文必须设置encoding: GB2312
#路径paths:- D:/IIS/www.A.com/logs/*.txt
#多行匹配前缀multiline.pattern: '^\d{4}-\d{1,2}-\d{1,2}'
#开启多行匹配multiline.negate: true
#开启多行之后,匹配是合并到上一条信息multiline.match: after
#增加一个字段,用于kafka的topic的识别fields:topic: 'dlbZcZGBSyslogs'
# 字段增加在输出json的根目录下fields_under_root: true//https://www.cnblogs.com/EminemJK/p/15165961.html

        Kafka Output:kafka的配置信息,主要是  topic: '%{[topic]}' 的设置,因为这里采集多个数据源,对于不同的topic,在数据源输入的时候,已经设置好字段如 topic: 'dlbZcZGBSyslogs' ,所以此处使用占位符灵活设置;

  Processors:配置处理器,即对采集的日志信息进行处理,处理是按行处理,当字符串处理即可,可以使用js语法进行对字符串进行处理;Filebeat的处理器可以多种多样,具体可以看文档。

另外,在调试的时候,可以采用文件输出或Console输出来观察处理后输出的数据格式,再进行微调:

output.file:path: "D:/bigData"filename: filebeat.log

        IIS的日志也差不多,只是微调处理逻辑就可以了,一通百通。

        其他配置可以参考官网文档:

https://www.elastic.co/guide/en/beats/filebeat/current/index.html

Kafka配置

Kafka没有特别的处理,在这里只是进行消息的接收,新建好主题就可以。

//个人系统
bin/kafka-topics.sh --create --zookeeper 192.168.1.10:2181 --replication-factor 1 --partitions 3 --topic dlbZcMySyslogs
//单位系统
bin/kafka-topics.sh --create --zookeeper 192.168.1.10:2181 --replication-factor 1 --partitions 3 --topic dlbZcDWSyslogs
//管理系统
bin/kafka-topics.sh --create --zookeeper 192.168.1.10:2181 --replication-factor 1 --partitions 3 --topic dlbZcZGBSyslogs

        partitions 分区数的大小,取决设置了多少个消费者,这里我们有三台服务器做了Clickhouse的集群作为消费者,所以分区数设置为3,一般情况,消费者总数不应该大于分区数,每个分区只能分配一个消费者。

Clickhouse配置

  Clickhouse三个分片的集群,如果你是单机的,只需要把语法相应的修改一下即可。

  在每台服务器上创建kafka引擎表:

CREATE TABLE kafka_dlb_ZC_My_syslogs (log_datetime DateTime64,log_index String,log_level String,log_class String,log_message String,log_execTime Float32,server String) ENGINE = KafkaSETTINGS kafka_broker_list = '192.168.1.10:9092',kafka_topic_list = 'dlbZcMySyslogs',kafka_group_name = 'dlbZcMySyslogs_sys',kafka_format = 'JSONEachRow',kafka_num_consumers = 1;

        创建实体表:

CREATE TABLE dlb_ZC_My_syslogs on cluster cluster_3s_1r(log_datetime DateTime64,log_index String,log_level String,log_class String,log_message String,log_execTime Float32,server String) ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/dlb_ZC_My_syslogs', '{replica}')ORDER BY toDate(log_datetime)PARTITION BY toYYYYMM(log_datetime);//https://www.cnblogs.com/EminemJK/p/15165961.html

  实体表是使用集群来创建的,如果是单机请删除

 on cluster cluster_3s_1r ,并修改表引擎即可。如果已经开启了zookeeper且开启复制表,在任一一台服务器运行运行一次即可。

   在每台服务器上创建物化视图:

 CREATE MATERIALIZED VIEW viem_dlb_ZC_My_syslogs_consumer TO dlb_ZC_My_syslogsAS SELECT *FROM kafka_dlb_ZC_My_syslogs;

        创建分布式视图(可选,单机请忽略):

CREATE TABLE Dis_dlb_ZC_My_syslogs ON CLUSTER cluster_3s_1rAS LogsDataBase.dlb_ZC_My_syslogsENGINE = Distributed(cluster_3s_1r, 'LogsDataBase',  'dlb_ZC_My_syslogs',rand());

        分布式表将聚合集群中每个分片的表信息,进行执行一次。

运行

  顺便提供一个快速运行Filebeat和卸载的bat脚本:

  运行服务:

//windows server2008以上版本的服务器
cd %~dp0
.\install-service-filebeat.ps1
pause//windows server 2008 和以下的服务器cd %~dp0PowerShell.exe -ExecutionPolicy RemoteSigned -File .\install-service-filebeat.ps1pause

     卸载服务:

//windows server2008以上版本的服务器
cd %~dp0
.\uninstall-service-filebeat.ps1
pause//windows server2008和以下版本的服务器
cd %~dp0
PowerShell.exe -ExecutionPolicy RemoteSigned -File .\uninstall-service-filebeat.ps1
pause

运行之后,在任务管理器中,将服务设置为运行即可。

  查看分布式数据:

数据采集完毕,完美。

  既然数据已经有了,数据可视化方面可以采用多种方式了,以Grafana为例:

 最后

  下班,周末愉快。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299297.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux引导时输入特殊信息的含义

linux引导时输入特殊信息的含义&#xff1a;通常只有在缺省模式失败&#xff08;屏幕一片混乱或者安装到某个阶段无法进行下去&#xff09;的情况下会尝试这些模式。 对于一些支持的其他模式&#xff0c;参考文件/usr/share/doc/anaconda*/command-line.txt&#xff08;如果安装…

ActionContext和ActionSupport的学习

2019独角兽企业重金招聘Python工程师标准>>> ActionContext和ActionSupport的学习 1.ActionContext中有众多的定义好的常量&#xff0c;就像是Constant类中定义的常量&#xff1b;诸如&#xff1a;session、Application、actionInvocation、Container等&#xff1b;…

中求和符号上下标_涨电脑知识:如何在word中编写复杂的公式,写论文必备技能...

我们在用word写资料时&#xff0c;比如论文、数据分析、报告等&#xff0c;经常需要插入一些公式&#xff0c;这些公式会含有一些特殊符号&#xff0c;比如根号、分式、求和等&#xff0c;这些特殊符号是不能直接用输入法来完成的&#xff0c;需要借助于word扩展的功能来帮助我…

菲尔兹奖第一华人!从抓虾仔到哈佛终身教授,他年少成名,获奖无数,造福我国数学教育数十年...

全世界只有3.14 % 的人关注了爆炸吧知识在数学界有这么一个人&#xff0c;他有着“数学天才”、“科学大师”、数学王国的“凯撒大帝”等一众称号。就连国际数学大师、阿贝尔奖获得者辛格都这样评价他说&#xff1a;“即使在哈佛&#xff0c;他一个人就是一个数学系&#xff01…

为什么我们总是忍不住要刷微信?

全世界只有3.14 % 的人关注了爆炸吧知识真正决定人与人之间的差距的&#xff0c;其实是我们对事物的见识与内心的格局&#xff0c;见识的深浅决定人生的深浅&#xff0c;格局的大小决定了人生之路是宽是窄。今天给大家推荐几个有深度、有想法的公众号&#xff0c;希望能够给你带…

22、多进程和多线程

 Android进程简介 Android会启动一个LINUX进程和一个主线程。默认的情况下,所 有该程序的组件都将在该进程中运行。当启动应用程序时,Linux会为每 一个程序单独分配一个进程,该进程默认只拥有一个主线程。 组件可以运行在当前进程中,也可以运行在其他进程中。组件运行在 哪个…

Docker小白到实战之常用命令演示,通俗易懂

前言上一篇大概认识了Docker&#xff0c;主要是从概念、架构、优点及流程方面进行阐述&#xff0c;并进行安装和体验&#xff1b;接下来就开始进行实操学习&#xff0c;在演示过程中会针对关键的知识点进行归纳和总结&#xff0c;这里先从常用命令说起&#xff0c;来吧&#xf…

今天这个日子,大多数人都不知道…

全世界只有3.14 % 的人关注了爆炸吧知识我是蝙蝠&#xff0c;身体虽小五毒俱全你确定要尝吗&#xff1f;我是果子狸&#xff0c;人们一度“谈我色变”但如今又被端上餐桌&#xff01;我是野兔&#xff0c;人们说我很可爱我的肉却变成“野味”毛发变成皮草……今天&#xff0c;世…

Python办公自动化Day2-openpyxl

目录 文章声明⭐⭐⭐让我们开始今天的学习吧&#xff01;常规操作添加数据遍历所有单元格数据合并/取消合并单元格添加/删除行与列移动指定范围单元格 文章声明⭐⭐⭐ 该文章为我&#xff08;有编程语言基础&#xff0c;非编程小白&#xff09;的 Python办公自动化自学笔记知识…

传递函数_使用python计算麦克风阵列信号的传递函数

使用python写了一个测试麦克风阵列传递函数的demo&#xff0c;有需要的自取。该代码使用了第三方库ThinkDSP。1. 传递函数首先解释下什么是传递函数&#xff1a;把具有线性特性的对象的输入与输出间的关系&#xff0c;用一个函数(输出波形的拉普拉斯变换与输入波形的拉普拉斯变…

中国数学竞赛史上最玩命的“赌徒”,为了国家荣誉,他不惜用生命换来了五次世界第一...

全世界只有3.14 % 的人关注了爆炸吧知识知识君今天&#xff0c;要跟大家介绍的是&#xff0c;北大历史上首位被授予博士学位的人&#xff0c;深受癌症折磨的同时还带领着中国学子连续5次站上世界顶端的人&#xff0c;他的故事&#xff0c;他的品格&#xff0c;值得被所有人记住…

javq接口_Java为什么要使用接口_java接口怎么使用

Java接口是什么Java接口是一系列方法的声明&#xff0c;是一些方法特征的集合&#xff0c;一个接口只有方法的特征没有方法的实现&#xff0c;因此这些方法可以在不同的地方被不同的类实现&#xff0c;而这些实现可以具有不同的行为(功能)。接口(英语&#xff1a;Interface)&am…

[(转)hystar整理]Entity Framework 教程

预备知识 2 LINQ技术 2 LINQ技术的基础 - C#3.0 2 自动属性 2 隐式类型 2 对象初始化器与集合初始化器 3 匿名类 3 扩展方法 4 Lambda表达式 4 .NET中的数据访问 4 DataSet方案 5 改进的的DataSet方案 5 手写代码通过ADO.NET2…

13岁上中科大,17岁攻读哈佛博士,“天才”尹希的开挂人生

全世界只有3.14 % 的人关注了爆炸吧知识2013年美国斯隆基金会(Alfred P. Sloan Foundation)颁发的美国斯隆研究奖获得者尹希&#xff0c;31岁哈佛最年轻的华人教授&#xff0c;获2017年“豪华版诺贝尔奖”之称的科学突破奖-物理学新视野奖&#xff0c;这年唯一的获奖华裔。知识…

强制升级?!.NET Core 2.1容器镜像将从Docker Hub中删除

前言.NET Core 2.1将于2021年8月21日结束支持&#xff0c;本来应该没什么影响&#xff0c;该怎么用继续用得了。但是&#xff0c;如果你在生产环境使用了.NET Core 2.1容器镜像&#xff0c;那就要注意了&#xff0c;从8月21日开始&#xff0c;.NET Core 2.1容器镜像将不再在Doc…

“史上“最疯狂”的顶级数学家,看完后忍不住感慨太神了”

▲ 点击查看说起世界上最顶级的数学家&#xff0c;你的脑海中会浮现的&#xff0c;大概是欧拉、高斯、香农等数学巨匠。但是要说起成就和神秘性兼备的&#xff0c;一定就是——称为印度之子的——拉马努金。1887年12月22日&#xff0c;拉马努金出生在印度一个穷困潦倒的家庭&am…

致家长:疫情期间教育好自己的孩子,就是你最重要的事业!

全世界只有3.14 % 的人关注了爆炸吧知识疫情危机&#xff0c;却也是教育的契机。现在孩子呆在家里&#xff0c;老师管不了孩子&#xff0c;却也正是家长重新认识父母之责的契机。家长才是孩子的第一任老师&#xff0c;家长的言传身教、一举一动都影响着孩子成长。孩子是你的唯一…

设计模式之访问者

访问者模式介绍访问者模式能将算法与其所作用的对象隔离开来。访问者模式建议将新行为放入要给名为访问者的独立类中&#xff0c;而不是试图将其整合到已有类中。它允许你在不修改已有代码的情况下向已有类层次结构中增加新的行为。需要执行操作的原始对象将作为参数被传递给访…

转-SQL 2005修改系统表

FROM&#xff1a;http://blog.csdn.net/liangCK/archive/2008/10/07/3029315.aspx 在 SQL Server 2000 中修改系统表的方法大部分人都知道&#xff0c;介绍如何在 SQL 2005 中修改系统表的资料目前还比较少&#xff0c;虽然微软不赞成修改系统表&#xff0c;而且也把修改系统表…

清华男神再获世界大奖,从放牛娃到清华校长,他考研3次,读博7年,做出诺奖级的科研成果...

全世界只有3.14 % 的人关注了爆炸吧知识2月24日&#xff0c;菲列兹伦敦奖评奖委员会宣布&#xff0c;2020年度菲列兹伦敦奖将授予中国科学院院士、清华大学副校长、北京量子信息科学研究院院长薛其坤。帅气的老薛按照评奖委员会的通知&#xff0c;薛其坤是因为在实验上发现量子…