监视 CRI-O
安装 Instana 代理后, CRI-O 传感器将自动部署并安装。
简介
支持信息
为确保 CRI-O 传感器与您的当前配置兼容,请查阅以下支持信息部分:
支持的版本及支持政策
先决条件
若要监控 CRI‑O,请确保满足以下版本要求:
- Instana 代理: 1.2.19 或更高版本
- CRI‑O 传感器: 1.0.15 或更高版本
配置 CRI-O 监控
该代理原生支持监控 CRI-O ,配置为可选。
配置轮询频率
您可以通过在 configuration.yaml 代理配置文件中使用 poll_rate 该参数,配置 Instana 轮询 CRI-O 以收集数据和指标的频率,如下例所示:
com.instana.plugin.crio:
poll_rate: 1 # values are in seconds. Default value is 1 second.
指标收集
要查看容器的 CPU 和内存使用情况概览,请在基础设施地图上启用 “指标概览 ”选项。 还可以使用动态焦点功能部件在容器上下文中识别和隔离基础结构的某些部分。
缺省情况下,每 10 秒收集一次 CRI-O 指标。 可以在代理程序配置文件 <agent_install_dir>/etc/instana/configuration.yml 中配置此时间间隔:
com.instana.plugin.crio:
stats:
interval: 10
在 CRI-O 容器仪表盘上,会显示该容器的配置和性能指标。
暂停容器
暂停容器是用于保存 pod 的网络名称空间的容器。 Kubernetes 创建暂停容器以获取各自 pod 的 IP 地址,并为加入该 pod 的所有其他容器设置网络名称空间。
由于以下原因,缺省情况下会将 Infra(暂停)容器排除在基础结构监视之外:
- 如果包含容器,那么环境中受监视的容器数将增加一倍。 排除可以降低 Instana 监视成本。
- 监视暂停容器不会带来有关基础结构级别的大量信息,因为它们充当侧柜网络帮助程序容器。
配置数据
| 配置 | 描述 |
|---|---|
| 标识 | 容器 ID |
| 名称 | 容器名称 |
| 图像 | CRI-O 图片名称 |
| IP | 容器的 IP 地址 |
| 创建时间 | 容器创建时间戳 |
| CRI-O 版本 | CRI-O 的运行时版本号 |
绩效指标
要收集性能指标,请运行该 runc 命令。
下表总结了 CPU 和内存使用情况的指标:
| 指标 | 描述 | 数据点 |
|---|---|---|
| CPU 总百分比 | CPU 使用率的总百分比 | 对象cpu.usage 中返回的键总数 |
| 内存使用率 | 内存总使用率 | 对象memory.raw 中返回的用法键 |
| 内存使用率百分比 | 总内存使用率(百分比) | 根据 和memory.usage 对象memory.total 计算得出 |
收集 CPU 指标
CRI-O 传感器负责收集指标,并将 cgroup CPU 解析任务分配给代理。 解析器从相应的 cgroup 目录路径中读取 CPU 统计文件。
解析完成后, CRI-O 传感器将返回一个已填充 CPU 指标的 CPU 对象。
以下步骤概述了在 CRI-O 中收集和解析 CPU 指标的流程:
识别 cgroup 目录路径:代理会根据操作系统进程识别 cgroup 版本( v1 或 v2 )以及相应的 cgroup 目录路径:
- cgroup v2:
/proc/1/root/sys/fs/cgroup以及cgroupPath - cgroup v1:
/proc/1/root/sys/fs/cgroup/cpu以及cgroupPath
- cgroup v2:
解析 cgroup( v2 和 v1 )目录中的 CPU 统计信息:解析器会从相应的 cgroup 目录路径中读取 CPU 文件。
对于 cgroup v2 目录:
下表列出了从 CPU 对象中的 文件
cpu.stat中获取的用法和限流指标:度量 描述 v2 源 使用情况度量 CPU 总使用时间(单位:纳秒) total=usage_usec* 1000cpu.stat文件按 CPU 使用率 percpu= 0(cgroup v2 无法直接提供按 CPU 核计算的使用情况)cpu.stat文件用户 CPU 时间 user=user_usec* 1000(单位:纳秒)请参阅以下说明cpu.stat文件系统 CPU 时间 kernel=system_usec* 1000(单位:纳秒)请参阅以下说明cpu.stat文件限流指标 周期数 periods=nr_periodscpu.stat文件限速周期数 throttledPeriods=nr_throttledcpu.stat文件调速时间 throttledTime=throttled_usec* 1000(单位:纳秒)cpu.stat文件注意: 解析时必须同时具备system_usecuser_usec和。 如果其中任何一项不可用,则相应的 CPU 时间将设置为0.对于 cgroup v1 目录:
下表列出了 CPU 对象中 cgroup v1 的使用情况和限流指标:
度量 描述 v1 源 使用情况度量 CPU 总使用时间(单位:纳秒) totalcpuacct.usage文件按 CPU 使用率 percpu从文件中 cpuacct.usage_percpu读取一组值用户 CPU 时间 user=user* 1000000 (纳秒)cpuacct.stat文件系统 CPU 时间 kernel=system* 1000000 (纳秒)cpuacct.stat文件限流指标 周期数 periods=nr_periodscpu.stat文件限速周期数 throttledPeriods=nr_throttledcpu.stat文件调速时间 throttledTime=throttled_timecpu.stat文件
更新和返回 CPU 指标:
下表详细列出了 CPU 指标与其对应源对象的映射关系:
CPU 度量值 源对象 CPU 使用率指标 cpu.usage对象cpuTotalUsageNanosecondscpu.usage.totalcpuSystemUsageNanosecondscpu.usage.kernelcpuUserUsageNanosecondscpu.usage.usercpuTotalUsagecpuTotalUsageNanosecondsdelta(容器在某个时间窗口内的总CPU使用时间) /system delta(系统可用总CPU时间)cpuUserUsagecpuUserUsageNanoseconds(容器在用户模式下的CPU使用时间(在指定时间窗口内)) /system delta(系统可用总CPU时间)cpuSystemUsagecpuSystemUsageNanosecondsdelta(容器在某个时间窗口内以系统模式或内核模式运行的CPU使用时间) / (system delta(系统可用CPU总时间)限流指标 cpu.throttling对象throttlingCountcpu.throttling.throttledPeriodsthrottlingTimecpu.throttling.throttledTime在后端通过 Instana 用户界面显示CPU指标:
下表总结了在 Instana 用户界面中显示的CPU指标:
CPU 度量值 描述 源值 Total(cpu.total_usage)CPU 总使用率 cpuTotalUsageKernel(cpu.system_usage)系统 CPU 使用率 cpuSystemUsageUser(cpu.user_usage)用户 CPU 使用率 cpuUserUsageThrottling Count(cpu.throttling_count)限速周期数 throttlingCountThrottling Time(cpu.throttling_time)调速时间 throttlingTime
收集内存指标
CRI-O 传感器负责收集指标,并将 cgroup 内存解析任务分配给代理。 内存解析器从相应的 cgroup 目录路径中读取内存文件。 解析完成后, CRI-O 传感器将返回一个已填充内存指标的内存对象。
以下步骤概述了在 CRI-O 中收集和解析内存指标的过程:
识别 cgroup 目录路径:代理会根据操作系统进程识别 cgroup 版本( v1 或 v2 )以及相应的 cgroup 目录路径:
- cgroup v2:
/proc/1/root/sys/fs/cgroup以及cgroupPath - cgroup v1:
/proc/1/root/sys/fs/cgroup/memory以及cgroupPath
- cgroup v2:
解析 cgroup 目录的内存统计信息:解析器会从相应的 cgroup 目录路径中读取内存文件。
对于 cgroup v2 目录:
下表详细列出了内存指标与其对应源文件的映射关系:
内存度量值 源文件 基础内存 基础内存文件 usagememory.stat(file+anon)limitmemory.maxmaxmemory.peak交换内存 交换文件 usagememory.swap.currentlimitmemory.swap.maxmaxmemory.swap.peak原始内存字段 ( memory.raw)memory.stat文件activeAnonactive_anonactiveFileactive_fileinactiveAnoninactive_anoninactiveFileinactive_filetotalCachetotal_cachetotalRsstotal_rss内存字段 ( memory)memory.stat文件cachefilerssanon注: 为确保与 v1 兼容,合并的交换内存按基础内存加交换内存计算: swap.usage = 基础内存使用量 + swap.usage。 swap.limit = 基础内存限制 + swap.limit swap.max = 0对于 cgroup v1 目录:
下表详细列出了内存指标与其对应源文件的映射关系:
内存度量值 源文件 基础内存 基础内存文件 usagememory.usage_in_bytesmaxmemory.max_usage_in_byteslimitmemory.limit_in_bytesfailcntmemory.failcnt交换内存 交换文件 usagememory.memsw.usage_in_bytesmaxmemory.memsw.max_usage_in_byteslimitmemory.memsw.limit_in_bytesfailcntmemory.memsw.failcnt内核内存 Kmemory 文件 usagememory.kmem.usage_in_bytesmaxmemory.kmem.max_usage_in_byteslimitmemory.kmem.limit_in_bytesfailcntmemory.kmem.failcnt内核 TCP 内存 Kmemory TCP 文件 usagememory.kmem.tcp.usage_in_bytesmaxmemory.kmem.tcp.max_usage_in_byteslimitmemory.kmem.tcp.limit_in_bytesfailcntmemory.kmem.tcp.failcnt原始内存字段 与 v2 相关的领域,来自 memory.stat内存字段 ( memory)memory.stat文件cachecachersstotal_rss
更新和释放内存指标:
下表将内存指标与其对应的源对象进行了映射:
内存指标 源对象 内存使用指标 memory.usage对象usagememory.usage.usagemaxUsagememory.usage.maxlimitmemory.usage.limit内存原始指标 memory.raw对象activeAnonmemory.raw.activeAnonactiveFilememory.raw.activeFileinactiveAnonmemory.raw.inactiveAnoninactiveFilememory.raw.inactiveFile内存度量值 memory对象totalCachememory.cachetotalRssmemory.rss在 Instana 用户界面中显示后端内存指标:
Instana 用户界面中显示了以下内存指标:
指标 源值 Memory Total RSS%(memory.total_rss_percent)total_rss/limitActive anonymous(memory.active_anon)activeAnonActive cache(memory.active_file)activeFileInactive anonymous(memory.inactive_anon)inactiveAnonInactive cache(memory.inactive_file)inactiveFileUsage(memory.usage)usageRSS(memory.total_rss)totalRssCache(memory.total_cache)totalCache
收集块级 I/O 指标
CRI-O 传感器负责收集指标,并将 cgroup blk-io 的解析任务分配给代理。 Block IO 解析器会从相应的 cgroup 目录路径中读取 blk-io 统计文件。 解析完成后, CRI-O 传感器将返回一个已填充 I/O 统计数据的 Blkio 对象。
以下步骤概述了在 CRI-O 中收集和解析块I/O指标的过程:
识别 cgroup 目录路径:代理会根据操作系统进程识别 cgroup 版本( v1 或 v2 )以及相应的 cgroup 目录路径:
- cgroup v2:
/proc/1/root/sys/fs/cgroup+cgroupPath - cgroup v1:
/proc/1/root/sys/fs/cgroup/blkio+cgroupPath
- cgroup v2:
解析 cgroup 目录的块级 I/O 统计信息:解析器从相应的 cgroup 目录路径中读取块级 I/O 文件。
对于 cgroup v2 目录:
读取
io.stat文件并返回两个包含 I/O 统计条目的列表ioServiceBytesRecursive列表:I/O 服务字节列表ioServicedRecursive列表:I/O 服务列表
将
io.stat文件中的原始操作映射到规范操作:rbytes/rios: 阅读wbytes/wios: 写
注: 该操作rbytes/wbytes将带有值的 IOStat 条目添加到列表IoServiceBytesRecursive中。 该操作rios/wios将带有值的 IOStat 条目添加到列表IoServicedRecursive中。对于 cgroup v1 目录:
- 解析该
blkio.io_service_bytes文件,并直接设置服务字节的 I/O 统计信息。(ioServiceBytesRecursive列表) - 解析该
blkio.io_serviced文件,并直接设置相关 I/O 统计信息。(ioServicedRecursive列表)
- 解析该
将主设备号和从设备号映射到 IO 状态对象中的相应字段。
向代理返回一个包含两个 IO 状态条目列表的 Blkio 对象,每个条目包含 major、minor、operation 和 values:
列表 描述 ioServiceBytesRecursiveI/O 服务字节列表 ioServicedRecursive支持的 I/O 列表 汇总列表
IOServiceBytesRecursive中的totalRead和totalWrite值:列表 源 totalReadioServiceBytesRecursive.ioStat.value(汇总所有读取值)totalWriteioServiceBytesRecursive.ioStat.value(汇总所有写入值)在 Instana 用户界面中显示后端块I/O指标:下表概述了在 Instana 用户界面中显示的块I/O指标:
指标 源值 阅读 ( blkio.blk_read)totalRead写 ( blkio.blk_write)totalWrite
健康指标
日志小工具
CRI-O 传感器不原生支持日志收集。 Instana 建议您按照《 收集 Kubernetes 和 Red Hat OpenShift 日志 》中的说明,部署 OpenTelemetry 收集器,以便从 CRI-O 容器中收集日志。 若要将日志与特定的 CRI-O 容器相关联,请按照链接中的说明添加该 container.runtime 属性。