4.2. Receivers
接收器将数据放入 Collector 中。接收器可以基于推送或拉取 (pull)。通常,接收器接受指定格式的数据,将其转换为内部格式,并将其传递给适用管道中定义的处理器和导出器。默认情况下,不会配置接收器。必须配置一个或多个接收器。接收器支持一个或多个数据源。
目前,红帽构建的 OpenTelemetry 提供了以下正式发行(GA)和技术预览接收器:
4.2.1. OTLP Receiver 复制链接链接已复制到粘贴板!
使用 OpenTelemetry Protocol (OTLP) 的 OTLP Receiver ingests traces, metrics, 和日志。
启用了 OTLP Receiver 的 OpenTelemetry Collector 自定义资源
# ...
config:
receivers:
otlp:
protocols:
grpc:
endpoint: 0.0.0.0:4317
tls:
ca_file: ca.pem
cert_file: cert.pem
key_file: key.pem
client_ca_file: client.pem
reload_interval: 1h
http:
endpoint: 0.0.0.0:4318
tls: {}
service:
pipelines:
traces:
receivers: [otlp]
metrics:
receivers: [otlp]
# ...
- 1
- OTLP gRPC 端点。如果省略,则使用默认的
0.0.0.0:4317。 - 2
- 服务器端 TLS 配置。定义 TLS 证书的路径。如果省略,则禁用 TLS。
- 3
- 服务器验证客户端证书的 TLS 证书的路径。这会将
TLSConfig中的ClientCAs和ClientAuth的值设置为RequireAndVerifyClientCert。如需更多信息,请参阅 Golang TLS 软件包的配置。 - 4
- 指定重新载入证书的时间间隔。如果没有设置值,则证书永远不会重新加载。
reload_interval字段接受包含有效时间单位的字符串,如ns、us、ms、s、m、h。 - 5
- OTLP HTTP 端点。默认值为
0.0.0.0:4318。 - 6
- 服务器端 TLS 配置。如需更多信息,请参阅
grpc协议配置部分。
4.2.2. Jaeger Receiver 复制链接链接已复制到粘贴板!
Jaeger Receiver ingests trace 使用 Jaeger 格式。
启用了 Jaeger Receiver 的 OpenTelemetry Collector 自定义资源
# ...
config:
receivers:
jaeger:
protocols:
grpc:
endpoint: 0.0.0.0:14250
thrift_http:
endpoint: 0.0.0.0:14268
thrift_compact:
endpoint: 0.0.0.0:6831
thrift_binary:
endpoint: 0.0.0.0:6832
tls: {}
service:
pipelines:
traces:
receivers: [jaeger]
# ...
4.2.3. 主机指标接收器 复制链接链接已复制到粘贴板!
OTLP 格式的 Host Metrics Receiver ingests metrics。
启用了 Host Metrics Receiver 的 OpenTelemetry Collector 自定义资源
apiVersion: v1
kind: ServiceAccount
metadata:
name: otel-hostfs-daemonset
namespace: <namespace>
# ...
---
apiVersion: security.openshift.io/v1
kind: SecurityContextConstraints
allowHostDirVolumePlugin: true
allowHostIPC: false
allowHostNetwork: false
allowHostPID: true
allowHostPorts: false
allowPrivilegeEscalation: true
allowPrivilegedContainer: true
allowedCapabilities: null
defaultAddCapabilities:
- SYS_ADMIN
fsGroup:
type: RunAsAny
groups: []
metadata:
name: otel-hostmetrics
readOnlyRootFilesystem: true
runAsUser:
type: RunAsAny
seLinuxContext:
type: RunAsAny
supplementalGroups:
type: RunAsAny
users:
- system:serviceaccount:<namespace>:otel-hostfs-daemonset
volumes:
- configMap
- emptyDir
- hostPath
- projected
# ...
---
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: otel
namespace: <namespace>
spec:
serviceAccount: otel-hostfs-daemonset
mode: daemonset
volumeMounts:
- mountPath: /hostfs
name: host
readOnly: true
volumes:
- hostPath:
path: /
name: host
config:
receivers:
hostmetrics:
collection_interval: 10s
initial_delay: 1s
root_path: /
scrapers:
cpu: {}
memory: {}
disk: {}
service:
pipelines:
metrics:
receivers: [hostmetrics]
# ...
- 1
- 设置主机指标集合的时间间隔。如果没有指定,则默认值为
1m。 - 2
- 为主机指标集合设置初始的时间延迟。如果没有指定,则默认值为
1s。 - 3
- 配置
root_path,以便 Host Metrics Receive 知道 root 文件系统的位置。如果运行多个 Host Metrics Receiver 实例,需要为每个实例设置相同的root_path值。 - 4
- 列出启用的 host metrics scraper。可用的 scraper 为
cpu,disk,load,filesystem,memory,network,paging,processes, 和process。
4.2.4. Kubernetes Objects Receiver 复制链接链接已复制到粘贴板!
Kubernetes Objects Receiver 拉取或监视要从 Kubernetes API 服务器收集的对象。此接收器主要监视 Kubernetes 事件,但可以收集任何类型的 Kubernetes 对象。此接收器会收集整个集群的遥测数据,因此只需要一个接收器实例就可以收集所有数据。
Kubernetes Objects Receiver 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
启用了 Kubernetes Objects Receiver 的 OpenTelemetry Collector 自定义资源
apiVersion: v1
kind: ServiceAccount
metadata:
name: otel-k8sobj
namespace: <namespace>
# ...
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: otel-k8sobj
namespace: <namespace>
rules:
- apiGroups:
- ""
resources:
- events
- pods
verbs:
- get
- list
- watch
- apiGroups:
- "events.k8s.io"
resources:
- events
verbs:
- watch
- list
# ...
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: otel-k8sobj
subjects:
- kind: ServiceAccount
name: otel-k8sobj
namespace: <namespace>
roleRef:
kind: ClusterRole
name: otel-k8sobj
apiGroup: rbac.authorization.k8s.io
# ...
---
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: otel-k8s-obj
namespace: <namespace>
spec:
serviceAccount: otel-k8sobj
mode: deployment
config:
receivers:
k8sobjects:
auth_type: serviceAccount
objects:
- name: pods
mode: pull
interval: 30s
label_selector:
field_selector:
namespaces: [<namespace>,...]
- name: events
mode: watch
exporters:
debug:
service:
pipelines:
logs:
receivers: [k8sobjects]
exporters: [debug]
# ...
4.2.5. kubelet Stats Receiver 复制链接链接已复制到粘贴板!
Kubelet Stats Receiver 从 kubelet 的 API 服务器中提取与节点、Pod、容器和卷相关的指标。然后,这些指标通过 metrics-processing 管道进行额外的分析。
启用了 Kubelet Stats Receiver 的 OpenTelemetry Collector 自定义资源
# ...
config:
receivers:
kubeletstats:
collection_interval: 20s
auth_type: "serviceAccount"
endpoint: "https://${env:K8S_NODE_NAME}:10250"
insecure_skip_verify: true
service:
pipelines:
metrics:
receivers: [kubeletstats]
env:
- name: K8S_NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
# ...
- 1
- 设置
K8S_NODE_NAME以向 API 进行身份验证。
对于用于运行 OpenTelemetry Collector 的服务帐户,Kubelet Stats Receiver 需要额外权限。
服务帐户所需的权限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: otel-collector
rules:
- apiGroups: ['']
resources: ['nodes/stats']
verbs: ['get', 'watch', 'list']
- apiGroups: [""]
resources: ["nodes/proxy"]
verbs: ["get"]
# ...
- 1
- 使用
extra_metadata_labels或request_utilization或limit_utilization指标时所需的权限。
4.2.6. Prometheus Receiver 复制链接链接已复制到粘贴板!
Prometheus Receiver 提取指标端点。
启用了 Prometheus Receiver 的 OpenTelemetry Collector 自定义资源
# ...
config:
receivers:
prometheus:
config:
scrape_configs:
- job_name: 'my-app'
scrape_interval: 5s
static_configs:
- targets: ['my-app.example.svc.cluster.local:8888']
service:
pipelines:
metrics:
receivers: [prometheus]
# ...
4.2.7. OTLP JSON File Receiver 复制链接链接已复制到粘贴板!
OTLP JSON 文件 Receiver 从包含 ProtoJSON 格式的数据的文件中提取管道信息,并符合 OpenTelemetry 协议 规格。接收器会监视指定的目录,以了解创建或修改的文件要处理的更改。
OTLP JSON 文件接收器只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
OpenTelemetry Collector 自定义资源带有启用的 OTLP JSON File Receiver
# ...
config:
otlpjsonfile:
include:
- "/var/log/*.log"
exclude:
- "/var/log/test.log"
# ...
4.2.8. Zipkin Receiver 复制链接链接已复制到粘贴板!
Zipkin Receiver ingests traces 使用 Zipkin v1 和 v2 格式。
启用了 Zipkin Receiver 的 OpenTelemetry Collector 自定义资源
# ...
config:
receivers:
zipkin:
endpoint: 0.0.0.0:9411
tls: {}
service:
pipelines:
traces:
receivers: [zipkin]
# ...
4.2.9. Kafka Receiver 复制链接链接已复制到粘贴板!
Kafka 接收器以 OTLP 格式接收 Kafka 中的 trace、metrics 和日志。
Kafka Receiver 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
启用了 Kafka Receiver 的 OpenTelemetry Collector 自定义资源
# ...
config:
receivers:
kafka:
brokers: ["localhost:9092"]
protocol_version: 2.0.0
topic: otlp_spans
auth:
plain_text:
username: example
password: example
tls:
ca_file: ca.pem
cert_file: cert.pem
key_file: key.pem
insecure: false
server_name_override: kafka.example.corp
service:
pipelines:
traces:
receivers: [kafka]
# ...
4.2.10. Kubernetes Cluster Receiver 复制链接链接已复制到粘贴板!
Kubernetes Cluster Receiver 从 Kubernetes API 服务器收集集群指标和实体事件。它使用 Kubernetes API 接收有关更新的信息。对此接收器的身份验证只支持使用服务账户。
Kubernetes Cluster Receiver 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
启用了 Kubernetes Cluster Receiver 的 OpenTelemetry Collector 自定义资源
# ...
config:
receivers:
k8s_cluster:
distribution: openshift
collection_interval: 10s
exporters:
debug: {}
service:
pipelines:
metrics:
receivers: [k8s_cluster]
exporters: [debug]
logs/entity_events:
receivers: [k8s_cluster]
exporters: [debug]
# ...
此接收器需要配置服务帐户、集群角色的 RBAC 规则,以及将 RBAC 与服务帐户绑定的集群角色绑定。
ServiceAccount 对象
apiVersion: v1
kind: ServiceAccount
metadata:
labels:
app: otelcontribcol
name: otelcontribcol
# ...
ClusterRole 对象的 RBAC 规则
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: otelcontribcol
labels:
app: otelcontribcol
rules:
- apiGroups:
- quota.openshift.io
resources:
- clusterresourcequotas
verbs:
- get
- list
- watch
- apiGroups:
- ""
resources:
- events
- namespaces
- namespaces/status
- nodes
- nodes/spec
- pods
- pods/status
- replicationcontrollers
- replicationcontrollers/status
- resourcequotas
- services
verbs:
- get
- list
- watch
- apiGroups:
- apps
resources:
- daemonsets
- deployments
- replicasets
- statefulsets
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- daemonsets
- deployments
- replicasets
verbs:
- get
- list
- watch
- apiGroups:
- batch
resources:
- jobs
- cronjobs
verbs:
- get
- list
- watch
- apiGroups:
- autoscaling
resources:
- horizontalpodautoscalers
verbs:
- get
- list
- watch
# ...
ClusterRoleBinding 对象
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: otelcontribcol
labels:
app: otelcontribcol
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: otelcontribcol
subjects:
- kind: ServiceAccount
name: otelcontribcol
namespace: default
# ...
4.2.11. OpenCensus Receiver 复制链接链接已复制到粘贴板!
OpenCensus Receiver 与 OpenCensus 项目向后兼容性,以便更轻松地迁移检测代码库。它以 OpenCensus 格式通过 gRPC 或 HTTP 和 JSON 接收指标和追踪。
OpenCensus Receiver 已被弃用,可能在以后的版本中删除。
启用了 OpenCensus Receiver 的 OpenTelemetry Collector 自定义资源
# ...
config:
receivers:
opencensus:
endpoint: 0.0.0.0:9411
tls:
cors_allowed_origins:
- https://*.<example>.com
service:
pipelines:
traces:
receivers: [opencensus]
# ...
4.2.12. Filelog Receiver 复制链接链接已复制到粘贴板!
Filelog Receiver tail 并解析来自文件的日志。
Filelog Receiver 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
带有启用的 Filelog Receiver 的 OpenTelemetry Collector 自定义资源,它 tails 一个文本文件
# ...
config:
receivers:
filelog:
include: [ /simple.log ]
operators:
- type: regex_parser
regex: '^(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) (?P<sev>[A-Z]*) (?P<msg>.*)$'
timestamp:
parse_from: attributes.time
layout: '%Y-%m-%d %H:%M:%S'
severity:
parse_from: attributes.sev
# ...
您可以通过以下两种方式之一从 pod 文件系统收集日志:
- 在与应用程序 pod 一起运行的 sidecar 容器中配置接收器。
- 将接收器部署为主机上具有适当权限访问 Kubernetes 日志的 DaemonSet。
要从应用程序容器收集日志,您可以使用带有 sidecar 注入的接收器。红帽构建的 OpenTelemetry Operator 允许将 OpenTelemetry Collector 作为 sidecar 容器注入应用程序 pod。当应用程序将日志写入容器文件系统中的文件时,这种方法很有用。然后,此接收器可以跟踪日志文件并应用操作器来解析日志。
要在 sidecar 模式中使用此接收器从应用程序容器收集日志,您必须在 OpenTelemetryCollector 自定义资源中配置卷挂载。应用程序容器和 sidecar Collector 必须挂载相同的共享卷,如 emptyDir。在应用的 Pod 规格中定义卷。请参见以下示例:
OpenTelemetry Collector 自定义资源使用在 sidecar 模式中配置的 Filelog Receiver
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: filelog
namespace: otel-logging
spec:
mode: sidecar
volumeMounts:
- name: logs
mountPath: /var/log/app
config:
receivers:
filelog:
include:
- /var/log/app/*.log
operators:
- type: regex_parser
regex: '^(?P<timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) \[(?P<level>\w+)\] (?P<message>.*)$'
timestamp:
parse_from: attributes.timestamp
layout: '%Y-%m-%d %H:%M:%S'
processors: {}
exporters:
debug:
verbosity: detailed
service:
pipelines:
logs:
receivers: [filelog]
processors: []
exporters: [debug]
4.2.13. Journald Receiver 复制链接链接已复制到粘贴板!
Journald Receiver 解析来自 systemd journal 的 journald 事件,并将它们作为日志发送。
Journald Receiver 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
启用了 Journald Receiver 的 OpenTelemetry Collector 自定义资源
apiVersion: v1
kind: Namespace
metadata:
name: otel-journald
labels:
security.openshift.io/scc.podSecurityLabelSync: "false"
pod-security.kubernetes.io/enforce: "privileged"
pod-security.kubernetes.io/audit: "privileged"
pod-security.kubernetes.io/warn: "privileged"
# ...
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: privileged-sa
namespace: otel-journald
# ...
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: otel-journald-binding
roleRef:
apiGroup: rbac.authorization.k8s.io
kind: ClusterRole
name: system:openshift:scc:privileged
subjects:
- kind: ServiceAccount
name: privileged-sa
namespace: otel-journald
# ...
---
apiVersion: opentelemetry.io/v1beta1
kind: OpenTelemetryCollector
metadata:
name: otel-journald-logs
namespace: otel-journald
spec:
mode: daemonset
serviceAccount: privileged-sa
securityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- CHOWN
- DAC_OVERRIDE
- FOWNER
- FSETID
- KILL
- NET_BIND_SERVICE
- SETGID
- SETPCAP
- SETUID
readOnlyRootFilesystem: true
seLinuxOptions:
type: spc_t
seccompProfile:
type: RuntimeDefault
config:
receivers:
journald:
files: /var/log/journal/*/*
priority: info
units:
- kubelet
- crio
- init.scope
- dnsmasq
all: true
retry_on_failure:
enabled: true
initial_interval: 1s
max_interval: 30s
max_elapsed_time: 5m
processors:
exporters:
debug: {}
service:
pipelines:
logs:
receivers: [journald]
exporters: [debug]
volumeMounts:
- name: journal-logs
mountPath: /var/log/journal/
readOnly: true
volumes:
- name: journal-logs
hostPath:
path: /var/log/journal
tolerations:
- key: node-role.kubernetes.io/master
operator: Exists
effect: NoSchedule
# ...
- 1
- 按消息优先级或优先级范围过滤输出。默认值为
info。 - 2
- 列出要从中读取条目的单元。如果为空,则从所有单元读取条目。
- 3
- 包含非常长的日志,以及带有不可打印字符的日志。默认值为
false。 - 4
- 如果设置为
true,则接收器会暂停读取文件,并在遇到下游组件错误时尝试重新发送当前的批处理日志。默认值为false。 - 5
- 在第一次失败后进行重现尝试需要等待的时间间隔。默认值为
1s。单位是ms、s、m、h。 - 6
- 重试 backoff 间隔的上限。当达到这个值时,连续重试尝试之间的时间间隔会恒定保持这个值。默认值为
30s。支持的单位是ms、s、m、h。 - 7
- 尝试将日志批处理发送到下游消费者的最大时间间隔,包括重试尝试。达到这个值时,数据将被丢弃。如果设置的值是
0,重试永远不会停止。默认值为5m。支持的单位是ms、s、m、h。
4.2.14. Kubernetes Events Receiver 复制链接链接已复制到粘贴板!
Kubernetes Events Receiver 从 Kubernetes API 服务器收集事件。收集的事件被转换为日志。
Kubernetes Events Receiver 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
Kubernetes Events Receiver 所需的 OpenShift Container Platform 权限
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: otel-collector
labels:
app: otel-collector
rules:
- apiGroups:
- ""
resources:
- events
- namespaces
- namespaces/status
- nodes
- nodes/spec
- pods
- pods/status
- replicationcontrollers
- replicationcontrollers/status
- resourcequotas
- services
verbs:
- get
- list
- watch
- apiGroups:
- apps
resources:
- daemonsets
- deployments
- replicasets
- statefulsets
verbs:
- get
- list
- watch
- apiGroups:
- extensions
resources:
- daemonsets
- deployments
- replicasets
verbs:
- get
- list
- watch
- apiGroups:
- batch
resources:
- jobs
- cronjobs
verbs:
- get
- list
- watch
- apiGroups:
- autoscaling
resources:
- horizontalpodautoscalers
verbs:
- get
- list
- watch
# ...
启用了 Kubernetes Event Receiver 的 OpenTelemetry Collector 自定义资源
# ...
serviceAccount: otel-collector
config:
receivers:
k8s_events:
namespaces: [project1, project2]
service:
pipelines:
logs:
receivers: [k8s_events]
# ...
4.2.15. Prometheus Remote Write Receiver 复制链接链接已复制到粘贴板!
Prometheus Remote Write Receiver 使用 Remote Write 协议从 Prometheus 接收指标,并将其转换为 OpenTelemetry 格式。此接收器只支持 Prometheus Remote Write v2 协议。
Prometheus Remote Write Receiver 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
OpenTelemetry Collector 自定义资源带有启用的 Prometheus Remote Write Receiver
# ...
config:
receivers:
prometheusremotewrite:
endpoint: 0.0.0.0:9090
# ...
service:
pipelines:
metrics:
receivers: [prometheusremotewrite]
# ...
- 1
- 接收器侦听 Prometheus Remote Write 请求的端点。
以下是将此接收器与 Prometheus 搭配使用的先决条件:
- Prometheus 在启用了元数据 WAL 记录功能标记的情况下启动。
- Prometheus Remote Write v2 协议在 Prometheus 远程写入配置中被启用。
- 使用功能标记在 Prometheus 中启用了原生直方图。
- Prometheus 被配置为将经典直方图转换为原生直方图。
有关启用这些 Prometheus 功能的更多信息,请参阅 Prometheus 文档。