重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Go作为Google2009年推出的语言,其被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
成都创新互联公司从2013年成立,先为苏尼特右等服务建站,苏尼特右等地企业,进行企业商务咨询服务。为苏尼特右企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于 游戏 服务端的开发而言是再好不过了。
到现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。
=================================
哪些大公司在使用Go语言:
1、Google
这个不用多做介绍,作为开发Go语言的公司,当仁不让。Google基于Go有很多优秀的项目,比如: ,大家也可以在Github上 查看更多Google的Go开源项目。
2、Facebook
Facebook也在用,为此他们还专门在Github上建立了一个开源组织facebookgo,大家可以通过 访问查看facebook开源的项目,比如著名的是平滑升级的grace。
3、腾讯
腾讯作为国内的大公司,还是敢于尝试的,尤其是Docker容器化这一块,他们在15年已经做了docker万台规模的实践,具体可以参考
4、百度
目前所知的百度的使用是在运维这边,是百度运维的一个BFE项目,负责前端流量的接入。他们的负责人在2016年有分享,大家可以看下这个
5、阿里
阿里巴巴具体的项目不太清楚,不过听说其系统部门、CDN等正在招Go方面的人。
6、京东
京东云消息推送系统、云存储,以及京东商城等都有使用Go做开发。
7、小米
小米对Golang的支持,莫过于运维监控系统的开源,也就是
此外,小米互娱、小米商城、小米视频、小米生态链等团队都在使用Golang。
8、360
360对Golang的使用也不少,一个是开源的日志搜索系统Poseidon,托管在Github上,
==================================
Go适合做什么?为何这么多人偏爱Go语言?
Go强大的开发团队
1、自由高效:组合的思想、无侵入式的接口
Go语言可以说是开发效率和运行效率二者的完美融合,天生的并发编程支持。Go语言支持当前所有的编程范式,包括过程式编程、面向对象编程以及函数式编程。程序员们可以各取所需、自由组合、想怎么玩就怎么玩。
2、强大的标准库
这包括互联网应用、系统编程和网络编程。Go里面的标准库基本上已经是非常稳定了,特别是我这里提到的三个,网络层、系统层的库非常实用。
3、部署方便:二进制文件、Copy部署
我相信这一点是很多人选择Go的最大理由,因为部署太方便了,所以现在也有很多人用Go开发运维程序。
4、简单的并发
它包含了降低心智的并发和简易的数据同步,我觉得这是Go最大的特色。之所以写正确的并发、容错和可扩展的程序如此之难,是因为我们用了错误的工具和错误的抽象,Go可以说这一块做的相当简单。
5、稳定性
Go拥有强大的编译检查、严格的编码规范和完整的软件生命周期工具,具有很强的稳定性,稳定压倒一切。那么为什么Go相比于其他程序会更稳定呢?这是因为Go提供了软件生命周期(开发、测试、部署、维护等等)的各个环节的工具,如go tool、gofmt、go test。
================================
我们为什么选择GO语言
选择GO语言,主要是基于两方面的考虑
1. 执行性能 缩短API的响应时长,解决批量请求访问超时的问题。在Uwork的业务场景下,一次API批量请求,往往会涉及对另外接口服务的多次调用,而在之前的PHP实现模式下,要做到并行调用是非常困难的,串行处理却不能从根本上提高处理性能。而GO语言不一样,通过协程可以方便的实现API的并行处理,达到处理效率的最大化。 依赖Golang的高性能HTTP Server,提升系统吞吐能力,由PHP的数百级别提升到数千里甚至过万级别。
2. 开发效率 GO语言使用起来简单、代码描述效率高、编码规范统一、上手快。 通过少量的代码,即可实现框架的标准化,并以统一的规范快速构建API业务逻辑。 能快速的构建各种通用组件和公共类库,进一步提升开发效率,实现特定场景下的功能量产。
Go语言近两年的发展速度还是非常快的,一方面Go语言有强大的行业背书,另一方面Go语言在设计时充分考虑了当前的编程环境,加强了大数据量、高并发等应用场景的处理能力,强调编程语言自身对于处理性能的追求,相信Go语言在未来大数据和人工智能相关技术逐渐落地应用的背景下,会有一个较为广阔的发展空间。
在Java之外,Android是否需要一门新的开发语言,长久以来一直都是业内茶余饭后时常提起的话题,特别是苹果推出了Swift语言,以及Oracle和Google关于Java的专利纠纷,让这一问题备受关注。恰逢国内Google技术社区盛事北京GDG Devfest 2015在北航举办,InfoQ记者邀请到大会上的几位讲师对这一问题发表了自己的看法。
在讨论这一问题之前,先让我们了解一下问题的背景。从去年以来,Swift、Go、Dart语言的社区都对Android开发表示了兴趣:
今年早些时候有一个Silver项目致力于用Swift来开发跨平台的应用,不过在Android平台是通过将Swift转换为Java代码实现的。而另一些人则在等待Swift开源以便将其移植到Android,有人已经做了一些前期的研究,在Android上运行Swift代码,表明这至少在理论上是可行的。
Go语言对Android开发的支持更加官方,在去年发布的Go 1.4中就已经支持了Android开发,Go语言也是在各种Android新语言的流言中最常出场的一位。但Go语言从目前的趋势来看,在服务端发展的可能性更大,它的部分特性也更适用于服务端编程。
Dart语言自今年Google宣布Chrome不再内置Dart VM之后遭遇重大挫折,很多人认为它最终将被抛弃,但这门语言背后有多位优秀的开发者和语言设计者,自从不再将替代JavaScript作为目标后,Dart反而迎来了更广阔的施展空间。今年Dart峰会上Google宣布了用于Android开发的Sky框架(现更名为Flutter),更用120fps的流畅性打消了人们对这个曾被用于前端开发的脚本语言的疑虑。
除了这三门已经有一定历史积累的语言,另一个被认为可能替代Java的是Kotlin语言。Kotlin是开发工具公司JetBrains设计的一门新语言,旨在替代Java,其风格更加贴近现代语言,一经推出便受到Android开发社区的注意,声势也越来越大。
应用于搭建 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。
Go 是谷歌的编程语言,而不是社区的。在这位博主看来,虽然 Go 语言拥有一个贡献者社区,但是它并不是社区的项目,只是谷歌的一个项目。所以只要是谷歌反对的东西,没有人可以把这个东西加到 Go 语言中。
InfoQ 记者也第一时间联系了《Go 并发编程实战》作者、前轻松筹大数据负责人郝林,他的观点是:Go 语言是大家的,只有伪爱好者才会谈舍弃。在郝林看来,Go 语言官方团队在谷歌内部实属一个很小的团队,但其成员几乎个个都是技术大神。
很多社区成员为 Go 语言贡献了很多重要并且有价值的东西,这些从贡献者和提交者的多样性就可以看出来。但谷歌作为整个 Go 社区的守门人,它独自决定什么东西可以被 Go 语言接受,什么不能被接受。
在 Go 语言模块系统上发生的一件事情,谷歌 Go 语言核心团队的一名成员放弃了由外部 Go 社区开发的一个模块系统,因为它使用了另一种不同的模型。Go 语言拥有一个贡献者社区,但是它并不是一个社区项目。
Go语言。他主要是在一些网页版的服务器中用于系统编程的一种语言。他是谷歌开发的一种编程语言。在一定程度上,谷歌有一定的垄断作用。不能随随便便的在语言当中添加其他的语言成分。
日志实体类信息包括哪些内容?组件选择
选择组件,我们这边主要是从以下几个方面进行考量的:
组件对应的开源生态完整、活跃度高
对应的技术栈是我们所熟悉的,我们这边语言技术栈主要是Java、Go,如果组件语言是C、Ruby,应该就被排除了。
运维成本
易部署、性能好
1、Agent
一提到日志收集方案,大家第一个想到的肯定是ELK(Elasticsearch、Logstash、Kibana ),但Logstash依赖于JVM不管是性能还是简洁性,都不是日志收集agent的首选。
个人感觉一个好的agent应该是资源占用少,性能好,不依赖别的组件,可以独立部署。而Logstash明显不符合这几点要求,也许正是基于这些考虑elastic推出了Filebeat。
2、Collector、MQ
elasticsearch集群在部署的时候,一般都是提前估计好容量、机器、shard等信息,因为elasticsearch集群运行后,再水平拓展,比较麻烦,而我们这边由于业务及成本限制无法很好的预估容量,所以就结合公司实际要求:使用日志服务的业务方自带机器,也就是业务方会有独立的elasticsearch集群。
每个业务方都使用自己的elasticsearch集群,所以集群压力不会很大,从而Collector、MQ这两个组件对于我们的作用也就很小了。
3、ETL
因为Elasticsearch Ingest Node完全可以满足我们的解析需求,所以就没有必要再引入Logstash等相关组件了。
到这里,基本可以看出我们的架构如下:

架构合适的,就是最好的。
三、业务需求
我们这边收集日志应对的场景主要是:文本日志、docker日志、k8s日志,恰恰这些EFK全家桶都支持。
我们希望日志收集产品可以满足以下几个需求:
按照项目、应用、实例维度检索日志并支持搜索关键字高亮(因为大家检索日志的时候,肯定是检索某个应用、某个实例的日志)
支持检索出某条想要的日志后,可以查看上下文(查看该日志所在日志文件的前后多少条)
支持日志下载(目前支持两种场景:搜索结果下载、上下文下载;支持两种方式:在线下载、离线下载)
支持Elasticsearch Query String查询
支持自动化批量部署、卸载Filebeat,部署、卸载过程可视化
单实例支持多elasticsearch集群
支持文本日志、docker日志、k8s日志并能与将日志与其业务意义对应上。(即不管是哪种日志形式、来源,最终都需要与业务意义上的项目、应用、实例对应起来,因为对于日志的使用者来说,查询日志的出发点肯定是查询某个项目、某个应用(可以不选)、某个实例(可以不选)、某段时间的日志。)
四、具体实现
基于需求及EFK套件,梳理我们场景中特有的东西:
docker日志的场景比较单一,都是通过之前一个产品A发布部署的,其docker命名规则比较统一,可以通过截取docker.container.name来获取应用名字;同时在部署的时候,可以知道部署目标机器的ip,这样就可以通过应用+ip来作为实例名称。
k8s场景也比较统一,都是通过之前一个产品B发布部署的,其pod命名规则比较统一,可以通过截取kubernetes.pod.name来获取应用名字(但需要通过namespaces关联到tenant,再通过tenant与项目一一对应);k8s中的pod.name就是唯一的,以此来作为实例名称即可。
文本日志:因为文本日志主要的场景是已经裸机部署的应用,这种场景下,不存在应用自动迁移的情况,所以文本日志的应用名称、实例名称可以在部署的时候打上标签即可。
具体规则及解析见下图(实例部分处理暂未标注):

其实,我们不太推荐写日志到文本文件中,使用标准输出就好。
到这里可以发现我们选择Filebeat来作为日志的收集端,Elasticsearch来存储日志并提供检索能力。
那么,日志的清洗在哪里做呢?
日志的清洗一般有两种方式:
先把日志收集到kafka,再通过Logstash消费kafka的数据,来清洗数据
直接通过Elasticsearch的[Ingest Node]来清洗数据,因为Ingest Node也支持Grok表达式
对于,我们的场景而言,我们需要清洗数据的要求比较简单,主要是应用、实例名称的截取还有文本日志中日志时间的处理(@timestamp重置,时区处理),所以我们选择了方案2。
其实,选择方案二还有个原因就是:系统在满足需求的同时,尽量保持简单,减少依赖的组件。
在我们的方案中,并没有提供Kibana 的界面直接给用户用,而是我们自己根据公司业务独立开发的。
前端界面为什么不采用Kibana,而需要自己开发?
1、kibana对于业务开发人员有一定的学习成本
2、kibana界面没有很好的将日志内容与业务意义关联起来(界面选择总比一次次的输入要好,这也是我们将日志的项目、应用、实例等业务信息解析出来的原因)
3、log-search支持Query String,因此对于熟悉kibana的开发人员来说,在我们自己开发的前端界面检索效果是一样的。
log-search提供的功能可以参见github:log-search
如果日志需要清洗的比较多,可以采用方案1,或者先不清洗,先把数据落到Elasticsearch,然后在查询的时候,进行处理。比如在我们的场景中,可以先把日志落到Elasticsearch中,然后在需要检索应用名称的时候,通过代码来处理并获取app名字。
五、监控、告警
其实基于日志可以做很多事情,比如:
基于日志做监控(Google Dapper)
基于日志做告警
基于日志做Machine Learning
具体思路,可以参见下图:

前提:能要求使用方,按照某种规则打印日志。
监控发展:监控基本就是先打通链路trace,然后再在上报信息或者日志信息中,加强业务方面标识,即给监控添加业务维度方面的视角。
六、其它
1、DaemonSet
以DaemonSet方式部署Filebeat来收集日志,其实收集也是宿主机/var/lib/docker/containers目录下的日志。
Running Filebeat on Kubernetes
2、Sidecar
一个POD中运行一个sidecar的日志agent容器,用于采集该POD主容器产生的日志。
莫名想起了istio。
Filebeat可以以sidecar模式来进行容器日志的收集,也就是filebeat和具体的服务容器部署在同一个pod内,指定收集日志的路径或文件,即可将日志发送到指定位置或Elasticsearch这类的搜索引擎。
每个pod内部署filebeat的模式,好处是和具体的应用服务低耦合,可扩展性强,不过需要在yaml进行额外配置。
3、业界案例分享
InfoQ运维大会日志处理专题演讲干货合集
曹林华-沪江网日志平台化之路
黎吾平-日志分析场景下的搜索引擎改进
林冰玉-QA 与Ops通力打造反脆弱的软件系统
周辉-新思路打造移动端个案综合日志分析系统
个人微信公众号:

作者:jiankunking 出处:
展开全文
APM:ELK 与 Prometheus
同为监控应用的两个平台,Prometheus和ELK的对比: ELK和Prometheus的对比 Prometheus ELK 轻量、部署相对简单 较重,组件较多,部署起来较麻烦 使用灵活,需要使用者会灵活运用 上手较为简单 适用于短期使用,比如SIT测试 适用于长久稳定地运行 ...
APP打开
Linux下常见的日志文件名
Linux常见的日志文件名: /var/log/cron 工作调度 /var/log/dmesg 内核检测过程中产生的信息 /var/log/lastlog 检测所有账号登陆信息 /var/log/maillog或/var/log/mail/* 邮件 /var/log/messages 记录系统发生的所有错误信息 /var/log/secure 涉及账号密码信息 /var/log/w...
APP打开
评论(23)
写评论

码工邢美玲码龄4年

哇啊1年前

刘佳欢--hannah码龄5年

谢谢分享1年前
衣舞晨风码龄10年
回复刘佳欢--hannah:愿能对你有所帮助
1年前

xudc码龄10年

学习了1年前

mortredly码龄1年

很优秀啊1年前

LaLaLa_OvO码龄10年

我现在每次去生产环境下载tomcat里的log文件分析,感觉好麻烦Ծ‸Ծ,感谢博主提供的思路,虽然一下子没太懂,但是研究下应该可以理解的1年前

码哥Think—Coder码龄3年

厉害1年前

fightsyj码龄4年

优秀1年前

叄拾叄画生码龄2年

不错1年前

qq_45010093码龄1年

我要下载码1年前
衣舞晨风码龄10年
回复qq_45010093:???
1年前

码农凉快-Eric码龄3年

日志很重要,在下需努力!1年前
去APP查看全部评论
SpringBoot控制台彩色输出
#控制台彩色输出 spring: output: ansi: enabled: ALWAYS SpringBoot控制台彩色输出
APP打开
分布式系统中的日志落地经验总结
@分布式系统中的日志落地经验总结 在过去的2年多的时间里,随着在公司推进容器云,陆陆续续的和日志打了不少交道,在这里做一个总结: 为什么需要日志 日志如何接收与存储 日志如何收集 日志收集客户端分析 日志的标准化 日志报警 日志归档 其他问题 为什么需要日志 日志的作用我觉得有三点: 故障排错 数据分析 业务审计 1,关于故障排错,当线上发生异常,查看应用的错误日志、堆栈信息、代理层的访问...
APP打开
关于日志的那些事儿 - 樱木天亥 - CSDN博客
写这篇文章是源于耗子叔在左耳听风专栏的群里发布了命题作文「关于日志的那些事儿」,正好可以去查阅资料,学习了解一下日志方面的知识。 什么是日志 首先,什么是...
关于日志的那些事儿_xiemanR的专栏-CSDN博客
关于日志的那些事儿 日志的作用 1.审计 商业分析:比如从日志中提取用户行为(比如,一个点击事件流)并结合用户的其他详情(比如,最终购买行为)来生成报告或者推荐相关...
如何打一手好Log
如果项目上过线的话,那你一定知道Log是多么重要。 为什么说Log重要呢?因为上线项目不允许你调试,你只能通过Log来分析问题。这时打一手好Log的重要性绝不亚于写一手好代码。项目出问题时,你要能拿出Log证明自己负责的部分没有问题,如果是自己的问题,要从Log里快速找出错误原因。如果没有从Log里找出错误原因,那一定是一件很悲催的事情,特别是在bug不容易重现的情况下。那简直...
APP打开
关于日志那些事
关于日志那些事 对于现在的应用程序来说,日志的重要性是不言而喻的。很难想象没有任何日志记录功能的应用程序运行在生产环境中。日志所能提供的功能是多种多样的,包括记录程序运行时产生的错误信息、状态信息、调试信息和执行时间信息等。在生产环境中,日志是查找问题来源的重要依据。本文从日志的定义、作用、分类、级别等角度介绍日志。 什么是日志 日志是用来保存系统发生的事件信息和各种对象执行的操作信息的管理对象...
APP打开
关于日志的那些事儿 - weixin_34416754的博客 - CSDN博客
写这篇文章是源于耗子叔在左耳听风专栏的群里发布了命题作文「关于日志的那些事儿」,正好可以去查阅资料,学习了解一下日志方面的知识。 什么是日志 首先,什么是...
Filebeat 收集日志的那些事儿_360技术-CSDN博客
点击蓝字关注我们最近因为云原生日志收集的需要,我们打算使用Filebeat作为容器日志收集工具,并对其进行二次开发,因此笔者将谈谈 Filebeat 收集日志的那些事儿。本文不...
一起来学 SpringBoot 2.x | 第三篇:SpringBoot 日志配置
点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69+ 篇,预计总共 75+ 篇 )中文详细注释...
APP打开
写日志的那些事儿
2019独角兽企业重金招聘Python工程师标准 ...
APP打开
Filebeat 收集日志的那些事儿_weixin_48726650的博客-CSDN博客
Filebeat 收集日志的那些事儿 1前言 开源日志收集组件众多,之所以选择Filebeat,主要基于以下几点: 功能上能满足我们的需求:收集磁盘日志文件,发送到Kafka集群;支持多行...
Filebeat 收集日志的那些事儿_HULK一线技术杂谈-CSDN博客
女主宣言最近因为云原生日志收集的需要,我们打算使用Filebeat作为容器日志收集工具,并对其进行二次开发,因此笔者将谈谈 Filebeat 收集日志的那些事儿。本文不涉及过...
日志记录的作用和方法 java
程序中记录日志一般有两个目的:Troubleshooting和显示程序运行状态。好的日志记录方式可以提供我们足够多定位问题的依据。日志记录大家都会认为简单,但如何通过日志可以高效定位问题并不是简单的事情。这里列举下面三个方面的内容,辅以代码示例,总结如何写好日志,希望对他人有所启发和帮助: 怎样记日志可以方便Troubleshooting程序运行状态可以记哪些应该避免怎样的日志方
APP打开
JB的ARTS之旅-关于日志的那些事
前言 很多小伙伴看到标题,可能会有疑问,什么叫ARTS?,这里答疑一下: 这是来自于左耳朵耗子专栏的一个活动,详情请来到某乎了解; 而ARTS实际意义是: 1.Algorithm:每周至少做一个 leetcode 的算法题 2.Review:阅读并点评至少一篇英文技术文章 3.Tip:学习至少一个技术技巧 4.Share:分享一篇有观点和思考的技术文章 复制代码 因精力有限,暂时只能挑一个完成,希...
APP打开
运维的那些事儿 - 狂生小白的博客 - CSDN博客
十二、应用系统日志 这里边可分析的东西就多了, 不过...人工智能那些事儿0.目录那些有意思的事儿那些数学的...关于思维导图的那些事 阅读数 529 前言:经过米老...
写评论

23

9

82

分享
APP内打