首页 文章 精选 留言 我的

精选列表

搜索[Agent技能],共10000篇文章
优秀的个人博客,低调大师

云端技能包 | 百亿级日志之云原生实时流实战(2)

上一期内容中,我们简单为大家介绍了fluentd、docker和日志采集器的架构。现在,我们开始实操。 【 SpotMax 解决方案充分利用了云原生特性,基于微服务架构,可在保障用户服务稳定的同时充分利用Spot实例,实现云端降本增效。戳链接了解SpotMax】 首先来看一下dockerfile,我们可以去fluentd的官网上(docs.fluentd.org)获取基础镜像: 然后我们可以通过run加上一些命令,对容器做初始化: 有了docker file,我们就可以通过docker build,来创建一个镜像。-t后面是镜像名称,冒号:后面是一个版本: 创建完镜像之后,我们可以通过docker image,获取镜像列表: 我们也可以把镜像推到远程docker hub里。Docker hub是官网的远程管理功能,可以免费注册: 我们通过docker login登录之后,再通过docker push就可以把镜像推送到远程了: 现在已经有了一个镜像,我们来run一个container。 首先,跑一个临时的容器。--rm代表运行临时容器,--network host代表用一个host的网络连接模式;-v代表把本地的一个目录,挂载到容器上的目录;最后面跟的是一个命令,指的是fluentd的client端的配置,server端同理: 我们来看一下client端的配置写了些什么: source代表来源; @type后面是插件名称(tail) Path后面是我们要去读的本地日志,以及相应的pos_file、日志tag(这里取名为test) 接下来,我们match tag,就可以利用forward(output插件),通过tcp、udp的方式打到另外一个服务集群。 现在,我们再来看一下fluentd的server端配置: 通过forward插件,我们可以监听24224端口,拿到日志流,再通过match tag (即前面的test),用stdoutput直接输出,我们也可以把它打到kafka,或者运行自己的插件等。 现在来运行一下看看效果: 首先我们跑一下fluentd的server端,可以看到已经在监听了: 再看看fluentd的client端,如图,可以看到它现在已经在读容器里面的一个日志文件: 由于这个容器的目录,已经绑定在宿主机的一个目录上,我们可以通过下图中标示出的这条命令(每秒钟打一个just for fun),往日志中打一些消息: 可以看到,server端已经能够正常接收到消息(just for fun): 我们整个演示都是跑在docker容器上的,我们可以通过docker ps去看容器的列表:如图所示,已经起了两个容器,我们可以用docker kill,去kill一个容器: 未来的节目中,我们将会介绍怎么样把日志采集器部署到k8s上面去,下次我们再见。

优秀的个人博客,低调大师

云端技能包 | 百亿级日志之云原生实时流实战(1)

随着云原生技术的快速发展,微服务架构、容器及 Kubernetes 等技术的不断迭代,对于海量日志的管理提出了更高的要求,包括容器内磁盘是否持久化、HPA 时如何保证数据不丢失、海量日志如何进行可靠的传输、微服务数量达到一定规模时日志该如何管理、如何了解不同云商的收费策略以最大化节省成本,等等。 【云资源优化服务 SpotMax 充分利用云原生特性,基于微服务架构,可在保障用户服务稳定的同时充分利用Spot实例,实现云端降本增效。戳链接了解SpotMax】 “云原生日志流实战”将会通过实操加讲解的方式,和大家一起探讨在云背景下收集海日志的架构及实现细节。接下来为大家展示的这套架构,目前已经经过实践检验,稳定支撑了线上每日百亿至千级别的日志的收集。我们将一步步带领大家动手完成一个部署在k8s集群的日志采集器。 fluentd与Docker 市场上常用的开源日志采集工具一般有logstash、FLUME、 fluentd。其中FLUME、 fluentd的设计理念比较相像。fluentd是基于C + Ruby的一套开源工具,FLUME是分布式的、可靠、可用的Apache项目,但是相对 fluentd来说,配置较为复杂。本次课程我们主要使用的是较为轻量级的开源工具fluentd。 fluentd配置简单,对日志的预处理也非常简单方便。我们来看一下fluentd官网的document(docs.fluentd.org): 首先来看input、output插件。使用input插件,我们可以从本地、或者通过tcp、udp流获取到日志,然后我们会给每一个日志打tag,后面通过match 该tag可以做进一步的处理:如过滤、格式化等。最终我们可以通过Output插件完成落地。 例如落到本地文件,或者存到亚马逊的s3,或打到kafka,等等。 左侧菜单栏中可见container deployment,其中有docker image——这就是docker的一个基础镜像。我们在后面的实操中会从这里获取到基础镜像,来生成一个容器。 简单介绍一下Docker的特性:docker采用的是沙盒机制,即每个运行的程序是做资源隔离的,不同程序之间不会互相影响。 如下图所示,docker采用了一种远程管理方式。这里有两个概念:image镜像、container容器,他们的关系就像一个类和对象的关系一样,一个image可以生成多个container。 我们可以通过dockerbuild的方式来build一个镜像,可以通过docker pull/push的方式,以及dockerhub(类似github)做一个远程的提交,也可以用docker run指定一个镜像,运行一个容器。 日志采集器架构 首先,我们看一下采集器的简单架构,假设我们有一个http的服务,产生了一个日志。一般的情况下,我们会在本地部署一个crontab做一个定时任务的压缩上传,也可能会把它打到一个实时的kafka队列。 一般情况下这么处理,是没有问题的,但假如我们的服务性能足够好,产生了大量的日志,会发生什么? 如下是CPU的负载图:我们看到每小时都有一个尖峰,因为每小时我们做一个压缩,上传的时候会占一定的CPU,因此非常不利于抗流量服务,做hpa(自动伸缩)。此外,处理日志的程序,跟业务机耦合在一起,也会占一定的资源。 那么,怎么解决这个问题? 假如我们面对的是海量日志,对数据的一致性要求没有那么高,我们就会想到:能不能先把日志通过实时的方式传到另外一个集群,由该集群做支持处理? 因此,我们演化出这样的一个架构: 可以看到,该架构中多了一个日志聚合层的集群。我们可以在抗流量服务机器上部署fluentd的client端,在聚合层部署fluentd的server端。这样,我们就可以把日志通过TCP、UDP实时传输到日志聚合层,由聚合层做一个处理。 因此,我们要带领大家完成的,就是如何把日志聚合层,打包成一个产品,最终部署到k8s集群上。 下一期,我们将带领大家完成简单的实操演示。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册