日志和监控告警
阿里云日志服务(Log Service,简称 LOG)是针对日志类数据的一站式服务。您无需开发就能快捷完成日志数据采集、消费、投递、查询分析以及监控告警等功能。在 Knative 中结合日志服务,能有效提升对 Serverless 应用的运维能力。
前提条件
- 您已经成功创建一个 Kubernetes 集群,参见创建Kubernetes集群
- 部署日志服务
- 部署成功 Knative , 参见部署Knative
- 部署成功 Serving 组件
日志
- 部署 Knative Service 服务。参考部署 Serving Hello World 应用示例
- 选择日志库,创建Logstore。这里以创建helloworld为例:
- 数据源接入,选择Docker标准输出, 参见日志服务容器标准输出
- 插件配置这里我们针对
helloworld-go
Service, 设置采集的环境变量为:“K_SERVICE”: “helloworld-go”。并且通过 processors 分割日志信息,如这里"Keys": [ “time”,“level”, “msg” ]。
{
"inputs": [
{
"detail": {
"IncludeEnv": {
"K_SERVICE": "helloworld-go"
},
"IncludeLabel": {},
"ExcludeLabel": {}
},
"type": "service_docker_stdout"
}
],
"processors": [
{
"detail": {
"KeepSource": false,
"NoMatchError": true,
"Keys": [
"time",
"level",
"msg"
],
"NoKeyError": true,
"Regex": "(\\d+-\\d+-\\d+\\s+\\d+:\\d+:\\d+)\\s+(\\w+)\\s+(.*)",
"SourceKey": "content"
},
"type": "processor_regex"
}
]
}
- 开启全文索引,设置查询展示列
- 访问 Hello World 示例服务。
$ curl -H "Host: helloworld-go.default.example.com" http://112.124.XX.XX
Hello Go Sample v1!
- 登录日志服务控制台, 进入对应的 Project, 选择
helloworld
Logstore,点击查询
监控告警
- 设置查询分析,参考查询与分析
- 为了便于查看,可以通过列设置,显示所需要的列, 这里设置 level、msg 和 time 这 3 列:
- 设置查询sql语句。这里我们监控的原则是根据ERROR出现的次数,因此可以设计统计 ERROR 的sql语句:
* | select 'ERROR' , count(1) as total group by 'ERROR'
点击【查询/分析】,结果如图所示: 2. 告警设置。点击 【另存为告警】。 3. 设置告警名称、添加到仪表盘(这里可以新建,输入名称即可)等。其中告警触发条件输入判断告警是否触发的条件表达式, 可以参考告警条件表达式语法。我们这里设置“查询区间:1 分钟,执行间隔:1 分组,触发条件:total > 3” 表示间隔 1 分钟检查,如果 1 分钟内出现3次 ERROR 信息,则触发告警。 4. 告警通知 当前支持如图所示告警通知:
- 访问 Hello World 示例服务。执行多次以下命令,就会触发告警通知
$ curl -H "Host: helloworld-go.default.example.com" http://112.124.XX.XX
Hello Go Sample v1!
如果是设置的邮件通知,告警信息如下图所示:
总结
通过上面的介绍相信你已经了解如何在 Knative 中使用日志服务收集 Serverless 应用容器日志,并进行告警设置。在 Knative 中采用日志服务收集、分析业务日志,并结合设置监控告警,满足了生产级别的 Serverless 应用运维的诉求。