监视 CRI-O

安装 Instana 代理后, CRI-O 传感器将自动部署并安装。

简介

Instana 会自动发现和监视 CRI-O 容器,以便为您提供有关每个已发现容器内运行的元数据(标签)、指标以及任何支持的技术的实时洞察。

在监视每个容器的运行状况并接收任何问题的警报的同时,还可以启用服务发现以利用所有容器信息。

支持信息

为确保 CRI-O 传感器与您的当前配置兼容,请查阅以下支持信息部分:

支持的版本及支持政策

下表列出了最新支持的版本及支持政策:

技术 支持策略 最新技术版本 最新的受支持版本
CRI-O 45 天 1.36.1 1.36.1

有关支持政策的更多信息,请参阅《 传感器支持策略》。

先决条件

若要监控 CRI‑O,请确保满足以下版本要求:

  • Instana 代理: 1.2.19 或更高版本
  • CRI‑O 传感器: 1.0.15 或更高版本

配置 CRI-O 监控

该代理原生支持监控 CRI-O ,配置为可选。

配置轮询频率

注意:Instana、 CRI-O sensor 以及 1.0.16 及更高版本支持配置轮询速率,以减少数据摄入量。 此功能在自托管的 Instana 后端 311 及更高版本中受支持。

您可以通过在 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 指标的流程:

  1. 识别 cgroup 目录路径:代理会根据操作系统进程识别 cgroup 版本( v1 或 v2 )以及相应的 cgroup 目录路径:

    • cgroup v2:/proc/1/root/sys/fs/cgroup 以及 cgroupPath
    • cgroup v1:/proc/1/root/sys/fs/cgroup/cpu 以及 cgroupPath
  2. 解析 cgroup( v2 和 v1 )目录中的 CPU 统计信息:解析器会从相应的 cgroup 目录路径中读取 CPU 文件。

    • 对于 cgroup v2 目录:

      下表列出了从 CPU 对象中的 文件 cpu.stat 中获取的用法和限流指标:

      度量 描述 v2
      使用情况度量 CPU 总使用时间(单位:纳秒) total =usage_usec * 1000 cpu.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_periods cpu.stat 文件
      限速周期数 throttledPeriods =nr_throttled cpu.stat 文件
      调速时间 throttledTime =throttled_usec * 1000(单位:纳秒) cpu.stat 文件
      注意: 解析时必须同时具备 system_usec user_usec 和。 如果其中任何一项不可用,则相应的 CPU 时间将设置为 0.
    • 对于 cgroup v1 目录:

      下表列出了 CPU 对象中 cgroup v1 的使用情况和限流指标:

      度量 描述 v1
      使用情况度量 CPU 总使用时间(单位:纳秒) total cpuacct.usage 文件
      按 CPU 使用率 percpu 从文件中cpuacct.usage_percpu 读取一组值
      用户 CPU 时间 user =user * 1000000 (纳秒) cpuacct.stat 文件
      系统 CPU 时间 kernel =system * 1000000 (纳秒) cpuacct.stat 文件
      限流指标 周期数 periods =nr_periods cpu.stat 文件
      限速周期数 throttledPeriods =nr_throttled cpu.stat 文件
      调速时间 throttledTime =throttled_time cpu.stat 文件
  3. 更新和返回 CPU 指标:

    下表详细列出了 CPU 指标与其对应源对象的映射关系:

    CPU 度量值 源对象
    CPU 使用率指标 cpu.usage 对象
    cpuTotalUsageNanoseconds cpu.usage.total
    cpuSystemUsageNanoseconds cpu.usage.kernel
    cpuUserUsageNanoseconds cpu.usage.user
    cpuTotalUsage cpuTotalUsageNanoseconds delta(容器在某个时间窗口内的总CPU使用时间) /system delta (系统可用总CPU时间)
    cpuUserUsage cpuUserUsageNanoseconds (容器在用户模式下的CPU使用时间(在指定时间窗口内)) /system delta (系统可用总CPU时间)
    cpuSystemUsage cpuSystemUsageNanoseconds delta(容器在某个时间窗口内以系统模式或内核模式运行的CPU使用时间) / (system delta (系统可用CPU总时间)
    限流指标 cpu.throttling 对象
    throttlingCount cpu.throttling.throttledPeriods
    throttlingTime cpu.throttling.throttledTime
  4. 在后端通过 Instana 用户界面显示CPU指标:

    下表总结了在 Instana 用户界面中显示的CPU指标:

    CPU 度量值 描述 源值
    Total (cpu.total_usage) CPU 总使用率 cpuTotalUsage
    Kernel (cpu.system_usage) 系统 CPU 使用率 cpuSystemUsage
    User (cpu.user_usage) 用户 CPU 使用率 cpuUserUsage
    Throttling Count (cpu.throttling_count) 限速周期数 throttlingCount
    Throttling Time (cpu.throttling_time) 调速时间 throttlingTime

收集内存指标

CRI-O 传感器负责收集指标,并将 cgroup 内存解析任务分配给代理。 内存解析器从相应的 cgroup 目录路径中读取内存文件。 解析完成后, CRI-O 传感器将返回一个已填充内存指标的内存对象。

以下步骤概述了在 CRI-O 中收集和解析内存指标的过程:

  1. 识别 cgroup 目录路径:代理会根据操作系统进程识别 cgroup 版本( v1 或 v2 )以及相应的 cgroup 目录路径:

    • cgroup v2:/proc/1/root/sys/fs/cgroup 以及 cgroupPath
    • cgroup v1:/proc/1/root/sys/fs/cgroup/memory 以及 cgroupPath
  2. 解析 cgroup 目录的内存统计信息:解析器会从相应的 cgroup 目录路径中读取内存文件。

    • 对于 cgroup v2 目录:

      下表详细列出了内存指标与其对应源文件的映射关系:

      内存度量值 源文件
      基础内存 基础内存文件
      usage memory.stat (file +anon)
      limit memory.max
      max memory.peak
      交换内存 交换文件
      usage memory.swap.current
      limit memory.swap.max
      max memory.swap.peak
      原始内存字段 (memory.raw) memory.stat 文件
      activeAnon active_anon
      activeFile active_file
      inactiveAnon inactive_anon
      inactiveFile inactive_file
      totalCache total_cache
      totalRss total_rss
      内存字段 (memory) memory.stat 文件
      cache file
      rss anon
      注: 为确保与 v1 兼容,合并的交换内存按基础内存加交换内存计算: swap.usage = 基础内存使用量 + swap.usage。 swap.limit = 基础内存限制 + swap.limit swap.max = 0
    • 对于 cgroup v1 目录:

      下表详细列出了内存指标与其对应源文件的映射关系:

      内存度量值 源文件
      基础内存 基础内存文件
      usage memory.usage_in_bytes
      max memory.max_usage_in_bytes
      limit memory.limit_in_bytes
      failcnt memory.failcnt
      交换内存 交换文件
      usage memory.memsw.usage_in_bytes
      max memory.memsw.max_usage_in_bytes
      limit memory.memsw.limit_in_bytes
      failcnt memory.memsw.failcnt
      内核内存 Kmemory 文件
      usage memory.kmem.usage_in_bytes
      max memory.kmem.max_usage_in_bytes
      limit memory.kmem.limit_in_bytes
      failcnt memory.kmem.failcnt
      内核 TCP 内存 Kmemory TCP 文件
      usage memory.kmem.tcp.usage_in_bytes
      max memory.kmem.tcp.max_usage_in_bytes
      limit memory.kmem.tcp.limit_in_bytes
      failcnt memory.kmem.tcp.failcnt
      原始内存字段 与 v2 相关的领域,来自memory.stat
      内存字段 (memory) memory.stat 文件
      cache cache
      rss total_rss
  3. 更新和释放内存指标:

    下表将内存指标与其对应的源对象进行了映射:

    内存指标 源对象
    内存使用指标 memory.usage 对象
    usage memory.usage.usage
    maxUsage memory.usage.max
    limit memory.usage.limit
    内存原始指标 memory.raw 对象
    activeAnon memory.raw.activeAnon
    activeFile memory.raw.activeFile
    inactiveAnon memory.raw.inactiveAnon
    inactiveFile memory.raw.inactiveFile
    内存度量值 memory 对象
    totalCache memory.cache
    totalRss memory.rss
  4. 在 Instana 用户界面中显示后端内存指标:

    Instana 用户界面中显示了以下内存指标:

    指标 源值
    Memory Total RSS% (memory.total_rss_percent) total_rss/limit
    Active anonymous (memory.active_anon) activeAnon
    Active cache (memory.active_file) activeFile
    Inactive anonymous (memory.inactive_anon) inactiveAnon
    Inactive cache (memory.inactive_file) inactiveFile
    Usage (memory.usage) usage
    RSS (memory.total_rss) totalRss
    Cache (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指标的过程:

  1. 识别 cgroup 目录路径:代理会根据操作系统进程识别 cgroup 版本( v1 或 v2 )以及相应的 cgroup 目录路径:

    • cgroup v2:/proc/1/root/sys/fs/cgroup + cgroupPath
    • cgroup v1:/proc/1/root/sys/fs/cgroup/blkio + cgroupPath
  2. 解析 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 列表)
  3. 将主设备号和从设备号映射到 IO 状态对象中的相应字段。

  4. 向代理返回一个包含两个 IO 状态条目列表的 Blkio 对象,每个条目包含 major、minor、operation 和 values:

    列表 描述
    ioServiceBytesRecursive I/O 服务字节列表
    ioServicedRecursive 支持的 I/O 列表
  5. 汇总列表 IOServiceBytesRecursive 中的 totalReadtotalWrite 值:

    列表
    totalRead ioServiceBytesRecursive.ioStat.value (汇总所有读取值)
    totalWrite ioServiceBytesRecursive.ioStat.value (汇总所有写入值)
  6. 在 Instana 用户界面中显示后端块I/O指标:下表概述了在 Instana 用户界面中显示的块I/O指标:

    指标 源值
    阅读 (blkio.blk_read) totalRead
    写 (blkio.blk_write) totalWrite

健康指标

每个传感器都有一个精心组织的运行状况特征符知识库,可以根据传入指标对这些指示符进行持续评估,并这些指示符可用于根据用户影响触发问题或事件。

内置事件会根据实体的健康状态签名出现异常而触发问题或事件,而自定义事件则会根据特定实体的某个指标的阈值触发问题或事件。

有关 CRI-O 传感器内置事件的更多信息,请参阅内置事件引用

日志小工具

CRI-O 传感器不原生支持日志收集。 Instana 建议您按照《 收集 Kubernetes 和 Red Hat OpenShift 日志 》中的说明,部署 OpenTelemetry 收集器,以便从 CRI-O 容器中收集日志。 若要将日志与特定的 CRI-O 容器相关联,请按照链接中的说明添加该 container.runtime 属性。