feat: add otel collector role

This commit is contained in:
shenlan 2025-08-29 20:52:09 +08:00
parent 988bd7a2b4
commit 89cd9466fc
4 changed files with 157 additions and 0 deletions

View File

@ -0,0 +1,2 @@
dependencies:
- role: common

View File

@ -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]

View File

@ -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

View File

@ -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]