监控和日志管理的最佳实践|学习笔记

简介: 快速学习监控和日志管理的最佳实践

开发者学堂课程【云原生实践公开课监控和日志管理的最佳实践】学习笔记,与课程紧密联系,让用户快速学习知识

课程地址:https://developer.aliyun.com/learning/course/698/detail/12272


监控和日志管理的最佳实践


内容介绍:

一、背景

二、监控实践

三、日志实践

四、总结


一、背景

云原生监控和日志管理

云原生可观测性主要由监控与日志两大部分组成,监控系统可以帮助开发者查看系

统的运行状态,而日志系统可以协助问题的排查和诊断。

本课程将根据阿里云容器服务的实践经验,总结最佳实践,便于观众快速切入主

题、应用到具体实践中,增强云原生系统建设以及管理能力。

Kubernetes的监控体系–常用的监控方式

资源监控

CPU、内存、网络等资源类的指标,常以数值、百分比为单位进行统计,是最常见的资源监控方式。

K8s业务监控

Deployment, Pod等K8s资源监控,Apiserver/Scheduler/

Controller-Manager等K8s业务指标监控。

性能监控

应用的内部监控,通常是通过Hook的机制在虚拟机层、字节码执行层隐式回调,或者在应用层显示注入,获取更深层次的监控指标,常用来应用诊断与调优。

安全监控

针对安全进行的一系列监控策略,例如越权管理、安全漏洞扫描等等。

事件监控

Kubernetes 中一种另类的监控方式,紧密贴合Kubernetes的设计理念,补充常规监控方案的缺欠与弊端。


二、监控实践

Prometheus监控K8s的架构

image.png

创建Prometheus监控系统实践

演示创建Prometheus 监控系统过程。

后面以该系统的配置为例讲解最佳实践。

具体过程包括:

1.监控对象开发,透出指标

2.部署Prometheus监控系统,配置Prometheus监控对象

3.通过PromQL查询采集到的指标数据

Prometheus最佳实践–Time Series, Metric, Label,Samples

时间序列:

streams of timestamped values belonging to the same metric and the same set of labeled dimensions.Metric和Label的不同键值对对应一个唯一的时间序列。

Metric Names and Labels:

Every time series is uniquely identified by its metric name and optional key-value pairs called labels.

样本( Samples) :

Samples form the actual time series data.Each sample consists of:

a float64 value

a millisecond-precision(毫秒精度) timestamp

时间序列标记:

{=,.}

时间序列例子:

api_http_requests_total{method="POST", handler="/messages"}

Prometheus最佳实践–监控对象Metric和Label的设计以及透出

最佳实践:不要把label作为指标名字的部分,避免混淆

最佳实践:不要使用label保存高维度的信息(例如用户ID,邮箱等),否则会显著增加保存数据量。每一组的key-value组合对应一个时间序列。https:/lgithub.com/prometheus/client_golang/blob/master/examples/random/main.go

1. 定义指标

var {

//Create a summary to track fictional interservice RPC latencies for three

//distinct services with different latency distributions.These services are

// differentiated via a "service" label.

rpcDurations = prometheus.NewSummaryVec(

prometheus.SummaryOpts{

Name:“rpc_durations_seconds",

Help:“RPC latency distributions.",

Objectives: map[float64]float64{0.5:0.05,0.9:0.01,0.99:0.001},//分位数以及容忍误差

},

[]string{"service"},

2。注册指标func init(){

//Register the summary and the histogram with Prometheus's default registry.

prometheus.MustRegister(rpcDurations)

}

3.更新指标值

//Periodically record some sampke latencies for the three services.

go func(){

for {

v := rand.Float64()**uniformDomain

rpcDurations.WithLabelValues("uniform").Observe(v)

time.Sleep(time.Duration(100*oscillationFactor())

*time.Millisecond)

}

}()

4.HTTP服务对外透出指标

//Expose the registered metrics via HTTP.

http.Handle(" /metrics", promhttp.HandlerFor(

prometheus.DefaultGatherer,

promhttp.HandlerOpts{

//Opt into OpenMetrics to support exemplars.

EnableOpenMetrics: true,

},

))

log.Fatal(http.ListenAndServe(*addr, nil))

Prometheus最佳实践-Kubernetes配置服务发现

https://qithub.com/prometheus/prometheus/blob/release-2.20/documentation/examples/prometheus-kubernetes.yml

  • Node

适用于与主机相关的监控资源,如节点中运行的Kubernetes组件cadvisor状态、节点上运行的容器状态等

  • Service

适用于通过黑盒监控的场景,如对服务的可用性以及服务质量的监控地址可以是K8s Service DNS域名+端口

  • Pod

适用于Pod,并暴露Pod的容器为目标( Target )

  • Ingress

适用于通过黑盒监控的场景,如对服务的可用性以及服务质量的监控.

  • Endpoints

发现 Service后端的Endpoints

Prometheus最佳实践–配置relabel_configs和

metric_relabel_configs

采集生命周期:

服务发现->配置->relabel_configs->采集

(Scrape)->metrics_relabel_configs

relabel_configs在采集之前完成,metrics_relabel_configs在采集之后、保存到存储系统之前完成。

determines the relabeling action to take:

  • replace : Match regex against the concatenated source_labels

. Then, set target_label to

replacement , with match group references( $i1},${2},..) in replacement substituted by their value. fregex does not match, no replacement takes place.

  • keep : Drop targets for which regex does not matc
  • concatenated source_labels .
  • drop : Drop targets for which regex matches the concatenated

source_labels .

  • hashmod : Set target_label to the modulus of a hash of the

concatenated

source_labels .

  • labelmap : Match regex against all label names. Then copy

the values of

the matching labels to label

names given by replacement with match group references($i1},${2} ...) in replacement substituted bytheir value.

  • labeldrop : Match regex against all label names. Any label

that matches

will be removed from the set oflabels.

  • labelkeep : Match regex against all label names.Any label

that does not match will be removed from theset of labels

- job_name: 'kubernetes-state-metrics'

kubernetes_sd_configs:

- role: service ll#服务发现方式是service

scheme: http

tls_config:

ca_file:/var/run/secrets/kubernetes.io/serviceaccount/ca.crt

bearer_token_file: /var/run/secrets/kubernetes.iolserviceaccount/token

relabel_configs:

-source_labels: [_meta_kubernetes_namespace,_meta_kubernetes_service_name,meta_kubernetes_service_port_name]

action: keep ###选择符合{namespace=monitoring;servicename=kube-

-state-metrics;serivceport=http-metrics}的对象

regex: monitoring;kube-state-metrics;http-metrics

最佳实践:对于采集数据量大的情况,为节省存储空间,只采集需要的metrics。

metric_relabel_configs:

- source_labels: [_name__]

action: keep

regex: (i)(apiserver_request_count|apiserver_current_inflight _requests|apiserver _dropped_requests_total)

Prometheus最佳实践–联邦集群

最佳实践:使用Federation的一种场景是-当多个LeafPrometheus同时存在于不同DC/集群,可以通过Federation将数据聚合到Global Prometheus,进行集中的数据处理(例如监控大盘,告警等

- scrape_config:

- job_name: dc_prometheushonor_labels: true

metrics_path: /federateparams:

match[]:

- 'l_name_=~"Njob:.*"}’# Request all job-level time series

static_configs:

- targets:

- dc1-prometheus:9090

- dc2-prometheus:9090

Prometheus最佳实践–水平分片vs 联邦集群

最佳实践:

当监控对象规模太大,单个Prometheus所在主机资源无法承担(表现为经常Prometheus持续OOM),可以水平扩展为多个分片,也就是若干个主机上

Prometheus共同采集,每个Prometheus负责采集集群的子集监控数据。

Prometheus局限性->诞生大规模化场景下的

Thanos/Cortex方案

image.png

Prometheus最佳实践-K8s 监控系统设计原则

1. 资源估算∶根据监控集群的规模、分布、网络、以及未来发展趋势,估算Prometheus需要的磁盘、内存、带宽等资源。

2. 架构设计:合理拆分Prometheus的监控域,设计架构

  • 单集群监控/多集群监控
  • 单地域/跨多地域
  • Prometheus 水平分片/联邦集群·是否使用Prometheus Operator
  • prometheus/AlertManager是否HA架构

3.告警设计:在多级Prometheus架构中,告警能力需要下沉到Leaf Prometheus,这样子可以有效降低告警链路的时延;并对告警时延有完整的阶段分析,计算出系统最差情况下的告警时延;为提升告警可靠性,可以使用多副本AlertManager提升HA高可用性。

4.可视化设计:基于Grafana设计不同业务/资源维度的监控大盘,已经基于大盘的告警,可以非常直观的看到抖动、毛刺、请求错误已以及异常,帮助业务保障、压测等。

5.数据分析∶监控数据是非常宝贵的资源,可以作为AlOps的输入进行算法训练以及预测等高级用法,也是目前非常火热的技术方向。


三、日志实践

Kubernetes中日志的分类

主机内核的日志:

主机内核日志可以协助开发者诊断例如:网络栈异常,驱动异常,文件系统异常,影响节点(内核)稳定的异常。

Runtime的日志:

最常见的运行时是Docker,可以通过Docker的日志排查例如删除Pod Hang等问题。

核心组件的日志:

APIServer日志可以用来审计,Scheduler日志可以诊断调度,etcd日志可以查看存

储状态,Ingress日志可以分析接入层流量。

部署应用的日志:

可以通过应用日志分析查看业务层的状态,诊断异常。

Kubernetes中日志的采集方式

image.png

日志最佳实践–审计日志

审计(Audit)日志功能,审计(Audit )提供了安全相关的时序操作记录(包括时

间、来源、操作结果、发起操作的用户、操作

的资源以及请求/响应的详细信息等),通过审计日志,我们能够非常清晰的知道

K8s集群到底发生了什么事情,包括但不限

于∶

1. 当前/历史上集群发生了哪些变更事件。

2. 这些变更操作者是谁,是系统组件还是用户,是哪个系统组件/用户。

3. 重要变更事件的详细内容是什么,比如修改了POD中的哪个参数。

4. 事件的结果是什么,成功还是失败。

5. 操作用户来自哪里,集群内还是集群外。

阿里云审计日志方案:

https://developer.aliyun.com/article/686982

image.png


四、总结

云原生可观测性是为了更全面、更快速、更准确地发现系统的问题,核心目标是为了提高系统的稳定性,提升系统稳定性不能只依赖可观测性的滞后的运维操作,而是要把怎么减少出现问题并降低影响范围,怎么准确快速定位问题整合起来。

image.png

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
3月前
|
Prometheus 监控 Cloud Native
基于docker搭建监控系统&日志收集
Prometheus 是一款由 SoundCloud 开发的开源监控报警系统及时序数据库(TSDB),支持多维数据模型和灵活查询语言,适用于大规模集群监控。它通过 HTTP 拉取数据,支持服务发现、多种图表展示(如 Grafana),并可结合 Loki 实现日志聚合。本文介绍其架构、部署及与 Docker 集成的监控方案。
406 122
基于docker搭建监控系统&日志收集
|
3月前
|
Prometheus 监控 Java
日志收集和Spring 微服务监控的最佳实践
在微服务架构中,日志记录与监控对系统稳定性、问题排查和性能优化至关重要。本文介绍了在 Spring 微服务中实现高效日志记录与监控的最佳实践,涵盖日志级别选择、结构化日志、集中记录、服务ID跟踪、上下文信息添加、日志轮转,以及使用 Spring Boot Actuator、Micrometer、Prometheus、Grafana、ELK 堆栈等工具进行监控与可视化。通过这些方法,可提升系统的可观测性与运维效率。
385 1
日志收集和Spring 微服务监控的最佳实践
|
3月前
|
负载均衡 监控 安全
5 个 IIS 日志记录最佳实践
IIS日志记录是监控Web服务器性能与安全的关键。本文介绍启用日志、应用池配置、负载均衡、敏感数据防护、日志集中管理及保留策略等五大最佳实践,助力高效分析与合规审计。
287 1
|
3月前
|
存储 缓存 监控
用 C++ 红黑树给公司电脑监控软件的日志快速排序的方法
本文介绍基于C++红黑树算法实现公司监控电脑软件的日志高效管理,利用其自平衡特性提升日志排序、检索与动态更新效率,并结合实际场景提出优化方向,增强系统性能与稳定性。
148 4
|
8月前
|
监控 测试技术 Go
告别传统Log追踪!GOAT如何用HTTP接口重塑代码监控
本文介绍了GOAT(Golang Application Tracing)工具的使用方法,通过一个Echo问答服务实例,详细展示了代码埋点与追踪技术的应用。内容涵盖初始化配置、自动埋点、手动调整埋点、数据监控及清理埋点等核心功能。GOAT适用于灰度发布、功能验证、性能分析、Bug排查和代码重构等场景,助力Go项目质量保障与平稳发布。工具以轻量高效的特点,为开发团队提供数据支持,优化决策流程。
553 89
|
7月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
834 54
|
8月前
|
消息中间件 运维 监控
智能运维,由你定义:SAE自定义日志与监控解决方案
通过引入 Sidecar 容器的技术,SAE 为用户提供了更强大的自定义日志与监控解决方案,帮助用户轻松实现日志采集、监控指标收集等功能。未来,SAE 将会支持 istio 多租场景,帮助用户更高效地部署和管理服务网格。
571 52
|
9月前
|
数据采集 运维 监控
数据采集监控与告警:错误重试、日志分析与自动化运维
本文探讨了数据采集技术从“简单采集”到自动化运维的演进。传统方式因反爬策略和网络波动常导致数据丢失,而引入错误重试、日志分析与自动化告警机制可显著提升系统稳定性与时效性。正方强调健全监控体系的重要性,反方则担忧复杂化带来的成本与安全风险。未来,结合AI与大数据技术,数据采集将向智能化、全自动方向发展,实现动态调整与智能识别反爬策略,降低人工干预需求。附带的Python示例展示了如何通过代理IP、重试策略及日志记录实现高效的数据采集程序。
447 7
数据采集监控与告警:错误重试、日志分析与自动化运维
|
8月前
|
监控 安全 BI
优化 Apache 日志记录的 5 个最佳实践
Apache 日志记录对于维护系统运行状况和网络安全至关重要,其核心包括访问日志与错误日志的管理。通过制定合理的日志策略,如选择合适的日志格式、利用条件日志减少冗余、优化日志级别、使用取证模块提升安全性及实施日志轮换,可有效提高日志可用性并降低系统负担。此外,借助 Eventlog Analyzer 等专业工具,能够实现日志的高效收集、可视化分析与威胁检测,从而精准定位安全隐患、评估服务器性能,并满足合规需求,为强化网络安全提供有力支持。
220 0
优化 Apache 日志记录的 5 个最佳实践