日志服务Grafana可视化实践——从自建ELK到使用CLS

2022-04-01 09:58:32 浏览数 (2)

作者:erikding

导语:腾讯云日志服务(Cloud Log Service, CLS)是腾讯云提供的一站式日志数据解决平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。

背景

互联网时代的公司业务种类繁多,在这些业务每日工作的背后,是各类日志系统承担日志记录和检索排障的工作。 在业务上云的大趋势之下,越来越多的团队开始选择使用腾讯云日志服务CLS来解决他们的日志采集与存储、排障检索、数据分析、告警监控、可视化展示的系列诉求。很多公司团队已经开始将日志服务从自建的ELK转移到CLS,通过LogListener采集日志并上传,使用CLS的检索分析功能。

但是在Grafana可视化相关的使用中,仍存在着一些历史的ES数据源仪表盘,还没有完成到CLS数据源的切换,导致团队存在数据写双份的问题。这里就需要对相关的仪表盘进行一个迁移。

注意:此实践场景描述了用户从ES迁移到CLS后,对相关的可视化展示的迁移。迁移要求用户已完成日志的采集上报 ,并保证完成 索引配置 且对相关字段开启了统计功能。

输入区域对比

1. ES数据源

ES数据源由Grafana官方直接维护,可支持不同版本的ES实例。查询语句界面分为顶部的Query输入区和其余的辅助输入功能区。 Query输入区可输入 Lucene语句,用于对日志进行过滤。辅助输入区通过点击填写,生成DSL内容。

2. CLS数据源

CLS数据源由腾讯云日志服务团队进行维护,已经通过官方签名认证 ,可以Grafana设置页面一键安装。 查询语句界面分为地域与日志主题选择检索分析语句两个部分。地域与日志主题选择模块可以快速进行日志主题切换,而检索分析语句则用于输入CLS查询语句。

CLS查询语句分为 Lucene 和 SQL 两个部分,两个部分之间使用管道符进行分隔。其中 Lucene部分 和 ES的 Query输入区内容完全对标。SQL输入内容除了支持标准的SQL语法外,还支持大量的SQL函数,SQL区域内容和 ES输入区的辅助输入模块完成对标。更多请参考的 CLS语法规则

具体实践

1. 日志条数统计

对于想要绘制随时间变化的日志条数,ES数据源将Metric选中Count,GroupBy选中 Histogram。CLS的检索语句可以使用 histogram 结合聚合函数Count完成。 类似的,对于Max、Min、Distinct等其他 通用聚合函数,使用上也完全一致,直接将count函数进行替换即可。

2. 原始日志查看

想要直接查看符合条件的日志,ES数据源需要将Metric选中 Logs模式,而CLS只需要输入对于的Lucene语句即可。 输入语句比对:

展示效果:

3. 聚合统计---错误码占比

根据错误码进行聚合,展示各个错误码的日志数量。 此处可以看到,语句中包含变量 $path。CLS数据源插件进行了变量功能的相关适配,允许直接使用Grafana的变量能力。

注意:绘制饼图时右侧图表选项请选择 ValueOptions-AllValues

4. 聚合统计---Top5请求的数量变化情况

ES数据源中,GroupBy聚合选项允许填写Size值,支持选中出现频率最高的N个值,再进行聚合。

此情况在CLS数据源SQL中,可以通过 having 语句搭配嵌套子查询实现。

代码语言:javascript复制
* | select histogram( cast(__TIMESTAMP__ as timestamp),interval 1 hour) as analytic_time, "action", count(*) as count
group by analytic_time,"action"
having "action" in (select action group by action order by count(*) desc limit 5)
order by analytic_time limit 1000

查询结果可以看到,图中共有5条曲线。

通过以上的语句搭配使用,已经可以满足大部分的检索分析场景。接下来我们看一些复杂点的迁移内容。

5. 统计接口耗时的分段情况

在ES数据源仪表盘中,有一个配置项繁多,但是同质化也比较严重的场景:根据不同的时间范围,绘制在这个时间范围的请求数量。

这个案例,统计了接口在 0到500ms,500ms到2s,2s到5s,以及大于5秒的请求个数。

对应的,迁移到CLS数据源,也可以使用类似的多条语句进行绘制。但CLS本身的SQL能力更强,可以将相关的统计处理合并成一条SQL语句。

代码语言:javascript复制
urlPath:$path AND region:$region AND action:$action AND returnCode:$returnCode
| select histogram( cast(__TIMESTAMP__ as timestamp),interval 1 minute) as analytic_time
,count_if(timeCost<=200) as "0~500ms"
,count_if(500<timeCost and timeCost <=2000) as "500ms~2s"
,count_if(2000<timeCost and timeCost <=5000) as "500ms~2s"
,count_if(5000<timeCost) as "超过5s"
group by analytic_time order by analytic_time limit 1000

类似的场景,我们也可以写出使用估算函数approx_percentile分析得出的耗时相关情况。

代码语言:javascript复制
urlPath:$path AND region:$region AND action:$action AND returnCode:$returnCode 
| select time_series(__TIMESTAMP__, '$__interval', '%Y-%m-%dT%H:%i:%s 08:00', '0') as time
,avg(timeCost) as avg
,approx_percentile(timeCost, 0.50) as P50
,approx_percentile(timeCost, 0.90) as P90
,approx_percentile(timeCost, 0.95) as P95
group by time order by time limit 10000

注意:$__interval为Grafana内置变量,代表时间间隔值。此语句需配合Transform-ConvertType 使用,将time字段转化为时间类型。

6. 模板变量能力

在以上的案例中,不同程度的出现了Grafana变量功能的身影。那么对于变量功能,这里介绍如何进行迁移工作。

Grafana变量的类型种类繁多,对于常量类型、Textbox输入框类型对各类数据源来说,是完全相同的,无需进行迁移。这里主要介绍如何迁移Query类型变量。

ES版本的 $action变量:用于展示出现的接口种类,ES数据源的版本使用DSL进行描述,语义上是找到符合query条件为urlPath:$path AND region:$region的内容,再选取action字段,并按照出现次数排序。

CLS版本的 $action变量: 使用体验上与在图表编辑的输入行为上,保持一致。选择服务类型为日志服务并选中对应的日志主题后,输入SQL语句,即可达到相同效果。

除了使用CLS的检索语句进行变量查询,还可以使用云监控的资源查询功能,将腾讯云上的服务资源,作为列表内容进行展示。功能文档可查看 云监控数据源模板变量功能。 如使用语句Namespace=QCE/CLS&Action=DescribeInstances&Region=$region&display=${TopicName}/${TopicId} 查询日志主题列表。

7. 合并不同地域的请求数据内容

在原本的实现中,有部分用户会遇到以前将所有数据都存储在同一台ES实例上,在使用CLS之后,采用就近原则创建了多个日志主题。此时用户可能会想要将多个日志主题内容合并到图表中。

对于3条来自不同地域的日志查询 :

我们可以使用Transform模块,实现数据求和的效果,并选用需要的图表进行展示。

总结

对存量的ES仪表盘,重复以上的迁移步骤,就可以将一个ES数据源的仪表盘,完全转化成为CLS数据源的仪表盘。ES到CLS数据源的迁移,可以让用户从自建ELK迁移到腾讯云日志服务后,积累的可视化资源得到继续的利用。转化之后的仪表盘,不仅在能力上完全对标ES数据源版本,还可以结合数据源插件的一些其他能力(如云监控模板变量),更好地与腾讯云生态进行融合。


加入「腾讯云日志服务CLS技术交流群」,获取更多资讯,掌握最新动态!

日志服务CLS交流平台日志服务CLS交流平台

欢迎关注「云原生CLS日志服务」公众号

一站式日志数据解决方案平台一站式日志数据解决方案平台

0 人点赞