菜单
通用可用 (GA) 开源

discovery.process

discovery.process 组件用于发现本地 Linux 操作系统上运行的进程。

注意

要使用 discovery.process 组件,您必须以 root 用户身份并在主机 PID 命名空间内运行 Alloy。

用法

alloy
discovery.process "<LABEL>" {

}

参数

您可以将以下参数与 discovery.process 组件一起使用

名称类型描述默认值必需
joinlist(map(string))根据 __container_id__ 标签将外部目标加入到发现的进程目标。
refresh_intervalduration同步目标的频率。“60s”

目标加入

如果您指定了 joindiscovery.process 将根据 __container_id__ 标签连接发现的进程。

例如,如果 join 指定如下

json
[
  {
    "pod": "pod-1",
    "__container_id__": "container-1"
  },
  {
    "pod": "pod-2",
    "__container_id__": "container-2"
  }
]

发现的进程如下

json
[
  {
    "__process_pid__": "1",
    "__container_id__": "container-1"
  },
  {
    "__process_pid__": "2"
  }
]

结果目标如下

json
[
  {
    "__container_id__": "container-1",
    "__process_pid__": "1",
    "pod": "pod-1"
  },
  {
    "__process_pid__": "2"
  },
  {
    "__container_id__": "container-1",
    "pod": "pod-1"
  },
  {
    "__container_id__": "container-2",
    "pod": "pod-2"
  }
]

您可以将以下块与 discovery.process 组件一起使用

描述必需
discover_config配置要发现的进程元数据。

discover_config

discover_config 块描述了要发现哪些进程元数据。

支持以下参数

名称类型描述默认值必需
exebool启用发现 __meta_process_exe 标签的标志。true
cwdbool启用发现 __meta_process_cwd 标签的标志。true
commandlinebool启用发现 __meta_process_commandline 标签的标志。true
uidbool启用发现 __meta_process_uid: 标签的标志。true
usernamebool启用发现 __meta_process_username: 标签的标志。true
cgroup_pathbool启用发现 __meta_cgroup_path__ 标签的标志。false
container_idbool启用发现 __container_id__ 标签的标志。true

导出字段

导出以下字段,可供其他组件引用

名称类型描述
targetslist(map(string))在本地 Linux 操作系统上发现的进程集合。

每个目标包含以下标签

  • __container_id__: 容器 ID。取自 /proc/<pid>/cgroup。如果进程未在容器中运行,则不设置此标签。
  • __meta_cgroup_path: 进程运行所在的 cgroup 路径。对于 cgroups v1,此标签包含所有控制器路径,以 | 分隔。
  • __meta_process_commandline: 进程命令行。取自 /proc/<pid>/cmdline
  • __meta_process_cwd: 进程当前工作目录。取自 /proc/<pid>/cwd
  • __meta_process_exe: 进程可执行文件路径。取自 /proc/<pid>/exe
  • __meta_process_uid: 进程 UID。取自 /proc/<pid>/status
  • __meta_process_username: 进程用户名。取自 __meta_process_uidos/user/LookupID
  • __process_pid__: 进程 PID。

组件健康状态

只有在配置无效时,discovery.process 才会被报告为不健康。在这种情况下,导出的字段会保留其最后健康的数值。

调试信息

discovery.process 不会暴露任何组件特定的调试信息。

调试指标

discovery.process 不会暴露任何组件特定的调试指标。

示例

在本地主机上发现进程的示例

alloy
discovery.process "all" {
  refresh_interval = "60s"
  discover_config {
    cwd = true
    exe = true
    commandline = true
    username = true
    uid = true
    cgroup_path = true
    container_id = true
  }
}

在本地主机上发现进程并与 discovery.kubernetes 加入的示例

alloy
discovery.kubernetes "pyroscope_kubernetes" {
  selectors {
    field = "spec.nodeName=" + sys.env("HOSTNAME")
    role = "pod"
  }
  role = "pod"
}

discovery.process "all" {
  join = discovery.kubernetes.pyroscope_kubernetes.targets
  refresh_interval = "60s"
  discover_config {
    cwd = true
    exe = true
    commandline = true
    username = true
    uid = true
    container_id = true
  }
}

基于 cgroups 路径在本地主机上发现进程的示例

以下示例配置展示了如何在本地主机上发现 systemd 服务下运行的进程。

alloy
discovery.process "all" {
  refresh_interval = "60s"
  discover_config {
    cwd = true
    exe = true
    commandline = true
    username = true
    uid = true
    cgroup_path = true
    container_id = true
  }
}

discovery.relabel "systemd_services" {
  targets = discovery.process.all.targets
  // Only keep the targets that correspond to systemd services
  rule {
    action = "keep"
    regex = "^.*/([a-zA-Z0-9-_]+).service(?:.*$)"
    source_labels = ["__meta_cgroup_id"]
  }
}

兼容组件

discovery.process 可以接受来自以下组件的参数

discovery.process 导出的数据可被以下组件消费

注意

连接某些组件可能不合理,或者组件可能需要进一步配置才能正常工作。请参考链接文档获取更多详细信息。