From 5758105f07dc35f29046a53a18611e2e4690ffc9 Mon Sep 17 00:00:00 2001 From: Dominik Rosiek Date: Mon, 8 Mar 2021 10:15:30 +0100 Subject: [PATCH 1/4] example: add example for parsing kubernetes logs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Dominik Rosiek Co-authored-by: Patryk Małek <69143962+pmalek-sumo@users.noreply.github.com> --- examples/kubernetes/README.md | 22 ++++++ examples/kubernetes/docker-compose.yml | 8 ++ examples/kubernetes/otel-collector-config.yml | 79 +++++++++++++++++++ .../logs/0.log | 7 ++ .../logs/0.log | 6 ++ .../logs/0.log | 7 ++ 6 files changed, 129 insertions(+) create mode 100644 examples/kubernetes/README.md create mode 100644 examples/kubernetes/docker-compose.yml create mode 100644 examples/kubernetes/otel-collector-config.yml create mode 100644 examples/kubernetes/varlogpods/containerd_logs-0_000011112222333344445555666677778888/logs/0.log create mode 100644 examples/kubernetes/varlogpods/crio_logs-0_111122223333444455556666777788889999/logs/0.log create mode 100644 examples/kubernetes/varlogpods/docker_logs-0_222233334444555566667777888899990000/logs/0.log diff --git a/examples/kubernetes/README.md b/examples/kubernetes/README.md new file mode 100644 index 000000000000..cadc166d72f5 --- /dev/null +++ b/examples/kubernetes/README.md @@ -0,0 +1,22 @@ +# OpenTelemetry Collector Demo + +This demo is a sample app to build the collector and exercise its kubernetes logs scrapping functionality. + +## Build and Run + +Two steps are required to build and run the demo: + +1. Build latest docker image in main repository directory `make docker-otelcontribcol` +1. Switch to this directory and run `docker-compose up` + +## Description + +`varlogpods` contains example log files placed in kubernetes-like directory structure. +Each of the directory has different formatted logs in one of three formats (either `CRI-O`, `CRI-Containerd` or `Docker`). +This directory is mounted to standard location (`/var/log/pods`). + +`otel-collector-config` is a configuration to autodetect and parse logs for all of three mentioned formats + +## ToDo + +To cover kubernetes system logs, logs from journald should be supported as well. diff --git a/examples/kubernetes/docker-compose.yml b/examples/kubernetes/docker-compose.yml new file mode 100644 index 000000000000..6bb749ad801d --- /dev/null +++ b/examples/kubernetes/docker-compose.yml @@ -0,0 +1,8 @@ +version: "3" +services: + opentelemetry-collector-contrib: + image: otelcontribcol + command: ["--config=/etc/otel-collector-config.yml"] + volumes: + - ./otel-collector-config.yml:/etc/otel-collector-config.yml + - ./varlogpods:/var/log/pods diff --git a/examples/kubernetes/otel-collector-config.yml b/examples/kubernetes/otel-collector-config.yml new file mode 100644 index 000000000000..3c10d55b8a84 --- /dev/null +++ b/examples/kubernetes/otel-collector-config.yml @@ -0,0 +1,79 @@ +receivers: + filelog: + include: + # - /var/log/pods/namespace_pod-name_pod-uid/container-name/*.log + - /var/log/pods/*/*/*.log + exclude: + # - /var/log/pods/namespace_pod-name_pod-uid/container-name/*.log + - /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: '$$record matches "^\\{"' + - output: parser-crio + expr: '$$record matches "^[^ Z]+ "' + - output: parser-containerd + expr: '$$record matches "^[^ Z]+Z"' + # Parse CRI-O format + - type: regex_parser + id: parser-crio + regex: '^(?P