自动化运维之日志系统第一篇 日志这件“小”事

转载:来自赵班长的自动化运维之日志这件“小”事


本文由 GOPS2017 北京站大会供稿并整理发布,高效运维社区致力于陪伴您的职业生涯,与您一起愉快的成长。

作者简介:         

赵舜东

中国SaltStack用户组发起人

江湖人称:赵班长,曾在武警某部负责指挥自动化的架构和运维工作,2008年退役后一直从事互联网运维工作,历任运维工程师、运维经理、运维架构师、运维总监。《SaltStack技术入门与实战》作者,《运维知识体系》作者,GOPS金牌讲师,Exin DevOps Master认证讲师。

运维在忙什么?

下面是一个运维朋友日常工作中比较常见的一个场景:

开发:Hi,哥们,我刚才上线了一个新功能,帮我看一下运行日志有没有什么异常……

运维:好的,马上;

测试:Hi,兄弟,目前A接口的访问量掉了;帮我看下错误日志有啥ERROR……

运维:好的,稍等;

开发:Hi,好基友,帮我把我log目录下的日志文件取下来……

运维:好的,过会儿给你;

另外,我之前的运维团队,有的运维一天到晚都忙这些东西;部署、执行脚本、拿文件、awk分析日志等等,而且还忙的不行。

还有个做系统运维的工程师的朋友,我问他每天都忙什么。他说每天拿日志占1/3的工作量;第二是部署、把代码上传服务器什么的。

那么运维天天在忙什么呢?我想多半在处理日志相关的问题吧~

日志需求

从日志来说,对于运维来说需要进行哪些日志收集。对于这个问题可以分为一下五个方面。

需求一:系统日志

首先是要掌握操作系统的运行状态;系统日志非常有用。例如,一个内存坏了你怎么能知道?一般内存坏在系统上会有日志提示,或者写个阈值内存低于多少报警。但是有时候内存是8G的,坏了一根内存条不知道;而且内存条硬件日志上也是看不出来的。通过系统日志就可以发现该问题。

需求二:访问日志

之前我们做广告,访问日志对我们来说就是命根子;我们要依赖访问日志拿到非常多的数据。以此来统计分析访问来源、url请求频次、响应时间以及成功率等等。

需求三:运行日志

通过运行日志我们可以了解到系统运行详情,运行的异常以及业务的输出日志。

需求四:错误日志

你需要根据关键字来查找一些错误日志。例如,很多时候发现日志和流量波动是可以关联上的;可以以此来做全流量分析。

需求五:关联日志

最后就是业务关联日志。这里举个曾经遇到过的一个例子。刚开始做电商的时候,老板没事过来问,平时我们每分钟也就几十单,问我们为什么最近的一段时间每分钟一下子来了好几百单。

其实当时觉得挺奇怪的,为什么问我呢。后来想想因为运维做的不到位;你说突然来了很多单子,运营也不知道,这个时候最容易知道的是运维了。你可以通过各种手段判断出这个订单到底是干嘛的。

所以我认为运维的目标是:“知其然,知其所以然”。比如说,如果老板问你“为什么最近5分钟这么多订单”,你可以告诉他“是因为我们做了买一送一的活动,很多人就来了”。

日志收集环境的痛点

先抛出一个问题,为什么要做日志收集?开发人员需要查询日志;但是开发人员不能有线上服务器登录的权限。现在很多大公司也不允许运维登录线上机器了。因为ssh登录上去就可以干出和别人一样的事情;就可能导致这个节点和其他节点不一样,不一样就出事了。

还有就是各个系统都有日志;日志数据分散难以查找。这个痛点有两个方面的问题需要解决;其一就是如何收集,其二就是标准化

对于一个应用系统你需要明白你要做哪些日志;在做需求日志调研的时候,把日志需求确定下来。之前我们有个用户服务,因为压力很大;我们需要单独拆分成为微服务。此时有两种待选方案,第一种是RPC过程调用;

第二种是http协议。当时研发考虑了运维的需求,第一个是权限控制;第二个是监控的需求。监控的需求包括集群健康检查以及调用和响应的统计。

需求提出来后,除非做个框架,要不然RPC方式做不了;要不然只能选用http。因为系统将来是要运行的;所以非功能的需求也是很大的一块,在做需求的时候一定要把运维的需求考虑进去。

解决疼点的神器—ELK架构起源

曾经的ELK架构

曾经的ELK架构是logstash、elasticsearch及kibana。在当下的容器时代该怎么办?我们之前的做法是在每台物理机上都起一个docker。所有容器启动的时候,就可以获取到容器相关的目录;把目录统一起来写在这个里面,该容器中logstash把日志收走。这种方式没有成本比较低,没有什么技术瓶颈。

elasticsearch是基于lucene实现的分布式全文搜索引擎。elasticsearch提供原生的 java API;同时,也提供restful的API。

logstash作为数据采集端;同时,具备数据流的处理能力。kibana作为前端数据展示;可以呈现各种复杂数据结构,灵活度很高。

现在的Elastic Stack

现在ELK更名为Elastic Stack;因为elastic收购了beats工具。beats工具可以做日志收集、网络收集及流收集等,扩大了整个生态圈。

目前elastic公司也在做SaaS,SaaS面对的是互联网所有用户也是未来大的趋势。

ELK学习之elasticsearch入门

下面将介绍elasticsearch相关的基础知识。elasticsearch集群有三种状态,分别是绿色、黄色和红色。绿色表示所有的主、副分片都正常运行。

这里涉及到分片的概念,elastisearch的分片其实是一个节点上lucene实例。elasticsearch一个索引默认情况下分成五个分片和一个副本。

假设有两台机器,其中一台机器挂了;原有的副本分片会被提升为主分片。通过这样的方式来保证它的高可用。集群黄色表示所有主分片正常运行;但是存在有问题的副本分片。此时可能有副本分片丢失或没有创建,但数据不会丢失。

红色说明集群存在主分片不正常运行;这时可能有数据丢失的风险。

elastisearch的集群发现最早是多播方式的,在后来的2.x版本中改成单播了;因为多播发现存在一些问题。现在的5.1版本都改成单播发现方式了。在绿色状态下,当集群增加一个节点后集群会自动均衡分片,将部分分片迁移到刚加入的节点上。

索引的副本数量是可以调整;在节点数量一定的情况下只是增加冗余度,并不能提高性能。比如三个副本,这个时候同时挂两台机器都不会导致数据丢失;但是分片数量要根据规模进行调优。

节点宕机了怎么办?其实elasticsearch这是很正常的。如果主节点挂了,集群会重新选取一个master。选主完成后集群中分片会自动均衡。如有副本分片丢失,会自动创建新的副本分片。

elasticsearch所有节点都接受查询请求,查询请求被调度到各个节点进行数据检索;各个节点返回结果并合并响应查询请求。查询过程如下图所示。

ELK学习之logstash入门

下面介绍如何使用logstash进行日志收集,并讲一些案例。这是一个logstash的hello world,直接在命令行输出。logstash有三个模块,分别是input、filter和output。数据input存stdin;从标准输入进来,到标准输出。这里面加了编码,输入hello world效果就是这样;你的数据在message中,同时logstash会加一个时间戳。

再看一个案例,我从标准输入直接写入elasticsearch怎么写。这里写一个文件,input标准输入;然后是output。output中使用一个插件将其写入elasticsearch;还有个标准输出,通过rubydebug展示出来。学习logstash主要是学习各种插件的使用。比如第一个要收集系统日志;系统日志文件从哪里来,使用input插件。数据要写到elasticsearch里面去,通过output中的插件实现。

在新版本的ELK中,logstash、elasticsearch以及kibana的版本都统一了;学习可以直接看官方文档。

我们看一个demo案例。demo案例是输入什么东西,输入到ES里面;同时输出到当前的rubydebug。这里logstash装了一个elasticsearch插件;目前elasticsearch里面有两个索引。你不写索引名会自动生成索引名,后面自带时间戳。最简单日志收集方式就是一个文件,把它直接写到elasticsearch中。

下一个是使用消息队列做日志收集的解耦;这个架构是目前经典的架构。数据源写在input里面,用个插件把数据采集到;然后output用消息队列插件把数据写到消息队列中。logstash有很多消息队列插件,例如kafka、rabbitmq、zeromq等。

什么是解耦?解耦之后后端所有的东西都挂了,只要消息队列不挂这个日志就不会丢;因为全写在消息队列中。消息队列可以通过集群保证不会挂。

再者通过解耦可以做什么呢?数据原封不动收到消息队列中,我不在采集的实例上处理。如果那样做的话,当数据量很大的情况下,这时候CPU的就可能扛不住而影响到业务的正常。

我们在消息队列之后接上logstash进行消费,写入elasticsearch。在logstash的filter模块对数据进行处理。同时,可以根据消费的情况起多个消费者实例。

ELK 学习之 kibana 简介与 ELK 企业实践

kibana介绍

简单介绍一下kibana,原因是没有数据就没法作图。实际上kibana作图相对来说比较简单,千万不要担心学不会;只要有数据肯定就能学会。

kibana的图简单看一下;它有查看时间的范围,例如今天。经常有人说,我刚写的日志为什么没有;就是因为时间的问题。有很多相对绝对的时间范围;所有的搜索都是可以保存下来的,保存的搜索语句可以做其他相关的作用。这样的话,你在做可视化的时候就可以拿来用了。比如我们创建一个可视化图形,我们数据能够做简单统计多少行;你可以从一个已保存的搜索来实现。

还有你可以将多个可视化视图放到dashboard中;同时,dashboard也是可以保存复用的。通过kibana可以做很好看的大盘。比如我们之前做过的业务的大盘、运维的大盘;一边是值班表,一边是用户分钟注册数、用户日活饼图、核心数据库日志等等类似的东西。

ELK企业实践

这是基于elasticsearch做的架构图;主要部分是收集消息队列和不同的存储。因为logstash的插件比较多,所以所有的东西都要通过logstash来处理。目前ELK相关的书籍就是《ELK权威指南》,有纸质版的也有免费的PDF版,大家可以看一看。

整体学习ELK记住我说的几句话;整个工具不是重点,重点是怎么在公司推日志标准化。因为日志不标准,收集一推乱七八糟的日志没用;让后短发挥价值的事情全都做不了。然后是通过工具做统一的采集。

logstash还可以做报警处理;比如根据关键字发一个什么东西到指定的地方。你自己也可以做把所有的日志写到elasticsearch中,然后调用elasticsearch;如果发现关键字就报警,这也是一种方式。

举个例子,我们的流量突然有一个小坑,这个时候你去查nginx错误日志发现有。去查php日志也有,再去查mysql慢查询也是有。mysql慢查询需要正则匹配;然后很多人跑过来问我正则写的对不对。这时候就很崩溃了。所以建立日志标准化至关重要。

更多相关文章阅读

腾讯十年运维老兵:运维团队的五个“杀手锏”

用 Python 开发一个企业级的监控平台

那些早到10分钟的人,混的都不会太差

芳华永在!一个老运维的20年奋斗史

想近距离领略“赵班长”的风采?

来 GOPS2018深圳站·运维自动化专场⬇️

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容