Kibana日志分析(一)基础概念与常用查询
来源:https://blog.daas.ai/2018/09/05/%20kibana-series-tutorial-section-1/
最近发现,很多技术同事对强大的ELK“相逢见面不相识”,甚是遗憾!为了让这些朋友早日踏上ELK的康庄大道(不归路),让他们了解、使用,最终精通ELK,特制作了本系列教程,期望从浅入深,让大家逐步掌握ELK。
本文为此系列教程的第一篇,主要介绍ELK的总体结构和用途,并介绍Kibana的基础功能和查询语法。
0x1 什么是ELK
ELK在服务器运维界应该是运用的非常成熟了,很多成熟的大型项目都使用ELK来作为前端日志监控、分析的工具。
那么首先,我们来了解下什么是ELK,ELK实际上是三个工具的集合:
- E:Elasticsearch 基于Lucenne的搜索服务器,提供一个分布式多用户的全文搜索引擎,能过做到实时搜索。
- L:Logstash 可以对日志进行采集、过滤、输出。
- K:Kibana 可以汇总、分析、搜索日志数据并提供友好的web界面,它也是我们今天介绍的主角。
这三个工具各司其职,最终形成一整套的日志监控架构
0x2 ELK有什么用
现在已经有非常多的公司在使用这套架构了,例如Sina、饿了么、携程,这些公司都是这方面的先驱。同时,Aliyun也开放了ELK的云端版。
日志分析
场景一 运维同学
作为一个运维工程师, 某天虚拟机出现故障, 想看看虚拟机是否有异常日志,物理机上是否有异常日志, 管理物理机的云平台/系统是否有发生异常日志, 一个个主机系统登陆过去, 输入账号密码费时费力,有时还会出现记不住密码干着急的情况,大大影响了排障的效率。 有没有一个系统,能够集中查看和搜索日志,不需要繁琐的登陆, 方便的获取排障所需的重要信息, 有异常还能够订阅?
场景二 开发同学
作为一个开发人员, 开发的系统经常需要调用外部的api, 每次出现问题需要去查看日志,看是哪个环节出现问题, 是调用第三方api出错,还是连接数据库出错,只能一个一个查。 另外还会遇到的问题是, 有时候无意中grep了一个大的文件,导致iowait冲高,引发不必要的系统异常告警。 有没有一个工具能够提供各种仪表盘,每次打开一个页面就能一目了然的看到调用各个api的情况,调用了多少次, 失败了多少次?
场景三 测试同学
开发人员上线新版本,上线过程中可能会出现各种问题。 有时不能及时发现会引起哪些异常,对其它系统有哪些影响。有没有一个工具,可以看到和分析上线新版本前后的变化?这样就能有助于分析相应的故障是否是和上线新版本有关了。
场景四 团队Leader
作为一个团队领导, 团队开发产品已经上线一段时间了, 希望看到产品有多少人访问, 哪个功能访问了多少次,模块的出错率如何,每次都到机器上去跑分析脚本,费时费力,还不直观, 如果产品部署在分布式集群统计起来更是麻烦, 有没有一个系统能以更加简便的方式可以查看到这些情况?
上述的问题,ELK统统可以解决。另外,ElasticSearch还是非常出色的NoSQL产品,广泛应用于搜索、数据分析、安全等领域。
0x2 Kibana界面功能
进入演示
0x3 Kibana查询语法
本次我们主要介绍Kibana的简易语法,用20%时间学会80%的运用手段。 这些简易语法是Kibana上最常用的搜索语法,必须要掌握!
简易语法详细解析:
全文模糊搜索:直接搜索关键字
这个最简单,直接在查询文本框里输入,想查的关键字,比如:tms
单个字段的模糊搜索:单字段的全文检索
在搜索关键字 之前 加上字段名和冒号 ,可以写作 :message:ESB响应报文
request_uri:"/kxtx-ga/api/apiApp/~"
单字段的精确检索
单字段的精确检索,在搜索关键字前后加双引号,比如:知道线程的关键字是“http”,想查询这些线程下的相关日志。thread_name:"http"
单个字段的多匹配项搜索
+:搜索结果中必须包含此项 -:不能含有此项 什么都没有则可有可无: +token -appVersion appCode
多个检索条件的组合
可以使用 NOT, AND 和 OR 来组合检索,注意必须是大写。
比如下面的查询,在ESB的ERROR级别日志中,剔除掉部分常见异常,用来监控ESB本身Engine的问题。NOT message:("Value for taskId cannot be null" OR "ESB获取请求头异常" OR "com.gillion.esb.engine.exceptions.ResponseException" OR "http:500 服务提供方系统处理错误" OR "http:404" OR "无法正常读取HTTP响应结果" OR "http:504" OR "http:503" OR "http:502") AND log_level:ERROR
字段是否存在
比如在Nginx的日志分析,exists:tags 表示要求 tags 字段存在;missing:tags 表示要求 tags 字段不存在。
通配符
用 ? 表示单字母, 表示任意个字母。比如 fir?t mess。
正则
需要比通配符更复杂一点的表达式,可以使用正则。比如 mesg:/mes{2}ages?/。注意 ES 中正则性能很差,而且支持的功能也不是特别强大,尽量不要使用。
范围搜索
数值/时间/IP/字符串 类型的字段可以对某一范围进行查询
比如:
1
|
length:[100 TO 200]
|
注:
[ ] 表示端点数值包含在范围内
{ } 表示端点数值不包含在范围内
可以混合使用,比如上面语句为1到5,包括1,不包括5。
简化写法:
1
|
responsetime:>10
|
0x4 总结与Q&A
本文主要面向日志分析的场景,为刚刚接触的同学,介绍了ELK的基本知识。主要包括:
- 什么是ELK。
- ELK的使用场景,尤其是在日志方面的广泛用途
- Kibana的界面和主要功能
- Kibana的日志查询语法
0x5 参考资料
- ELK官方文档:Elastic Stack and Product Documentation | Elastic
- Kibana官方文档Kibana User Guide 6.4 | Elastic
- 《Elasticsearch 权威指南》
- 《ELK中文指南》
- 《Mastering ElasticSearch》
- 《Manning Elasticsearch in Action》
#数据/ELK