From e3e1d8a17608d70f4b43e2be68b0f4bec24323fa Mon Sep 17 00:00:00 2001 From: shenlan Date: Fri, 29 Aug 2025 20:52:09 +0800 Subject: [PATCH] feat: add otel collector role --- .../roles/vhosts/otel-collector/meta/main.yml | 2 + .../vhosts/otel-collector/tasks/main.yml | 71 +++++++++++++++++++ .../templates/otel-collector.service | 13 ++++ .../otel-collector/templates/otel-config.yaml | 71 +++++++++++++++++++ 4 files changed, 157 insertions(+) create mode 100644 playbooks/roles/vhosts/otel-collector/meta/main.yml create mode 100644 playbooks/roles/vhosts/otel-collector/tasks/main.yml create mode 100644 playbooks/roles/vhosts/otel-collector/templates/otel-collector.service create mode 100644 playbooks/roles/vhosts/otel-collector/templates/otel-config.yaml diff --git a/playbooks/roles/vhosts/otel-collector/meta/main.yml b/playbooks/roles/vhosts/otel-collector/meta/main.yml new file mode 100644 index 0000000..9711b33 --- /dev/null +++ b/playbooks/roles/vhosts/otel-collector/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: + - role: common diff --git a/playbooks/roles/vhosts/otel-collector/tasks/main.yml b/playbooks/roles/vhosts/otel-collector/tasks/main.yml new file mode 100644 index 0000000..3bbd6b7 --- /dev/null +++ b/playbooks/roles/vhosts/otel-collector/tasks/main.yml @@ -0,0 +1,71 @@ +- name: Ensure openobserve-agent user exists + ansible.builtin.user: + name: openobserve-agent + system: true + shell: /usr/sbin/nologin + create_home: false + when: inventory_hostname in groups[group] + +- name: Download otelcol-contrib archive + ansible.builtin.get_url: + url: >- + https://github.com/open-telemetry/opentelemetry-collector-releases/releases/download/v{{ + otel_collector_version | default('0.102.0') }}/otelcol-contrib_{{ + otel_collector_version | default('0.102.0') }}_linux_amd64.tar.gz + dest: /tmp/otelcol-contrib.tar.gz + mode: "0644" + when: inventory_hostname in groups[group] + +- name: Extract otelcol-contrib + ansible.builtin.unarchive: + src: /tmp/otelcol-contrib.tar.gz + dest: /tmp + remote_src: true + creates: "/tmp/otelcol-contrib_{{ otel_collector_version | default('0.102.0') }}_linux_amd64" + when: inventory_hostname in groups[group] + +- name: Install otelcol-contrib binary + ansible.builtin.copy: + src: "/tmp/otelcol-contrib_{{ otel_collector_version | default('0.102.0') }}_linux_amd64/otelcol-contrib" + dest: /usr/local/bin/otelcol-contrib + mode: '0755' + remote_src: true + when: inventory_hostname in groups[group] + +- name: Remove otelcol-contrib archive + ansible.builtin.file: + path: /tmp/otelcol-contrib.tar.gz + state: absent + when: inventory_hostname in groups[group] + +- name: Cleanup extracted otelcol-contrib directory + ansible.builtin.file: + path: "/tmp/otelcol-contrib_{{ otel_collector_version | default('0.102.0') }}_linux_amd64" + state: absent + when: inventory_hostname in groups[group] + +- name: Deploy otel collector config + ansible.builtin.template: + src: otel-config.yaml + dest: /etc/otel-config.yaml + owner: openobserve-agent + group: openobserve-agent + mode: '0644' + when: inventory_hostname in groups[group] + +- name: Create otel collector service + ansible.builtin.template: + src: otel-collector.service + dest: /etc/systemd/system/otel-collector.service + owner: root + group: root + mode: '0644' + when: inventory_hostname in groups[group] + +- name: Enable and start otel collector + ansible.builtin.systemd: + name: otel-collector + enabled: true + state: restarted + daemon_reload: true + when: inventory_hostname in groups[group] diff --git a/playbooks/roles/vhosts/otel-collector/templates/otel-collector.service b/playbooks/roles/vhosts/otel-collector/templates/otel-collector.service new file mode 100644 index 0000000..4239162 --- /dev/null +++ b/playbooks/roles/vhosts/otel-collector/templates/otel-collector.service @@ -0,0 +1,13 @@ +[Unit] +Description=OpenTelemetry Collector +After=network.target network-online.target + +[Service] +User=openobserve-agent +Group=openobserve-agent +ExecStart=/usr/local/bin/otelcol-contrib --config /etc/otel-config.yaml +Restart=always +RestartSec=10 + +[Install] +WantedBy=multi-user.target diff --git a/playbooks/roles/vhosts/otel-collector/templates/otel-config.yaml b/playbooks/roles/vhosts/otel-collector/templates/otel-config.yaml new file mode 100644 index 0000000..e61f82c --- /dev/null +++ b/playbooks/roles/vhosts/otel-collector/templates/otel-config.yaml @@ -0,0 +1,71 @@ +receivers: + prometheus: + config: + global: + scrape_interval: 10s + scrape_configs: + - job_name: 'node-exporter' + static_configs: + - targets: ['localhost:9100'] + labels: + vendor: '{{ otel_vendor | default("aws") }}' + account: '{{ otel_account | default("prod") }}' + group: '{{ otel_group | default("core") }}' + name: '{{ otel_name | default(inventory_hostname) }}' + iid: '{{ otel_iid | default(ansible_default_ipv4.address) }}' + - job_name: 'process-exporter' + static_configs: + - targets: ['localhost:9256'] + labels: + vendor: '{{ otel_vendor | default("aws") }}' + account: '{{ otel_account | default("prod") }}' + group: '{{ otel_group | default("core") }}' + name: '{{ otel_name | default(inventory_hostname) }}' + iid: '{{ otel_iid | default(ansible_default_ipv4.address) }}' + journald: + directory: /var/log/journal + filelog/std: + include: [ /var/log/**log ] + +processors: + resourcedetection/system: + detectors: ["system"] + system: + hostname_sources: ["os"] + memory_limiter: + check_interval: 1s + limit_percentage: 75 + spike_limit_percentage: 15 + batch: + send_batch_size: 10000 + timeout: 10s + +extensions: + zpages: {} + +exporters: + otlphttp/openobserve: + endpoint: {{ otlp_endpoint | default('https://otel.svc.plus/api/default/') }} + headers: + Authorization: "{{ otlp_auth | default('Basic cm9vdEBleGFtcGxlLmNvbTpiNTVkbHFLenVLamZXVXRY') }}" + otlphttp/openobserve_journald: + endpoint: {{ otlp_endpoint | default('https://otel.svc.plus/api/default/') }} + headers: + Authorization: "{{ otlp_auth | default('Basic cm9vdEBleGFtcGxlLmNvbTpiNTVkbHFLenVLamZXVXRY') }}" + stream-name: journald + +service: + extensions: [zpages] + pipelines: + metrics: + receivers: [prometheus] + processors: [resourcedetection/system, memory_limiter, batch] + exporters: [otlphttp/openobserve] + logs: + receivers: [filelog/std] + processors: [resourcedetection/system, memory_limiter, batch] + exporters: [otlphttp/openobserve] + logs/journald: + receivers: [journald] + processors: [resourcedetection/system, memory_limiter, batch] + exporters: [otlphttp/openobserve_journald]