无需重新学习,使用 Kibana 查询 / 可视化 SLS 数据
作者:荆磊
场景
现在通过 SLS 的 ES 兼容能力,可以很方便地实现用 Kibana 来查询和可视化 SLS 的数据。对于从 ES 迁移到 SLS 的用户可以继续保留原来的 Kibana 使用习惯。下面来演示如何通过 Kibana 来访问 SLS。
使用方法
部署架构
![](https://static001.geekbang.org/infoq/34/345f3c523be70ebe5c06e49247ab2518.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
这里蓝色部分是需要客户端部署的组件。
Kibana 就是用来可视化的
Proxy 用来区分 Kibana 的请求,将 SLS 相关的转发到 SLS 的 ES 兼容接口
Elasticsearch 用来存 Kibana 的 Meta
等等,为什么这里还需要一个 ES?
原因是 SLS 的 Logstore 不支持更新,很多 Meta 类的数据不适合存在 SLS。
而 Kibana 有很多元数据要存储,比如 Kibana 的图表配置、Index Pattern 配置等。
因此需要部署一个 ES 实例,这个 ES 实例只会存 Kibana 的元数据,所以它的资源占用非常小。
部署过程
使用 docker-compose 部署
相关准备
安装好 docker 和 docker compose,下面的操作步骤对于 podman compose 的方式一样适用。
创建相关目录
配置
在 sls-kibana 目录下下创建 docker-compose.yml 文件。
内容如下:(下面标识为此处请修改的地方,请根据实际情况做一下修改)
启动本地 Kibana 服务:
检查 docker compose 启动状态:
访问 Kibana
浏览器访问 http://$(部署 Kibaba 的 IP 地址}:5601,输入账号密码登录 Kibana。
配置 Index Pattern
选择 Stack Managment:
![](https://static001.geekbang.org/infoq/f1/f1a4234bb4924bdf8dab44157b4c9dfb.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
点击 Index Pattern Tab,在 Index Pattern 列表中看不到数据是正常的,日志服务的 Logstore 映射到 Kibana 中的 Index Patterns 需要手动创建。 在提示框中单击 create an index pattern against hidden or system indices.
![](https://static001.geekbang.org/infoq/d7/d71aec6ebd13fe1b298b1928704cb8b4.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
在 Create Index Pattern 页,Name 填写格式为 {logstore},注意这里比必须完全填写,不支持*匹配。
![](https://static001.geekbang.org/infoq/d0/d0f078e8488240f5ba5b2c5c966933c6.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
点完成 Create Index Pattern 完成 Pattern 创建,然后进入 Discover 里就可以查询数据了。
![](https://static001.geekbang.org/infoq/d7/d7c5788a81d71df88755a3408031b2c3.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
查询 Logstore
![](https://static001.geekbang.org/infoq/51/517034690703505e2649b793e5621016.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
Kibana 的查询框中可以选择 KQL 和 Lucene 两种方式,SLS 的 ES 兼容接口都进行了支持。
简单的 host 查询:
![](https://static001.geekbang.org/infoq/92/92d0b83829d10c49f2720dadfd216614.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
复杂一些 query、filter 都可以查询。
![](https://static001.geekbang.org/infoq/b7/b7de23d4afd3a2f7e331754178488c73.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
可视化图表
那么除了查询,可以用 Kibana 来做可视化吗?当然可以! 选择 Dashboard。
![](https://static001.geekbang.org/infoq/5e/5e6db876252194c58d74ed0915a90bb4.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
进入后点击 Create Dashboard 来创建一个图表。
![](https://static001.geekbang.org/infoq/b2/b23d66c8a82ebf527a5f0b4df6e329da.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
通过设置,横轴、纵轴的字段和统计方式,可以很方便地做出想要图。
比如最简单的统计一个请求访问数的柱状图,时间为横轴,记录数为纵轴。
![](https://static001.geekbang.org/infoq/2e/2eb6a4fd036f80fffe66267657a637e9.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
现在我想看到每个柱子中,status 的情况,可以选择 Break down by 的字段为 status。
![](https://static001.geekbang.org/infoq/f2/f25b62103df43f14f32b6c3737204e42.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
FAQ
1)为什么在 Kibana 上看不到 SLS 上的 Logstore?
SLS 上的 Logstore 是通过 Kibana 的 Index Pattern 方式来查询的,而 SLS 上的 Logstore 需要通过手工创建 Index Pattern 的方式来创建。
2)Kibana 上创建 Index Pattern 的时候,不做输入的时候,为什么没有提示?
这个是正常的,在左侧输入正确的 {logstore} (这里{logstore}需替换成真实值)后,会展示:
![](https://static001.geekbang.org/infoq/f7/f7979276bd46d3529319b653c932ae8a.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
3)Kibana 上创建 Index Pattern 的时候支持*通配吗?
不支持通配,需要完整填写 {logstore},比如 etl-dev.accesslog 这种方式来匹配。
![](https://static001.geekbang.org/infoq/cd/cd44ec48c7817cf3ac11359095c45f2b.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
4)为什么 Kibana 上创建 Logstore 的 Index Pattern 时右侧没有提示出现?
![](https://static001.geekbang.org/infoq/0c/0c79a4a1e6e18fe0ff1c5d7451577242.webp?x-oss-process=image%2Fresize%2Cp_80%2Fformat%2Cpng)
有几种可能:
SLS 的 ES 兼容地址不对,在 kproxy 中配置时,规则为 https://{slsEnpoint 名}/es/,注意 /es/ 这个后缀。2. 对应的 accessKeyId、accessKeySerect 没有访问 SLS Logstore 的权限(读权限)。
5)我有多个 SLS Project 想在 Kibana 上访问,可以做到吗?
可以的,关键在于 kproxy 的配置。SLS_PROJECT、SLS_ENDPOINT、SLS_ACCESS_KEY_ID、SLS_ACCESS_KEY_SECRET 为第一个 Project 相关的变量名称。从第二个 Project 开始,其相关变量名称需加数字后缀,例如 SLS_PROJECT2、SLS_ENDPOINT2、SLS_ACCESS_KEY_ID2、SLS_ACCESS_KEY_SECRET2。如果后面某 Project 的 AccessKey 与第一个 Project 相同,则该 Project 对应的 AccessKey 可省略配置。
举例,假设另外一个 Project 要被 Kibaba 查,那么作为第二个 kproxy:
小结
本文演示了使用 Kibana 连接 SLS ES 兼容接口进行查询和分析的方法,对于 Kibana 的 query 和可视化能力都能正常对接和使用。适合下面两种情况:
如果您之前的使用习惯是 Kibana,而日志已经存在了阿里云 SLS 上,可以使用该方案对接。
如果您现在使用的是标准的 ELK 方案,但厌倦了 ES 使用时维护工作或者调优,不妨试一试阿里云 SLS 的方案(c++ 底层、Serverless、低成本、ES 兼容)。
期待您的使用。
参考文档:
SLS 兼容 ES 介绍
https://help.aliyun.com/zh/sls/user-guide/compatibility-between-log-service-and-elasticsearch?spm=a2c4g.11186623.0.0.6df154e3SkR5Qi
使用 Kibana 连接 ES 兼容接口 https://help.aliyun.com/zh/sls/user-guide/use-kibana-to-access-the-elasticsearch-compatible-api-of-log-service?spm=a2c4g.11186623.0.0.27bc54e3bgGvsa#cdb8c7a157t0v
版权声明: 本文为 InfoQ 作者【阿里巴巴云原生】的原创文章。
原文链接:【http://xie.infoq.cn/article/c770a09679b68fc49ebe70e34】。文章转载请联系作者。
评论