Kubernetes 日志查询分析实践

准备工作

为了完成后续的相关操作,我们需要准备一个 K8s 集群,操作步骤如下:

  1. 登陆容器服务控制台。
  2. 创建一个标准托管集群(杭州区域),在向导中勾选上【使用 EIP 暴露 API Server】 和【使用日志服务】。
  3. 集群创建完毕后,回到集群列表页面,点击【更多->通过 CloudShell 管理集群】。
  4. 在 CloudShell 中输入 kubectl get ds -n kube-system,结果中显示的 logtail-ds 即为了实现数据采集所安装的日志服务组件。
  5. 打开日志服务控制台,可以看到和 K8s 集群 ID 所对应的 project 也已经创建完毕。

操作截图如下:

图:创建托管集群(步骤 2)

图:打开 CloudShell(步骤 3)

图:在 CloudShell 中查看日志服务组件(步骤 4)

图:打开日志服务控制台,查看 project(步骤 5)

1. 数据采集

在 K8s 环境下,容器日志数据从大体上分为两类:容器标准输出和容器内文本文件,前者是容器特有的一种日志存在形式,后者和传统的文本文件日志类似,只是文件存放在各个容器内部,相互之间隔离。下面我们将介绍如何对这两种类型的日志进行采集。

1.1. Mock 数据

我们将使用如下两个 YAML 文件分别生成标准输出和容器内文件两种形式的 mock 数据。
容器标准输出

# 创建两个 pod 来生成 mock 数据
apiVersion: batch/v1
kind: Job
metadata:name: nginx-stdout-log-demo-1namespace: nginx-stdout
spec:template:metadata:name: nginx-stdout-log-demo-1spec:containers:- name: nginx-stdout-log-demo-1image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latestcommand: ["/bin/mock_log"]args: ["--stderr=false", "--stdout=true", "--log-type=nginx", "--total-count=100000000", "--logs-per-sec=5"]restartPolicy: Never
---
apiVersion: batch/v1
kind: Job
metadata:name: nginx-stdout-log-demo-2namespace: nginx-stdout
spec:template:metadata:name: nginx-stdout-log-demo-2spec:containers:- name: nginx-stdout-log-demo-2image: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latestcommand: ["/bin/mock_log"]args: ["--stderr=false", "--stdout=true", "--log-type=nginx", "--total-count=100000000", "--logs-per-sec=5"]restartPolicy: Never

容器内文本文件(/var/log/access.log)

apiVersion: batch/v1
kind: Job
metadata:name: nginx-file-log-demonamespace: nginx-file
spec:template:metadata:name: nginx-file-log-demospec:restartPolicy: Nevercontainers:- name: nginx-file-log-demoimage: registry.cn-hangzhou.aliyuncs.com/log-service/docker-log-test:latestcommand: ["/bin/mock_log"]args: ["--log-type=nginx", "--stdout=false", "--stderr=false", "--path=/var/log/access.log", "--total-count=100000000", "--logs-per-sec=5"]

操作步骤:

  1. 打开 CloudShell,参考准备工作中的步骤 3。
  2. 在集群中应用上面提及的两个 YAML(Github)。
  3. 执行 kubectl get pods 查看负责生成日志的几个 Pod。
  4. 查看两个 Pod 生成日志的情况(根据实际情况替换命令中的 pod 名)
  • 标准输出:执行 kubectl logs -n nginx-stdout --tail=10 nginx-stdout-log-demo-1-7kvwx
  • 容器内文件:执行 kubectl exec -n nginx-file nginx-file-log-demo-7frsp -- bash -c "tail /var/log/access.log"
$ kubectl create namespace nginx-stdout
$ kubectl create -f https://raw.githubusercontent.com/goclis/kubernetes-mock-log/master/pod_nginx_stdout.yaml
$ kubectl create namespace nginx-file
$ kubectl create -f https://raw.githubusercontent.com/goclis/kubernetes-mock-log/master/pod_nginx_file.yaml

命令:生成 mock 数据(步骤 2)

$ kubectl get pods -A
NAMESPACE      NAME                                               READY   STATUS    RESTARTS   AGE
nginx-file     nginx-file-log-demo-7frsp                          1/1     Running   0          2m9s
nginx-stdout   nginx-stdout-log-demo-1-7kvwx                      1/1     Running   0          2m12s
nginx-stdout   nginx-stdout-log-demo-2-4x7vw                      1/1     Running   0          2m12s

命令:查看日志服务组件(步骤 3)

1.2. 采集标准输出
操作步骤:

  1. 登陆日志服务控制台,点击进入集群 ID 对应的 project。
  2. 创建一个 logstore 用于存储标准输出日志,比如 k8s-stdout。
  3. 在 logstore 中新增 Logtail 配置,类型为【Docker 标准输出】,选择现有机器组中前缀为 k8s-group 的机器组。
  4. 在【数据源设置】页面,填写【配置名称】和【插件配置】。
    操作截图如下:

图:创建 Logtail 采集配置

图:选择 Docker 标准输出配置

图:选择现有机器组

图:选择 k8s-group 开头的机器组

图:填写 Docker 标准输出采集配置内容
以下为两个可选的采集配置(使用 IncludeLabel 分别采集两个 namespace 下的数据,参考):
配置:采集 namespace nginx-stdout

{"inputs": [{"detail": {"IncludeLabel": {"io.kubernetes.pod.namespace": "nginx-stdout"},"ExcludeLabel": {}},"type": "service_docker_stdout"}]
}

配置:采集 namespace kube-system

{"inputs": [{"detail": {"IncludeLabel": {"io.kubernetes.pod.namespace": "kube-system"},"ExcludeLabel": {}},"type": "service_docker_stdout"}]
}

1.3. 采集容器内文件

操作步骤:

  1. 登陆日志服务控制台,点击进入集群 ID 对应的 project。
  2. 创建一个 logstore 用于存储容器内文件日志,比如 nginx-file。
  3. 在 logstore 中新增 Logtail 配置,类型为【Docker 文件】,选择现有机器组中前缀为 k8s-group 的机器组。
  4. 在【数据源设置】页面,填写【配置名称】和具体的配置信息(采集文件的路径、Label 等),示例为采集 /var/log/access.log

图:选择 Docker 文件配置

图:填写 Docker 文件采集配置内容

2. 日志查询

2.1. 设置字段索引 & 开启日志聚类

为了使用日志服务提供的查询、日志聚类等功能,首先需要对索引进行配置。操作步骤如下:

  1. 登陆日志服务控制台,进入集群 ID 对应的 project,从左侧导航栏的 logstore 中选择先前创建的 k8s-stdout,展开点击查询分析进行查询控制台。
  2. 点击右上角的【查询分析属性 -> 设置索引】。
  3. 在弹出窗口中勾选上【日志聚类】,然后点击【自动生成索引】。
  4. 点击【确定】保存索引。
    操作截图如下:

图:进入 logstore 查询分析界面

图:索引配置入口

图:开启日志聚类

图:自动生成字段索引

2.2. 基本查询

在配置完索引后,我们可以在查询输入框中使用查询语句可以快速地筛选日志,以下是一些示例:

  • 查看命名空间 nginx-stdout 下的日志:_namespace_:nginx-stdout
  • 查看其他命名空间下的日志:not _namespace_: nginx-stdout
  • 查看命名空间 kube-system 下指定 pod 的日志:_namespace_: kube-system and _pod_name_: xxxxxx
    在实际查询过程中,我们可以通过直接点击查询结果中的内容来快速填充查询语句,截图如下。

图:点击查询结果中的内容

图:查询语句快速填充

2.3. 日志聚类 & 上下文查询 & LiveTail

在排查问题时,我们一般会组合使用日志聚类、上下文查询以及 LiveTail 这三个功能来辅助问题排查。

  • 首先,利用日志聚类来快速地查看日志模式,发现其中怀疑的问题日志。
  • 接着,利用上下文查询,来跟踪问题日志前后的日志,辅助我们定位问题。
  • 最后,在根据问题做出调整后,使用 LiveTail 来查看最新日志的变化情况,确认是否达到修改预期。
    以下假设应用 pod 是 metrics-server,我们可以借助这套方法来对它进行分析:
  1. 查询输入框输入 metrics-server,点击查询分析,可以看到所有范围(默认为最近 15 分钟)的全部日志,一般来说会很多。
  2. 由于日志较多,为了发现日志模式,我们切换到【日志聚类】标签页,可以看到这段时间内的日志在模式上分为有限的几类。我们可以拖动 pattern 进度条选择粒度,对于特定 pattern,点击【日志数量】来查看具体日志。
  3. 悬停到日志时间左侧的图标,点击弹出菜单中的【上下文浏览】,在弹出页面中同样可以进行筛选,并点击【更早】、【更新】来查看指定日志的上文和下文。
  4. 悬停到日志时间左侧的图标,点击弹出菜单中的【LiveTail】。

图:日志聚类结果

图:上下文查询入口

图:上下文查询

图:LiveTail

3. Ingress & Audit 方案

除了 K8s 环境下基本的日志采集、查询分析功能以外,我们还针对 K8s 环境下的 Ingress、审计(Audit)日志提供了方案。

3.1. Ingress

为了在集群中部署 Ingress 方案,只需要在集群已安装日志服务组件的基础上,应用如下的 YAML 文件即可:

apiVersion: log.alibabacloud.com/v1alpha1
kind: AliyunLogConfig
metadata:# your config name, must be unique in you k8s clustername: k8s-nginx-ingress
spec:# logstore name to upload loglogstore: nginx-ingress# product code, only for k8s nginx ingressproductCode: k8s-nginx-ingress# logtail config detaillogtailConfig:inputType: plugin# logtail config name, should be same with [metadata.name]configName: k8s-nginx-ingressinputDetail:plugin:inputs:- type: service_docker_stdoutdetail:IncludeLabel:io.kubernetes.container.name: nginx-ingress-controllerStderr: falseStdout: trueprocessors:- type: processor_regexdetail:KeepSource: falseKeys:- 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- hostNoKeyError: trueNoMatchError: trueRegex: ^(\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

该 YAML 会在集群对应的日志服务 project 中创建一个名为 nginx-ingress 的 logstore,存储相关的日志,并且会对应地创建一系列基于 Ingress 日志所构建的详细报表,辅助我们分析 Ingress 日志。

图:Ingress 概览
更多信息可以阅读《Kubernetes Ingress 日志分析入门》。

审计(Audit)

目前,审计方案会在集群创建时自动应用,相关的日志会存储在日志服务 project 下以 audit- 为前缀的 logstore 中,其中包含针对集群操作的详细日志,比如资源(Pod、Deploy)的创建与删除、集群的扩容记录等。类似地,审计方案同样提供了一系列详细报表。

双12来袭!500元淘宝红包、iPhone11等你拿。
https://www.aliyun.com/1212/2019/home?utm_content=g_1000092611

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/517213.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

“编程能力差,90%是输在这点上!”谷歌AI开发专家:逆袭并没那么难!

Google 人工智能开发者专家彭靖田老师说——超90%的程序员在初学Python 人工智能时,都会遇到下面3个问题:1.想入门人工智能,但不知从何学起,也不知道该选择什么方向...2.Python语法、机器学习/深度学习框架、算法都能看懂&#xf…

这群程序员疯了!他们想成为IT界最会带货的男人

随着网红主播越来越火,通过直播带货种草的形式也成了今年双12的热点。 不过,网红主播带货早已见怪不怪,但你们见过程序员直播带货吗!? 近日,趁着阿里云双12年末采购节,阿里云邀请了一波程序员GG来为大家直播带货&am…

Minio Docker 单机安装(二种模式) linux

文章目录一、默认单机启动1. docker安装启动2. minio 镜像拉取和启动3. minio登录二、minio纠删码模式2.1. 简述2.2. 启动2.3. minio登录2.4. 总览2.5. 上传文件测试一、默认单机启动 1. docker安装启动 # 在线安装docker yum install docker# 启动docker systemctl start do…

阿里巴巴 Service Mesh 落地的架构与挑战

导读:云原生已成为整个阿里巴巴经济体构建面向未来的技术基础设施,Service Mesh 作为云原生的关键技术之一,顺利完成在 双11 核心应用严苛而复杂场景下的落地验证。本文作者将与大家分享在完成这一目标过程中我们所面临和克服的挑战。 部署架…

看完这篇 HashMap ,和面试官扯皮就没问题了

来源 | Java 建设者责编 | Carol封图 | CSDN 下载自视觉中国(如果你没有时间细抠本文,可以直接看 HashMap 概述,能让你对 HashMap 有个大致的了解)HashMap 是 Map 接口的实现,HashMap 允许空的 key-value 键值对&#…

除了快,5G 有哪些关键技术?

阿里妹导读:5G不仅仅只是网速更快,更多的是生活方式的颠覆,对各行各业都会起到催化作用。5G里不仅仅只有大带宽,而是会有很多与B端用户(企业)相结合的点。接下来,跟阿里大文娱的梓烁一起了解5G的…

聚水潭是如何基于AnalyticDB for PostgreSQL 构筑海量实时数仓平台的

聚水潭数据仓库业务介绍 上海聚水潭网络科技有限公司成立于2014年。聚水潭创建之初,以电商SaaS ERP切入市场,凭借出色的产品和服务,快速获得市场领先地位。随着客户需求的不断变化,如今聚水潭已经发展成为以SaaS ERP为核心&#…

sqlite3的编译和使用

编译环境准备 这个是nw官网的环境搭建教程,一般需要python2.7、visual studio 2013、node-gyp、 node-pre-gyp,环境这块的文章很多自己可以百度http://docs.nwjs.io/en/latest/For Users/Advanced/Use Native%2 0Node%20Modules/ 编译好之后&#xff0…

阿里巴巴的 Kubernetes 应用管理实践经验与教训

导读:本文整理自孙健波在 ArchSummit 大会 2019 北京站演讲稿记录。首先介绍了阿里巴巴基于 Kubernetes 项目进行大规模应用实践过程中遇到的问题;随后会逐一介绍解决这些问题的现有实践及其本身存在的局限性;最后会介绍阿里巴巴目前正在进行…

Minio 分布式集群部署

文章目录一、分布式存储可靠性常用方法1. 概述2. 冗余3. 校验二、分布式Minio优势2.1. 数据保护2.2. 高可用2.3.一致性三、运行分布式Minio3.1. 启动方案简述3.2. 案例说明3.3. 制作分布式启动脚本3.4. 制作伪分布式启动脚本3.5. 登录minio四、分布式Minio负载均衡4.1. nginx安…

数据分析:为什么说Python比Excel更简单高效 ?

日本最大的证券公司之一野村证券首席数字官马修汉普森,在Quant Conference上发表讲话:“用Excel的人越来越少,大家都在用Python。”甚至直接说:“Python已经取代了Excel。”事实上,为了追求更高的效率和质量&#xff0…

快速搭建 Serverless 在线图片处理应用

简介 首先介绍下在本文出现的几个比较重要的概念: 函数计算(Function Compute):函数计算是一个事件驱动的服务,通过函数计算,用户无需管理服务器等运行情况,只需编写代码并上传。函数计算准备计…

如何在 PyFlink 1.10 中自定义 Python UDF?

我们知道 PyFlink 是在 Apache Flink 1.9 版新增的,那么在 Apache Flink 1.10 中 Python UDF 功能支持的速度是否能够满足用户的急切需求呢? Python UDF 的发展趋势 直观的判断,PyFlink Python UDF 的功能也可以如上图一样能够迅速从幼苗变成…

Node.js从零开发Web Server博客项目笔记

代码运行流程 首先开启服务器,在npm run dev的时候运行了bin目录下的www.js文件,启动http服务 当前端进行访问的时候,经过app.js文件 App.js是整个项目的入口文件,首先判断这个用户在http的header头中带了那些验证的信息&#…

如何度过二十多岁这段又穷又迷茫的岁月?

我们在后台常常会收到读者的留言我马上毕业了,但是现在很迷茫,不知道学校里学的,能不能真正的适应工作...我工作两三年,还是不知道怎么规划自己的技术成长路线,不知道该学什么来提升自己的竞争力...人生需要长线的经营…

Docker-compose 安装Minio 最新版本

文章目录一、环境准备1.安装docker-compose2. 新版本尝鲜3. 镜像下载二、单机编排2.1. 创建docker-compose.yaml2.2. 运行三、集群编排3.1. 下载docker-compose.yaml3.2. nginx.conf3.3.运行一、环境准备 1.安装docker-compose https://gblfy.blog.csdn.net/article/details/…

神龙架构没那么难理解—图解世界领先的阿里云神龙架构(一)缘起

1 概述 1.1 神龙架构的特点 阿里云官方文档对于神龙架构的描述如下: 保留了普通云服务器的资源弹性,并因嵌套虚拟化技术让弹性裸金属服务器保留了物理机的体验。 1.2 理解上的难点 同时拥有云服务器的资源弹性和保留了物理机体验的特点容易让用户在…

react native笔记-个人记录-初始化工程遇到的问题

使用Expo工具 在mac上安装expo,如果是权限问题可以参考以下解决方法 https://blog.csdn.net/testcs_dn/article/details/78869419 https://jingyan.baidu.com/article/9c69d48ff88b3813c9024e9d.html 这是第二条链接的说明:对于Mac OS X 10.11 El Capi…

神龙架构没那么难理解—图解世界领先的阿里云神龙架构(二)神龙出世

3 神龙出世 3.1 继续说我们的搬砖问题 第2章中指出只要采用虚拟化和弹性计算,就代表100个劳动力必须选择1个管理人员,实际上只能有99个劳动力进行搬砖。而神龙想做到的目标就是既然100个工人搬砖,就要全部搬砖,但同时也需要有手段…

中科院战略咨询院与戴尔发布《产业数字化转型:战略与实践》研究报告

中国北京– 2020年7月10日,中国科学院科技战略咨询研究院与戴尔科技集团联合发布《产业数字化转型:战略与实践》研究报告,总结当前产业数字化转型发展现状及主要问题,为促进中国产业数字化转型提出一系列战略和政策建议。 报告构…