关于集成:RocketMQ-集成生态再升级轻松构建云上数据管道

阿里云音讯队列 RocketMQ 版是阿里云基于 Apache RocketMQ 构建的低提早、高并发、高可用、高牢靠的分布式“音讯、事件、流”对立解决平台,面向互联网分布式应用场景提供微服务异步解耦、流式数据处理、事件驱动解决等外围能力。其自诞生以来始终为阿里团体提供稳固牢靠的音讯服务,历经多年双十一万亿级流量洪峰的验证。 随着业务需要场景日渐丰盛,在多年教训积攒后,阿里云 RocketMQ 也迎来了革命性的更新,正式公布了阿里云音讯队列 RocketMQ 版 5.0,在架构、网络、负载平衡、存储等诸多方面进行了显著优化。其定位不再局限于音讯解耦场景,将全新布局事件驱动和音讯流式解决场景。 阿里云 EventBridge 作为云上事件枢纽始终以来都放弃着对云上事件、数据的敌对生态反对。随着 RocketMQ 5.0版本的用户日渐增多,EventBridge 在近期对 RocketMQ Connector 进行了全面降级。降级之后的 RocketMQ Connector 不仅能够反对RocketMQ 5.0 版本,同时也能反对云上自建 RocketMQ 实例。除此之外,基于成熟的事件流能力,用户应用 EventBridge 也能轻松构建音讯路由能力,实现对灾备、数据同步的需要。 残缺内容请点击下方链接查看: https://developer.aliyun.com/article/1155645?utm_content=g_10... 版权申明:本文内容由阿里云实名注册用户自发奉献,版权归原作者所有,阿里云开发者社区不领有其著作权,亦不承当相应法律责任。具体规定请查看《阿里云开发者社区用户服务协定》和《阿里云开发者社区知识产权爱护指引》。如果您发现本社区中有涉嫌剽窃的内容,填写侵权投诉表单进行举报,一经查实,本社区将立即删除涉嫌侵权内容。

May 18, 2023 · 1 min · jiezi

关于集成:OpenAIChatGPT内置付费版上线支持自训练模型和上下文对话功能

1 什么是OpenAI(ChatGPT)内置付费版?在数周前,集简云上线了OpenAI(ChatGPT)内置收费版本至今已有数千家企业将其对接到本人的办公零碎中应用,比方: 与微信公众号,微信小程序,企业微信,飞书,钉钉全音讯等多种办公软件进行对接。收费版本的ChatGPT次要的是为了让用户更不便的体验国内顶级的AI产品,因而有肯定的性能限度, 比方:无奈应用全副的模型,无奈配置模型参数,无奈训练本人的模型等等。许多用户反馈心愿可能更深刻的应用ChatGPT的性能,因而在这次产品更新中集简云推出了OpenAI(ChatGPT)内置付费版以满足 2 付费版与免费版有什么不同?上面咱们看看这个付费版本有什么不同 2.1 按量付费:付费版本依照ChatGPT官网的价格进行扣费,您能够依据您的使用量预估费用并预充值到您的集简云中账号中,每次应用依照ChatGPT官网的扣费扣除您的账号余额。 2.2 反对训练自定义模型ChatGPT的官网模型无法回答您的业务问题,比方您的公司介绍,产品问题等. 当初您能够上传您的训练素材给并训练本人的模型利用到业务场景中。您能够将整顿一个蕴含200个以上问题与答复的excel文件上传并训练出本人的模型,利用到您的业务流程中。 2.3 反对根据上下文内容对话在付费版本的chatgpt中减少了简略配置对话的性能 能够根据上下文内容进行回复。上面是反对上下文与不反对上下文内容的比照:通过上下文内容,ChatGPT的答复准确性更高,并且能够反对连贯的答复。通过原生的官网接口配置反对上下文内容的对话比拟艰难,因而集简云简化了这里的配置。您只需定义一个用户惟一ID,对话上下文查问的无效范畴,比方5条对话以内,或者多长时间的对话以内作为查问范畴即可。 2.4 反对全副的模型参数配置收费的版本应用的事后设置的参数,比方答复的创意水平,字数限度等等。 在付费版本中能够自在配置应用的模型和模型的参数 3 如何开明OpenAI(ChatGPT)付费版以后OpenAI(ChatGPT)付费版须要分割集简云客服开明能力体验。开明门路:集简云平台 - 插件核心 - OpenAI(ChatGPT)付费版 - 去开明 - 获取 - 分割客服如果您曾经增加了集简云客服,您也能够间接分割您的客服经理开明应用。 4.OpenAI(ChatGPT)付费版如何免费?付费计划阐明:1 集简云的ChatGPT(内置)付费版本应用与ChatGPT官网统一的付费计划2 OpenAI官网的计算形式是依照 Token使用量计费,您能够将Token了解为字数,然而如果一次申请中有雷同的字则只记1次Token,发问和答复的字数都会算在Token计算内。 比方一次,发问中有500字的问题,答复中蕴含500字的答复,其中300字是反复的字,则理论扣费500+500-300= 700 Tokens3 ChatGPT(内置)付费版本反对训练本人的模型,OpenAI的训练模型价格以发问和答复的格局提供数据,训练数据中发问和答复的字数均算入Token数量4 集简云的OpenAI扣费与官网统一。依照OpenAI中返回的Token总消耗量计费。最低充值1000元。未耗费结束反对退费。5 OpenAI的费用与集简云产品的应用费用离开计费,集简云目前提供每月500次的收费流程执行,如需购买集简云的执行产品请参考官网:https://www.jijyun.cn/price/6 不同的模型价格不同,发问和训练的价格也不同。咱们在下图中为您介绍7 汇率为咱们目前的实际成本,并非以后实时汇率,汇率可能会随着市场变动,因而理论购买时以集简云官网为准8 此图中的价格参照OpenAI官网在2023年3月3日的官网价格,目前有可能会调整,因而理论购买时以集简云官网为准官网模型(不反对训练,只能调用)Fine-Tuning模型:反对训练本人的业务模型

March 16, 2023 · 1 min · jiezi

关于集成:万物皆可集成系列低代码如何不成为数据孤岛

接口是计算机系统中两个独立的部件进行信息替换的共享边界。这种替换能够产生在计算机软、硬件,外部设备或进行操作的人之间,也能够是它们的联合。 翻译一下,就是每个零碎都是独立的个体,如果想让不同的零碎之间有数据的交互,那么接口就像是要给零碎开个门,要想从我的零碎中获取数据或者发送申请,那么就要从我专门开的门——接口,进入才能够。 低代码工具当然也会提供给各位对接接口的机会。接下来就为大家介绍如何在低代码利用中进行接口的创立和对接。 形式一:服务端命令(调用第三方零碎的接口)https://help.grapecity.com.cn...因为咱们没有现成的第三方零碎,那么我就用活字格来模仿一个第三方的零碎。该零碎中提供一个向表格存储数据的接口。 为了验证申请接口的调用者身份,目前能够应用和第三方约定一个相似于key的参数,以此key来判断拜访接口人的身份。这里模仿的第三方零碎要验证的key为balabala,那么在第三方零碎中就须要判断申请过去的参数中是否有key=balabla的参数,有的话再执行相应操作,否则不予执行。 为了模仿以上形容的成果,我就在服务端命令中应用条件命令判断key参数,如图: 创立好这个服务端命令,就相当于对外暴露出了一个接口,而接口申请地址就是服务端命令中名称下的url。 接口名:addDataHTTP Verb:POSTURL:http://xa-hzg-erik:8080/AAA/ServerCommand/openApiRequest Body:{ "openApi": [ { "secretKey": "balabala", "msg"?: "xxxxx", }}有了这个接口,咱们就能够借助咱们的发送HTTP申请命令向这个接口发送对应的数据了。 这里要留神的是,如果间接在单元格命令上应用发送HTTP申请命令的话,这样是存在跨域的问题的,如图: 为了防止跨域的问题,咱们须要在服务端命令外面应用发送HTTP申请命令,以避免跨域问题的产生。 那么咱们在工程中新建一个服务端命令,依据接口要求,咱们须要发送secretKey和msg两个参数,配置如下图: 命令配置: 能够设置返回后果: 配置好服务端命令后,在页面上调用该服务端命令测试一下: 申请发送胜利了~! 咱们再看下模仿的第三方网站是否执行了申请: 能够看到,咱们的申请曾经执行胜利,第三方网站曾经将数据胜利存入数据表中。服务端命令(第三方零碎调用活字格凋谢的接口)这个就很简略了,只有在活字格零碎中创立自定义的服务端命令后,服务端命令名称下对应的url就是活字格提供的接口地址。 联合前文,为了确认身份,能够约定一个key参数的方法,进行身份的验证即可。形式二:写WebApi的形式生成接口这种形式个别针对与简单的接口逻辑性能,比方想通过代码的形式实现token认证等形式,那么就须要借助此办法实现。 这里的话,为大家演示一下,如果应用WebApi的形式向表格中增加数据。 如何进行服务端编程呢?具体的步骤能够参考咱们的帮忙文档: https://help.grapecity.com.cn... 咱们在这里简略的做一个向表格中增加数据表数据的服务端WebApi: 这里的接口名就是办法名——TestPostApi,申请形式为:POST。 同样的,在活字格工程中,设置服务端命令,还是应用咱们的发送HTTP申请命令,如图: 接下来,咱们调用服务端命令即可,测试成果如下图: 同样的,如果想凋谢给内部接口,接口地址就在开始中: 看到这里相比各位也对发送HTTP申请命令有了一个大抵的理解了吧~ 文内实例文件下载体验: 申请调用文件下载地址模仿第三方网站

September 2, 2022 · 1 min · jiezi

关于集成:万物皆可集成系列低代码对接企企云实现数据集成

应用低代码构建零碎,是升高企业数字化转型老本的无效伎俩。而企业上云作为实现数字化转型的重要渠道,曾经不再是将来的趋势,而是以后企业的事实抉择。那么如何将云上的业务与低代码开发的新零碎做整合集成,是很多敌人关注的问题。企企云作为一款成熟的企业云服务,领有很多的用户,本文具体介绍一下,应用活字格低代码平台,如何与企企云实现数据集成。确认接入形式企企云是一个云平台,数据的集成不能像一些本地业务零碎一样直连数据库,作为线上,它的数据调用须要采纳平台爱提供的申请机制。因为企企云应用的是亚马逊云,所以数据的集成须要走亚马逊云的AWS申请机制,通过认证之后能力失常的调用数据申请接口。具体的申请规范能够参考企企云提供的官网接入文档:https://openapi.77hub.com/doc...书签:接入流程 · GitBook通过浏览官网接入文档,能够确定接入流程的具体步骤:1、申请平安秘钥2、获取openId3、实现AWS申请机制4、调用企企云数据接口 接下来,咱们一步一步详细分析一下。申请平安秘钥平安密钥作为用户获取权限的重要标识,申请秘钥是整个接入流程的第一步。只须要在企企云的申请界面提交申请,获取秘钥即可。获取openidopenId是一个数字身份辨认框架,当你领有一个服务的openId之后,能够等同了解为领有了一个“出入许可证”,那么也就意味着,在做数据集成时,每次数据申请,凭着openId,申请链路能够畅通无阻。 企企云提供的获取openId接口为:接口地址:https://openapi.77hub.com/aut...{requestId}&accessKeyId={accessKey}&grantType=code&redirectUrl={redirectUrl}申请形式:GET阐明:{}用于标识变量,实在调用时应替换为具体参数 其中,接口必须的申请参数: 参数阐明requestId确认受权后,依据受权类型,requestId会响应到对应urlgrantTypecode/normal,受权模式accessKey第一步获取的受权秘钥redirectUrl确认受权后,页面会重定向到此Url阐明当grantType抉择为normal时,那么在获取openid之前,还须要提供一个backurl给企企云(在申请秘钥的界面填写),获取openid之后企企云会主动调用提供的backurl,比方你提供的backurl是http://xxxx.com,企企云受权实现后,获取的openid就会随着backurl返回,比方http://xxxx.com?openid=xxx&re...,之后便能够通过解析这个url去获取openid,也能够通过提供一个get申请的url接口地址,在接口中间接将openid等信息存储到数据库中供后续接口调用时应用。当接口地址配置好对应参数后,发动拜访会主动跳转到企企云的受权页面。活字格的实现 构建一个config表,存储接口的必要参数和后果,不便后续调用accessKeyId,secretAccessKey,openid,service,region应用服务端命令作为openid的backurl,接管到openid后存储到Config数据表中 实现AWS申请机制依照如上的配置,咱们的页面url如下 https://openapi.77hub.com/auth/openid?requestId=xxx&accessKeyId=xxx&grantType=code&redirectUrl=http://xxx/customapi/get77hubdata/getopenid对于AWS的鉴权,咱们为大家提供了相干的dll文件,只须要将该文件导入到本人的我的项目中即可。(下载地址) 因而,只须要在活字格中的触发按钮配置命令即可: 运行后点击按钮会跳转到企企云的登录验证界面,输出相干信息后,就会主动跳转回redireUrl页面中。 通过下面的操作咱们能够将openid存储到数据表中,除了openid,数据库中还存储了其余字段 service和region字段存储项别离为execute-api,cn-north-1(这是从企企云的文档找到的,如果有疑难,能够和企企云的技术具体征询下) 调用企企云数据接口在解决获取openId的问题之后,咱们就能够间接与企企云的接口进行通信了。接下来,应用企企云提供的list接口进行测试,接口文档如下: 在活字格中应用发送http申请命令,须要注意json序列化须要勾选: 之后的逻辑都由后端的serverAPI去实现,只须要将接口的返回值返回到前端页面即可。 因为返回值是个JSON,也能够通过导入JSON数据到单元格的形式去进行解析。当然,活字格服务端命令中也有了新的性能,JSON反序列化命令,去实现在服务端解析JSON,循环存储到数据表中,具体返回数据如何解析和应用,须要看本人的理论业务来定~ 总结低代码平台与云服务进行信息互通,通用计划就是在确定云服务提供的接入模式后,采纳http申请的形式,进行数据申请。在这个过程中,低代码平台不仅须要领有与内部服务交互的能力,还要求其领有对接入规范进行兼容解决的能力。如果一个低代码产品无奈同时具备这两点能力,那么在对接局部云服务的时候,可能就要望洋兴叹了。这也是大家在评估低代码产品中,须要留心的一个重要知识点哦~

September 1, 2022 · 1 min · jiezi

关于集成:MobTech-SMSSDK-Android端快速集成指南

开发工具:Android Studio集成形式:Gradle在线集成安卓版本反对:minSdkVersion 19集成前筹备注册账号应用SMSSDK之前,您须要在MobTech官网注册开发者账号,增加利用并获取MobTech提供的AppKey和AppSecret,详情能够点击查看注册流程SMSSDK流程图 增加配置在我的项目Gradle文件中注册MobSDKbuildscript { repositories { // 增加MobSDK Maven地址 maven { url "https://mvn.mob.com/android" } } dependencies { // 注册MobSDK classpath "com.mob.sdk:MobSDK:2018.0319.1724" }}allprojects { repositories { // 增加MobSDK Maven地址 maven { url "https://mvn.mob.com/android" }}在我的项目App Module的Gradle文件中增加插件和扩大apply plugin: 'com.mob.sdk'MobSDK { appKey "您的appkey" appSecret "您的appsecrt" SMSSDK {} }在gradle.properties中增加代码MobSDK.spEdition=FP 回传用户隐衷受权后果(submitPolicyGrantResult)为保障您的App在集成MobSDK之后可能满足工信部相干合规要求,您应确保App装置首次冷启动且获得用户浏览您《隐衷政策》受权之后,调用MobSDK.submitPolicyGrantResult回传隐衷协定受权后果。反之,如果用户不批准您App《隐衷政策》受权,则不能调用MobSDK.submitPolicyGrantResult回传隐衷协定受权后果。 请参考链接合规指南 /** * com.mob.MobSDK.class * 回传用户隐衷受权后果 * @param isGranted 用户是否批准隐衷协定 */ public static void submitPolicyGrantResult(boolean isGranted)示例代码 调用地位开发者能够本人指定,只需在应用SDK性能之前调用即可,强烈建议开发者在终端用户点击利用隐衷协定弹窗批准按钮后调用。MobSDK.submitPolicyGrantResult(true);

August 31, 2022 · 1 min · jiezi

关于集成:万物皆可集成系列低代码释放用友U8深度价值3-数据融合应用

在之前内容中,咱们介绍了如何应用低代码来扩大用友U8+零碎中的数据利用,摸索和实现新的业务价值。通过在U8+零碎中构建数据透视表,来联合低代码零碎外联数据库的能力,即可轻松实现生产齐套剖析零碎,帮忙业务部门进步对数据价值的利用,解决生产排产难的问题。 既然应用低代码可能开释原有零碎中数据的价值,实现业务的二次拓展,那么咱们在新拓展的零碎中产生的数据是否可能在回写到原有的零碎中呢?明天咱们以费用报销零碎为例,向大家展现如何将新业务零碎中生产的数据回写至用友U8+零碎中,实现用友U8+与基于低代码开发的费用报销零碎之间的双向数据传递。在正式开始前咱们简要介绍案例背景:基于低代码开发一套费用报销零碎,在报销零碎中会波及到工作的流转,当流传到出纳的时候,咱们能够通过点击“生成凭证”在U8+零碎中生成相应的凭证。同时,该凭证还能够在U8+零碎中进行查看,从而实现U8+与费用报销零碎之间的双向对接。 接下来咱们就从几个关节环节为大家介绍具体我的项目落地的过程。 我的项目实战 搭建费用报销零碎在活字格中去实现一个费用报销零碎,配合选项卡、奴才表、工作流、页面权限、数据权限等实现不同环节审批。这个须要大家对活字格有肯定的理解,能够应用活字格开发绝对简单的业务零碎。如果大家对如果通过活字格构建大型简单利用零碎还不太熟悉,能够资源核心的学习材料进行学习,地址如下:https://www.grapecity.com.cn/... 外联数据库外联U8+零碎数据库、凭证表(GL_accvouch)、科目表(code)、用户表(code)、角色表(UA_Role)、部门表(Department),因为波及到费用局部,所以须要对应的供应商/集体的信息配置以及费用我的项目和科目的对应关系。 在数据筹备齐备的状况下,基于活字格开发相应的费用报销零碎应用逻辑。 数据回写在本案例中,生成凭证按钮能够实现将费用报销数据赋值到U8凭证表中,从而实现凭证的生成。 其余能力扩大凭证属于绝对非凡的表,能够间接通过insert写入增加,如果大家想要做其余数据的逻辑,能够看下U8+零碎中是否有相应的接口,如果存在,能够通过活字格调用服务器端API,在.net代码调用U8+提供的接口实现,这样在活字格对接U8+中就能够扩大出更多的不可能。 总结至此,咱们就实现了U8+零碎与活字格利用的双向数据交融。理解更多信息能够查看课程: https://gcdn.grapecity.com.cn...企业在建制信息系统的时候,因为需要不同、期间不同,会有很多不同的利用零碎,而随着业务的倒退和对数据的意识,很多业务价值须要通过零碎间的数据交融能力被很好地利用起来,活字格与用友U8+的双向对接能力为摸索数据价值提供了更多的可能。当然,除了与用友U8+实现数据的双向交融,咱们也能够在业务场景中进行尝试,开掘摸索更多低代码价值。 想要理解更多活字格对接用友U8+的案例能够参考:U8对接活字格实现报表剖析案例:https://gcdn.grapecity.com.cn...

August 25, 2022 · 1 min · jiezi

关于集成:Amazon-EMR-上的-Alluxio-集成实践

背景Alluxio 的数据引擎性能,并没有与 Trino 相干的性能为大数据引擎畛域提供服务,为 S3、hdfs 等数据提供和煦的计算层,如 Hive、Spark、Spark 的集成,做大数据引擎的集成,做大数据引擎的集成减速是一个不可多得的性能组件。 Alluxio 社区与 Amazon EMR 服务有集成的辅助和集成,官网提供了 Amazon EMR 的集成计划,参见 Alluxio 社区文档,亚马逊云科技也提供了疾速装置部署的疏导脚本及,参见亚马逊云科技官网博客。 以上文档基于 emr 5.2x 版本,其 hive,Spark 等组件版本较旧,且没有思考 EMR 的多主,Task 计算实例组的集成场景,在客户应用高版本 Amazon EMR,启用 HA 及 Task 计算的时候,装置其部署存在导致部署失败。 文档从整体架构作为切入架构,深刻理解亚马逊 EMR 的集成架构,可能深刻了解亚马逊 MR 集成的集成办法,同时更设计并集成了 Alluxio 在亚马逊 EMR 上的所有组件的集成办法,新减少了对 EMR 上更高的反对组的反对,新减少了对 EMR 客户反对的所有主客户的所有生产环境。 Alluxio 社区文档:https://docs.alluxio.io/os/us... 亚马逊云科技官网博客:https://aws.amazon.com/cn/blo... Alluxio 架构概述 次要性能组件有: Master节点:相似NN的设计,同样有standby Master(HA)和secondary Master(元数据镜像)概念, Jounary 日志随节点 master,做为疾速复原 Worker节点:与 DataNode 相似,缓存层,提供 Tier Storage(MEM,HDD 连贯),短读和常常缓存,3种写缓存模式(仅内存,cache_通过能够同步和异步,通过不写缓存) Job master & Job worker:相似缓存数据的整顿,alluxio 提供了一个框架,由 job master 资源分配,job worker 执行数据的管道管道,缓存默认为1 ...

August 12, 2022 · 9 min · jiezi

关于集成:一文讲清楚FusionInsight-MRS-CDL如何使用

摘要:CDL是一种简略、高效的数据实时集成服务,可能从各种OLTP数据库中抓取Data Change事件,而后推送至Kafka中,最初由Sink Connector生产Topic中的数据并导入到大数据生态软件应用中,从而实现数据的实时入湖。本文分享自华为云社区《华为FusionInsight MRS CDL使用指南》,作者:晋红轻。 阐明CDL是一种简略、高效的数据实时集成服务,可能从各种OLTP数据库中抓取Data Change事件,而后推送至Kafka中,最初由Sink Connector生产Topic中的数据并导入到大数据生态软件应用中,从而实现数据的实时入湖。 CDL服务蕴含了两个重要的角色:CDLConnector和CDLService。CDLConnector是具体执行数据抓取工作的实例,CDLService是负责管理和创立工作的实例。 本此实际介绍以mysql作为数据源进行数据抓取 前提条件MRS集群已装置CDL服务。MySQL数据库须要开启mysql的bin log性能(默认状况下是开启的)。查看MySQL是否开启bin log: 应用工具或者命令行连贯MySQL数据库(本示例应用navicat工具连贯),执行show variables like 'log_%'命令查看。 例如在navicat工具抉择"File > New Query"新建查问,输出如下SQL命令,单击"Run"在后果中"log_bin"显示为"ON"则示意开启胜利。 show variables like 'log_%' 工具筹备当初cdl只能应用rest api的形式进行命令提交,所以须要提前装置工具进行调试。本文应用VSCode工具。 实现之后装置rest client插件: 实现之后创立一个cdl.http的文件进行编辑: 创立CDL工作CDL工作创立的流程图如下所示: 阐明:须要先创立一个MySQL link, 在创立一个Kafka link, 而后再创立一个CDL同步工作并启动。 MySQL link局部rest申请代码 @hostname = 172.16.9.113@port = 21495@host = {{hostname}}:{{port}}@bootstrap = "172.16.9.113:21007"@bootstrap_normal = "172.16.9.113:21005"@mysql_host = "172.16.2.118"@mysql_port = "3306"@mysql_database = "hudi"@mysql_user = "root"@mysql_password = "Huawei@123"### get linksget https://{{host}}/api/v1/cdl/link### mysql link validatepost https://{{host}}/api/v1/cdl/link?validate=truecontent-type: application/json{"name": "MySQL_link", //link名,全局惟一,不能反复"description":"MySQL connection", //link形容"link-type":"mysql", //link的类型"enabled":"true","link-config-values": {"inputs": [ { "name": "host", "value": {{mysql_host}} }, //数据库装置节点的ip { "name": "port", "value": {{mysql_port}} },//数据库监听的端口 { "name": "database.name", "value": {{mysql_database}} }, //连贯的数据库名 { "name": "user", "value": {{mysql_user}} }, //用户 { "name": "password","value": {{mysql_password}} } ,//明码 { "name":"schema", "value": {{mysql_database}}}//同数据库名 ] }}### mysql link createpost https://{{host}}/api/v1/cdl/linkcontent-type: application/json{"name": "MySQL_link", //link名,全局惟一,不能反复"description":"MySQL connection", //link形容"link-type":"mysql", //link的类型"enabled":"true","link-config-values": {"inputs": [ { "name": "host", "value": {{mysql_host}} }, //数据库装置节点的ip { "name": "port", "value": {{mysql_port}} },//数据库监听的端口 { "name": "database.name", "value": {{mysql_database}} }, //连贯的数据库名 { "name": "user", "value": {{mysql_user}} }, //用户 { "name": "password","value": {{mysql_password}} } ,//明码 { "name":"schema", "value": {{mysql_database}}}//同数据库名 ] }}### mysql link updateput https://{{host}}/api/v1/cdl/link/MySQL_linkcontent-type: application/json{"name": "MySQL_link", //link名,全局惟一,不能反复"description":"MySQL connection", //link形容"link-type":"mysql", //link的类型"enabled":"true","link-config-values": {"inputs": [ { "name": "host", "value": {{mysql_host}} }, //数据库装置节点的ip { "name": "port", "value": {{mysql_port}} },//数据库监听的端口 { "name": "database.name", "value": {{mysql_database}} }, //连贯的数据库名 { "name": "user", "value": {{mysql_user}} }, //用户 { "name": "password","value": {{mysql_password}} } ,//明码 { "name":"schema", "value": {{mysql_database}}}//同数据库名 ] }}Kafka link局部rest申请代码 ...

September 30, 2021 · 3 min · jiezi

关于集成:全平台音视频SDK

随着企业的业务发展壮大,企业员工人数一直增长,办公地点减少,各大企业都会应用专属的办公软件,例如阿里钉钉、腾讯企业微信、字节跳动飞书以及各大企业自研的外部办公软件。在IM、短信、电话、视频多种企业沟通形式中,IM须要单方提前装置软件,短信浏览率低,视频对网络环境要求十分高。电话领有对接管方强揭示、触达范围广等个性,使电话成为企业办公软件的最重要通信渠道,例如:1V1办公电话、多方电话会议。企业办公电话由企业进行付费,通话录音反对云端贮存,既保证企业服务质量,又加重了员工话费累赘。 让企业办公软件减少企业电话性能,最快捷的计划是在软件/App上减少VoIP SIP SDK,仅需一次更新,即可减少企业电话性能。目前市场上已有一些产品呈现,有PJSIP、CSIPSimple、Linphone、eyebeam、JsSIP、sipML5等,然而企业真正用起来,语音通话经常出现卡顿、丢包、延时高。详情可查看:http://www.webrtc2sip.com 二、VoIP SIP SDK:启智科技的全平台VoIP SIP SDK反对以下性能:1、跨平台音频互通2、防SIP协定拦挡3、免网络穿透解决4、高清语音通话5、免高频注册6、断线主动重连7、挪动端/PC端全平台SDK8、疾速上线利用详情可查看:http://www.webrtc2sip.comAndroid/iOS DEMO界面Web DEMO界面 三、利用场景:1、应用程序(App/Web)对接企业呼叫核心零碎客服坐席;(1)拓宽用户服务渠道,缩短用户接入工夫;(2)升高客服热线通信老本;(3)反对视频客服接入,更好的用户体验;2、音视频会议对接PSTN/SIP音视频通话;(1)实现RTC视频会议与PSTN电话服务互通;(2)与传统SIP音视频设施实现SIP互通;(3)反对呼出和呼入参会性能;(4)欠缺的会控性能;3、企业外部App挪动工作台(智能办公电话);(1)集成到企业App,满足挪动办公需要;(2)智能办公电话企业对立付费,对立管控通话录音;(3)免购买座机硬件资产;4、CRM系统集成电话呼叫性能;(1)CRM零碎直拨用户手机,进步CRM用户沟通效率;(2)晋升CRM零碎产品竞争力;(3)反对保留用户通话录音;5、智能硬件(如:智能门禁设施、电梯救济设施、智能陪伴机器人)对接PSTN通话;(1)基于云端通信服务,运维成本低;(2)多端反对,反对iOS、Android、Web;(3)硬件免集成通信模块,升高硬件洽购老本;详情可查看:http://www.webrtc2sip.com四、利用案例:目前已为陌陌、紫光云、招联生产金融、上海美市科技、上市证券公司、驻马店12345市长热线、深圳中创联结科技、武汉泰迪智慧、深圳梯云物联、萌芽网络等企业提供计划反对。详情可查看:http://www.webrtc2sip.com————————————————版权申明:本文为CSDN博主「qzlink1」的原创文章,遵循CC 4.0 BY-SA版权协定,转载请附上原文出处链接及本申明。原文链接:https://blog.csdn.net/qzlink1...

July 6, 2021 · 1 min · jiezi

如何在京东云上简单实践CI流程

在如今的互联网时代,随着软件开发复杂度的不断提高,软件开发和发布管理也越来越重要。目前已经形成一套标准的流程,最重要的组成部分就是持续集成及持续交付、部署。在此,我们在京东云上以一个案例简单实践下 CI 流程。在初探前,我们有几个概念和工具需要了解下:1)、CI/CD:持续集成(Continuous Integration,CI),它属于开发人员的自动化流程。成功的 CI 意味着应用代码的新更改会定期构建、测试并合并到共享存储库中。该解决方案可以解决在一次开发中有太多应用分支,从而导致相互冲突的问题。持续交付(Continuous Delivery,CD),通常是指开发人员对应用的更改会自动进行错误测试并上传到存储库(如 GitHub 或容器注册表),然后由运维团队将其部署到实时生产环境中。这旨在解决开发和运维团队之间可见性及沟通较差的问题。因此,持续交付的目的就是确保尽可能减少部署新代码时所需的工作量。持续部署(Continuous Deployment,CD),这是另一种“CD”,指的是自动将开发人员的更改从存储库发布到生产环境,以供客户使用。它主要为了解决因手动流程降低应用交付速度,从而使运维团队超负荷的问题。2)、Jenkins:Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。3)、Docker:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。4)、Git:Git(读音为/gt/),是一个开源的分布式版本控制系统,提供代码仓库,可以有效、高速地处理从很小到非常大的项目版本管理。 Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。CI流程设计图:工作流程:开发人员提交代码到Git版本仓库;Jenkins人工/定时触发项目构建;Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;Jenkins在Docker主机创建容器并发布主机环境规划:docker-jenkins:构建;拉取代码、代码编码、打包镜像、推送镜像到镜像仓库 116.196.85.174(公) 10.0.0.20 (内)docker-git:代码仓库 116.196.86.207(公) 10.0.0.22 (内)docker-harbor:私有镜像仓库 116.196.88.91(公) 10.0.0.21 (内)buildimage:build docker镜像 116.196.89.139(公) 10.0.0.4 (内)一、主机创建在京东云控制台创建4台云主机,地址:https://console.jdcloud.com/配置如下,购买时数量直接选择4,购买完成后再修改名称,分别为:docker-jenkins、docker-git、docker-harbor、buildimage创建修改名称后如下:二、环境配置1、云主机docker-git1.1. 修改主机名为:docker-git[root@112 ~]# hostnamectl set-hostname docker-git[root@112 ~]# hostname docker-git[root@112 ~]# logout[root@docker-git ~]#Ctrl+D退出后重新登陆生效1.2. 部署Git代码版本仓库安装:[root@docker-git ~]# yum install git -y配置git用户:[root@docker-git ~]# useradd git[root@docker-git ~]# passwd git创建库:[root@docker-git ~]# su git[git@docker-git root]$ cd[git@docker-git ~]$ mkdir tomcat-java-demo.git[git@docker-git ~]$ cd tomcat-java-demo.git/[git@docker-git tomcat-java-demo.git]$ git –bare initInitialized empty Git repository in /home/git/tomcat-java-demo.git/[git@docker-git tomcat-java-demo.git]$ lsbranches config description HEAD hooks info objects refs[git@docker-git tomcat-java-demo.git]$ 2、云主机docker-jenkins2.1. 修改主机名为:docker-jenkins[root@113 ~]# hostnamectl set-hostname docker-jenkins[root@113 ~]# hostname docker-jenkins[root@113 ~]# logout[root@docker-jenkins ~]#Ctrl+D退出后重新登陆生效2.2. jenkins环境部署部署jdk环境及maven[root@docker-jenkins tomcat-java-demo]# cd[root@docker-jenkins ]# mkdir tools[root@docker-jenkins ]# cd tools[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/jdk-8u191-linux-x64.tar.gz;tar zxf jdk-8u191-linux-x64.tar.gz;mv jdk1.8.0_191/ /usr/local/;ln -s /usr/local/jdk1.8.0_191/ /usr/local/jdk;[root@docker-jenkins tools]# vim /etc/profile######## JDK #######JAVA_HOME=/usr/local/jdk1.8.0_191JAVA_BIN=/usr/local/jdk1.8.0_191/binPATH=$PATH:$JAVA_BINCLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport JAVA_HOME JAVA_BIN PATH CLASSPATH[root@docker-jenkins tools]# source /etc/profile[root@docker-jenkins tools]# java -versionjava version “1.8.0_191"Java(TM) SE Runtime Environment (build 1.8.0_191-b12)Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode) [root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/apache-maven-3.5.0-bin.tar.gz;tar zxf apache-maven-3.5.0-bin.tar.gz;mv apache-maven-3.5.0 /usr/local/maven[root@docker-jenkins tools]# 安装Jenkins,下载Tomcat二进制包将war包到webapps下即可:[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/jenkins.war[root@docker-jenkins tools]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/apache-tomcat-8.5.38.tar.gz[root@docker-jenkins tools]# tar zxf apache-tomcat-8.5.38.tar.gz[root@docker-jenkins tools]# lsapache-maven-3.5.0-bin.tar.gz apache-tomcat-8.5.38 apache-tomcat-8.5.38.tar.gz jdk-8u191-linux-x64.tar.gz jenkins.war[root@docker-jenkins tools]# mv apache-tomcat-8.5.38 /usr/local/tomcat-jenkins[root@docker-jenkins tools]# ls /usr/local/tomcat-jenkins/webapps/docs examples host-manager manager ROOT[root@docker-jenkins tools]# rm -rf /usr/local/tomcat-jenkins/webapps/*[root@docker-jenkins tools]# mv jenkins.war /usr/local/tomcat-jenkins/webapps/ROOT.war[root@docker-jenkins tools]# ll /usr/local/tomcat-jenkins/webapps/total 75520-rw-r–r–. 1 root root 77330344 Mar 15 00:55 ROOT.war[root@docker-jenkins tools]# cd /usr/local/tomcat-jenkins/bin/[root@docker-jenkins bin]# ./startup.shUsing CATALINA_BASE: /usr/local/tomcat-jenkinsUsing CATALINA_HOME: /usr/local/tomcat-jenkinsUsing CATALINA_TMPDIR: /usr/local/tomcat-jenkins/tempUsing JRE_HOME: /usr/local/jdk1.8Using CLASSPATH: /usr/local/tomcat-jenkins/bin/bootstrap.jar:/usr/local/tomcat-jenkins/bin/tomcat-juli.jarTomcat started.[root@docker-jenkins bin]#启动后,浏览器访问(docker-jenkins):http://Jenkins主机公网IP:8080/,按提示输入密码,登录即可。在/root/.jenkins/secrets/initialAdminPassword文件里,查看密码后填入即可按照你自己的需求安装插件设置管理员开始使用Jenkins2.3. 安装DOCKER CE安装所需包yum install -y yum-utils device-mapper-persistent-data lvm2 -y设置稳定存储库yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo -y安装DOCKER CE(这一步比较慢,耐心等会儿)yum install docker-ce docker-ce-cli containerd.io -y启动Dockersystemctl start docker3、云主机docker-harbor3.1. 修改主机名为:docker-harbor[root@c-dfjgjesgqe ~]# hostnamectl set-hostname docker-harbor[root@c-dfjgjesgqe ~]# hostname docker-harborCtrl+D退出后重新登陆生效3.2. 企业级harbor镜像仓库部署Habor是由VMWare公司开源的容器镜像仓库。事实上,Habor是在Docker Registry上进行了相应的 企业级扩展,从而获得了更加广泛的应用,这些新的企业级特性包括:管理用户界面,基于角色的访 问控制,AD/LDAP集成以及审计日志等,足以满足基本企业需求。harbor各组件介绍:| 组件 | 功能 | | :——– | :——–| | harbor-adminserver | 配置管理中心 | | harbor-db | MySQL数据库 | | harbor-jobservice | 负责镜像复制 | | harbor-log | 记录操作日志 | | harbor-ui | Web管理页面和API | | nginx | 前端代理,负责前端页面和镜像上传/下载转发 | | redis | 会话 | | registry | 镜像存储 | Harbor安装有3种方式1)在线安装:从Docker Hub下载Harbor相关镜像,因此安装软件包非常小2)离线安装:安装包包含部署的相关镜像,因此安装包比较大3)OVA安装程序:当用户具有vCenter环境时,使用此安装程序,在部署OVA后启动Harb在此我们使用第二种离线安装方式来搭建基于 https 访问的 harbor 镜像仓库。3.2.1. 下载并解压离线安装包harbor离线包下载地址:https://github.com/goharbor/h…为方便下载,我在京东云对象存储上也存了一份,可直接wget:https://pocenv-hcc.oss.cn-nor…[root@docker-harbor ~]# yum install vim wget openssl -y[root@docker-harbor ~]# wget https://pocenv-hcc.oss.cn-north-1.jcloudcs.com/harbor-offline-installer-v1.7.4.tgz[root@docker-harbor ]# tar zxf harbor-offline-installer-v1.7.4.tgz[root@docker-harbor ]# cd harbor[root@docker-harbor harbor]# lltotal 570744drwxr-xr-x 3 root root 23 Apr 1 15:05 common-rw-r–r– 1 root root 939 Mar 4 15:33 docker-compose.chartmuseum.yml-rw-r–r– 1 root root 975 Mar 4 15:33 docker-compose.clair.yml-rw-r–r– 1 root root 1434 Mar 4 15:33 docker-compose.notary.yml-rw-r–r– 1 root root 5608 Mar 4 15:33 docker-compose.yml-rw-r–r– 1 root root 8033 Mar 4 15:33 harbor.cfg-rw-r–r– 1 root root 583086399 Mar 4 15:33 harbor.v1.7.4.tar.gz-rwxr-xr-x 1 root root 5739 Mar 4 15:33 install.sh-rw-r–r– 1 root root 11347 Mar 4 15:33 LICENSE-rw-r–r– 1 root root 1263409 Mar 4 15:33 open_source_license-rwxr-xr-x 1 root root 36337 Mar 4 15:33 prepare3.2.2. 自签http证书1)获取权威认证证书[root@docker-harbor harbor]# mkdir ssl[root@docker-harbor harbor]# cd ssl[root@docker-harbor ssl]# openssl genrsa -out ca.key 4096Generating RSA private key, 4096 bit long modulus……………………………..++…………………………………………………………………………………………………………………….++e is 65537 (0x10001)[root@docker-harbor ssl]# openssl req -x509 -new -nodes -sha512 -days 3650 -subj “/C=ZH/ST=ShangHai/L=ShangHai/O=example/OU=Personal/CN=reg.marin.com” -key ca.key -out ca.crt[root@docker-harbor ssl]# lltotal 8-rw-r–r– 1 root root 2037 Apr 4 18:41 ca.crt-rw-r–r– 1 root root 3243 Apr 4 18:41 ca.key2)获取服务端证书1.Create your own Private Key:[root@docker-harbor ssl]# openssl genrsa -out reg.marin.com.key 4096Generating RSA private key, 4096 bit long modulus………………………………………++………………………………………………………………………………………………………………………………………………………………………………………………….++e is 65537 (0x10001)[root@docker-harbor ssl]# openssl req -sha512 -new -subj “/C=ZH/ST=ShangHai/L=ShangHai/O=example/OU=Personal/CN=reg.marin.com” -key reg.marin.com.key -out reg.marin.com.csr[root@docker-harbor ssl]# lltotal 16-rw-r–r– 1 root root 2037 Apr 4 18:41 ca.crt-rw-r–r– 1 root root 3243 Apr 4 18:41 ca.key-rw-r–r– 1 root root 1708 Apr 4 18:42 reg.marin.com.csr-rw-r–r– 1 root root 3243 Apr 4 18:42 reg.marin.com.key[root@docker-harbor ssl]# cat > v3.ext <<-EOF> authorityKeyIdentifier=keyid,issuer> basicConstraints=CA:FALSE> keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment> extendedKeyUsage = serverAuth> subjectAltName = @alt_names> > [alt_names]> DNS.1=reg.marin.com> DNS.2=reg.marin> DNS.3=marin> EOF[root@docker-harbor ssl]# openssl x509 -req -sha512 -days 3650 -extfile v3.ext -CA ca.crt -CAkey ca.key -CAcreateserial -in reg.marin.com.csr -out reg.marin.com.crtSignature oksubject=/C=ZH/ST=ShangHai/L=ShangHai/O=example/OU=Personal/CN=reg.marin.comGetting CA Private Key[root@docker-harbor ssl]# lltotal 28-rw-r–r– 1 root root 2037 Apr 4 18:41 ca.crt-rw-r–r– 1 root root 3243 Apr 4 18:41 ca.key-rw-r–r– 1 root root 17 Apr 4 18:44 ca.srl-rw-r–r– 1 root root 2098 Apr 4 18:44 reg.marin.com.crt-rw-r–r– 1 root root 1708 Apr 4 18:42 reg.marin.com.csr-rw-r–r– 1 root root 3243 Apr 4 18:42 reg.marin.com.key-rw-r–r– 1 root root 260 Apr 4 18:43 v3.ext3)修改harbor配置,以及为Docker配置服务端证书,key和CA。[root@docker-harbor ssl]# cd ..[root@docker-harbor harbor]# vim harbor.cfg……hostname = reg.marin.comui_url_protocol = httpsssl_cert = ./ssl/reg.marin.com.crtssl_cert_key = ./ssl/reg.marin.com.keyharbor_admin_password = 123456……密码也可以不修改,默认登录用户admin,密码Harbor12345Docker守护进程会将.crt文件解释为CA证书,将.cert文件解释为客户机证书,先将.crt文件转换一份.cert文件。[root@docker-harbor harbor]# cd ssl/[root@docker-harbor ssl]# mkdir -p /etc/docker/certs.d/reg.marin.com[root@docker-harbor ssl]# openssl x509 -inform PEM -in reg.marin.com.crt -out reg.marin.com.cert[root@docker-harbor ssl]# cp reg.marin.com.cert reg.marin.com.key ca.crt /etc/docker/certs.d/reg.marin.com/到此自签成功!3.2.3. 安装DOCKER CE安装所需包yum install -y yum-utils device-mapper-persistent-data lvm2 -y设置稳定存储库yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo -y安装DOCKER CE(这一步比较慢,耐心等会儿)yum install docker-ce docker-ce-cli containerd.io -y启动Dockersystemctl start docker通过运行hello-world 映像验证是否正确安装了Docker CE 。docker run hello-world3.2.4. 初始化及安装验证初始化安装:[root@docker-harbor ssl]# [root@docker-harbor ssl]# cd ..[root@docker-harbor harbor]# ./prepareGenerated and saved secret to file: /data/secretkeyGenerated configuration file: ./common/config/nginx/nginx.confGenerated configuration file: ./common/config/adminserver/envGenerated configuration file: ./common/config/core/envGenerated configuration file: ./common/config/registry/config.ymlGenerated configuration file: ./common/config/db/envGenerated configuration file: ./common/config/jobservice/envGenerated configuration file: ./common/config/jobservice/config.ymlGenerated configuration file: ./common/config/log/logrotate.confGenerated configuration file: ./common/config/registryctl/envGenerated configuration file: ./common/config/core/app.confGenerated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crtThe configuration files are ready, please use docker-compose to start the service.执行install.sh脚本,安装harbor仓库注意:在执行install.sh脚本之前,先检查两个问题:1)docker-compose是否安装,否则在运行install.sh时会失败,报错“✖ Need to install docker-compose(1.7.1+) by yourself first and run this script again.”2)docker服务是否正常运行,否则在运行install.sh会失败,报错“Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?”安装Compose运行此命令以下载Docker Compose的当前稳定版本:curl -L “https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)” -o /usr/local/bin/docker-compose对二进制文件应用可执行权限:chmod +x /usr/local/bin/docker-compose执行install.sh脚本,安装harbor仓库[root@docker-harbor harbor]# ./install.sh[Step 0]: checking installation environment …Note: docker version: 18.09.4Note: docker-compose version: 1.24.0[Step 1]: loading Harbor images …bffe2a0fec66: Loading layer [==================================================>] 33.22MB/33.22MB38e174bed467: Loading layer [==================================================>] 8.964MB/8.964MB427e4936ae66: Loading layer [==================================================>] 35.77MB/35.77MB3bfd5214250a: Loading layer [==================================================>] 2.048kB/2.048kBf30df776629d: Loading layer [==================================================>] 3.072kB/3.072kBf87afad43f43: Loading layer [==================================================>] 22.8MB/22.8MB……953717aa0afc: Loading layer [==================================================>] 22.8MB/22.8MBLoaded image: goharbor/registry-photon:v2.6.2-v1.7.4[Step 2]: preparing environment …Clearing the configuration file: ./common/config/adminserver/envClearing the configuration file: ./common/config/core/envClearing the configuration file: ./common/config/core/app.confClearing the configuration file: ./common/config/core/private_key.pemClearing the configuration file: ./common/config/db/env……Generated certificate, key file: ./common/config/core/private_key.pem, cert file: ./common/config/registry/root.crtThe configuration files are ready, please use docker-compose to start the service.[Step 3]: checking existing instance of Harbor …[Step 4]: starting Harbor …Creating network “harbor_harbor” with the default driverCreating harbor-log … doneCreating redis … doneCreating registryctl … doneCreating harbor-db … doneCreating harbor-adminserver … doneCreating registry … doneCreating harbor-core … doneCreating harbor-jobservice … doneCreating harbor-portal … doneCreating nginx … done✔ —-Harbor has been installed and started successfully.—-Now you should be able to visit the admin portal at https://reg.marin.com. For more details, please visit https://github.com/goharbor/harbor .浏览器访问验证:浏览器访问要做域名解析,在本地hosts(C:WindowsSystem32driversetchosts)文件中加入:116.196.88.91 reg.marin.com访问:https://reg.marin.com,并登陆。登录后界面基本操作:新建项目test新建用户marin将用户marin设置为test项目管理员三、环境测试1、远程clone代码测试clone 云主机docker-git上的仓库tomcat-java-demo.git:[root@docker-jenkins ~]# yum install git vim wget -y[root@docker-jenkins ~]# git config –global user.email “hcc@c.com”[root@docker-jenkins ~]# git config –global user.name “hcc”[root@docker-jenkins ~]# git clone git@10.0.0.22:/home/git/tomcat-java-demo.gitCloning into ‘solo’…The authenticity of host ‘10.0.0.22 (10.0.0.22)’ can’t be established.ECDSA key fingerprint is SHA256:XNWQhGsAsqd84k/6OYV3xl1+mPGjtASsxeV1YVLZVas.ECDSA key fingerprint is MD5:b4:bd:16:2b🇩🇪e7:7c:fd:c5:dd:91:75:20:ff:3e:0a.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added ‘10.0.0.22’ (ECDSA) to the list of known hosts.git@10.0.0.22’s password⚠️ You appear to have cloned an empty repository.[root@docker-jenkins ~]# lstomcat-java-demo[root@docker-jenkins ~]# ls tomcat-java-demo/doc Dockerfile LICENSE pom.xml README.md src[root@docker-jenkins ~]# 2、拉取Github demo代码模拟生产项目,拉取github上的一个demo,并上传至本地git库[root@docker-jenkins ~]# mv tomcat-java-demo tomcat-java-demo.bak[root@docker-jenkins ~]# git clone https://github.com/dingkai163/tomcat-java-demo.gitCloning into ’tomcat-java-demo’…remote: Enumerating objects: 185, done.remote: Counting objects: 100% (185/185), done.remote: Compressing objects: 100% (165/165), done.remote: Total 185 (delta 5), reused 178 (delta 4), pack-reused 0Receiving objects: 100% (185/185), 4.50 MiB | 870.00 KiB/s, done.Resolving deltas: 100% (5/5), done.[root@docker-jenkins ~]# cd tomcat-java-demo[root@docker-jenkins tomcat-java-demo]# vim .git/config[core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true[remote “origin”] url = git@10.0.0.22:/home/git/tomcat-java-demo.git # 修改为本地的git库地址 fetch = +refs/heads/:refs/remotes/origin/[branch “master”] remote = origin merge = refs/heads/master[root@docker-jenkins tomcat-java-demo]# git add .[root@docker-jenkins tomcat-java-demo]# git status# On branch masternothing to commit, working directory clean[root@docker-jenkins tomcat-java-demo]# git commit -m “all”# On branch masternothing to commit, working directory clean[root@docker-jenkins tomcat-java-demo]# git push origin mastergit@10.0.0.22’s password:Counting objects: 229, done.Compressing objects: 100% (185/185), done.Writing objects: 100% (229/229), 4.52 MiB | 0 bytes/s, done.Total 229 (delta 25), reused 229 (delta 25)To git@10.0.0.22:/home/git/tomcat-java-demo.git * [new branch] master -> master[root@docker-jenkins tomcat-java-demo]#3、自建镜像仓库上传下载用云主机buildimage上传及下载镜像修改主机名为:buildimage[root@c-dfjgjesgqe ]# hostnamectl set-hostname buildimage[root@c-dfjgjesgqe ]# hostname buildimageCtrl+D退出后重新登陆生效安装DOCKER CE安装所需包yum install -y yum-utils device-mapper-persistent-data lvm2 -y设置稳定存储库yum-config-manager –add-repo https://download.docker.com/linux/centos/docker-ce.repo -y安装DOCKER CE(这一步比较慢,耐心等会儿)yum install docker-ce docker-ce-cli containerd.io -y启动Dockersystemctl start docker首先在云主机buildimage上做本地hosts解析[root@buildimage ~]# echo “10.0.0.21 reg.marin.com” >> /etc/hosts其次编辑/etc/docker/daemon.json文件,保存退出[root@buildimage ~]# vim /etc/docker/daemon.json{“insecure-registries”:[“reg.marin.com”] }最后重启下docker,让配置生效[root@buildimage ~]# systemctl restart docker如果没有此步docker login将会报错:[root@buildimage ~]# docker login reg.marin.comUsername (admin): adminPassword: Error response from daemon: Get https://reg.marin.com/v1/users/: x509: certificate signed by unknown authority此时可以通过docker login reg.marin.com 登录harbor,输入用户名及密码:[root@buildimage ~]# docker login reg.marin.comUsername (admin): adminPassword: Login Succeeded在buildimage云主机上构建Tomcat基础镜像,并推送到harbor镜像库:[root@buildimage ~]# mkdir tomcat[root@buildimage ~]# cd tomcat[root@buildimage tomcat]# vim Dockerfile-tomcatFROM centos:7MAINTAINER hanchaochao www.jdcloud.com ENV VERSION=8.5.39 RUN yum install java-1.8.0-openjdk wget curl unzip iproute net-tools -y && \ yum clean all && \ rm -rf /var/cache/yum/RUN wget http://mirrors.shu.edu.cn/apache/tomcat/tomcat-8/v${VERSION}/bin/apache-tomcat-${VERSION}.tar.gz && \ tar zxf apache-tomcat-${VERSION}.tar.gz && \ mv apache-tomcat-${VERSION} /usr/local/tomcat && \ rm -rf apache-tomcat-${VERSION}.tar.gz /usr/local/tomcat/webapps/ && \ mkdir /usr/local/tomcat/webapps/test && \ echo “ok” > /usr/local/tomcat/webapps/test/status.html && \ sed -i ‘1a JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom”’ /usr/local/tomcat/bin/catalina.sh && \ ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime ENV PATH $PATH:/usr/local/tomcat/bin EXPOSE 8080CMD [“catalina.sh”, “run”][root@harbor tomcat]# docker build -t tomcat:v1 -f Dockerfile-tomcat .[root@harbor tomcat]# docker tag tomcat:v1 reg.marin.com/test/tomcat:v1[root@docker-git-harbor tomcat]# docker login reg.marin.com[root@docker-git-harbor tomcat]# docker push reg.marin.com/test/tomcat:v1打开harbor的test仓库,查看镜像已经push成功四、CI流程测试1、Jenkins安装必要插件由于jenkins是离线安装,所有在此需要配置一下插件下载地址:系统管理–>插件管理–>Advanced(高级)修改下方地址,将https修改为http 再点提交若出现问题无法获取插件,请尝试更换地址,如:https://mirrors.tuna.tsinghua…提交后点击可选插件,此时我们可以看到很多可获得插件首先搜索并安装Pipeline插件(如果搜索不到,在已安装中查看是否已经安装完毕)pipeline 是一套运行于jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。再安装SCM to job 插件,同上步骤(搜索,安装)。2、Jenkins项目创建创建jobs选择流水线类型到这里我们就开始配置Pipeline script,点击流水线语法,来自动生成我们需要的配置。如下图,我们Git方式,配置Git仓库地址,再添加认证相关。在示例步骤中下拉选择如图选项,在Repository URL中填写docker-git上的git仓库地址,因为没有添加jenkins到docker-git容器的免密码登陆,所以截图中我们可以看到连接被拒绝的一大串红色提示,我们点击添加按钮这里我们使用的是秘钥认证方式,需要在容器docker-jenkins上生成密钥,然后将jenkins上生成的公钥发送到(docker-git)git服务器上,然后将jenkins上的生成的私钥内容粘贴到下图Key中,这样jenkins就可以免交互的拉取git仓库中的代码了。[root@docker-jenkins ~]# ssh-keygenGenerating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:SHA256:RQZ78bcVhLRQi8fWFPYmyvcnOqlxy980QwLsYFT/iz8 root@docker-jenkinsThe key’s randomart image is:+—[RSA 2048]—-+| .o=oooo*.|| .+.o=.* o|| .oo+.Bo.+|| .oo.+o.= || S .o.oo || .+..|| . .o.++|| +oo.E+|| ..+o..o|+—-[SHA256]—–+[root@docker-jenkins ~]# cd[root@docker-jenkins ~]# ls .ssh/id_rsa id_rsa.pub known_hosts[root@docker-jenkins ~]# ssh-copy-id git@10.0.0.22/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: “/root/.ssh/id_rsa.pub”/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed – if you are prompted now it is to install the new keysgit@10.0.0.22’s password: Number of key(s) added: 1Now try logging into the machine, with: “ssh ‘git@10.0.0.22’“and check to make sure that only the key(s) you wanted were added.[root@docker-jenkins ~]# cat .ssh/id_rsa—–BEGIN RSA PRIVATE KEY—–MIIEogIBAAKCAQEAvrI8lBov+W8v+zSGdu2EP4BPP7Ml+T5KUwc2MKX1RNMMNQxctPUf7PjhbJJvuTpPPbS1+9PAlrPhikDrug3K4+sF/Fiy+/YgoVMlEFrXiSJK1xHiErDLA39WGq+E4ssth3JfrQHV+AINGAh1/NR+Uk+YmPDAuQgA1l7jSH1PN6qTdrYt95HbklAA+Q3omAJJ4Uc80lk7ZdMcdCc0OAtHjCfbRv287qrH4U2OKSlOLljiBHBN……—–END RSA PRIVATE KEY—–[root@docker-jenkins ~]# 配置完成后,我们就可以生成Pipeline脚本了。点击下方生成流水线脚本,然后复制方框内的内容。将生成的流水线脚本复制出来,我生成的流水线脚本如下:checkout([$class: ‘GitSCM’, branches: [[name: ‘/master’]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: ‘9baf7156-9ac6-435d-b0db-86cae51c8fe6’, url: ‘git@10.0.0.22:/home/git/tomcat-java-demo.git’]]])将生成的流水线脚本记录完成后,我们点击左上角返回继续点击配置,完成流水线项目tomcat-java-demo的配置点击流水线,我们所需要的Pipeline脚本如下,将其粘贴到script的拉取代码模块中,并修改分支/master为${branch},其他模块内容自行编写,具体需要修改的地方和脚本如下:node { // 拉取代码 stage(‘Git Checkout’) { checkout([$class: ‘GitSCM’, branches: [[name: ‘${branch}’]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: ‘9baf7156-9ac6-435d-b0db-86cae51c8fe6’, url: ‘git@10.0.0.22:/home/git/tomcat-java-demo.git’]]]) } // 代码编译 stage(‘Maven Build’) { sh ’’’ export JAVA_HOME=/usr/local/jdk /usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true ’’’ } // 项目打包到镜像并推送到镜像仓库 stage(‘Build and Push Image’) {sh ‘‘‘REPOSITORY=reg.marin.com/test/tomcat-java-demo:${branch}cat > Dockerfile << EOFFROM reg.marin.com/test/tomcat:v1 MAINTAINER marinRUN rm -rf /usr/local/tomcat/webapps/ADD target/.war /usr/local/tomcat/webapps/ROOT.warEOFdocker build -t $REPOSITORY .docker login reg.marin.com -u admin -p 123456docker push $REPOSITORY’’’ } // 部署到Docker主机 stage(‘Deploy to Docker’) { sh ’’’ REPOSITORY=reg.marin.com/test/tomcat-java-demo:${branch} docker rm -f tomcat-java-demo |true docker pull $REPOSITORY docker container run -d –name tomcat-java-demo -p 88:8080 $REPOSITORY ’’’ }}在Pipeline脚本里面我们指定了一个branch参数,所以我们需要传递一个参数变量,这里我们选择参数化构建,默认值为master分支。然后保存配置。3、Jenkins构建任务构建前我们还需要做两个操作:添加reg.marin.com的hosts解析[root@docker-jenkins ~]# echo “10.0.0.21 reg.marin.com” >> /etc/hosts编辑/etc/docker/daemon.json文件,输入如下信息,保存退出[root@docker-jenkins ~]# vim /etc/docker/daemon.json{“insecure-registries”:[“reg.marin.com”] }最后重启下docker,让配置生效[root@docker-jenkins ~]# systemctl restart docker返回到工作台,我们开始构建任务构建开始构建完成可以通过Console Output输出查看jenkins构建流程成功构建会提示: SUCCESS通过浏览器来访问tomcat-java-demo项目:http://Jenkins主机公网IP:88/![图片上传中…]可以看到正常访问,至此在京东云上基ker+Git 的简单CI流程实践已经成功部署了。原参考地址:https://www.toutiao.com/a6中…] ...

April 16, 2019 · 8 min · jiezi

日志服务与SIEM(如Splunk)集成方案实战

背景信息目标本文主要介绍如何让阿里云日志服务与您的SIEM方案(如Splunk)对接, 以便确保阿里云上的所有法规、审计、与其他相关日志能够导入到您的安全运维中心(SOC)中。名词解释LOG(SLS) - 阿里云日志服务,简写SLS表示(Simple Log Service)。SIEM - 安全信息与事件管理系统(Security Information and Event Management),如Splunk, QRadar等。Splunk HEC - Splunk的Http事件接收器(Splunk Http Event Collector), 一个 HTTP(s)接口,用于接收日志。审计相关日志安全运维团队一般对阿里云相关的审计日志感兴趣,如下列出所有存在于所有目前在日志服务中可用的相关日志(但不限于):Regions化 - 时刻更新,请以最新的产品文档为准。阿里云日志服务阿里云的日志服务(log service)是针对日志类数据的一站式服务,无需开发就能快捷完成海量日志数据的采集、消费、投递以及查询分析等功能,提升运维、运营效率。日志服务主要包括 实时采集与消费、数据投递、查询与实时分析 等功能,适用于从实时监控到数据仓库的各种开发、运维、运营与安全场景:目前,以上各个阿里云产品已经与日志服务打通,提供近实时的日志自动采集存储、并提供基于日志服务的查询分析、报表报警、下游计算对接与投递的能力。集成方案建议概念项目(Project)项目(Project)是日志服务中的资源管理单元,用于资源隔离和控制。您可以通过项目来管理某一个应用的所有日志及相关的日志源。它管理着用户的所有日志库(Logstore),采集日志的机器配置等信息,同时它也是用户访问日志服务资源的入口。日志库(Logstore)日志库(Logstore)是日志服务中日志数据的收集、存储和查询单元。每个日志库隶属于一个项目,且每个项目可以创建多个日志库。分区(Shard)每个日志库分若干个分区(Shard),每个分区由MD5左闭右开区间组成,每个区间范围不会相互覆盖,并且所有的区间的范围是MD5整个取值范围。服务入口(Endpoint)日志服务入口是访问一个项目(Project)及其内部日志数据的 URL。它和 Project 所在的阿里云区域(Region)及 Project 名称相关。https://help.aliyun.com/document_detail/29008.html访问秘钥(AccessKey)阿里云访问秘钥是阿里云为用户使用 API(非控制台)来访问其云资源设计的“安全口令”。您可以用它来签名 API 请求内容以通过服务端的安全验证。https://help.aliyun.com/document_detail/29009.html假设这里假设您的SIEM(如Splunk)位于组织内部环境(on-premise)中,而不是云端。为了安全考虑,没有任何端口开放让外界环境来访问此SIEM。概览推荐使用SLS消费组构建程序来从SLS进行实时消费,然后通过Splunk API(HEC)来发送日志给Splunk。使用消费组编程协同消费库(Consumer Library)是对日志服务中日志进行消费的高级模式,提供了消费组(ConsumerGroup)的概念对消费端进行抽象和管理,和直接使用SDK进行数据读取的区别在于,用户无需关心日志服务的实现细节,只需要专注于业务逻辑,另外,消费者之间的负载均衡、failover等用户也都无需关心。Spark Streaming、Storm 以及Flink Connector都以Consumer Library作为基础实现。基本概念消费组(Consumer Group) - 一个消费组由多个消费者构成,同一个消费组下面的消费者共同消费一个logstore中的数据,消费者之间不会重复消费数据。消费者(Consumer) - 消费组的构成单元,实际承担消费任务,同一个消费组下面的消费者名称必须不同。在日志服务中,一个logstore下面会有多个shard,协同消费库的功能就是将shard分配给一个消费组下面的消费者,分配方式遵循以下原则:每个shard只会分配到一个消费者。一个消费者可以同时拥有多个shard。新的消费者加入一个消费组,这个消费组下面的shard从属关系会调整,以达到消费负载均衡的目的,但是上面的分配原则不会变,分配过程对用户透明。协同消费库的另一个功能是保存checkpoint,方便程序故障恢复时能接着从断点继续消费,从而保证数据不会被重复消费。部署建议硬件建议硬件参数:需要一台机器运行程序,安装一个Linux(如Ubuntu x64),推荐硬件参数如下:2.0+ GHZ X 8核16GB 内存,推荐32GB1 Gbps网卡至少2GB可用磁盘空间,建议10GB以上网络参数:从组织内的环境到阿里云的带宽应该大于数据在阿里云端产生的速度,否则日志无法实时消费。假设数据产生一般速度均匀,峰值在2倍左右,每天100TB原始日志。5倍压缩的场景下,推荐带宽应该在4MB/s(32Mbps)左右。使用(Python)这里我们描述用Python使用消费组进行编程。对于Java语言用法,可以参考这篇文章.注意:本篇文章的代码可能会更新,最新版本在这里可以找到:Github样例.安装环境强烈推荐PyPy3来运行本程序,而不是使用标准CPython解释器。日志服务的Python SDK可以如下安装:pypy3 -m pip install aliyun-log-python-sdk -U更多SLS Python SDK的使用手册,可以参考这里程序配置如下展示如何配置程序:配置程序日志文件,以便后续测试或者诊断可能的问题。基本的日志服务连接与消费组的配置选项。消费组的一些高级选项(性能调参,不推荐修改)。SIEM(Splunk)的相关参数与选项。请仔细阅读代码中相关注释并根据需要调整选项:#encoding: utf8import osimport loggingfrom logging.handlers import RotatingFileHandlerroot = logging.getLogger()handler = RotatingFileHandler("{0}_{1}.log".format(os.path.basename(file), current_process().pid), maxBytes=10010241024, backupCount=5)handler.setFormatter(logging.Formatter(fmt=’[%(asctime)s] - [%(threadName)s] - {%(module)s:%(funcName)s:%(lineno)d} %(levelname)s - %(message)s’, datefmt=’%Y-%m-%d %H:%M:%S’))root.setLevel(logging.INFO)root.addHandler(handler)root.addHandler(logging.StreamHandler())logger = logging.getLogger(name)def get_option(): ########################## # 基本选项 ########################## # 从环境变量中加载SLS参数与选项 endpoint = os.environ.get(‘SLS_ENDPOINT’, ‘’) accessKeyId = os.environ.get(‘SLS_AK_ID’, ‘’) accessKey = os.environ.get(‘SLS_AK_KEY’, ‘’) project = os.environ.get(‘SLS_PROJECT’, ‘’) logstore = os.environ.get(‘SLS_LOGSTORE’, ‘’) consumer_group = os.environ.get(‘SLS_CG’, ‘’) # 消费的起点。这个参数在第一次跑程序的时候有效,后续再次运行将从上一次消费的保存点继续。 # 可以使”begin“,”end“,或者特定的ISO时间格式。 cursor_start_time = “2018-12-26 0:0:0” ########################## # 一些高级选项 ########################## # 一般不要修改消费者名,尤其是需要并发跑时 consumer_name = “{0}-{1}".format(consumer_group, current_process().pid) # 心跳时长,当服务器在2倍时间内没有收到特定Shard的心跳报告时,服务器会认为对应消费者离线并重新调配任务。 # 所以当网络不是特别好的时候,不要调整的特别小。 heartbeat_interval = 20 # 消费数据的最大间隔,如果数据生成的速度很快,并不需要调整这个参数。 data_fetch_interval = 1 # 构建一个消费组和消费者 option = LogHubConfig(endpoint, accessKeyId, accessKey, project, logstore, consumer_group, consumer_name, cursor_position=CursorPosition.SPECIAL_TIMER_CURSOR, cursor_start_time=cursor_start_time, heartbeat_interval=heartbeat_interval, data_fetch_interval=data_fetch_interval) # Splunk选项 settings = { “host”: “10.1.2.3”, “port”: 80, “token”: “a023nsdu123123123”, ‘https’: False, # 可选, bool ’timeout’: 120, # 可选, int ‘ssl_verify’: True, # 可选, bool “sourcetype”: “”, # 可选, sourcetype “index”: “”, # 可选, index “source”: “”, # 可选, source } return option, settings数据消费与转发如下代码展示如何从SLS拿到数据后转发给Splunk。from aliyun.log.consumer import from aliyun.log.pulllog_response import PullLogResponsefrom multiprocessing import current_processimport timeimport jsonimport socketimport requestsclass SyncData(ConsumerProcessorBase): "”" 这个消费者从SLS消费数据并发送给Splunk """ def init(self, splunk_setting): “““初始化并验证Splunk连通性””” super(SyncData, self).init() assert splunk_setting, ValueError(“You need to configure settings of remote target”) assert isinstance(splunk_setting, dict), ValueError(“The settings should be dict to include necessary address and confidentials.”) self.option = splunk_setting self.timeout = self.option.get(“timeout”, 120) # 测试Splunk连通性 s = socket.socket() s.settimeout(self.timeout) s.connect((self.option[“host”], self.option[‘port’])) self.r = requests.session() self.r.max_redirects = 1 self.r.verify = self.option.get(“ssl_verify”, True) self.r.headers[‘Authorization’] = “Splunk {}".format(self.option[’token’]) self.url = “{0}://{1}:{2}/services/collector/event”.format(“http” if not self.option.get(‘https’) else “https”, self.option[‘host’], self.option[‘port’]) self.default_fields = {} if self.option.get(“sourcetype”): self.default_fields[‘sourcetype’] = self.option.get(“sourcetype”) if self.option.get(“source”): self.default_fields[‘source’] = self.option.get(“source”) if self.option.get(“index”): self.default_fields[‘index’] = self.option.get(“index”) def process(self, log_groups, check_point_tracker): logs = PullLogResponse.loggroups_to_flattern_list(log_groups, time_as_str=True, decode_bytes=True) logger.info(“Get data from shard {0}, log count: {1}".format(self.shard_id, len(logs))) for log in logs: # 发送数据到Splunk # 如下代码只是一个样例(注意:所有字符串都是unicode) # Python2: {u”time”: u"12312312", u"topic": u"topic", u"field1": u"value1", u"field2": u"value2"} # Python3: {"time": “12312312”, “topic”: “topic”, “field1”: “value1”, “field2”: “value2”} event = {} event.update(self.default_fields) if log.get(u"topic") == ‘audit_log’: # suppose we only care about audit log event[’time’] = log[u’time’] event[‘fields’] = {} del log[’time’] event[‘fields’].update(log) data = json.dumps(event, sort_keys=True) try: req = self.r.post(self.url, data=data, timeout=self.timeout) req.raise_for_status() except Exception as err: logger.debug(“Failed to connect to remote Splunk server ({0}). Exception: {1}”, self.url, err) # TODO: 根据需要,添加一些重试或者报告的逻辑 logger.info(“Complete send data to remote”) self.save_checkpoint(check_point_tracker)主逻辑如下代码展示主程序控制逻辑:def main(): option, settings = get_monitor_option() logger.info("** start to consume data…") worker = ConsumerWorker(SyncData, option, args=(settings,) ) worker.start(join=True)if name == ‘main’: main()启动假设程序命名为"sync_data.py",可以如下启动:export SLS_ENDPOINT=<Endpoint of your region>export SLS_AK_ID=<YOUR AK ID>export SLS_AK_KEY=<YOUR AK KEY>export SLS_PROJECT=<SLS Project Name>export SLS_LOGSTORE=<SLS Logstore Name>export SLS_CG=<消费组名,可以简单命名为"syc_data">pypy3 sync_data.py限制与约束每一个日志库(logstore)最多可以配置10个消费组,如果遇到错误ConsumerGroupQuotaExceed则表示遇到限制,建议在控制台端删除一些不用的消费组。监测在控制台查看消费组状态通过云监控查看消费组延迟,并配置报警性能考虑启动多个消费者基于消费组的程序可以直接启动多次以便达到并发作用:nohup pypy3 sync_data.py &nohup pypy3 sync_data.py &nohup pypy3 sync_data.py &…注意: 所有消费者使用了同一个消费组的名字和不同的消费者名字(因为消费者名以进程ID为后缀)。因为一个分区(Shard)只能被一个消费者消费,假设一个日志库有10个分区,那么最多有10个消费者同时消费。Https如果服务入口(endpoint)配置为https://前缀,如https://cn-beijing.log.aliyuncs.com,程序与SLS的连接将自动使用HTTPS加密。服务器证书*.aliyuncs.com是GlobalSign签发,默认大多数Linux/Windows的机器会自动信任此证书。如果某些特殊情况,机器不信任此证书,可以参考这里下载并安装此证书。性能吞吐基于测试,在没有带宽限制、接收端速率限制(如Splunk端)的情况下,以推进硬件用pypy3运行上述样例,单个消费者占用大约10%的单核CPU下可以消费达到5 MB/s原始日志的速率。因此,理论上可以达到50 MB/s原始日志每个CPU核,也就是每个CPU核每天可以消费4TB原始日志。注意: 这个数据依赖带宽、硬件参数和SIEM接收端(如Splunk)是否能够较快接收数据。高可用性消费组会将检测点(check-point)保存在服务器端,当一个消费者停止,另外一个消费者将自动接管并从断点继续消费。可以在不同机器上启动消费者,这样当一台机器停止或者损坏的清下,其他机器上的消费者可以自动接管并从断点进行消费。理论上,为了备用,也可以启动大于shard数量的消费者。更多参考日志服务Python消费组实战(一):日志服务与SIEM(如Splunk)集成实战日志服务Python消费组实战(二):实时日志分发日志服务Python消费组实战(三):实时跨域监测多日志库数据本文Github样例本文作者:成喆阅读原文本文为云栖社区原创内容,未经允许不得转载。 ...

January 22, 2019 · 3 min · jiezi