diff options
| author | Kumar Damani <me@kumardamani.net> | 2022-09-07 20:40:17 +0000 |
|---|---|---|
| committer | Kumar Damani <me@kumardamani.net> | 2022-09-07 20:40:17 +0000 |
| commit | bbe10895d9df8dd7899bbd65575d5bf12e57f8c8 (patch) | |
| tree | 244d2f1ad38320863fb60f695c88c97799be1171 /roles/monitoring | |
| parent | 4d34de2f5e757bfeae5738547aabb61d3d28a2f8 (diff) | |
| parent | c85806e3289b5e207d51d382f8dc75edad04404d (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.yaml | 17 | ||||
| -rw-r--r-- | roles/monitoring/files/zfs-exporter | 23 | ||||
| -rw-r--r-- | roles/monitoring/handlers/main.yaml | 7 | ||||
| -rw-r--r-- | roles/monitoring/tasks/blackbox.yaml | 21 | ||||
| -rw-r--r-- | roles/monitoring/tasks/main.yaml | 19 | ||||
| -rw-r--r-- | roles/monitoring/tasks/node.yaml | 23 | ||||
| -rw-r--r-- | roles/monitoring/tasks/prometheus.yaml | 23 | ||||
| -rw-r--r-- | roles/monitoring/tasks/zfs.yaml | 49 | ||||
| -rw-r--r-- | roles/monitoring/templates/blackbox.yml.j2 | 4 | ||||
| -rw-r--r-- | roles/monitoring/templates/prometheus.yml.j2 | 62 |
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. |
