背景:
很早之前就使用过腾讯云版本的日志服务cls。个人的应用场景主要是想采集clb负载均衡的日志。但是早些时候腾讯云的负载均衡clb只能挂载单个ssl证书,早期域名比较混乱,不想使用多个的clb服务。个人采用了自建的kubernetes服务。采用了腾讯云cls +tcp的方式代理应用,tls证书作为secret的方式交由kubernetes管理。这样就不能在clb层收集日志了(到现在也是这样仅支持http https方式收集日志,不能使用tcp方式收集)。因此仅仅是试用了一下就放弃了。 2021年初看腾讯云官方文档更新clb服务可以挂载多ssl证书了 ,就调整了一下个人的架构。重新试用了一下cls与clb的集成。 个人的使用场景: 自建kubernetes集群1.20.5集群。traefik代理内部应用。work节点运行traefik对外映射80 web 端口。clb层都是做了泛域名解析(个人常用的主域名就两个),证书也都是泛域名证书。直接绑定。至于后端 http https端口 都绑定了后端work节点的80端口。 重定向也在clb做了。简单的泛域名证书重定向方式。
一. CLS 与CLB的集成
1. clb开通日志服务
在对应clb基本信息页面。开启日志服务CLS启用日志,这里就到了日志集和日志主题。
2. 关于日志集和日志主题
cls服务的开通https://console.cloud.tencent.com/cls/选择对应区域增加主题(拿上海区域来演示) 主题与日志集。一个日志集可以包含多个主题,当然了纯属方便我就一个主题对应了一个日志集。 注:可以点开选项的帮助了解分区数量,分区自动分裂,最大分裂数量的帮助指南,选择最优配置。个人仅用于演示全部选择默认。日志保留时间最大记录是90天,根据自己需求设置。 ok日志集与日志主题创建完成。
3. 接clb开通日志服务填写日志集与日志主题
clb绑定上一步默认开通的日志集与日志主题:
4. 进入日志集or日志主题开启索引模式
clb日志服务下图中对应的部分就是日志集和日志主题,点击日志集就可以调整到日志集or进入日志主题。 当然了 也可以直接打开CLS日志服务 选择对应的日志集 和日志主题: 正常的第一步应该是添加索引的配置。我是直接使用了默认的自动配置: 然后正常 下一步访问解析的域名应该就有访问日志的流入了:
5. 日志的投递
CLS服务默认的日志可以搜索最大天数是90天。但是如果大公司有日志保留更长的时间限制,比如180天或者一年那该怎么办呢? 这样就可以用到了腾讯云的cos对象存储服务,可以将日志投递到cos存储桶。将日志投递至cos投递间隔设置了默认的五分钟。其实都是非实时用来备份了一个小时or一天也是可以的。数据量毕竟较小。只用做演示。具体的需求看个人需要。 json格式投递: cls服务可以看到日志投递的状态和投递时间当前时间 2021-04-09-19:53 打开存储桶cos确认日志文件生成?what为什么我的桶里面的hour只到了16? 观察04-09-16文件夹内最后一次日志投递是16.28分: 打开cls服务。首先确认我当前都是有日志生成的。但是我的桶里为什么就没有后面的日志生成呢?
我特别想知道我桶里的文件为什么就直到16点呢?后面的日志是没有的在桶中投递的没有生成? 找不到原因20点11分的时候刷新了下 看到生成了19的目录? 20点10分投递。其他显示投递成功的日志不知道去了哪里 看了一眼是 19点五十多分的日志,20的文件夹也生成了。这5分钟的投递间隔是怎么来的呢?
仔细看了一眼前的文件目录我是3-23日开始使用的使用cls日志服务3-27 3-28 4-23生成23个小时文件夹,3-29 22个小时文件夹还有今天4-09消失的17-18两个小时文件夹。这样的应该是不合理的吧?就算我日志没有生成也应该产生对应的小时文件夹?投递任务都显示成功。我的日志去了哪里呢?希望能找出原因优化一下。
二. 关于CLS日志的检索分析
1. 简单的图表 visualize
基本就是一个kibana的页面但是个人不太喜欢这样类似sql的语法,还是比较习惯lucene的基本查询,使用kibana的devtools工具查询。在我看来图表分析=kibana visualize。 做几个简单的图表分析,演示语句可以复用的,图表分析自动生成的类sql的查询语句还算是方便,能更为简单的生成需要的图表,但是图表分析类型较kibana的图表较少:
1. 根据饼形图的查询语句扩展下做一个域名访问的饼形图:
* | select count(*) as count, status group by status.
我将status修改为http_host
注: http_host是我的域名
so,如下: 生成针对于域名的访问次数的饼形图:
2. 日环比图
就举这两个简单的例子了。
2. 仪表盘dashboard
整了好几个图表分析。怎么集中起来在一个页面呢?嗯 当然了可以建立一个仪表盘。去管理多个图表分析…. 如下。再继续丰富一下仪表盘。
3 做一个折线图
突然就想做一个折线图,如下:
* | select histogram( cast(__TIMESTAMP__ as timestamp),interval 5 minute) as time, count(*) as LogCount group by time order by time
突然我想 安装http_host把折线图更复杂的做一下 该怎么玩呢?这种sql的语法让我有点蒙了我想实现下面的这种效果: 云+社区正好看到了日志服务cls的博客找到了一篇文章https://cloud.tencent.com/developer/article/1810376。依着葫芦画瓢……
* | SELECT HISTOGRAM(CAST(__TIMESTAMP__ AS TIMESTAMP), INTERVAL 1 MINUTE) AS dt, COUNT(5) AS "每分钟到每个域名的请求数", http_host GROUP BY dt, http_host order by dt
还是有点不习惯这样的查询….主要原因是个人sql玩的不太好。kibana的visualize出表格对个人来说更简单一些。
另外我还想做热力图,云词这样的。怎样才能集成geoip插件呢?能收集日志ip了我必然是要做用户访问地域分析的啊?有点陷入了无助。
三. 监控告警
在elasticsearch集群中,个人的报警用的ElastAlert。看到腾讯云CLS服务有监控告警选项试用一下。
1. 新建一个告警通知模板:
看到可以支持微信机器人。就拿了一个原来做的jenkins测试的机器人来做测试了: 告警模板上填写企业微信机器人的webhook地址:
2. 创建告警策略
我想的是就做一个http code 非200的告警策略 分析语句自顾自的整了一个
status!=200 | select count(*) as count
告警出发条件$1.count>10
通知模板选择了上一步自己做的模板。 OK自我感觉良好。访问几个不存在的页面整几个个404试试。
嗯 报警失败。 != 不等于这用法是不能用的。 看了下官方文档:https://cloud.tencent.com/document/product/614/51756。有一个5xx的列子: status:>500 | select count(*) as count,我改成400发送404试试行不行?先验证一下语句的正确性: 目测了下应该是可以的,然后看一篇文章http://cn.voidcc.com/question/p-mdgpdhcv-da.html关于Lucene不等于的用法.嗯 貌似前面的可以匹配了不是200的 但是count的计算怎么搞?确实匹配了status不是200的,但是计算count成了四不像的感觉了….. 老老实实拿个大于400的404做测试下吧
status:>400 | select count(*) as count
$1.count>10
总算成功短信 微信 邮箱三个渠道…..
四. 总结一下
- cls和clb集合可以方便的集成日志的收集分析服务。
- cls也可以收集内部集群(包括cvm云主机)的日志,但是自己内部有自建的kubernetes服务,自己集成了日志的采集展示。
- 日志的投递有不准确性,关于cos桶的投递成功验证也不甚准确,如何进行跟踪分析??
- 希望能更完善的支持Lucene语法。能与原生的kibana契合。有kibana devtools类似的工具。
- 能集成geoip,能做用户分布和地域分析。支持更多的visualize模板。
期待CLS服务的更加完善!这仅仅是个人试用的体验,谨代表个人观点。期待更为全面完整的服务体验。