diff --git a/content/es/docs/kubernetes/collector/components.md b/content/es/docs/kubernetes/collector/components.md new file mode 100644 index 000000000000..79b37eb71406 --- /dev/null +++ b/content/es/docs/kubernetes/collector/components.md @@ -0,0 +1,826 @@ +--- +title: Componentes clave para Kubernetes +linkTitle: Componentes +# prettier-ignore +cSpell:ignore: alertmanagers containerd crio filelog gotime horizontalpodautoscalers hostfs hostmetrics iostream k8sattributes kubelet kubeletstats logtag replicasets replicationcontrollers resourcequotas statefulsets varlibdockercontainers varlogpods asignador paginación +default_lang_commit: 3815d1481fe753df10ea3dc26cbe64dba0230579 +--- + +El [OpenTelemetry Collector](/docs/collector/) admite numerosos receptores y +procesadores diferentes para facilitar la supervisión de Kubernetes. Esta +sección describe los componentes más importantes para recopilar datos de +Kubernetes y mejorarlos. + +Componentes incluidos en esta página: + +- [Procesador de atributos de Kubernetes](#kubernetes-attributes-processor): + agrega metadatos de Kubernetes a la telemetría de la aplicación entrante. +- [Receptor de estadísticas de Kubelet](#kubeletstats-receiver): extrae métricas + de nodos, pods y contenedores del servidor API en un kubelet. +- [Receptor de logs de archivos](#filelog-receiver): recopila logs de Kubernetes + y logs de aplicaciones escritos en stdout/stderr. +- [Receptor de clúster de Kubernetes](#kubernetes-cluster-receiver): recopila + métricas a nivel de clúster y eventos de entidad. +- [Receptor de objetos de Kubernetes](#kubernetes-objects-receiver): recopila + objetos, como eventos, del servidor API de Kubernetes. +- [Receptor Prometheus](#prometheus-receiver): recibe métricas en formato + [Prometheus](https://prometheus.io/). +- [Receptor de métricas del host](#host-metrics-receiver): extrae métricas del + host de nodos de Kubernetes. + +Para los logs, las métricas o los rastros de aplicaciones, recomendamos el +[receptor OTLP](https://github.com/open-telemetry/opentelemetry-collector/tree/main/receiver/otlpreceiver), +pero cualquier receptor que se ajuste a sus datos es adecuado. + +## Procesador de atributos de Kubernetes {#kubernetes-attributes-processor} + +| Patrón de implementación | Utilizable | +| ------------------------ | ---------- | +| DaemonSet (agente) | Sí | +| Deployment (gateway) | Sí | +| Sidecar | No | + +El procesador de atributos de Kubernetes descubre automáticamente los pods de +Kubernetes, extrae sus metadatos y agrega los metadatos extraídos a intervalos, +métricas y logs como atributos de recursos. + +**El procesador de atributos de Kubernetes es uno de los componentes más +importantes para un recopilador que se ejecuta en Kubernetes. Cualquier +recopilador que reciba datos de la aplicación debe usarlo.** Debido a que agrega +contexto de Kubernetes a su telemetría, el procesador de atributos de Kubernetes +le permite correlacionar los rastros, las métricas y los logs de de su +aplicación con su telemetría de Kubernetes, como las métricas de pod y los +rastros. + +El procesador de atributos de Kubernetes utiliza la API de Kubernetes para +descubrir todos los pods que se ejecutan en un clúster y mantiene un registro de +sus direcciones IP, UID de pod y metadatos interesantes. De manera +predeterminada, los datos que pasan por el procesador se asocian a un pod a +través de la dirección IP de la solicitud entrante, pero se pueden configurar +diferentes reglas. Dado que el procesador utiliza la API de Kubernetes, requiere +permisos especiales (consulta el ejemplo a continuación). Si está utilizando el +[gráfico Helm de OpenTelemetry Collector](../../helm/collector/), puede usar el +[ajuste preestablecido `kubernetesAttributes`](../../helm/collector/#kubernetes-attributes-preset) +para comenzar. + +Los siguientes atributos se agregan de forma predeterminada: + +- `k8s.namespace.name` +- `k8s.pod.name` +- `k8s.pod.uid` +- `k8s.pod.start_time` +- `k8s.deployment.name` +- `k8s.node.name` + +El procesador de atributos de Kubernetes también puede establecer atributos de +recursos personalizados para rastreos, métricas y logs mediante las etiquetas y +anotaciones de Kubernetes que haya agregado a sus pods y espacios de nombres. + +```yaml +k8sattributes: + auth_type: 'serviceAccount' + extract: + metadata: # extraído del pod + - k8s.namespace.name + - k8s.pod.name + - k8s.pod.start_time + - k8s.pod.uid + - k8s.deployment.name + - k8s.node.name + annotations: + # Extrae el valor de una anotación del pod con la clave `annotation-one` y lo inserta como un atributo de recurso con la clave `a1` + - tag_name: a1 + key: annotation-one + from: pod + # Extrae el valor de una anotación del namespace con la clave `annotation-two` utilizando una expresión regular y lo inserta como un recurso con la clave `a2` + - tag_name: a2 + key: annotation-two + regex: field=(?P.+) + from: namespace + labels: + # Extrae el valor de una etiqueta del namespace con la clave `label1` y lo inserta como un atributo de recurso con la clave `l1` + - tag_name: l1 + key: label1 + from: namespace + # Extrae el valor de una etiqueta del pod con la clave `label2` utilizando una expresión regular y lo inserta como un atributo de recurso con la clave `l2` + - tag_name: l2 + key: label2 + regex: field=(?P.+) + from: pod + pod_association: # Cómo asociar los datos a un pod (el orden importa) + - sources: # Primero intenta usar el valor del atributo de recurso k8s.pod.ip + - from: resource_attribute + name: k8s.pod.ip + - sources: # Luego intenta usar el valor del atributo de recurso k8s.pod.uid + - from: resource_attribute + name: k8s.pod.uid + - sources: # Si ninguno de esos funciona, usa la conexión de la solicitud para obtener la IP del pod. + - from: connection +``` + +También hay opciones de configuración especiales para cuando el recopilador se +implementa como un DaemonSet de Kubernetes (agente) o como una implementación de +Kubernetes (gateway). Para obtener más detalles, consulta +[Escenarios de implementación](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/k8sattributesprocessor#deployment-scenarios) + +Para conocer los detalles de configuración del procesador de atributos de +Kubernetes, consulta +[Procesador de atributos de Kubernetes](https://github.com/open-telemetry/opentelemetry-collector-contrib/tree/main/processor/k8sattributesprocessor). + +Dado que el procesador usa la API de Kubernetes, necesita el permiso correcto +para funcionar correctamente. Para la mayoría de los casos de uso, debe otorgar +a la cuenta de servicio que ejecuta el recopilador los siguientes permisos a +través de un ClusterRole. + +```yaml +apiVersion: v1 +kind: ServiceAccount +metadata: + name: collector + namespace: +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: otel-collector +rules: + - apiGroups: + - '' + resources: + - 'pods' + - 'namespaces' + verbs: + - 'get' + - 'watch' + - 'list' + - apiGroups: + - 'apps' + resources: + - 'replicasets' + verbs: + - 'get' + - 'list' + - 'watch' + - apiGroups: + - 'extensions' + resources: + - 'replicasets' + verbs: + - 'get' + - 'list' + - 'watch' +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: otel-collector +subjects: + - kind: ServiceAccount + name: collector + namespace: +roleRef: + kind: ClusterRole + name: otel-collector + apiGroup: rbac.authorization.k8s.io +``` + +## Receptor de Kubeletstats {#kubeletstats-receiver} + +| Patrón de implementación | Utilizable | +| ------------------------ | ---------------------------------------------------------------------- | +| DaemonSet (agente) | Preferido | +| Deployment (gateway) | Sí, pero solo recopilará métricas del nodo en el que está implementado | +| Sidecar | No | + +Cada nodo de Kubernetes ejecuta un kubelet que incluye un servidor API. Los +Kubernetes El receptor se conecta a ese kubelet a través del servidor API para +recopilar métricas sobre el nodo y las cargas de trabajo que se ejecutan en el +nodo. + +Existen diferentes métodos de autenticación, pero normalmente una cuenta de +servicio se utiliza. La cuenta de servicio también necesitará los permisos +adecuados para extraer datos de el Kubelet (ver más abajo). Si estás usando el +[Gráfico de timón de OpenTelemetry Collector](../../helm/collector/) puede +utilizar el +[`kubeletMetrics` preset](../../helm/collector/#kubelet-metrics-preset) para +empezar. + +De forma predeterminada, se recopilan métricas para pods y nodos, pero también +se puede configurar el receptor para recopilar las métricas del contenedor y el +volumen. El receptor también permite configurar con qué frecuencia se recopilan +las métricas: + +```yaml +receivers: + kubeletstats: + collection_interval: 10s + auth_type: 'serviceAccount' + endpoint: '${env:K8S_NODE_NAME}:10250' + insecure_skip_verify: true + metric_groups: + - node + - pod + - container +``` + +Para obtener detalles específicos sobre qué métricas se recopilan, consulta +[Métricas predeterminadas](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/kubeletsstatsreceiver/documentation.md). +Para obtener detalles de configuración específicos, consulta +[Receptor de Kubeletstats](https://github.com/open-telemetry/opentelemetry-collector-contrib/blob/main/receiver/kubeletstatsreceiver). + +Dado que el procesador usa la API de Kubernetes, necesitas el permiso correcto +para funcionar correctamente. Para la mayoría de los casos de uso, debes otorgar +a la cuenta de servicio que ejecuta el recopilador los siguientes permisos a +través de un ClusterRole. + +```yaml +--- +apiVersion: v1 +kind: ServiceAccount +metadata: + name: otel-collector +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRole +metadata: + name: otel-collector +rules: + - apiGroups: [''] + resources: ['nodes/stats'] + verbs: ['get', 'watch', 'list'] +--- +apiVersion: rbac.authorization.k8s.io/v1 +kind: ClusterRoleBinding +metadata: + name: otel-collector +roleRef: + apiGroup: rbac.authorization.k8s.io + kind: ClusterRole + name: otel-collector +subjects: + - kind: ServiceAccount + name: otel-collector + namespace: default +``` + +## Receptor de logs de archivos {#filelog-receiver} + +| Patrón de implementación | Utilizable | +| ------------------------ | -------------------------------------------------------------- | +| DaemonSet (agente) | Preferido | +| Deployment (gateway) | Sí, pero solo recopilará logs del nodo en el que se implementa | +| Sidecar | Sí, pero esto se consideraría una configuración avanzada | + +El receptor de logs de archivos rastrea y analiza los logs de los archivos. +Aunque no es un receptor específico de Kubernetes, sigue siendo la solución de +facto para recopilar cualquier registro de Kubernetes. + +El receptor de Filelog está compuesto por operadores que se encadenan entre sí +para procesar un registro. Cada operador realiza una responsabilidad simple, +como analizar una marca de tiempo o JSON. Configurar un receptor de Filelog no +es trivial. Si está usando el +[diagrama de Helm de OpenTelemetry Collector](../../helm/collector/) puede usar +el +[ajuste preestablecido `logsCollection`](../../helm/collector/#logs-collection-preset) +para comenzar. + +Dado que los logs de Kubernetes normalmente se ajustan a un conjunto de formatos +estándar, una configuración típica de receptor de Filelog para Kubernetes se ve +así: + +```yaml +filelog: + include: + - /var/log/pods/*/*/*.log + exclude: + # Exclude logs from all containers named otel-collector + - /var/log/pods/*/otel-collector/*.log + start_at: beginning + include_file_path: true + include_file_name: false + operators: + # Find out which format is used by kubernetes + - type: router + id: get-format + routes: + - output: parser-docker + expr: 'body matches "^\\{"' + - output: parser-crio + expr: 'body matches "^[^ Z]+ "' + - output: parser-containerd + expr: 'body matches "^[^ Z]+Z"' + # Parse CRI-O format + - type: regex_parser + id: parser-crio + regex: + '^(?P