Open
Description
The purpose and use-cases of the new component
The existing filelog receiver can find and collect logs in files based on configured path expressions.
However, for k8s containers, we need a special path to access the files in the container. It is not convenient to match the corresponding path directly, and difficult to get its metadata or filter it.
The sidecar solution brings additional problems such as deployment troubles and wasted resources. At present, there is no solution in otel that meets our needs in all aspects.
So we decided to develop a new component: k8slog receiver, to provide full functionality to collect logs in k8s containers. It is an all-in-one solution, which supports to:
- collect logs from files inside k8s containers via daemonset
- support docker and cri-containerd
- support many docker graph drivers / snapshotters
- collect logs from stdout of k8s containers via daemonset
- filter containers by metadata
- extract metadata of containers
- collect file logs in k8s containers via sidecar
If we want to collect logs from k8s, we can use this component.
Example configuration for the component
receivers:
k8slog:
discovery:
mode: 1 # choices:
# 1 (default): collect logs from files inside containers via daemonset
# 2: collect logs from stdout of containers via daemonset
# 3: collect logs from files via sidecar
host_root: /host-root # default. we need to mount / of host in the container as a subpath. Read-only is enough.
runtime_apis: # APIs to be used for discovering pods. By default it will try to connect to both docker and cri-containerd.
type: docker
addr: unix:///<host_root>/var/run/docker.sock # default. address of docker api.
containerd_addr: unix:///<host_root>/run/docker/containerd/containerd.sock # default. address of underlying containerd api.
filter: # filters for pods. By default all containers will be included.
annotations:
labels:
namespaces:
containers:
pods:
uids:
expr: # custom expression (using antonmedv/expr)
extract: # extrace resource attributes, like k8sattributes processor.
metadata:
env:
annotations:
labels:
# configs below are (almost) the same as filelog receiver.
include: # In `daemonset-file` mode, these paths are paths inside the contaienrs. In `daemonset-stdout` mode, these paths is useless.
- /var/log/*.log
exclude:
start_at:
multiline:
force_flush_period:
encoding:
include_file_name:
poll_interval:
fingerprint_size:
max_log_size:
max_concurrent_files:
attributes:
resource:
operators:
storage:
preserve_leading_whitespaces:
preserve_trailing_whitespaces:
max_batches:
header:
retry_on_failure:
Telemetry data types supported
logs
Is this a vendor-specific component?
- This is a vendor-specific component
- If this is a vendor-specific component, I am proposing to contribute this as a representative of the vendor.
Sponsor (optional)
Additional context
No response