From 50b7ebf3b0ddb5d62f182b1183ac9f81b48af017 Mon Sep 17 00:00:00 2001 From: Kamila Souckova Date: Sat, 2 Sep 2017 14:47:56 +0200 Subject: [PATCH] new type: __prometheus_exporter --- .../__prometheus_exporter/files/blackbox.yml | 63 +++++++++++++++++++ cdist/conf/type/__prometheus_exporter/man.rst | 63 +++++++++++++++++++ .../conf/type/__prometheus_exporter/manifest | 50 +++++++++++++++ .../__prometheus_exporter/parameter/boolean | 1 + .../parameter/default/exporter | 0 .../__prometheus_exporter/parameter/optional | 1 + 6 files changed, 178 insertions(+) create mode 100644 cdist/conf/type/__prometheus_exporter/files/blackbox.yml create mode 100644 cdist/conf/type/__prometheus_exporter/man.rst create mode 100644 cdist/conf/type/__prometheus_exporter/manifest create mode 100644 cdist/conf/type/__prometheus_exporter/parameter/boolean create mode 100644 cdist/conf/type/__prometheus_exporter/parameter/default/exporter create mode 100644 cdist/conf/type/__prometheus_exporter/parameter/optional diff --git a/cdist/conf/type/__prometheus_exporter/files/blackbox.yml b/cdist/conf/type/__prometheus_exporter/files/blackbox.yml new file mode 100644 index 00000000..e567c127 --- /dev/null +++ b/cdist/conf/type/__prometheus_exporter/files/blackbox.yml @@ -0,0 +1,63 @@ +modules: + http_2xx: + prober: http + timeout: 3s + http: + method: GET + no_follow_redirects: false + fail_if_ssl: false + fail_if_not_ssl: false + # http_post_2xx: + # prober: http + # timeout: 5s + # http: + # method: POST + # headers: + # Content-Type: application/json + # body: '{}' + # tcp_connect_v4_example: + # prober: tcp + # timeout: 5s + # tcp: + # protocol: "tcp4" + # irc_banner_example: + # prober: tcp + # timeout: 5s + # tcp: + # query_response: + # - send: "NICK prober" + # - send: "USER prober prober prober :prober" + # - expect: "PING :([^ ]+)" + # send: "PONG ${1}" + # - expect: "^:[^ ]+ 001" + # icmp_example: + # prober: icmp + # timeout: 5s + # icmp: + # protocol: "icmp" + # preferred_ip_protocol: "ip4" + # dns_udp_example: + # prober: dns + # timeout: 5s + # dns: + # query_name: "www.prometheus.io" + # query_type: "A" + # valid_rcodes: + # - NOERROR + # validate_answer_rrs: + # fail_if_matches_regexp: + # - ".*127.0.0.1" + # fail_if_not_matches_regexp: + # - "www.prometheus.io.\t300\tIN\tA\t127.0.0.1" + # validate_authority_rrs: + # fail_if_matches_regexp: + # - ".*127.0.0.1" + # validate_additional_rrs: + # fail_if_matches_regexp: + # - ".*127.0.0.1" + # dns_tcp_example: + # prober: dns + # dns: + # protocol: "tcp" # accepts "tcp/tcp4/tcp6/udp/udp4/udp6", defaults to "udp" + # preferred_ip_protocol: "ip4" # used for "udp/tcp", defaults to "ip6" + # query_name: "www.prometheus.io" diff --git a/cdist/conf/type/__prometheus_exporter/man.rst b/cdist/conf/type/__prometheus_exporter/man.rst new file mode 100644 index 00000000..9fbdcd2b --- /dev/null +++ b/cdist/conf/type/__prometheus_exporter/man.rst @@ -0,0 +1,63 @@ +cdist-type__prometheus_exporter(7) +================================== + +NAME +---- +cdist-type__prometheus_exporter - install some Prometheus exporters + + +DESCRIPTION +----------- +Install and configure some exporters to be used by the Prometheus monitoring system (https://prometheus.io/). + +This type creates a daemontools-compatible service directory under /service/$__object_id. +Daemontools (or something compatible) must be installed (in particular, the command `svc` must be executable). + +This type installs and builds the latest version from git, using go get. A recent version of golang as well +as build tools (make, g++, etc.) must be available. + +REQUIRED PARAMETERS +------------------- +None + + +OPTIONAL PARAMETERS +------------------- +exporter + Which exporter to install and configure. Default: $__object_id. + Currently supported: node, blackbox, ceph + + +BOOLEAN PARAMETERS +------------------ +add-consul-service + Add this exporter as a Consul service for automatic service discovery. + + +EXAMPLES +-------- + +.. code-block:: sh + + __daemontools + __golang_from_vendor --version 1.9 # required for prometheus and many exporters + + require="__daemontools __golang_from_vendor" __prometheus_exporter node + + +SEE ALSO +-------- +:strong:`cdist-type__prometheus_server`\ (7), :strong:`cdist-type__daemontools`\ (7), +:strong:`cdist-type__golang_from_vendor`\ (7), +Prometheus documentation: https://prometheus.io/docs/introduction/overview/ + +AUTHORS +------- +Kamila Součková + +COPYING +------- +Copyright \(C) 2017 Kamila Součková. You can redistribute it +and/or modify it under the terms of the GNU General Public License as +published by the Free Software Foundation, either version 3 of the +License, or (at your option) any later version. diff --git a/cdist/conf/type/__prometheus_exporter/manifest b/cdist/conf/type/__prometheus_exporter/manifest new file mode 100644 index 00000000..3d8f460c --- /dev/null +++ b/cdist/conf/type/__prometheus_exporter/manifest @@ -0,0 +1,50 @@ +#!/bin/sh + +export GOBIN=/opt/gocode/bin # where to find go binaries + +exporter="$(cat $__object/parameter/exporter)" +[ -z "$exporter" ] && exporter="$__object_id" + +__user prometheus --system + +case $exporter in + node) + TEXTFILES=/service/node-exporter/textfiles # path for the textfiles collector + + port=9100 + run="setuidgid prometheus $GOBIN/node_exporter -web.listen-address :$port -collector.textfile.directory=$TEXTFILES" + + require="__golang_from_vendor" __go_get github.com/prometheus/node_exporter + __directory $TEXTFILES --parents --mode 777 + ;; + blackbox) + port=9115 + run="setuidgid prometheus $GOBIN/blackbox_exporter -config.file=/service/blackbox-exporter/blackbox.yml" + + require="__daemontools_service/blackbox-exporter __user/prometheus" __config_file "/service/blackbox-exporter/blackbox.yml" \ + --source $__type/files/blackbox.yml \ + --group prometheus --mode 640 \ + --onchange "svc -h /service/blackbox-exporter" + require="__golang_from_vendor" __go_get github.com/prometheus/blackbox_exporter + ;; + ceph) + port=9128 + run="setuidgid ceph $GOBIN/ceph_exporter -ceph.config /etc/ceph/ceph.conf -telemetry.addr :$port" + + __package librados-dev # dependency of ceph_exporter + require="__golang_from_vendor __package/librados-dev" __go_get github.com/digitalocean/ceph_exporter + ;; + *) + echo "Unknown exporter: $exporter." >&2 + exit 1 + ;; +esac + +require="__daemontools" __daemontools_service ${exporter}-exporter --run "$run" +if [ -f "$__object/parameter/add-consul-service" ]; then + __consul_service ${exporter}-exporter --port $port --check-http "http://localhost:$port/metrics" --check-interval 10s +fi + +#__daemontools --install-init-script +__daemontools +__golang_from_vendor --version 1.8.1 # required for many exporters diff --git a/cdist/conf/type/__prometheus_exporter/parameter/boolean b/cdist/conf/type/__prometheus_exporter/parameter/boolean new file mode 100644 index 00000000..004af844 --- /dev/null +++ b/cdist/conf/type/__prometheus_exporter/parameter/boolean @@ -0,0 +1 @@ +add-consul-service diff --git a/cdist/conf/type/__prometheus_exporter/parameter/default/exporter b/cdist/conf/type/__prometheus_exporter/parameter/default/exporter new file mode 100644 index 00000000..e69de29b diff --git a/cdist/conf/type/__prometheus_exporter/parameter/optional b/cdist/conf/type/__prometheus_exporter/parameter/optional new file mode 100644 index 00000000..9cfaec5a --- /dev/null +++ b/cdist/conf/type/__prometheus_exporter/parameter/optional @@ -0,0 +1 @@ +exporter