Flink日志采集、集中存储、可视化查询实践

1. 背景

笔者的开发大数据平台XSailboat中包含基于Flink的可视化计算管道开发和运维功能。状态存储器中数据的查看和节点的日志查看功能是其重要的辅助支撑功能。它能使得在大数据平台上就能完全实现计算管道的开发、调试、部署,逐渐摆脱Flink的原生界面。
DAG开发计算管道

Flink分JobManager和TaskManager,JobManager中的日志是总体性的,构建计算管道的过程,就是在JobManager中完成的,而Job的执行则是在TaskManager中。
就可以从中找失败原因。而任务执行过程中出现的异常或者信息,是在TaskManager中的它的日志是不需要分计算管道的,总体看就可以。只需要把日志数据集成进来就行,不需要采集。关键是TaskManager中不同Task产生的平台框架(非原生Flink底座)和计算管道开发者用Aviator语言编写的调试日志。

2. 功能目标

a. 计算管道部署过程中,如果出错,希望能看到平台框架构建计算管道的过程日志信息及异常信息。
b. 点击计算管道的节点,可以查看计算管道的某个实例上此节点的日志;(一个计算管道可以部署在多个flink集群中,生成多个实例)
c. 可以主动开启和关闭调试日志。这里的调试日志是计算管道开发时,开发者加的用Aviator语言写的打印调试日志的代码。

3. Flink的log相关接口

  • /jobmanager/logs Returns the list of log files on the JobManager.
    返回:
{
    "logs": [
        {
            "name": "prelaunch.out",
            "size": 100,
            "mtime": 1692856478000
        },
        {
            "name": "prelaunch.err",
            "size": 0,
            "mtime": 1692856478000
        },
        {
            "name": "launch_container.sh",
            "size": 23160,
            "mtime": 1692856478000
        },
        {
            "name": "directory.info",
            "size": 7496,
            "mtime": 1692856478000
        },
        {
            "name": "jobmanager.out",
            "size": 19850,
            "mtime": 1692856480000
        },
        {
            "name": "jobmanager.err",
            "size": 512,
            "mtime": 1692856478000
        },
        {
            "name": "jobmanager.log.1",
            "size": 29374,
            "mtime": 1692856479000
        },
        {
            "name": "jobmanager.log",
            "size": 87087,
            "mtime": 1692857018000
        }
    ]
}
  • /jobs/:jobid/jobmanager/log-url Returns the log url of jobmanager of a specific job.
  • 返回
{
    "url": "http://192.168.0.152:34243/#/job-manager/logs"
}

这个url的界面图
JobManager日志图

  • /jobs/:jobid/taskmanagers/:taskmanagerid/log-url Returns the log url of jobmanager of a specific job.
  • /taskmanagers/:taskmanagerid/logs Returns the list of log files on a TaskManager.

4. 总体技术方案

在这里我们只需要采集TaskMananger中,节点运行相关的日志数据,即Function中的日志数据。
日志流转过程

4. 技术点

4.1 基础知识

基础准备:
a. 大致了解一下Flink的日志配置。参考Flink官方文档《logging》
b. 熟悉一下log4j2是怎么配置的。 参考Log4j官方文档《Kafka Appender》《PatternLayout》

这里记录一下log4j的几个配置知识点,详细参考官方文档《lookup》
a. 参数输入相关:

  • ${env:变量名},注入System.getEnv中的参数
  • ${sys:变量名},注入System.getProperties()中的参数
  • %X{变量名} ,注入MDC中的参数
  • ${ctx:变量名},注入ThreadContext中的参数

官方文档中提到

  • log4j-session.properties: used by the command line interface when starting a Kubernetes/Yarn session cluster (i.e., kubernetes-session.sh/yarn-session.sh)

虽然我们的Flink是Yarn Session(detached mode)模式,但是我们并不是使用原生的yarn-session.sh脚本去启动,而是笔者分析了Flink Yarn Session的启动模式之后,重写了启动代码,以让Flink更好地融入到大数据平台,让大数据平台能掌控Flink集群的生命周期、启动/停止,监控,在指定资源队列运行多个特定标签的Flink集群等。在笔者启动Flink级群的时候,使用的是log4j.properties,所以接下来将在这里面修改。

4.2 Flink的log4j.properties文件配置

# to Kafka
appender.kafka.type = Kafka
appender.kafka.name = Kafka
appender.kafka.topic = _log_flink
appender.kafka.key = ${env:CONTAINER_ID}
appender.kafka.property.type = Property
appender.kafka.property.name= bootstrap.servers
appender.kafka.property.value= XCloud151:9092,XCloud152:9092,XCloud153:9092,XCloud154:9092
appender.kafka.filter.ctxmap.type=ContextMapFilter
appender.kafka.filter.ctxmap.onMismatch=DENY
appender.kafka.filter.ctxmap.kvp_1.type=KeyValuePair
appender.kafka.filter.ctxmap.kvp_1.key=collect_log
appender.kafka.filter.ctxmap.kvp_1.value=true
appender.kafka.layout.type = PatternLayout
# MDC参数where格式:runUid.nodeId  ,subTaskIndex格式:subIndexId+1
appender.kafka.layout.pattern = %X{where}.${event:Timestamp}.%X{subTaskIndex} %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level  %-60c L:%L -%msg%n
rootLogger.appenderRef.kafka.ref = Kafka

这里我们只想采集JobManager中构建Job过程的日志和TaskManager中执行Task时Function内的日志。所以这里用了一个ContextMapFilter过滤器,其中有一个MDC参数collect_log,如果要开始收集日志,带代码中将它设置为true

MDC.put("collect_log", true) ;

JobManager和TaskManager都是用这个log4j.propeties文件,JobMananger中构建Job的过程不属于任何一个节点,它的where参数中nodeId为0,subIndexId+1部分也为0,以和节点区别。

因为在JobManager构建Job的过程中,是没有JobId的,所以在外部传入一个runUid用来标识此次计算管道提交运行。

这样就把日志采集存储到了Kafka。
Kafka中的日志数据

4.3 使用Flume将日志数据从Kafka同步到HBase

日志存储到HBase之后,需要有一个rowKey,这里对Kafka中的消息做一下拆分,使用第一个空格前的内容作为rowKey,第一个空格之后的
内容作为日志内容。即

  • %X{where}.${event:Timestamp} 作为rowKey
  • %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %-60c L:%L -%msg%n 作为消息内容

当一个任务节点或者构建Job过程中,1毫秒内输出多条日志,则多条日志的rokwKey会相同,为此在Flume将日志从Kafka迁移到HBase的过程中,rowKey需要在后面再加上一个Kafka偏移量。
flume的配置如下:

#### 配置名为_log_flink的代理,用于采集kafka的_log_flink主题数据,写入hbase

# 指定代理的组件名称
_log_flink.sources = r1
_log_flink.sinks = k1
_log_flink.channels = c1

# ==============================配置sources组件========
# sources组件类型
_log_flink.sources.r1.type = org.apache.flume.source.kafka.KafkaSource
_log_flink.sources.r1.batchSize = 10
_log_flink.sources.r1.kafka.bootstrap.servers = XCloud150:9092,XCloud151:9092,XCloud152:9092,XCloud153:9092,XCloud154:9092
_log_flink.sources.r1.topic = _log_flink
# 组件要绑定的通道
_log_flink.sources.r1.channels = c1
_log_flink.sources.r1.consumer.timeout.ms = 1000
_log_flink.sources.r1.kafka.consumer.group.id = group33
_log_flink.sources.r1.kafka.consumer.auto.offset.reset = earliest

_log_flink.sources.r1.interceptors = i1
_log_flink.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.extend.AviatorInterceptorBuilder
_log_flink.sources.r1.interceptors.i1.handler = let i = string.indexOf(body , " ") ; \
if(i>0){ \
	let key = string.substring(body , 0 , i) + "." + seq.get(headers , "offset") ; \
	let msg = string.substring(body , i+1) ; \
	seq.put(headers , "hbase_rowkey" , key) ; \
	return msg ; \
} \
return nil ;

# =============================配置sink组件======
# _log_flink.sinks.k1.type = logger
# _log_flink.sinks.k1.channel = c1

# sink组件类型
_log_flink.sinks.k1.type = hbase2
# HBase中要写入的表的名称
_log_flink.sinks.k1.table = xz:_log_flink
# process不要返回backoff,让循环加快
_log_flink.sinks.k1.backoffEnabled = false
# batchsize 减小到50,缺省100
_log_flink.sinks.k1.batchSize = 50
# HBase中要写入的列簇
_log_flink.sinks.k1.columnFamily = logInfo
# 自定义的序列化工具
_log_flink.sinks.k1.serializer = org.apache.flume.sink.hbase2.HeaderHBase2EventSerializer
# 指定列簇下的列
_log_flink.sinks.k1.serializer.payloadColumn = body
# 组件要绑定的通道
_log_flink.sinks.k1.channel = c1

# =============================配置channel组件====
# channel 组件的类型
_log_flink.channels.c1.type = memory
# 将没有数据时的take等待时间减小到0.2秒,缺省是3秒
_log_flink.channels.c1.keep-alive = 200
_log_flink.channels.c1.keep-alive-timeunit = ms
# 容量,通道中存储的最大事件数
_log_flink.channels.c1.capacity = 10000
# 每次交易,channel从source获取,或汇给sink的最大事件数
_log_flink.channels.c1.transactionCapacity = 10000 
_log_flink.channels.c1.byteCapacityBufferPercentage = 20
_log_flink.channels.c1.byteCapacity = 800000

这里使用了自己开发的一个flume拦截器:org.apache.flume.interceptor.extend.AviatorInterceptorBuilder。关于它参看《flume拦截器–使用Aviator扩展拦截器功能》

如此就把数据存储到了HBase中
HBase中的flink日志

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
大数据平台建设 当前,我部门应用系统之间都是独立的,数据没有统一标准、系统也没有相连。这种 现状导致,各公司部门之间的信息资源无法共享、部门之间工作移交无法电子化。这极大 地限制了信息化提高公司工作效率的效果,更重要的是信息资源无法打通,就无法站在全 县的角度去进行政务应用的大数据分析,成为了政务应用大数据技术的最大阻碍。 为了提高资源使用率,节约管理成本,推动信息产业发展,拉动社会资金在信息化方面 的投入,为了提高行政管理和服务效率,促进公司职能转变,改善投资和营商环境,促进经 济发展,为了提高公司服务效率,使公司管理服务从各自为政、相互封闭的运作方式,向跨 部门、跨区域协同互动和资源共享转变,提高公司工作效率。有必要构建统一的大数据平 台,更好地为公司决策服务,提高信息服务质量。 建成覆盖全县各公司部门的信息资源整合平台,支撑用户单位开展跨部门、跨层级的 政务应用大数据分析,业务协作,提供应用集成模板、集中监控管理、远程配置部署等工 具,降低跨地域实施难度。电子政务应用中存在大量跨部门、跨层级的业务协作,数据交 换平台是县级各部门共享数据,进行全县内大数据分析的基础也是解决跨部门协作的有效 手段。全县统一规划、统一规范、统一架构,避免各级单位独立建设带来的格式各异、接 口混乱、无法重用、难以扩展的局面;施行统一部署、统一监控、统一管理的集中管理模 式,总体上降低各级公司部门信息整合的建设、管理、应用的成本。 社会经历了由磁盘、磁带、光盘存储数据,向以公文档为主要形式数据的发展,后来 互联网的兴起促成了数据量的第三次大规模增长,到了今天,随着互联网、物联网、云计 算应用的进一步丰富,数据已呈指数级增长,"大数据"概念逐渐在各界引起热议。在大数 据时代,我们分析的数据因为"大",摆脱了对传统对随机采样的依赖,而是面对全体数据; 因为所有信息都是"数",可以不再纠结具体数据的精确度,而是坦然面对信息的混杂;信息 之"大"之"杂",让我们分析"据"也由传统的因果关系变为相关关系。 大数据平台由网络基础设施层、数据支撑层、信息安全层、统一管理等构成。数据 支撑层必须能够对数据采集、数据质量、数据安全、数据挖掘、数据处理和数据可视化 进行大数据的全生命周期管理。通过对全县范围内从不同部门收集到数据运转起来成为 流化的资源,为应用支撑层的运转提供丰富的高质量的不同维度的数据资源的接口。在全 县数据集中的同时需要考虑数据在传输和存储时的安全问题以及不同部门对外共享自身 内部数据时数据边界控制的问题,从技术和制度上保障这些数据资源得到科学、有效、合 规的使用。 大数据平台建设的主要任务: (一)建立政务云平台。 建设全县统一的政务云计算平台。以县广电公司的设施为基础,进行云化改造,建立 自行管理的云计算资源池,为 各部门不宜采用社会化云计算服务的关键性业务系统提供基础设施共享服务。 (二)实施大数据管理。 1.建立政务数据交换和目录体系。以县广电公司的交换中心为主交换平台,构建全县 统一的电子政务数据交换体系。统筹各部门可供共享的信息和共享需求,编制政务信息资 源共享目录,明确可供共享的信息名称、数据格式、提供方式、提供单位、共享条件、更 新方式、更新时限等要素,按需向其他部门提供信息共享服务。 2.建设政务数据集中共享平台。建立健全共享数据汇聚机制,按照"一类数据来源于 一个权威部门,权威部门负责更新维护"原则,通过统一数据交换平台,将具有公共性、标 识性、基准性的共享数据进行汇聚,集中存储于云平台,逐步形成人口、法人、经济、空 间地理、社会信用等各类城市重要基础性数据库。充分发挥云平台共享数据的中心作用 ,建立向云平台直接获取为主,部门间数据交换获取为辅的共享应用机制,提高城市综合数 据共享使用效率。 (三)推进大数据应用。 提高决策数据服务水平。围绕县公司决策需要,以建设决策支持电子政务系统为抓手 ,充分整合各部门现有办公应用和业务系统数据资源,逐步建立支撑领导决策研判的决策 数据资源库,提供更加及时高效的信息获取方式,丰富展现形式,为公司决策提供全面准确 便捷的数据服务。使县领导能够及时掌握经济运行与社会发展的实际状况和发展趋势,不 断提升政务数据保障和辅助决策能力。 (四)构建大安全体系。 1.加强统一电子政务网络建设管理。在现有电子政务外网平台基础上,提升县级骨干 网络业务承载能力,按需扩充统一互联网出口,为公司大数据平台提供高速、稳定、安全 的网络运行环境。 2.加强安全技术防护体系建设。按照信息系统安全等级保护要求,针对大数据平台的 技术特点,进一步完善以病毒防范、漏洞管理、入侵防范、信息加密、访问控制等为重点 的安全防护体系,确保电子政务系统不被破坏和数据不被窃取泄漏。 ----------------------- 大数
·248· 当代教育实践与教学研究 大数据时代的来袭,使得各行各业发挥各自领域的专业优 势,相互合作,将数据可视化推向了当代的热潮。所以数据可 视化顺应大数据时代的到来而兴起,从大数据中掌握相关的规 律,从而掌握用户的购买能力、购买习惯等,然后进行相关营 销策略的调整,由此可见数据的潜在价值是巨大的。信息可视 化工具可以帮助我们高效处理大量的数据,并以形象化的视图 呈现在使用数据的人的面前。 一、数据及数据可视化的基本概念 数据,英文名是 Data,是用来描述科学现象和客观世界的 符号记录,是构成信息和知识的基本单元。而大数据比较公认 的概念是含有 4 个 V 的特点的数据 : 数据量大 (Volume), 变化速 度快 (Velocity )、 数据类型多样化 (Variety) 与价值密度低 (Value )。 从计算机技术的专业角度来说, 大数据是结构复杂、 数量庞大、 类型众多的数据的集合,包括非结构化数据、半结构化数据和 结构化数据。 在运用这些大数据之前我们需要对数据进行搜集、 归类、分析甚至后期的信息重组, 转化为我们能够一目了然的、 可视化的线条变化趋势和图像, 这样我们能够清晰的得出结论。 可视化 (Visualization) 技术是利用计算机图形学和图像处理 技术,将数据转换成图形或图像在屏幕上显示出来,并进行交 互处理的理论、 方法和技术。 它涉及到计算机图形学、 图像处理、 计算机视觉、 计算机辅助设计等多个领域, 成为研究数据表示、 数据处理、决策分析等一系列问题的综合技术。 二、数据可视化技术分析 数据可视化技术的基本思想,是将数据库中每一个数据项 作为单个图元元素表示,大量的数据集构成数据图像,同时将 数据的各个属性值以多维数据的形式表示,可以从不同的维度 观察数据,从而对数据进行更深入的观察和分析。给人们提供 一个直觉的、交互的和反应灵敏的可视化环境。 数据可视化技术有如下特点: 1.交互性。 用户可以方便地以交互的方式管理和开发数据。 2. 多维性。对象或事件的数据具有多维变量或属性,而数 据可以按其每一维的值分类、排序、组合和显示。 3. 可视性。数据可以用图像、曲线、二维图形、三维体和 动画来显示,用户可对其模式和相互关系进行可视化分析。 它包含以下几个基本概念 : 4. 数据空间 : 是由 n 维属性和 m 个元素组成的数据集所构 成的多维信息空间。 5. 数据开发 : 是指利用一定的算法和工具对数据进行定量 的推演和计算。 6. 数据分析 : 指对多维数据进行切片、块、旋转等动作剖 析数据,从而能多角度多侧面观察数据。 7. 数据可视化 : 是指将大型数据集中的数据以图形图像形 式表示,并利用数据分析和开发工具发现其中未知信息的处理 过程。 三、数据可视化技术在各个领域的应用 1. 气象预报。气象预报关系到亿万人民的生活、国民经济的 持续发展和国家安全。气象预报的准确性依赖于对大量数据的计 算和对计算结果的分析。一方面,科学计算可视化可将大量的数 据转换为图像,在屏幕上显示出某一时刻的等压面、等温面、旋 涡、云层的位置及运动、暴雨区的位置及其强度、风力的大小及 方向等,使预报人员能对未来的天气作出准确的分析和预测。通 常情况下,气象工作者将二维的层状数据人为叠加来进行分析, 而运用三维可视化,可让气象工作者从大量二维图像计算中解脱 出来,让他们的精力集中于预报所需的实际数值。 2. 医学。可视化技术已广泛应用于诊断医学、整形与假肢 外科中的手术规划与辐射治疗规划等方面。在以上应用中核心 技术是将过去看不见的人体器官能以二维图像形式显示出来或 重建它们的三维模型。 由于三维医学图像构模涉及的数据量大、 体元构造算法复杂、运算量大,因此至今仍是医学图像可视化 技术中的瓶颈所在。在这一领域中图像处理技术占主流,而计 算机视觉与图形学则在整形外科的手术中起主要作用。 3. 生物、分子学。在对蛋白质和 DNA 分子等复杂结构进行 研究时,可以利用电镜、光镜等辅助设备对其剖片进行分析、采 样获得剖片信息,利用这些剖片构成的体数据可以对其原形态进 行定性和定量分析, 因此可视化是研究分子结构必不可少的工具。 四、数据可视化的意义 1. 让数据分析更加便捷。实现数据的可视化,无非就是让 人们在对数据进行处理的过程中,更加方便、快捷与精准。这 样的数据分析不仅能更加贴近了人们的生活,还能满足人们的 实际生活需要。 2. 让知识获取更加方便。现代背景下的数据收集,具有良 好的精准性,采用新的软件技术及手段,不仅让人们更加容易 的获得庞大的数据库, 还能挖掘其隐藏的数据目标。 在生活中, 常遇到的数据一般都是具有标识系统的,这种标识系统不仅仅 是方向性的,还有文字性的。如街头上的指路标志,不仅让你 更加直
明阳智慧能源集团自2005年成立以来,一直重视信息化工作,先后在企业内部管理、研发设计等领域引入不同管理软件,以满足业务的发展和管理需求。明阳智慧能源集团前后建成了:HR、PLM、HPC、SAP、OA、EAM、SCADA等信息系统。其中SAP系统,应用了PS、SD、PP、MM、QM、FI、CO、BCS、BW等9大模块,并开发了销售投标报价模块。SAP系统已经覆盖到明阳智慧能源集团所有制造基地。PLM(ENOVIA v6)系统已近实现了研发项目管理、流程管理、文档管理和问题管理等功能,并启用物料管理、BOM管理等,并实现与SAP无缝集成。完成智能风场管理EAM项目。自主研发了集控与SCADA系统实现了明阳在全国区域内已接入的风场总数、总装机容量、总装机台数,全国范围内风机运行情况和总发电量;以及每个风场的风机数量、当前风速和功率,当前功率和额定功率的比值;可以显示风电场在地图上的具体位置和周边道路、地形情况。 随着系统运行,明阳积累了大量的企业运行数据。这些数据已经成为支撑明阳业务创新和数字化转型的重要资产。通过数字化管理平台的建设利用好企业数据,实现需求、计划、生产、采购、库存、发运、吊装、维护维修等信息的拉通和信息的共享。同时,从现有运营数据的集中展现入手,辅助运营过程的日常管理,加强运营数据的分析与应用,建立明阳风电集团特有的运营管理数据模型,实现现有运营数据的监控、可视化、分析和挖掘,成为的运营管理决策的信息化平台。
一类资源描述:Java ASP系统毕业设计资源 1. 概述:该资源集中于Java与ASP结合的Web系统毕业设计。对于学生而言,它提供了从初步的构想到实际开发所需的全方位辅助材料,包括论文、设计文档和源代码等。 2. 包含内容: - 论文:涵盖了整个Java ASP Web系统的基础知识,设计意图、需求概述、系统结构与设计哲学、相关技术的深入探索等。学生可以从论文中理解项目的全局构想和关键设计决策。 - 设计文档:详细梳理了系统的构建过程,包含需求分析、系统框架设计、数据库规划、界面布局、功能模块划分等。此文档将引导学生逐步实现和调试系统。 - 源代码:提供Java与ASP整合的Web系统的完备代码,从前端界面代码(HTML、CSS、JavaScript)到后端的Java与ASP代码,再到数据库相关脚本。学生可以参考、修改或基于此代码进一步拓展。 - 辅助信息:包括其他与项目相关的技术文档、API手册、使用的第三方库的指导文档等,旨在帮助学生顺利解决技术上的难题。 3. 使用方法:建议学生首先浏览论文,了解系统的背景与设计目标。随后,依照设计文档进行具体的实现工作。当遇到技术问题时,可以查找辅助信息或参考源代码。源代码可以作为实现的起点或验证设计的有效性。 4. 注意事项:使用资源时,学生需确保遵守学校和课程的规定,防止直接复制粘贴,鼓励真正理解和原创。在借鉴源代码时,重要的是确保学生理解代码的逻辑和工作原理,而不仅仅是简单地复制。 希望这种资源描述能为您提供所需的信息。如有其他问题或需要更多的描述,请告诉我。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值