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

部署Ingress日志方案

  1. 登录容器服务管理控制台
  2. 将上述CRD配置保存成编排模板。编排模板文档请参见创建编排模板
  3. 基于该模板创建应用,选择您所在集群的default命名空间
  1. apiVersion: log.alibabacloud.com/v1alpha1
  2. kind: AliyunLogConfig
  3. metadata:
  4. # your config name, must be unique in you k8s cluster
  5. name: k8s-nginx-ingress
  6. spec:
  7. # logstore name to upload log
  8. logstore: nginx-ingress
  9. # product code, only for k8s nginx ingress
  10. productCode: k8s-nginx-ingress
  11. # logtail config detail
  12. logtailConfig:
  13. inputType: plugin
  14. # logtail config name, should be same with [metadata.name]
  15. configName: k8s-nginx-ingress
  16. inputDetail:
  17. plugin:
  18. inputs:
  19. - type: service_docker_stdout
  20. detail:
  21. IncludeLabel:
  22. io.kubernetes.container.name: nginx-ingress-controller
  23. Stderr: false
  24. Stdout: true
  25. processors:
  26. - type: processor_regex
  27. detail:
  28. KeepSource: false
  29. Keys:
  30. - client_ip
  31. - x_forward_for
  32. - remote_user
  33. - time
  34. - method
  35. - url
  36. - version
  37. - status
  38. - body_bytes_sent
  39. - http_referer
  40. - http_user_agent
  41. - request_length
  42. - request_time
  43. - proxy_upstream_name
  44. - upstream_addr
  45. - upstream_response_length
  46. - upstream_response_time
  47. - upstream_status
  48. - req_id
  49. - host
  50. NoKeyError: true
  51. NoMatchError: true
  52. 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*).*
  53. SourceKey: content

验证Ingress日志方案

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


部署Ingress日志脚本

  1. apiVersion: apps/v1
  2. kind: Deployment
  3. metadata:
  4. name: mock-ingress
  5. namespace: default
  6. labels:
  7. app: mock-ingress
  8. spec:
  9. replicas: 1
  10. selector:
  11. matchLabels:
  12. app: mock-ingress
  13. template:
  14. metadata:
  15. labels:
  16. app: mock-ingress
  17. spec:
  18. containers:
  19. - name: mock-ingress
  20. image: registry.cn-shanghai.aliyuncs.com/log-service/mock-ingress:latest
  21. command: ["/data/replay_log"]
  22. args:
  23. - '-ecs=true'
  24. - '-project=k8s-log-{cluster-id}'
  25. - '-endpoint=cn-shanghai.log.aliyuncs.com'
  26. - '-source=/data/data.txt'
  27. - '-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日志分析入门的更多相关文章

  1. Kubernetes Ingress 日志分析与监控的最佳实践

    摘要: Ingress主要提供HTTP层(7层)路由功能,是目前K8s中HTTP/HTTPS服务的主流暴露方式.为简化广大用户对于Ingress日志分析与监控的门槛,阿里云容器服务和日志服务将Ingr ...

  2. APM和PIX飞控日志分析入门贴

    我们在飞行中,经常会碰到各种各样的问题,经常有模友很纳闷,为什么我的飞机会这样那样的问题,为什么我的飞机会炸机,各种问题得不到答案是一件非常不爽的问题,在APM和PIX飞控中,都有记录我们整个飞行过程 ...

  3. Ingress 访问日志分析与监控

    阿里云Ingress除了提供外部可访问的 URL.负载均衡.SSL.基于名称的虚拟主机外,还支持将所有用户的HTTP请求日志记录到标准输出中.同时Ingress访问日志与阿里云日志服务打通,您可以使用 ...

  4. hadoop入门之海量Web日志分析 用Hadoop提取KPI统计指标

    转载自:http://blog.fens.me/hadoop-mapreduce-log-kpi/ 今天学习了这一篇博客,写得十分好,照着这篇博客敲了一遍. 发现几个问题, 一是这篇博客中采用的had ...

  5. Kubernetes Ingress简单入门

    作者:Nick Ramirez 原文链接:https://thenewstack.io/kubernetes-ingress-for-beginners/ 本文转载自Rancher Labs 不知道你 ...

  6. Kubernetes审计日志方案

    前言 当前Kubernetes(K8S)已经成为事实上的容器编排标准,大家关注的重点也不再是最新发布的功能.稳定性提升等,正如Kubernetes项目创始人和维护者谈到,Kubernetes已经不再是 ...

  7. 最全Kubernetes审计日志方案

    前言 当前Kubernetes(K8S)已经成为事实上的容器编排标准,大家关注的重点也不再是最新发布的功能.稳定性提升等,正如Kubernetes项目创始人和维护者谈到,Kubernetes已经不再是 ...

  8. 手把手教你搭建 ELK 实时日志分析平台

    本篇文章主要是手把手教你搭建 ELK 实时日志分析平台,那么,ELK 到底是什么呢? ELK 是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch.Logstash 和 Kiban ...

  9. 在 Kubernetes Ingress 中支持 Websocket/Socket 服务

    Kubernetes Ingress 可将集群内部的 Service 通过 HTTP/HTTPS 的方式暴露供外部访问,并通过路径匹配规则定义服务的路由.但是 Ingress 对 TCP/UDP 的服 ...

随机推荐

  1. 组件:事件传递$emit

    <!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...

  2. APT甲级——A1069 The Black Hole of Numbers

    For any 4-digit integer except the ones with all the digits being the same, if we sort the digits in ...

  3. 木卯先生的笔记---Object类

    1.简介 Object类是在 java.lang 包下的一个类,它是所有类的父类(也就是所有类都是Object类的子类,如果定义一个类的时候,没有指定继承的类,默认的就是继承Object类),所以Ob ...

  4. KOA 学习(七) 路由koa-router

    一.基本用法 var app = require('koa')(); var router = require('koa-router')(); router.get('/', function *( ...

  5. spring入门案例分析及原理

    Springmvc执行原理: 一. 入门案例的执行流程 1. 当启动Tomcat服务器的时候,因为配置了load-on-startup标签,所以会创建DispatcherServlet对象,就会加载s ...

  6. stream之累加求和

    1.集合中直接包含BigDecimal元素的累加 List<Integer> list = new ArrayList<>();list.add(3);list.add(7); ...

  7. H5C3--设置颜色的几种方式

    设置颜色的方式: 关键字:red|blue 第一种:十六进制:#ffffff 第二种:rgb(红,绿,蓝): rgb(ffff00) rgba(红,绿,蓝,透明度) 第三种:hsl(色相,饱和度,明度 ...

  8. day38 04-Spring加载配置文件

    Spring的工厂类ApplicationContext有两个子类:ClassPathXmlApplicationConext和FileSystemXmlApplication都可以用来加载配置文件. ...

  9. Leetcode581.Shortest Unsorted Continuous Subarray最短无序连续子数组

    给定一个整数数组,你需要寻找一个连续的子数组,如果对这个子数组进行升序排序,那么整个数组都会变为升序排序. 你找到的子数组应是最短的,请输出它的长度. 示例 1: 输入: [2, 6, 4, 8, 1 ...

  10. JDBC入门案例

    什么是JDBC? JDBC的全称是Java数据库连接(Java Database Connectivity),它是一套用于执行SQL语句的Java API. 作为一个Web开发人员来说,JDBC操作是 ...