feat: add otel collector role
This commit is contained in:
parent
f26c79c4cf
commit
e3e1d8a176
2
playbooks/roles/vhosts/otel-collector/meta/main.yml
Normal file
2
playbooks/roles/vhosts/otel-collector/meta/main.yml
Normal file
@ -0,0 +1,2 @@
|
||||
dependencies:
|
||||
- role: common
|
||||
71
playbooks/roles/vhosts/otel-collector/tasks/main.yml
Normal file
71
playbooks/roles/vhosts/otel-collector/tasks/main.yml
Normal 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]
|
||||
@ -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
|
||||
@ -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]
|
||||
Loading…
Reference in New Issue
Block a user