Knative 云原生应用开发指南

Version 0.11

日志和监控告警

阿里云日志服务(Log Service,简称 LOG)是针对日志类数据的一站式服务。您无需开发就能快捷完成日志数据采集、消费、投递、查询分析以及监控告警等功能。在 Knative 中结合日志服务,能有效提升对 Serverless 应用的运维能力。

前提条件

日志

  1. 部署 Knative Service 服务。参考部署 Serving Hello World 应用示例
  2. 选择日志库,创建Logstore。这里以创建helloworld为例: undefined
  3. 数据源接入,选择Docker标准输出, 参见日志服务容器标准输出 undefined
  4. 插件配置这里我们针对 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"
    }
  ]
}
  1. 开启全文索引,设置查询展示列 undefined
  2. 访问 Hello World 示例服务。
$ curl -H "Host: helloworld-go.default.example.com" http://112.124.XX.XX
Hello Go Sample v1!
  1. 登录日志服务控制台, 进入对应的 Project, 选择 helloworld Logstore,点击查询 undefined

监控告警

  1. 设置查询分析,参考查询与分析
  • 为了便于查看,可以通过列设置,显示所需要的列, 这里设置 level、msg 和 time 这 3 列: undefined
  • 设置查询sql语句。这里我们监控的原则是根据ERROR出现的次数,因此可以设计统计 ERROR 的sql语句:
* | select 'ERROR' , count(1) as total group by 'ERROR'

点击【查询/分析】,结果如图所示: undefined 2. 告警设置。点击 【另存为告警】。 undefined 3. 设置告警名称、添加到仪表盘(这里可以新建,输入名称即可)等。其中告警触发条件输入判断告警是否触发的条件表达式, 可以参考告警条件表达式语法。我们这里设置“查询区间:1 分钟,执行间隔:1 分组,触发条件:total > 3” 表示间隔 1 分钟检查,如果 1 分钟内出现3次 ERROR 信息,则触发告警。 undefined 4. 告警通知 当前支持如图所示告警通知: undefined

  1. 访问 Hello World 示例服务。执行多次以下命令,就会触发告警通知
$ curl -H "Host: helloworld-go.default.example.com" http://112.124.XX.XX
Hello Go Sample v1!

如果是设置的邮件通知,告警信息如下图所示: undefined

总结

通过上面的介绍相信你已经了解如何在 Knative 中使用日志服务收集 Serverless 应用容器日志,并进行告警设置。在 Knative 中采用日志服务收集、分析业务日志,并结合设置监控告警,满足了生产级别的 Serverless 应用运维的诉求。