ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

cAdvisor 运行时选项(Runtime Options)完全指南:从容器监控范围到 perf 事件采集的 100+ 启动参数详解

cAdvisor 运行时选项(Runtime Options)完全指南:从容器监控范围到 perf 事件采集的 100+ 启动参数详解 cAdvisor 运行时选项Runtime Options完全指南从容器监控范围到 perf 事件采集的 100 启动参数详解【免费下载链接】cadvisorAnalyzes resource usage and performance characteristics of running containers.项目地址: https://gitcode.com/gh_mirrors/ca/cadvisorcAdvisorContainer Advisor是一款持续分析运行中容器资源使用与性能特征的守护进程其全部行为——监控哪些容器、采集哪些指标、多久采集一次、如何连接容器运行时、把数据推送到哪里——都由启动时的运行时标志runtime flags控制。本文以 docs/runtime_options.md 为主线结合仓库源码逐一解读这些标志的默认值、作用机制与适用场景读完你即可根据自己的监控需求精确编排 cAdvisor 的启动参数覆盖标签过滤、容器发现范围、Housekeeping 节奏、指标开关、perf 事件与 resctrl 采集等完整链路。一、容器标签与环境变量控制 Prometheus 指标上的元数据标签cAdvisor 默认会把容器的 labels 与环境变量转换为 Prometheus 指标上的标签方便在多租户、多应用场景下按业务维度聚合查询。两个标志控制这一行为标志默认值作用--store_container_labelstrue是否把容器 labels 和环境变量转换为每个容器 Prometheus 指标上的标签。设为false后导出的指标只保留容器名container name、第一个别名first alias和镜像名image name--whitelisted_container_labels空逗号分隔的容器 label 白名单只有名单内的 label 才会被转换为 Prometheus 指标标签。必须同时把--store_container_labels设为false才会生效从源码看这两个标志定义在 cmd/cadvisor.govar storeContainerLabels flag.Bool(store_container_labels, true, convert container labels and environment variables into labels on prometheus metrics for each container. If flag set to false, then only metrics exported are container name, first alias, and image name) var whitelistedContainerLabels flag.String(whitelisted_container_labels, , comma separated list of container labels to be converted to labels on prometheus metrics for each container. store_container_labels must be set to false for this to take effect.)实战建议当容器数量庞大、label 数量繁多时全量转换会显著放大指标基数cardinality对 Prometheus 的存储与查询造成压力。此时应关闭全量转换仅保留必要的业务标签./cadvisor \ --store_container_labelsfalse \ --whitelisted_container_labelsapp,team,environment二、容器环境变量元数据白名单--env_metadata_whitelist--env_metadata_whitelist逗号分隔的环境变量键白名单匹配指定前缀的环境变量会被采集并作为容器元数据暴露。该标志定义于 cmd/cadvisor.go目前仅支持 containerd 与 docker 两种运行时var envMetadataWhiteList flag.String(env_metadata_whitelist, , a comma-separated list of environment variable keys matched with specified prefix that needs to be collected for containers, only support containerd and docker runtime for now.)仓库中还保留了更早的、按运行时拆分的旧标志均已标记 DEPRECATED新部署应统一使用--env_metadata_whitelist--docker_env_metadata_whitelistcontainer/docker/factory.go--containerd_env_metadata_whitelistlib/container/containerd/factory.go三、限定监控范围只监控你关心的容器生产环境中 cAdvisor 默认会扫描宿主机上的全部 cgroup这可能带来不必要的开销或噪音。三个标志用来收窄监控范围标志默认值作用--docker_onlyfalse不报告原始 cgroup 指标仅保留根 cgrouproot cgroup--raw_cgroup_prefix_whitelist空逗号分隔的 cgroup 路径前缀白名单即使指定了--docker_only匹配这些前缀的 cgroup 也照常采集--disable_root_cgroup_statsfalse禁用根 cgroup 的统计采集这三个标志定义于 lib/container/raw/factory.go 与 cmd/cadvisor.goDockerOnly flag.Bool(docker_only, false, Only report docker containers in addition to root stats) disableRootCgroupStats flag.Bool(disable_root_cgroup_stats, false, Disable collecting root Cgroup stats) var rawCgroupPrefixWhiteList flag.String(raw_cgroup_prefix_whitelist, , A comma-separated list of cgroup path prefix that needs to be collected even when -docker_only is specified)raw 容器驱动的注释lib/container/raw/factory.go明确了语义设置--docker_onlytrue后非 Docker 容器会被忽略例外只有/以及raw_cgroup_prefix_whitelist白名单内的前缀。典型场景是既要用 Docker 驱动看业务容器、又想保留对特定自定义 cgroup如系统关键服务的观测./cadvisor --docker_onlytrue \ --raw_cgroup_prefix_whitelist/system.slice,/user.slice四、Container Hints向 raw 驱动补充容器元数据Container Hints 是一种把容器附加信息传递给 cAdvisor 的机制让 cAdvisor 能够增强其采集到的统计数据。注意Container Hints 目前只被 raw 容器驱动使用。其 JSON 格式定义见 lib/container/common/container_hints.go。--container_hints/etc/cadvisor/container_hints.json默认路径即/etc/cadvisor/container_hints.json见 lib/container/common/container_hints.go。配置文件结构如下源码中的 struct 定义type ContainerHints struct { AllHosts []containerHint json:all_hosts,omitempty } type containerHint struct { FullName string json:full_path,omitempty NetworkInterface *networkInterface json:network_interface,omitempty Mounts []Mount json:mounts,omitempty } type Mount struct { HostDir string json:host_dir,omitempty ContainerDir string json:container_dir,omitempty } type networkInterface struct { VethHost string json:veth_host,omitempty VethChild string json:veth_child,omitempty }即一个 JSON 数组结构核心字段包括all_hosts容器提示列表full_path容器 cgroup 完整路径network_interfaceveth_host宿主机侧 veth与veth_child容器侧 veth用于在 Docker/LXC 之外手动配置的网卡上采集网络统计mountshost_dir与container_dir构成的主机到容器的挂载映射。典型配置文件示例{ all_hosts: [ { full_path: /kubepods/burstable/podxxx, network_interface: { veth_host: veth12345, veth_child: eth0 }, mounts: [ {host_dir: /data/app, container_dir: /app} ] } ] }加载逻辑在GetContainerHintsFromFilelib/container/common/container_hints.go文件不存在时静默返回空结构不报错存在则解析 JSON。仓库中的测试资源 lib/container/common/test_resources/container_hints.json 以及 lib/container/common/container_hints_test.go 提供了可参考的解析用例。五、CPU 相关负载读取与并行度控制--enable_load_readerfalse --max_procs0--enable_load_reader是否启用 CPU 负载读取器定义于 lib/manager/container.go。源码中该开关与CpuLoadReaderFactory配合使用lib/manager/container.go只有两者同时就绪才会真正创建负载读取器--max_procscAdvisor 可同时使用的最大 CPU 数。小于 1 时取默认值——即机器核心数。实现位于 cmd/cadvisor.go 的setMaxProcs()当maxProcs 1时使用runtime.NumCPU()否则使用指定值最终调用runtime.GOMAXPROCS(numProcs)并校验是否设置成功失败时输出告警日志。if *maxProcs 1 { numProcs runtime.NumCPU() } else { numProcs *maxProcs } runtime.GOMAXPROCS(numProcs)六、调试与日志cAdvisor 原生 glog 两套标志6.1 cAdvisor 原生调试标志--log_backtrace_at # 当日志命中 file:N 时输出堆栈跟踪 --log_cadvisor_usagefalse # 是否记录 cAdvisor 自身容器的资源占用 --versionfalse # 打印 cAdvisor 版本号并退出 --profilingfalse # 通过 Web 界面 host:port/debug/pprof/ 开启性能剖析其中--version的实现cmd/cadvisor.go为if *versionFlag { fmt.Printf(cAdvisor version %s (%s)\n, version.Info[version], version.Info[revision]) os.Exit(0) }--profiling开启后可访问http://host:8080/debug/pprof/查看 goroutine、heap、CPU profile 等 Go 运行时剖析数据用于排查 cAdvisor 自身的内存/CPU 问题。6.2 glog 日志标志cAdvisor 基于 glog/klog 输出日志以下标志在实际排障中非常常用--log_dir # 非空时日志文件写入该目录 --logtostderrfalse # 输出到标准错误而不是文件 --alsologtostderrfalse # 同时输出到标准错误和文件 --stderrthreshold0 # 达到或超过该级别的日志同时输出到 stderr --v0 # V 日志的日志级别 --vmodule # 逗号分隔的 patternN 设置实现按文件过滤日志级别在 cmd/cadvisor.go 中cAdvisor 会调用klog.InitFlags(nil)初始化这些标志并把默认日志级别设为v2。注意--v的数值越大输出越详细可用--v4观察 housekeeping 与容器发现的内部细节。七、Docker 连接参数端点、根目录与 TLS--dockerunix:///var/run/docker.sock # docker endpoint默认同上 --docker_root/var/lib/docker # 已废弃docker 根目录优先从 docker info 读取此值仅为回退fallback --docker-tlsfalse # 使用 TLS 连接 docker --docker-tls-certcert.pem # 与 docker 建立 TLS 连接用的客户端证书 --docker-tls-keykey.pem # 与 docker 建立 TLS 连接用的私钥 --docker-tls-caca.pem # 与 docker 建立 TLS 连接时信任的 CA这些标志定义于 container/docker/factory.govar ArgDockerEndpoint flag.String(docker, unix:///var/run/docker.sock, docker endpoint) var ArgDockerTLS flag.Bool(docker-tls, false, use TLS to connect to docker) var ArgDockerCert flag.String(docker-tls-cert, cert.pem, path to client certificate) var ArgDockerKey flag.String(docker-tls-key, key.pem, path to private key) var ArgDockerCA flag.String(docker-tls-ca, ca.pem, path to trusted CA)--docker_root已标记 DEPRECATED现代 Docker 环境中 cAdvisor 会优先通过docker info接口读取真实的 RootDir见 container/docker/docker.go 的out.RootDir dockerInfo.DockerRootDir该标志仅在无法从 docker info 获取时作为回退使用。当 Docker 守护进程以 TCP 暴露并启用 TLS 时可用--dockertcp://host:2376配合上述 TLS 三件套连接。八、Podman 连接参数--podmanunix:///var/run/podman/podman.sockPodman 端点默认值为 Podman 套接字路径定义于 container/podman/factory.go。Podman 驱动与 Docker 驱动采用类似的工厂模式其余细节可参考 container/podman 目录下的factory.go、handler.go与client.go。九、HousekeepingcAdvisor 的周期性统计节奏Housekeeping 是 cAdvisor 周期性的动作集合在此期间采集容器统计信息。理解 Housekeeping 是调优 cAdvisor 自身开销的关键。9.1 动态 Housekeeping--allow_dynamic_housekeepingtrue动态 Housekeeping 让 cAdvisor 根据容器的活跃程度动态调整采集间隔容器越空闲、采集间隔越长从而降低 cAdvisor 自身资源占用关闭后间隔固定、行为可预测但 cAdvisor 的资源消耗会上升。其机制可以从 lib/manager/container.go 的源码得到印证每次 housekeeping 时会比较最近两条统计若两条完全相同stats[0].StatsEq(stats[1])且当前间隔小于上限就把housekeepingInterval翻倍直到max_housekeeping_interval一旦统计发生变化则立即恢复为基准的--housekeeping_interval// Raise the interval if usage hasnt changed in the last housekeeping. if stats[0].StatsEq(stats[1]) (cd.housekeepingInterval cd.maxHousekeepingInterval) { cd.housekeepingInterval * 2 if cd.housekeepingInterval cd.maxHousekeepingInterval { cd.housekeepingInterval cd.maxHousekeepingInterval } } else if cd.housekeepingInterval ! *HousekeepingInterval { cd.housekeepingInterval *HousekeepingInterval }9.2 Housekeeping 间隔cAdvisor 存在两种 housekeeping全局global与每容器per-container。全局 housekeepingcAdvisor 内只执行一次通常负责发现新容器。当前 cAdvisor 主要通过内核事件发现新容器因此全局 housekeeping 更多是兜底——防止内核事件丢失导致漏发现相关实现见 lib/manager/manager.go 附近的主 housekeeping 线程逻辑每容器 housekeeping对 cAdvisor 跟踪的每个容器各执行一次负责采集容器统计。--global_housekeeping_interval1m0s # 全局 housekeeping 间隔 --housekeeping_interval1s # 每容器 housekeeping 间隔 --max_housekeeping_interval1m0s # 每容器 housekeeping 允许的最大间隔相关标志定义lib/manager/manager.goglobal_housekeeping_interval默认 1 分钟lib/manager/container.gohousekeeping_interval默认 1 秒lib/manager/manager.gomax_housekeeping_interval默认 60 秒、allow_dynamic_housekeeping默认 true。另外仓库还提供两个文档未展开但同属 housekeeping 调优家族的标志lib/manager/container.go--initial_splay_factor与--jitter_factor默认均为 1.0传负值会重置为默认用于在容器 housekeeping 之间加入初始错峰与抖动避免大量容器在同一时刻触发采集造成资源尖峰——批量启动大量容器时建议了解这两个参数。十、HTTP 服务监听地址、端口与鉴权--http_auth_file # Web UI 的 HTTP 认证文件 --http_auth_realmlocalhost # Web UI 的 HTTP 认证域 --http_digest_file # Web UI 的 HTTP Digest 认证文件 --http_digest_realmlocalhost# Web UI 的 HTTP Digest 认证域 --listen_ip # 监听 IP默认监听所有 IP --port8080 # 监听端口 --url_base_prefix/ # 可选为所有资源 URL 增加的前缀适用于反向代理场景源码定义见 cmd/cadvisor.golisten_ip默认空串即全 IP 监听port默认 8080。仓库根目录还提供了认证文件的示例test.htpasswd 与 [test.htdigest]可分别用于--http_auth_fileBasic Auth与--http_digest_fileDigest Auth。--url_base_prefix配合 Nginx/HAProxy 等反向代理子路径部署时使用避免静态资源与 API 路由错位。十一、内存态历史数据保留时长--storage_durationcAdvisor 会把最近的历史数据保存在内存中保留时长由--storage_duration控制--storage_duration2m0s # 数据保留时长源码见 cmd/storagedriver.gostorageDuration flag.Duration(storage_duration, 2*time.Minute, How long to keep data stored (Default: 2min).)注意该参数只控制内存缓存的保留时长默认 2 分钟与外部存储驱动的推送无关调大该值会增加 cAdvisor 内存占用但能支撑更长时间跨度的 API 查询。十二、Machine 信息机器标识与更新间隔--boot_id_file/proc/sys/kernel/random/boot_id # 逗号分隔的 boot-id 候选文件列表取第一个存在的 --machine_id_file/etc/machine-id,/var/lib/dbus/machine-id # 逗号分隔的 machine-id 候选文件列表取第一个存在的 --update_machine_info_interval5m # 机器信息更新间隔--boot_id_file/--machine_id_filecAdvisor 通过读取这些系统文件获取机器的 boot-id 与 machine-id作为机器唯一标识的一部分逗号分隔意味着支持多候选路径按顺序取第一个存在者--update_machine_info_interval机器信息如内存、CPU 拓扑的周期刷新间隔默认 5 分钟定义于 lib/manager/manager.go。十三、Metrics 开关精确控制导出哪些指标cAdvisor 的指标采集可以通过黑白名单两种方式控制--disable_metricsmetrics # 逗号分隔的禁用指标列表 --enable_metricsmetrics # 逗号分隔的启用指标列表一旦设置将覆盖 disable_metrics --prometheus_endpoint/metrics # 暴露 Prometheus 指标的端点 --application_metrics_count_limit100 # 每容器最多存储的应用指标数量 --collector_cert # Collector 证书暴露给端点用于基于证书的认证 --collector_key # Collector 证书对应的私钥 --disable_root_cgroup_statsfalse # 禁用根 cgroup 统计采集可用的指标选项为advtcp, app, cpu, cpuLoad, cpu_topology, cpuset, disk, diskIO, hugetlb, memory, memory_numa, network, oom_event, percpu, perf_event, process, referenced_memory, resctrl, sched, tcp, udp。默认禁用集合为advtcp, cpu_topology, cpuset, hugetlb, memory_numa, process, referenced_memory, resctrl, sched, tcp, udp这与 cmd/cadvisor.go 中的ignoreMetrics集合一一对应NetworkTcpUsageMetrics、NetworkUdpUsageMetrics、NetworkAdvancedTcpUsageMetrics、ProcessSchedulerMetrics、ProcessMetrics、HugetlbUsageMetrics、ReferencedMemoryMetrics、CPUTopologyMetrics、ResctrlMetrics、CPUSetMetrics、MemoryNumaMetrics默认均被忽略。两者的优先级关系在 cmd/cadvisor.go 中有明确实现只要enable_metrics非空就以它为最终采集集合否则用AllMetrics减去ignoreMetricsvar includedMetrics container.MetricSet if len(enableMetrics) 0 { includedMetrics enableMetrics } else { includedMetrics container.AllMetrics.Difference(ignoreMetrics) }实战要点需要 tcp/udp 网络指标如container_network_tcp_usage_total时应显式--enable_metricstcp,udp或从 disable 列表中去掉它们--disable_metrics表示不额外禁用任何指标默认集合之外的都被启用--enable_metrics与--disable_metrics是互斥语义同时设置时 enable 优先--prometheus_endpoint用于自定义 /metrics 路径典型场景是避免与业务应用默认端点冲突--application_metrics_count_limit限制每容器存储的应用级指标条数上限默认 100。十四、存储驱动把指标推送到外部后端cAdvisor 数据始终会在内存中短暂缓存存储驱动控制的是除了本地缓存之外数据还要推送到哪里--storage_driver # 存储驱动空值表示不使用外部存储 # 可选值empty, bigquery, elasticsearch, influxdb, kafka, redis, statsd, stdout --storage_driver_buffer_duration1m0s # 写入缓冲时长到期后作为一个事务批量提交到非内存后端 --storage_driver_dbcadvisor # 数据库名 --storage_driver_hostlocalhost:8086 # 数据库 host:port --storage_driver_passwordroot # 数据库密码 --storage_driver_securefalse # 与数据库通信是否使用安全连接 --storage_driver_tablestats # 表名 --storage_driver_userroot # 数据库用户名源码佐证--storage_driver与--storage_duration定义于 cmd/storagedriver.go其帮助文本中明确说明数据始终先在内存短期缓存此标志控制除本地缓存外还要推送到哪里空值表示无多个值可用逗号分隔连接类参数集中在 lib/storage/common_flags.gostorage_driver_user、storage_driver_password、storage_driver_host、storage_driver_db、storage_driver_table各驱动还有自己的专属扩展标志例如 InfluxDB 的--storage_driver_influxdb_retention_policy见 cmd/internal/storage/influxdb/influxdb.go。这些标志是否被 kubelet 等下游组件引用集中登记在 lib/cadvisorflags/flags.go 中如StorageDriverUser/Password/Host/DB/Table/Secure/BufferDuration并有 lib/cadvisorflags/flags_contract_test.go 契约测试保证标志名始终可解析。各存储驱动的详细部署说明见InfluxDB 接入指南ElasticSearch 接入指南Kafka 接入指南Prometheus 接入指南十五、Perf Events采集 CPU 硬件性能计数器--perf_events_config # 指向 perf 事件配置 JSON 文件的路径空值禁用 perf 事件测量--perf_events_config定义于 cmd/cadvisor.go。启用后cAdvisor 会通过 Linux perf 子系统对 CPU 性能计数器如已退休指令数、缓存未命中数进行采样并以container_perf_*系列指标暴露。15.1 核心 perf 事件的两种暴露形态核心 perf 事件可以通过--disable_metrics/--enable_metrics中的percpu选项控制是按 CPU 暴露还是按事件聚合--disable_metricspercpu核心 perf 事件按聚合形式暴露--disable_metrics核心 perf 事件按每 CPU形式暴露。按 CPU 暴露大量 perf 事件时容易触发系统文件描述符上限而报 too many opened files 错误可通过ulimit -n value调大最大文件描述符数。聚合形式能显著降低数据量同时聚合形式的container_perf_metric_scaling_ratio指标反映某个事件的最小缩放比例用于指示最差的精度。15.2 perf 子系统基础概念multiplexing多路复用以第二代 Intel Xeon 可扩展处理器为例每个超线程提供 4 个计数器。当配置的事件数超过可用计数器数时Linux 会多路复用计数部分事件无法全程被计入。此时系统会提供被计入时长 / 被启用时长信息cAdvisor 暴露的计数器值会自动按此缩放grouping分组当被计入的事件用于派生指标derivative metrics时应以事务方式测量——组内所有事件必须在同一时间段内被计入。注意组内事件数不能超过可用计数器数uncore events由核心之外的 PMUPerformance Monitoring Unit性能监控单元计数的事件PMU性能监控单元。缩放比的计算逻辑可在 perf/collector_libpfm.go 中看到scalingRatio TimeRunning / TimeEnabled且TimeEnabled为 0 时缩放比置 0相关边界用例见 perf/collector_libpfm_test.go。15.3 获取事件配置值config/type推荐使用 perf 工具获取事件的type与config在perf list输出中定位目标事件执行perf stat -I 5000 -vvv -e EVENT_NAME在perf stat输出中找到perf_event_attr段落把其中的config与type字段抄入配置文件。perf stat输出示意------------------------------------------------------------ perf_event_attr: type 18 size 112 config 0x304 sample_type IDENTIFIER read_format TOTAL_TIME_ENABLED|TOTAL_TIME_RUNNING disabled 1 inherit 1 exclude_guest 1 ------------------------------------------------------------对应配置文件{ core: { events: [ event_name ], custom_events: [ { type: 18, config: [ 0x304 ], name: event_name } ] }, uncore: { events: [ event_name ], custom_events: [ { type: 18, config: [ 0x304 ], name: event_name } ] } }15.4 Uncore 事件配置PMU 前缀语义Uncore 事件名须采用PMU_PREFIX/event_name形式其中PMU_PREFIX表示统计会在名称带此前缀的所有 PMU上计数。看一个综合示例{ uncore: { events: [ uncore_imc/cas_count_read, uncore_imc_0/cas_count_write, cas_count_all ], custom_events: [ { config: [ 0x304 ], name: uncore_imc_0/cas_count_write }, { type: 19, config: [ 0x304 ], name: cas_count_all } ] } }逐条解读可对照 perf/collector_libpfm.go 的实现uncore_imc/cas_count_read类型为uncore_imc且 custom_events 中无对应条目因此会由所有Integrated Memory Controller PMU 计数config 取自 libpfm 包的事件编码uncore_imc_0/cas_count_write类型为uncore_imc_0且 custom_events 中有对应条目因此仅由uncore_imc_0PMU 按给定 config 计数cas_count_allcustom_events 条目指定了type字段19因此由 type 为19的 PMU 按给定 config 计数。15.5 按事件名配置libpfm4 支持cAdvisor 也支持直接使用 libpfm4 支持的事件名进行配置。平台支持的事件可通过 libpfm4 附带的pmu.py脚本发现。示例输出$ python pmu.py INSTRUCTIONS 1 u 0 k 1 period 3 freq 4 precise 5 excl 6 mg 7 mh 8 cpu 9 pinned 10 INSTRUCTION_RETIRED 192 e 2 i 3 c 4 t 5 intx 7 intxcp 8 u 0 k 1 period 3 freq 4 excl 6 mg 7 mh 8 cpu 9 pinned 10 UNC_M_CAS_COUNT 4 RD 3 WR 12 e 0 i 1 t 2 period 3 freq 4 excl 6 cpu 9 pinned 10对应的事件配置{ core: { events: [ instructions, instruction_retired ] }, uncore: { events: [ uncore_imc/unc_m_cas_count:rd, uncore_imc/unc_m_cas_count:wr ] } }注意按名称配置时PMU_PREFIX 的语义与按 config 值配置时完全一致。事件名也可带修饰符如unc_m_cas_count:rd表示 read 方向。15.6 Grouping事件分组把事件写成数组的数组即可要求分组测量——组内事件在同一时间段内被计入{ core: { events: [ [instructions, instruction_retired] ] }, uncore: { events: [ [uncore_imc_0/unc_m_cas_count:rd, uncore_imc_0/unc_m_cas_count:wr], [uncore_imc_1/unc_m_cas_count:rd, uncore_imc_1/unc_m_cas_count:wr] ] } }15.7 综合配置示例与语义{ core: { events: [ instructions, instructions_retired ], custom_events: [ { type: 4, config: [ 0x5300c0 ], name: instructions_retired } ] }, uncore: { events: [ uncore_imc/cas_count_read ], custom_events: [ { config: [ 0xc04 ], name: uncore_imc/cas_count_read } ] } }各条目的语义instructions以非分组事件测量使用perf list可列出的人性化名称——这是大多数用户会依赖的接口perf list输出中出现的任何名字都可用instructions_retired以非分组事件测量走高级 API可指定任意 perf 事件部分事件没有名字、无法用纯字符串指定这里的 name 会直接成为指标名的一部分cas_count_read因未设置type字段且前缀为uncore_imc将作为 uncore 非分组事件在所有 Integrated Memory Controller PMU 上计数。15.8 进一步学习参考 Brendan Gregg 的 perf 示例文章Kernel Perf Wiki执行man perf_event_open阅读系统调用文档Linux 内核源码中kernel/events目录下的 perf 子系统实现Intel Uncore Performance Monitoring Reference Manuals。十六、ResctrlIntel RDT 资源控制指标Resctrl 是 Intel Resource Director TechnologyRDT的用户空间接口。cAdvisor 通过创建带cadvisor前缀的自有监控组monitoring groups来获得指标。由于resctrl 文件系统不像 cgroups 那样具有层级结构文档明确建议用户设置--docker_only标志以避免竞态条件和未预期行为--resctrl_interval0 # resctrl 监控组更新间隔零值禁用监控组更新该标志定义于 cmd/cadvisor.go默认值为 0禁用。启用时需配合--enable_metricsresctrlresctrl 默认在 disable 集合中示例./cadvisor \ --docker_onlytrue \ --enable_metricsresctrl \ --resctrl_interval10sResctrl 采集的底层实现在 resctrl/intel 目录manager.go、collector.go、utils.go中仓库还附带tasks_*测试资源resctrl/intel/testing用于验证监控组任务文件的解析。十七、附kubelet 与下游组件的标志兼容性cAdvisor 的这些全局标志以字符串字面量注册在进程全局 flag set 上Kubernetes kubelet 会按名重新注册其中的子集。为消除改名即崩溃的隐患仓库在 lib/cadvisorflags/flags.go 集中登记了这些标志名并配有 lib/cadvisorflags/flags_contract_test.go 契约测试——凡是名单中的名字必须仍然能解析到已注册标志漂移会在本仓库的测试中失败而非在下游消费者中 panic。其中housekeeping_interval是 kubelet 保留的正常标志其余如boot_id_file、machine_id_file、storage_driver_*系列、container_hints等在 kubelet 侧以 deprecated 形式兼容暴露。总结如何组合使用这些运行时选项一份兼顾生产可观测性与自身开销的典型启动命令示例./cadvisor \ --store_container_labelsfalse \ --whitelisted_container_labelsapp,team \ --env_metadata_whitelistAPP_,TEAM_ \ --docker_onlytrue \ --housekeeping_interval5s \ --max_housekeeping_interval30s \ --listen_ip0.0.0.0 \ --port8080 \ --enable_metricscpu,memory,disk,diskIO,network,oom_event,percpu,perf_event \ --perf_events_config/etc/cadvisor/perf_events.json \ --prometheus_endpoint/metrics调优时建议按范围docker_only / raw_cgroup_prefix_whitelist→ 指标enable/disable_metrics→ 节奏housekeeping 系列→ 出口storage_driver 系列四个层次逐步收敛并在 cAdvisor 自身容器的 CPU/内存监控--log_cadvisor_usage、--profiling辅助下验证改动效果。所有标志的完整默认值与语义均可在 docs/runtime_options.md 与上述各源码文件之间交叉验证。【免费下载链接】cadvisorAnalyzes resource usage and performance characteristics of running containers.项目地址: https://gitcode.com/gh_mirrors/ca/cadvisor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表