aboutsummaryrefslogtreecommitdiff
path: root/roles/monitoring
diff options
context:
space:
mode:
authorKumar Damani <me@kumardamani.net>2022-09-07 20:40:17 +0000
committerKumar Damani <me@kumardamani.net>2022-09-07 20:40:17 +0000
commitbbe10895d9df8dd7899bbd65575d5bf12e57f8c8 (patch)
tree244d2f1ad38320863fb60f695c88c97799be1171 /roles/monitoring
parent4d34de2f5e757bfeae5738547aabb61d3d28a2f8 (diff)
parentc85806e3289b5e207d51d382f8dc75edad04404d (diff)
Merge branch 'alpine' into 'master'
switched to alpine initial commit See merge request kdam0/vps!2
Diffstat (limited to 'roles/monitoring')
-rw-r--r--roles/monitoring/defaults/main.yaml17
-rw-r--r--roles/monitoring/files/zfs-exporter23
-rw-r--r--roles/monitoring/handlers/main.yaml7
-rw-r--r--roles/monitoring/tasks/blackbox.yaml21
-rw-r--r--roles/monitoring/tasks/main.yaml19
-rw-r--r--roles/monitoring/tasks/node.yaml23
-rw-r--r--roles/monitoring/tasks/prometheus.yaml23
-rw-r--r--roles/monitoring/tasks/zfs.yaml49
-rw-r--r--roles/monitoring/templates/blackbox.yml.j24
-rw-r--r--roles/monitoring/templates/prometheus.yml.j262
10 files changed, 248 insertions, 0 deletions
diff --git a/roles/monitoring/defaults/main.yaml b/roles/monitoring/defaults/main.yaml
new file mode 100644
index 0000000..cd11c66
--- /dev/null
+++ b/roles/monitoring/defaults/main.yaml
@@ -0,0 +1,17 @@
+# Default Values
+---
+
+nextcloud_uid: "1000"
+nextcloud_gid: "1000"
+nextcloud_tz: 'America/Toronto'
+nextcloud_data_root: ''
+nextcloud_host_port: ''
+
+nextcloud_docker_network_name: 'nextcloud_network'
+
+nextcloud_postgres_db: 'nextcloud_db'
+nextcloud_postgres_user: 'nextcloud'
+nextcloud_postgres_password: ''
+
+nextcloud_container_name: 'nextcloud'
+nextcloud_dashboard_url: 'https://{{ nextcloud_domain }}'
diff --git a/roles/monitoring/files/zfs-exporter b/roles/monitoring/files/zfs-exporter
new file mode 100644
index 0000000..7f5a09d
--- /dev/null
+++ b/roles/monitoring/files/zfs-exporter
@@ -0,0 +1,23 @@
+#!/sbin/openrc-run
+supervisor=supervise-daemon
+
+command="/usr/bin/zfs_exporter"
+command_args="$ARGS"
+command_background="yes"
+group="root"
+user="root"
+
+logdir="/var/log/prometheus"
+logfile="$logdir/${SVCNAME}.log"
+pidfile="/var/run/${SVCNAME}.pid"
+start_stop_daemon_args="--stderr $logfile --user $user --group $group"
+
+depend() {
+ need net
+ after firewall
+}
+
+start_pre() {
+ checkpath -d -o $user:$group -m755 $logdir
+ checkpath -f -o $user:$group -m644 $logfile
+}
diff --git a/roles/monitoring/handlers/main.yaml b/roles/monitoring/handlers/main.yaml
new file mode 100644
index 0000000..7613b54
--- /dev/null
+++ b/roles/monitoring/handlers/main.yaml
@@ -0,0 +1,7 @@
+---
+
+- name: 'Restart nginx'
+ systemd:
+ name: 'nginx'
+ state: 'restarted'
+ listen: 'nginx_restart'
diff --git a/roles/monitoring/tasks/blackbox.yaml b/roles/monitoring/tasks/blackbox.yaml
new file mode 100644
index 0000000..932b457
--- /dev/null
+++ b/roles/monitoring/tasks/blackbox.yaml
@@ -0,0 +1,21 @@
+---
+
+# Blackbox Exporter for service level monitoring
+- name: 'Copy the blackbox.yml config file to conf dir'
+ template:
+ src: 'blackbox.yml.j2'
+ dest: '{{ monitoring_root_dir }}/blackbox.yml'
+ mode: '0644'
+
+- name: 'Make sure the blackbox exporter container is created and running'
+ docker_container:
+ name: 'blackbox-exporter'
+ image: 'prom/blackbox-exporter:v0.22.0'
+ pull: true
+ state: 'started'
+ recreate: true
+ command: '--config.file=/config/blackbox.yml'
+ volumes:
+ - "{{ monitoring_root_dir }}/blackbox.yml:/config/blackbox.yml"
+ network_mode: 'host'
+ restart_policy: unless-stopped
diff --git a/roles/monitoring/tasks/main.yaml b/roles/monitoring/tasks/main.yaml
new file mode 100644
index 0000000..268659b
--- /dev/null
+++ b/roles/monitoring/tasks/main.yaml
@@ -0,0 +1,19 @@
+---
+
+- name: 'Ensure monitoring root dir exists'
+ file:
+ path: '{{ monitoring_root_dir }}'
+ state: 'directory'
+ mode: '755'
+
+- name: 'Setup the Node Exporter'
+ import_tasks: 'node.yaml'
+
+- name: 'Setup the Blackbox Exporter'
+ import_tasks: 'blackbox.yaml'
+
+- name: 'Setup the ZFS Exporter'
+ import_tasks: 'zfs.yaml'
+
+- name: 'Setup Prometheus'
+ import_tasks: 'prometheus.yaml'
diff --git a/roles/monitoring/tasks/node.yaml b/roles/monitoring/tasks/node.yaml
new file mode 100644
index 0000000..5d38f1f
--- /dev/null
+++ b/roles/monitoring/tasks/node.yaml
@@ -0,0 +1,23 @@
+# https://www.robustperception.io/temperature-and-hardware-monitoring-metrics-from-the-node-exporter/
+---
+
+# Need to install lm-sensors lm-sensors-detect
+# Run sensors, for configurations.
+
+# Node Exporter for OS level monitoring is recommneded to be installed w/o Docker.
+- block:
+ - name: 'Install node-exporter'
+ become: true
+ become_method: 'doas'
+ package:
+ name: 'prometheus-node-exporter'
+ state: 'present'
+
+ - name: 'Start and enable node-exporter service'
+ become: true
+ become_method: 'doas'
+ service:
+ name: 'node-exporter'
+ state: 'started'
+ enabled: true
+ when: 'ansible_os_family == "Alpine"'
diff --git a/roles/monitoring/tasks/prometheus.yaml b/roles/monitoring/tasks/prometheus.yaml
new file mode 100644
index 0000000..0fbfd89
--- /dev/null
+++ b/roles/monitoring/tasks/prometheus.yaml
@@ -0,0 +1,23 @@
+---
+
+# Install Prometheus as TSDB for monitoring metrics
+- name: 'Copy the prometheus.yml config file to conf dir'
+ template:
+ src: 'prometheus.yml.j2'
+ dest: '{{ monitoring_root_dir }}/prometheus.yml'
+ mode: '0644'
+
+- name: 'Make sure prometheus container is created and running'
+ docker_container:
+ name: 'prometheus'
+ image: 'prom/prometheus:v2.37.0'
+ pull: true
+ state: 'started'
+ recreate: true
+ command: '--config.file=/etc/prometheus/prometheus.yml --storage.tsdb.path=/data/prometheus'
+ user: 'root'
+ volumes:
+ - "{{ monitoring_root_dir }}/prometheus.yml:/etc/prometheus/prometheus.yml"
+ - "{{ monitoring_root_dir }}/prom_data:/data/prometheus"
+ network_mode: 'host'
+ restart_policy: unless-stopped
diff --git a/roles/monitoring/tasks/zfs.yaml b/roles/monitoring/tasks/zfs.yaml
new file mode 100644
index 0000000..2f18e32
--- /dev/null
+++ b/roles/monitoring/tasks/zfs.yaml
@@ -0,0 +1,49 @@
+# https://github.com/pdf/zfs_exporter
+
+---
+
+# ZFS Exporter for ZFS monitoring
+
+- name: 'Download zfs exporter tarball'
+ get_url:
+ url: 'https://github.com/pdf/zfs_exporter/releases/download/v2.2.5/zfs_exporter-2.2.5.linux-arm64.tar.gz'
+ dest: '{{ monitoring_root_dir }}/zfs_exporter.tar.gz'
+ mode: '644'
+
+- name: 'Ensure the zfs exporter dir exists'
+ file:
+ path: '{{ monitoring_root_dir }}/zfs_exporter-2.2.5.linux-arm64'
+ state: 'directory'
+ mode: '755'
+
+- name: 'Extract ZFS exporter to dir'
+ command: 'tar -xf zfs_exporter-2.2.5.linux-arm64.tar.gz'
+ args:
+ chdir: '{{ monitoring_root_dir }}'
+
+- name: 'Copy the executable to /usr/bin'
+ become: true
+ become_method: 'doas'
+ copy:
+ src: '{{ monitoring_root_dir }}/zfs_exporter-2.2.5.linux-arm64/zfs_exporter'
+ dest: '/usr/bin/zfs_exporter'
+ mode: '0755'
+ owner: 'root'
+ remote_src: true
+
+- name: 'Create service file to start zfs_exporter on boot'
+ become: true
+ become_method: 'doas'
+ copy:
+ src: 'zfs-exporter'
+ dest: '/etc/init.d/zfs-exporter'
+ mode: '0755'
+ owner: 'root'
+
+- name: 'Start and enable the zfs-exporter service'
+ become: true
+ become_method: 'doas'
+ service:
+ name: 'zfs-exporter'
+ state: 'started'
+ enabled: true
diff --git a/roles/monitoring/templates/blackbox.yml.j2 b/roles/monitoring/templates/blackbox.yml.j2
new file mode 100644
index 0000000..9dd359a
--- /dev/null
+++ b/roles/monitoring/templates/blackbox.yml.j2
@@ -0,0 +1,4 @@
+modules:
+ http_2xx:
+ prober: http
+ timeout: 5s
diff --git a/roles/monitoring/templates/prometheus.yml.j2 b/roles/monitoring/templates/prometheus.yml.j2
new file mode 100644
index 0000000..9bdbbe3
--- /dev/null
+++ b/roles/monitoring/templates/prometheus.yml.j2
@@ -0,0 +1,62 @@
+global:
+ scrape_interval: 15s
+ evaluation_interval: 30s
+
+scrape_configs:
+ - job_name: 'prometheus'
+ honor_labels: true
+ static_configs:
+ - targets: ["localhost:9090"]
+ labels:
+ env: prod
+
+ - job_name: 'node_exporter'
+ static_configs:
+ - targets: ["localhost:9100"]
+
+ - job_name: 'zfs_exporter'
+ metrics_path: /metrics
+ static_configs:
+ - targets: ["localhost:9134"]
+
+ - job_name: 'blackbox-service-status'
+ metrics_path: /probe
+ params:
+ module: [http_2xx]
+ static_configs:
+{% for t in monitoring_apps_confs %}
+{% if not t.conf.curl_requires_auth %}
+ - targets:
+{% if "access_domain" in t.conf %}
+ - 'https://{{ t.conf.access_domain }}{{ t.conf.status_endpoint }}'
+{% else %}
+ - 'http://0.0.0.0:{{ t.conf.port }}{{ t.conf.status_endpoint }}'
+{% endif %}
+ labels:
+ name: '{{ t.app }}'
+{% endif %}
+{% endfor %}
+ relabel_configs:
+ - source_labels: [__address__]
+ target_label: __param_target
+ - source_labels: [__param_target]
+ target_label: instance
+ - target_label: __address__
+ replacement: 127.0.0.1:9115 # Blackbox exporter.
+
+ - job_name: 'blackbox-ssl-sites'
+ metrics_path: /probe
+ params:
+ module: [http_2xx]
+ static_configs:
+ - targets:
+{% for t in monitoring_static_sites %}
+ - 'https://{{ t.name }}'
+{% endfor %}
+ relabel_configs:
+ - source_labels: [__address__]
+ target_label: __param_target
+ - source_labels: [__param_target]
+ target_label: instance
+ - target_label: __address__
+ replacement: 127.0.0.1:9115 # Blackbox exporter.