k8s的可观测性

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
云拨测,每月3000次拨测额度
简介: k8s的可观测性

概念


“可观测性”这个名词其实是最近几年才从控制理论中借用的舶来概念,不过实际上,计算机科学中关于可观测性的研究内容已经有了很多年的实践积累。通常,人们会把可观测性分解为三个更具体的方向进行研究,分别是:日志收集、链路追踪和聚合度量。


在 2017 年的分布式追踪峰会(2017 Distributed Tracing Summit)结束后,彼得 · 波本(Peter Bourgon)撰写了总结文章《Metrics, Tracing, and Logging》,就系统地阐述了这三者的定义、特征,以及它们之间的关系与差异,受到了业界的广泛认可。


image.png

Request-scopdmetrics

Metrics

Aggregatable

Tracing

Aggregatableevents

Request

e.g.rollups

scoped

Reguest-scoped,

Logging

aggregatableevents

Events

Request-scopedevents

结合k8s可观测性


k8s.png

流量

Keepalel

应用

应用

应用

应用

应用

应用

nGOESs

应用

Kube-proxycontainersantime

Kubelet

eteXschedler

mSnAgeR

oseyes

服务器

服务器

服务器

服务器

服务器


度量(Metrics)


度量的主要目的是监控(Monitoring)和预警(Alert)。比如说,当某些度量指标达到了风险阈值时就触发事件,以便自动处理或者提醒管理员介入。监控数据格式标准化,做关联指标聚合,方便快速定位故障。


基础层:监控主机和底层资源,比如:CPU、内存、网络吞吐、硬盘 I/O、硬盘使用等。通信情况:这里是指主机与主机之间的网络情况。通信是互联网中最重要的基石之一,如果两台主机之间出现如网络延迟时间大、丢包率高这样的网络问题,会导致业务受阻。


中间层:VM 指标监控,指的是 JVM 监控,比如 GC 时间、线程数、FGC/YGC 耗时等信息。当然,其他语言也有其独特的统计指标信息。就是中间件层的监控,比如:Nginx、Redis、ActiveMQ、Kafka、MySQL、Tomcat 的资源消耗。

应用层:HTTP 访问的吞吐量、响应时间、返回码、性能瓶颈,还包括用户端的监控。


统一的监控告警平台:Prometheus+grafana


日志(Logging)


日志的职责是记录离散事件,通过这些记录事后分析出程序的行为,比如曾经调用过什么方法、曾经操作过哪些数据,等等。通常,打印日志被认为是程序中最简单的工作之一,你在调试问题的时候,可能也经历过这样的情景“当初这里记得打点日志就好了”,可见这就是一项举手之劳的任务。


当然,也有一部分系统是利用日志可追溯、结构化的特点,来实现相关功能的,比如我们最常见的 WAL(Write-Ahead Logging)。WAL 就是在操作之前先进行日志写入,再执行操作;如果没有执行操作,那么在下次启动时就可以通过日志中结构化的,有时间标记的信息恢复操作,其中最典型的就是 MySQL 中的 Redo log。


统一的日志数据化:在特定时间发生的事件,被以结构化的形式记录并产生的文本数据。


统一的日志分析:elk或者loki+grafana


链路追踪(Tracing)


在单体系统时代,追踪的范畴基本只局限于栈追踪(Stack Tracing)。比如说,你在调试程序的时候,在 IDE 打个断点,看到的 Call Stack 视图上的内容便是跟踪;在编写代码时,处理异常调用了 Exception::printStackTrace() 方法,它输出的堆栈信息也是追踪。


而在微服务时代,追踪就不只局限于调用栈了,一个外部请求需要内部若干服务的联动响应,这时候完整的调用轨迹就会跨越多个服务,会同时包括服务间的网络传输信息与各个服务内部的调用堆栈信息。因此,分布式系统中的追踪在国内通常被称为“全链路追踪”(后面我就直接称“链路追踪”了),许多资料中也把它叫做是“分布式追踪”(Distributed Tracing)。服务调用链跟踪。这个监控系统应该从对外的 API 开始,然后将后台的实际服务给关联起来,然后再进一步将这个服务的依赖服务关联起来,直到最后一个服务(如 MySQL 或 Redis),这样就可以把整个系统的服务全部都串连起来了。


最近几年,各种链路追踪产品层出不穷,市面上主流的工具,既有像 Datadog 这样的一揽子商业方案,也有像 AWS X-Ray 和 Google Stackdriver Trace 这样的云计算厂商产品,还有像 SkyWalking、Zipkin、Jaeger 这样来自开源社区的优秀产品。

image.png

Monitoring

APPDYNAMICS

APPLicaLonSMAnaD

AppNeta

AmnazonCloudWatch

Thanos

cortex

Prometheus

Aternity

appoptics

CNCFIncubating

CNCFGraduated

CNCFIncubating

bluematador

beats

AzureMonitor

CloudHealth

folcon

checkmk

chronosphere

epsagon

dynatrace

GoogleStackdriver

centreon

DATADOG

catchpolnt

Logicmonitor

kiali

Honeyhadrer

graphite

Leanlx

iciNGA

logz.io

IRONdb

influxdata

Grafang

INSTANA

M

Nagios

Me

.

NewRelic

NETDATA

Nightingale

mackerel

NODESOURCE

OPENMETRICS

NexClipper

opstrace

Overops

SignalFx

听云

SENTRY

replex

StackState

sysdig

StormForge

Sensu

ROOKOUT

trickster

VI

WAVEFRONT

VICTORIA

turbonomic

ZABBIX

Wvmware

weave

weave

VECTOR

WhaTap

scope

byTirberho

cloud

Logging

8

graylog

oqdna

GGLY

elastic

humio

Grafanaloki

LOGIQ

AIIbebaCloud

logstash

fluento

日志易

splunk>

TRINK

sumologic

rzhiyicom

SCALYR

CNCFGraduated

Pandora

sematext

Tracing

PINPOINT

Skywwalking

Lightstop

OpenTelemetry

elasticapm

SOFATracer

JAEGER

OPENTRACING

ZIPKIN

CNCFIncubating

CNCFGraduated



链路追踪+统计指标(Request-scoped metrics)请求级别的统计:在链路追踪的基础上,与相关的统计数据结合,从而得知数据与数据、应用与应用之间的关系。


链路追踪+日志(Request-scoped events)请求级别的事件:这是链路中一个比较常见的组合模式。日志本身是每一条单独存在的,将链路追踪收集到的信息集成在日志中,可以让日志之间具备关联性,使其具有除了事件维度以外的另一个新的维度,上下文信息。

日志+统计指标(Aggregatable events)聚合级别的事件:这是在日志中的比较常见的组合。通过解析这部分具有统计指标的信息,我们可以获取相关的指标数据。


三者结合(Request-scoped,aggregatable events)三者结合可以理解为请求级别+聚合级别的事件,由此就形成了一个丰富的、全局的观测体系。


总结


1.事件日志的职责是记录离散事件,通过这些记录事后分析出程序的行为;


2.追踪的主要目的是排查故障,比如分析调用链的哪一部分、哪个方法出现错误或阻塞,输入输出是否符合预期;


3.度量是指对系统中某一类信息的统计聚合,主要目的是监控和预警,当某些度量指标达到风险阈值时就触发事件,以便自动处理或者提醒管理员介入。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
12月前
|
Prometheus Kubernetes 监控
在Kubernetes中从0打造可观测性
在Kubernetes中从0打造可观测性
|
12月前
|
自然语言处理 运维 Kubernetes
《2021 阿里云可观测技术峰会演讲实录合辑(下)》——二、 基于eBPF的Kubernetes可观测实践【上】
《2021 阿里云可观测技术峰会演讲实录合辑(下)》——二、 基于eBPF的Kubernetes可观测实践【上】
140 0
|
12月前
|
存储 监控 Kubernetes
《2021 阿里云可观测技术峰会演讲实录合辑(下)》——二、 基于eBPF的Kubernetes可观测实践【下】
《2021 阿里云可观测技术峰会演讲实录合辑(下)》——二、 基于eBPF的Kubernetes可观测实践【下】
154 0
|
12月前
|
SQL 运维 Kubernetes
《2021 阿里云可观测技术峰会演讲实录合辑(下)》——二、 基于eBPF的Kubernetes可观测实践——场景实践:基于eBPF的统一交互页面【上】
《2021 阿里云可观测技术峰会演讲实录合辑(下)》——二、 基于eBPF的Kubernetes可观测实践——场景实践:基于eBPF的统一交互页面【上】
151 0
|
12月前
|
开发框架 自然语言处理 Kubernetes
《2021 阿里云可观测技术峰会演讲实录合辑(下)》——二、 基于eBPF的Kubernetes可观测实践——场景实践:基于eBPF的统一交互页面【下】
《2021 阿里云可观测技术峰会演讲实录合辑(下)》——二、 基于eBPF的Kubernetes可观测实践——场景实践:基于eBPF的统一交互页面【下】
118 0
|
Prometheus Kubernetes 监控
最佳实践:Kubernetes 集群中 DNS 故障的可观测性与根因诊断
本文介绍了 CoreDNS 服务器、客户端侧的常见 DNS 异常、故障根因,异常观测方案和故障处理流程,希望对大家的问题诊断有所帮助。DNS 服务对于 Kubernetes 集群是至关重要的,除了观测异常之外,我们在架构设计之初就应充分考虑 DNS 服务的稳定性,采纳一些例如 DNS 本地缓存之类的最佳实践。
最佳实践:Kubernetes 集群中 DNS 故障的可观测性与根因诊断
|
运维 监控 Kubernetes
容器可观测-如何为 K8s 中的所有事件提供可观测能力|学习笔记
快速学习容器可观测-如何为 K8s 中的所有事件提供可观测能力
205 0
容器可观测-如何为 K8s 中的所有事件提供可观测能力|学习笔记
|
JSON 运维 Kubernetes
K8s场景下Logtail组件可观测方案升级-Logtail事件监控发布
SLS针对Logtail本身以及Logtail的管控组件alibaba-log-controller,采用K8s事件的方式,将处理流程中的关键事件透出,从而让用户能够更清楚的感知其中发生的异常。
494 0
K8s场景下Logtail组件可观测方案升级-Logtail事件监控发布
|
存储 自然语言处理 运维
基于 eBPF 的 Kubernetes 可观测实践
阿里云可观测团队构建了 kubernetes 统一监控,无侵入式地提供多语言、应用性能黄金指标,支持多种协议,结合 Kubernetes 管控层与网络系统层监控,提供全栈一体式的可观测体验。通过流量拓扑、链路、资源的关系,可进行关联分析,进一步提升在 Kubernetes 环境下排查问题的效率。
基于 eBPF 的 Kubernetes 可观测实践
|
存储 运维 自然语言处理
深度解析|基于 eBPF 的 Kubernetes 一站式可观测性系统
阿里云 Kubernetes 可观测性是一套针对 Kubernetes 集群开发的一站式可观测性产品。基于 Kubernetes 集群下的指标、应用链路、日志和事件,阿里云 Kubernetes 可观测性旨在为 IT 开发运维人员提供整体的可观测性方案。
深度解析|基于 eBPF 的 Kubernetes 一站式可观测性系统