Skip to content

Commit 3546e5a

Browse files
Merge pull request #216 from stfc/systemd_exporter
ENH: Add systemd exporter to hosts
2 parents 9fef3ab + dccbb4c commit 3546e5a

File tree

6 files changed

+154
-5
lines changed

6 files changed

+154
-5
lines changed

chatops_deployment/ansible/configure.yml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,41 @@
11
---
22
- name: Configure load balancer
33
hosts: loadbalancer
4-
remote_user: ubuntu
54
roles:
65
- role: loadbalancer
76
tags:
87
- loadbalancer
98

109
- name: Configure ChatOps
1110
hosts: chatops
12-
remote_user: ubuntu
1311
roles:
1412
- role: chatops
1513
tags:
1614
- chatops
1715

16+
- name: Set up systemd exporters
17+
hosts: all
18+
roles:
19+
- role: systemd_exporter
20+
tags:
21+
- systemd_exporter
22+
1823
- name: Configure Grafana
1924
hosts: grafana
20-
remote_user: ubuntu
2125
roles:
2226
- grafana
2327
tags:
2428
- grafana
2529

2630
- name: Configure Prometheus
2731
hosts: prometheus
28-
remote_user: ubuntu
2932
roles:
3033
- prometheus
3134
tags:
3235
- prometheus
3336

3437
- name: Configure Alert Manager
3538
hosts: prometheus
36-
remote_user: ubuntu
3739
roles:
3840
- alertmanager
3941
tags:
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1+
ansible_user: ubuntu
12
domain: "dev-cloud-chatops.nubes.rl.ac.uk"
23
chatops_custom_api_token: "{{ vault_chatops_custom_api_token }}"
4+
systemd_exporter_version: "0.7.0"

chatops_deployment/ansible/roles/prometheus/files/rules.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,12 @@ groups:
99
annotations:
1010
summary: "ChatOps container is detected down on {{ $labels.instance }}"
1111
description: "Container has been not running for more than 10 seconds."
12+
13+
- alert: SystemdServiceDown
14+
expr: systemd_unit_state{name=~"grafana-server.service|haproxy.service",state=~"failed|inactive"} == 1
15+
for: 30s
16+
labels:
17+
severity: critical
18+
annotations:
19+
summary: "Systemd service {{ $labels.name }} on host {{ $labels.instance }} is in state {{ $labels.state }}."
20+
description: "Systemd service has been in failed state for 30s."
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
[Unit]
2+
Description=Systemd Exporter Service
3+
Documentation=https://github.com/prometheus-community/systemd_exporter
4+
After=network-online.target
5+
6+
[Service]
7+
User=systemd-exporter
8+
Group=systemd-exporter
9+
Restart=on-failure
10+
ExecStart=/opt/systemd-exporter/systemd_exporter --web.telemetry-path="/"
11+
StandardOutput=append:/var/log/systemd-exporter/systemd-exporter.log
12+
StandardError=append:/var/log/systemd-exporter/systemd-exporter.log
13+
14+
[Install]
15+
WantedBy=multi-user.target
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
---
2+
- name: Create systemd-exporter group
3+
become: true
4+
ansible.builtin.group:
5+
name: systemd-exporter
6+
state: present
7+
8+
- name: Add ubuntu to systemd-exporter group
9+
become: true
10+
ansible.builtin.user:
11+
name: ubuntu
12+
groups: systemd-exporter
13+
append: true
14+
15+
- name: Reset connection for group changes
16+
ansible.builtin.meta: reset_connection
17+
18+
- name: Create a systemd-exporter user
19+
become: true
20+
ansible.builtin.user:
21+
name: systemd-exporter
22+
create_home: false
23+
group: systemd-exporter
24+
system: true
25+
26+
- name: Download and extract systemd-exporter
27+
become: true
28+
ansible.builtin.unarchive:
29+
src: "
30+
https://github.com/prometheus-community/systemd_exporter/releases/download/\
31+
v{{ systemd_exporter_version }}/systemd_exporter-{{ systemd_exporter_version }}.linux-amd64.tar.gz
32+
"
33+
dest: /tmp
34+
remote_src: true
35+
creates: "/tmp/systemd_exporter-{{ systemd_exporter_version }}.linux-amd64"
36+
mode: "0774"
37+
38+
- name: Move systemd-exporter binaries
39+
become: true
40+
ansible.builtin.copy:
41+
src: "/tmp/systemd_exporter-{{ systemd_exporter_version }}.linux-amd64/"
42+
dest: "/opt/systemd-exporter"
43+
mode: preserve
44+
owner: systemd-exporter
45+
group: systemd-exporter
46+
remote_src: true
47+
48+
- name: Create systemd directory
49+
become: true
50+
ansible.builtin.file:
51+
path: /usr/local/lib/systemd/system
52+
state: directory
53+
mode: "0755"
54+
owner: root
55+
group: root
56+
57+
- name: Copy systemd-exporter service file
58+
become: true
59+
ansible.builtin.copy:
60+
src: systemd-exporter.service
61+
dest: /usr/local/lib/systemd/system/systemd-exporter.service
62+
owner: systemd-exporter
63+
group: systemd-exporter
64+
mode: "0774"
65+
66+
- name: Create systemd-exporter logging directory
67+
become: true
68+
ansible.builtin.file:
69+
path: /var/log/systemd-exporter
70+
state: directory
71+
mode: "0774"
72+
owner: systemd-exporter
73+
group: systemd-exporter
74+
75+
- name: Start systemd-exporter service
76+
become: true
77+
ansible.builtin.systemd_service:
78+
name: systemd-exporter.service
79+
state: restarted
80+
daemon_reload: true
81+
enabled: true

chatops_deployment/terraform/modules/networking/main.tf

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -134,3 +134,43 @@ resource "openstack_networking_secgroup_rule_v2" "loadbalancer_prometheus" {
134134
remote_ip_prefix = "192.168.100.0/22"
135135
security_group_id = openstack_networking_secgroup_v2.loadbalancer.id
136136
}
137+
138+
resource "openstack_networking_secgroup_rule_v2" "systemd_exporter_prometheus" {
139+
direction = "ingress"
140+
ethertype = "IPv4"
141+
protocol = "tcp"
142+
port_range_min = 9558
143+
port_range_max = 9558
144+
remote_ip_prefix = "192.168.100.0/22"
145+
security_group_id = openstack_networking_secgroup_v2.prometheus.id
146+
}
147+
148+
resource "openstack_networking_secgroup_rule_v2" "systemd_exporter_chatops" {
149+
direction = "ingress"
150+
ethertype = "IPv4"
151+
protocol = "tcp"
152+
port_range_min = 9558
153+
port_range_max = 9558
154+
remote_ip_prefix = "192.168.100.0/22"
155+
security_group_id = openstack_networking_secgroup_v2.chatops.id
156+
}
157+
158+
resource "openstack_networking_secgroup_rule_v2" "systemd_exporter_grafana" {
159+
direction = "ingress"
160+
ethertype = "IPv4"
161+
protocol = "tcp"
162+
port_range_min = 9558
163+
port_range_max = 9558
164+
remote_ip_prefix = "192.168.100.0/22"
165+
security_group_id = openstack_networking_secgroup_v2.grafana.id
166+
}
167+
168+
resource "openstack_networking_secgroup_rule_v2" "systemd_exporter_loadbalancer" {
169+
direction = "ingress"
170+
ethertype = "IPv4"
171+
protocol = "tcp"
172+
port_range_min = 9558
173+
port_range_max = 9558
174+
remote_ip_prefix = "192.168.100.0/22"
175+
security_group_id = openstack_networking_secgroup_v2.loadbalancer.id
176+
}

0 commit comments

Comments
 (0)