Kubernetes Ingress日志分析入门

作者: 25e88d6d7cbb | 来源:发表于2019-07-17 14:37 被阅读1次

    本文主要介绍如何基于日志服务构建Kubernetes Ingress日志分析平台,并提供一些简单的动手实验方便大家快速了解日志服务相关功能。

    部署Ingress日志方案

    1. 登录容器服务管理控制台
    2. 将上述CRD配置保存成编排模板。编排模板文档请参见创建编排模板
    3. 基于该模板创建应用,选择您所在集群的default命名空间

    apiVersion: log.alibabacloud.com/v1alpha1
    kind: AliyunLogConfig
    metadata:
      # your config name, must be unique in you k8s cluster
      name: k8s-nginx-ingress
    spec:
      # logstore name to upload log
      logstore: nginx-ingress
      # product code, only for k8s nginx ingress
      productCode: k8s-nginx-ingress
      # logtail config detail
      logtailConfig:
        inputType: plugin
        # logtail config name, should be same with [metadata.name]
        configName: k8s-nginx-ingress
        inputDetail:
          plugin:
            inputs:
            - type: service_docker_stdout
              detail:
                IncludeLabel:
                  io.kubernetes.container.name: nginx-ingress-controller
                Stderr: false
                Stdout: true
            processors:
            - type: processor_regex
              detail:
                KeepSource: false
                Keys:
                - client_ip
                - x_forward_for
                - remote_user
                - time
                - method
                - url
                - version
                - status
                - body_bytes_sent
                - http_referer
                - http_user_agent
                - request_length
                - request_time
                - proxy_upstream_name
                - upstream_addr
                - upstream_response_length
                - upstream_response_time
                - upstream_status
                - req_id
                - host
                NoKeyError: true
                NoMatchError: true
                Regex: ^(\S+)\s-\s\[([^]]+)]\s-\s(\S+)\s\[(\S+)\s\S+\s"(\w+)\s(\S+)\s([^"]+)"\s(\d+)\s(\d+)\s"([^"]*)"\s"([^"]*)"\s(\S+)\s(\S+)+\s\[([^]]*)]\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s(\S+)\s*(\S*).*
                SourceKey: content
    

    验证Ingress日志方案

    1. 登录容器服务控制台
    2. 进入路由页面,点击【Ingress概览】,若跳转出Ingress概览页则表示Ingress日志方案创建成功。

    部署Ingress日志脚本

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: mock-ingress
      namespace: default
      labels:
        app: mock-ingress
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: mock-ingress
      template:
        metadata:
          labels:
            app: mock-ingress
        spec:
          containers:
          - name: mock-ingress
            image: registry.cn-shanghai.aliyuncs.com/log-service/mock-ingress:latest
            command: ["/data/replay_log"]
            args:
              - '-ecs=true'
              - '-project=k8s-log-{cluster-id}'
              - '-endpoint=cn-shanghai.log.aliyuncs.com'
              - '-source=/data/data.txt'
              - '-dist=/data/distribute.csv'
    
    1. 登录容器服务控制台,复制集群列表中的集群ID并保存到记事本。
    2. 替换上述配置模板中的{cluster-id}为您实际的集群ID。
    3. 使用上述配置模板创建无状态应用。

    查看Ingress详细报表

    1. 登录日志服务控制台
    2. 单击左侧导航栏中的Project管理,选择创建集群时设置的日志Project,单击名称进入日志Project页面(默认创建的project名称为 k8s-log-{cluster-id})。
    3. 在Project详情页面,默认进入日志库页面。名称为nginx-ingress的日志库(logstore)存放着所有的Ingress访问日志。单击左侧导航栏中的仪表盘进入仪表盘列表,可查看到所有Ingress的分析报表。

    设置告警

    1. 打开Ingress监控中心,在【请求成功率】图表右上角的菜单栏中点击【创建告警】
    2. 在弹出的告警框中输入告警名称,选择查询区间、执行区间
    3. 触发条件设置为: total < 100 ,即非100%就触发告警(实际场景中可设置的小一些)
    4. 点击【下一步】
    5. 在【通知类型】中选择【钉钉机器人】,填入钉钉机器人的WebHook地址 https://oapi.dingtalk.com/robot/send?access_token=a2c6d68cdb67dbe6ad38361b91f24bf669a551ccb6c4ceef9d6a0f8ced044676(WebHook地址请参见自定义机器人获取)即可完成告警设置。

    订阅定时报告

    日志服务除支持通过告警方式通知外,还支持报表订阅功能,您可使用该功能将报表定期渲染成图片并通过邮件、钉钉群等方式发送。
    下述示例为Ingress概览配置订阅功能,每分钟将报表发送到指定钉钉群:

    1. 进入Ingress概览报表,单击报表右上角的订阅按钮。
    2. 在弹出的配置页面中,频率选择CronJob,输入 0/5 * * * * (每5分钟发送一次报告,实际场景可设为每天固定时间),打开添加水印选项。
    3. 通知类型中选择钉钉机器人,填入钉钉机器人的WebHook地址 https://oapi.dingtalk.com/robot/send?access_token=a2c6d68cdb67dbe6ad38361b91f24bf669a551ccb6c4ceef9d6a0f8ced044676(WebHook地址请参见自定义机器人获取)即可完成订阅。

    高级功能

    自定义分析Ingress日志

    1. 登录日志服务控制台
    2. 单击左侧导航栏中的Project管理,选择创建集群时设置的日志Project,单击名称进入日志Project页面(默认创建的project名称为 k8s-log-{cluster-id})。
    3. 在Project详情页面,默认进入日志库页面。点击名称为nginx-ingress的日志库(logstore)右侧的【查询】链接进入查询页面。

    日志服务支持丰富的查询与分析功能,详情参考日志查询与分析。在查询页面支持自定义的查询与分析,例如:

    1. 查询状态码大于200的请求: status > 200
    2. 查询host(域名)为 inner.njkj.com 且响应延迟高于30ms的请求:host : inner.njkj.com and request_time > 0.03
    3. 统计状态码非200的Top10服务: not status : 200 | SELECT proxy_upstream_name, count(1) as total group by proxy_upstream_name order by total desc limit 10
    4. 统计各省份UV分布: * | select ip_to_province(x_forward_for) as province, approx_distinct(x_forward_for) as total group by province order by total desc limit 1000
    5. 统计host(域名)为 inner.njkj.com最近1天的访问平均延迟,并和昨天以及上周同一天的对比:host : inner.njkj.com | select d[1] as "Today", d[2] as "Yesterday", d[1] - d[2] / d[2] as "Yesterday Delta", d[3] as "Last Week", d[1] - d[3] / d[3] as "Last Week Delta" from( select compare(val, 86400, 604800 ) as d from(select avg(request_time) as val from log ) )

    Ingress报表均基于日志服务的分析功能实现,您可以从系统默认提供的Ingress报表中查找对应功能实现的SQL:点击对应图表的右上角菜单选项,选择【查看分析详情】,则会跳到对应的查询页面。

    从审计日志中查询部署操作

    1. 登录日志服务控制台
    2. 单击左侧导航栏中的Project管理,选择创建集群时设置的日志Project,单击名称进入日志Project页面(默认创建的project名称为 k8s-log-{cluster-id})。
    3. 进入左侧导航栏中的仪表盘列表,选择【Kubernetes资源操作详细列表】进入。
    4. 在左上角【资源类型】筛选框中输入Deployments,即可查询到之前部署的Deployment。
    5. 可点击左下角【资源创建列表】中的事件ID查询详细的事件信息。

    接入其他日志(会后作业)

    您可以使用日志服务Logtail接入业务应用的日志来实现自定义的查询、分析、可视化、告警等功能,您可以使用以下任意一种方式接入日志:

    1. 基于日志服务控制台创建采集配置:

    2. 使用环境变量创建采集配置:

    3. 使用CRD方式创建采集配置:



    本文作者:元乙

    原文链接

    本文为云栖社区原创内容,未经允许不得转载。

    相关文章

      网友评论

        本文标题:Kubernetes Ingress日志分析入门

        本文链接:https://www.haomeiwen.com/subject/fcmqlctx.html