Merge pull request #647 from ungleich/new-prometheus

New __prometheus_server, __prometheus_alertmanager, __grafana_dashboard
This commit is contained in:
Darko Poljak 2018-03-11 21:11:54 +01:00 committed by GitHub
commit 1bb9da233e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 130 additions and 112 deletions

View File

@ -7,44 +7,34 @@ case $os in
debian|devuan) debian|devuan)
case $os_version in case $os_version in
8*|jessie) 8*|jessie)
__apt_key_uri grafana \ apt_source_distribution=jessie
--name 'Grafana Release Signing Key' \
--uri https://packagecloud.io/gpg.key
require="__apt_key_uri/grafana" __apt_source grafana \
--uri https://packagecloud.io/grafana/stable/debian/ \
--distribution jessie \
--component main
__package apt-transport-https
require="__apt_source/grafana __package/apt-transport-https" __package grafana
require="__package/grafana" __start_on_boot grafana-server
;; ;;
9*|ascii/ceres) 9*|ascii/ceres)
__apt_key_uri grafana \ apt_source_distribution=stretch
--name 'Grafana Release Signing Key' \
--uri https://packagecloud.io/gpg.key
require="__apt_key_uri/grafana" __apt_source grafana \
--uri https://packagecloud.io/grafana/stable/debian/ \
--distribution stretch \
--component main
__package apt-transport-https
require="__apt_source/grafana __package/apt-transport-https" __package grafana
require="__package/grafana" __start_on_boot grafana-server
;; ;;
*) *)
echo "Don't know how to install Grafana on $os $os_version. Send us a pull request!" echo "Don't know how to install Grafana on $os $os_version. Send us a pull request!" >&2
exit 1 exit 1
;; ;;
esac esac
;;
__apt_key_uri grafana \
--name 'Grafana Release Signing Key' \
--uri https://packagecloud.io/gpg.key
require="$require __apt_key_uri/grafana" __apt_source grafana \
--uri https://packagecloud.io/grafana/stable/debian/ \
--distribution $apt_source_distribution \
--component main
__package apt-transport-https
require="$require __apt_source/grafana __package/apt-transport-https" __package grafana
require="$require __package/grafana" __start_on_boot grafana-server
require="$require __start_on_boot/grafana-server" __process grafana-server --start "service grafana-server start"
;;
*) *)
echo "Don't know how to install Grafana on $os. Send us a pull request!" echo "Don't know how to install Grafana on $os. Send us a pull request!" >&2
exit 1 exit 1
;; ;;
esac esac

View File

@ -10,27 +10,27 @@ DESCRIPTION
----------- -----------
Install and configure Prometheus Alertmanager (https://prometheus.io/docs/alerting/alertmanager/). Install and configure Prometheus Alertmanager (https://prometheus.io/docs/alerting/alertmanager/).
This type create a daemontools-compatible service directory under /service/prometheus. Note that due to significant differences between Prometheus 1.x and 2.x, only 2.x is supported. It is your responsibility to make sure that your package manager installs 2.x. (On Devuan Ascii, the parameter `--install-from-backports` helps.)
Daemontools (or something compatible) must be installed (in particular, the command `svc` must be executable).
REQUIRED PARAMETERS REQUIRED PARAMETERS
------------------- -------------------
config config
Alertmanager configuration file. It will be saved as /etc/alertmanager/alertmanager.yml on the target. Alertmanager configuration file. It will be saved as /etc/alertmanager/alertmanager.yml on the target.
listen-address
Passed as web.listen-address.
OPTIONAL PARAMETERS OPTIONAL PARAMETERS
------------------- -------------------
storage-path storage-path
Where to put data. Default: /data/alertmanager. (Directory will be created if needed.) Where to put data. Default: /data/alertmanager. (Directory will be created if needed.)
retention-days
How long to retain data. Default: 90 days.
BOOLEAN PARAMETERS BOOLEAN PARAMETERS
------------------ ------------------
None install-from-backports
Valid on Devuan only. Will enable the backports apt source and install the package from there. Useful for getting a newer version.
EXAMPLES EXAMPLES
@ -38,21 +38,15 @@ EXAMPLES
.. code-block:: sh .. code-block:: sh
ALERTPORT=9093 __prometheus_alertmanager \
--install-from-backports \
__daemontools --config "$__manifest/files/alertmanager.yml" \
__golang_from_vendor --version 1.8.1 # required for prometheus and many exporters --storage-path /data/alertmanager
require="__daemontools __golang_from_vendor" __prometheus_alertmanager \
--with-daemontools \
--config "$__manifest/files/alertmanager.yml" \
--storage-path /data/alertmanager \
--listen-address "[::]:$ALERTPORT"
SEE ALSO SEE ALSO
-------- --------
:strong:`cdist-type__prometheus_server`\ (7), :strong:`cdist-type__daemontools`\ (7), :strong:`cdist-type__prometheus_server`\ (7), :strong:`cdist-type__grafana_dashboard`\ (7),
Prometheus alerting documentation: https://prometheus.io/docs/alerting/overview/ Prometheus alerting documentation: https://prometheus.io/docs/alerting/overview/
AUTHORS AUTHORS
@ -61,7 +55,7 @@ Kamila Součková <kamila--@--ksp.sk>
COPYING COPYING
------- -------
Copyright \(C) 2017 Kamila Součková. You can redistribute it Copyright \(C) 2018 Kamila Součková. You can redistribute it
and/or modify it under the terms of the GNU General Public License as 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 published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version. License, or (at your option) any later version.

View File

@ -1,34 +1,63 @@
#!/bin/sh -e #!/bin/sh -e
GOBIN=/opt/gocode/bin # where to find go binaries ##### HARD-CODED CONFIG #####################################################
CONF_DIR=/etc/prometheus CONF_DIR=/etc/prometheus
LOGLEVEL=info
CONF=$CONF_DIR/alertmanager.yml CONF=$CONF_DIR/alertmanager.yml
### Prometheus server ####################################################### ##### GET SETTINGS ##########################################################
config="$(cat "$__object/parameter/config")" config="$(cat "$__object/parameter/config")"
retention_days="$(cat "$__object/parameter/retention-days")"
storage_path="$(cat "$__object/parameter/storage-path")" storage_path="$(cat "$__object/parameter/storage-path")"
listen_address="$(cat "$__object/parameter/listen-address")" # listen_address="$(cat "$__object/parameter/listen-address")"
FLAGS="config.file '$CONF' ##### INSTALL THE PACKAGE ###################################################
storage.path '$storage_path'
web.listen-address '$listen_address'
log.level $LOGLEVEL"
REAL_FLAGS="$(echo "$FLAGS" | sed -nE 's/^([^#]+).*/ --\1 \\/p')" require_pkg="" # what to require if I want to require "the package"
if [ -f "$__object/parameter/install-from-backports" ]; then
os=$(cat "$__global/explorer/os")
os_version=$(cat "$__global/explorer/os_version")
__go_get github.com/prometheus/alertmanager/cmd/... case $os in
devuan)
[ "$os_version" = "ascii/ceres" ] && os_version='ascii' # "ascii" used in the repo URLs
__apt_source backports --uri http://auto.mirror.devuan.org/merged --distribution $os_version-backports --component main
require="$require __apt_source/backports" __package_apt prometheus-alertmanager --target-release $os_version-backports
require_pkg="__package_apt/prometheus-alertmanager"
;;
*)
echo "--install-from-backports is only supported on Devuan -- ignoring." >&2
echo "Send a pull request if you require it." >&2
;;
esac
else
__package prometheus-alertmanager
require_pkg="__package/prometheus-alertmanager"
fi
__user prometheus --system ##### PREPARE PATHS AND SUCH ################################################
require="__user/prometheus" __directory "$storage_path" --owner prometheus --parents
require="__user/prometheus" __directory "$CONF_DIR" --owner prometheus --parents
__daemontools_service alertmanager --run "setuidgid prometheus $GOBIN/alertmanager $REAL_FLAGS" require="$require $require_pkg" __directory "$storage_path" --owner prometheus --parents
require="$require __directory/$storage_path __user/prometheus" \ # TODO this is a bug in the init script, patching it like this is awful and it should be reported
require="$require $require_pkg" \
__key_value alertmanager_fix_init_script --file /etc/init.d/prometheus-alertmanager \
--key "NAME" --value "prometheus-alertmanager" --delimiter "=" \
--onchange "service prometheus-alertmanager restart"
##### CONFIGURE #############################################################
FLAGS="--storage.path $storage_path --data.retention $(($retention_days*24))h --web.listen-address [::]:9093"
require="$require $require_pkg" \
__key_value alertmanager_args --file /etc/default/prometheus-alertmanager \
--key "ARGS" --value "\"$FLAGS\"" --delimiter "=" \
--onchange "service prometheus-alertmanager restart"
require="$require __directory/$storage_path $require_pkg" \
__config_file $CONF \ __config_file $CONF \
--source $config \ --source $config \
--group prometheus --mode 640 \ --group prometheus --mode 640 \
--onchange "svc -h /service/alertmanager" # TODO when a config-check tool is available, check config here --onchange "service prometheus-alertmanager reload" # TODO when a config-check tool is available, check config here

View File

@ -0,0 +1 @@
install-from-backports

View File

@ -1 +1,2 @@
storage-path storage-path
retention-days

View File

@ -1,2 +1 @@
config config
listen-address

View File

@ -10,18 +10,12 @@ DESCRIPTION
----------- -----------
Install and configure Prometheus (https://prometheus.io/). Install and configure Prometheus (https://prometheus.io/).
This type creates a daemontools-compatible service directory under /service/prometheus. Note that due to significant differences between Prometheus 1.x and 2.x, only 2.x is supported. It is your responsibility to make sure that your package manager installs 2.x. (On Devuan Ascii, the parameter `--install-from-backports` helps.)
Daemontools (or something compatible) must be installed (in particular, the command `svc` must be executable).
REQUIRED PARAMETERS REQUIRED PARAMETERS
------------------- -------------------
config config
Prometheus configuration file. It will be saved as /etc/prometheus/prometheus.yml on the target. Prometheus configuration file. It will be saved as /etc/prometheus/prometheus.yml on the target.
listen-address
Passed as web.listen-address.
alertmanager-url
Passed as alertmanager.url
OPTIONAL PARAMETERS OPTIONAL PARAMETERS
@ -32,13 +26,12 @@ rule-files
Path to rule files. They will be installed under /etc/prometheus/<filename>. You need to include `rule_files: [/etc/prometheus/<your-pattern>]` in the config file if you use this. Path to rule files. They will be installed under /etc/prometheus/<filename>. You need to include `rule_files: [/etc/prometheus/<your-pattern>]` in the config file if you use this.
storage-path storage-path
Where to put data. Default: /data/prometheus. (Directory will be created if needed.) Where to put data. Default: /data/prometheus. (Directory will be created if needed.)
target-heap-size
Passed as storage.local.target-heap-size. Default: 1/2 of RAM.
BOOLEAN PARAMETERS BOOLEAN PARAMETERS
------------------ ------------------
None install-from-backports
Valid on Devuan only. Will enable the backports apt source and install the package from there. Useful for getting a newer version.
EXAMPLES EXAMPLES
@ -49,22 +42,17 @@ EXAMPLES
PROMPORT=9090 PROMPORT=9090
ALERTPORT=9093 ALERTPORT=9093
__daemontools __prometheus_server \
__golang_from_vendor --version 1.8.1 # required for prometheus and many exporters --install-from-backports \
require="__daemontools __golang_from_vendor" __prometheus_server \
--with-daemontools \
--config "$__manifest/files/prometheus.yml" \ --config "$__manifest/files/prometheus.yml" \
--retention-days 14 \ --retention-days 14 \
--storage-path /data/prometheus \ --storage-path /data/prometheus \
--listen-address "[::]:$PROMPORT" \ --rule-files "$__manifest/files/*.rules"
--rule-files "$__manifest/files/*.rules" \
--alertmanager-url "http://monitoring1.node.consul:$ALERTPORT,http://monitoring2.node.consul:$ALERTPORT"
SEE ALSO SEE ALSO
-------- --------
:strong:`cdist-type__prometheus_alertmanager`\ (7), :strong:`cdist-type__daemontools`\ (7), :strong:`cdist-type__prometheus_alertmanager`\ (7), :strong:`cdist-type__grafana_dashboard`\ (7),
Prometheus documentation: https://prometheus.io/docs/introduction/overview/ Prometheus documentation: https://prometheus.io/docs/introduction/overview/
AUTHORS AUTHORS
@ -73,7 +61,7 @@ Kamila Součková <kamila--@--ksp.sk>
COPYING COPYING
------- -------
Copyright \(C) 2017 Kamila Součková. You can redistribute it Copyright \(C) 2018 Kamila Součková. You can redistribute it
and/or modify it under the terms of the GNU General Public License as 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 published by the Free Software Foundation, either version 3 of the
License, or (at your option) any later version. License, or (at your option) any later version.

View File

@ -1,52 +1,70 @@
#!/bin/sh -e #!/bin/sh -e
GOBIN=/opt/gocode/bin # where to find go binaries ##### HARD-CODED CONFIG #####################################################
CONF_DIR=/etc/prometheus CONF_DIR=/etc/prometheus
CONF=$CONF_DIR/prometheus.yml CONF=$CONF_DIR/prometheus.yml
LOGLEVEL=info
##### GET SETTINGS ##########################################################
config="$(cat "$__object/parameter/config")" config="$(cat "$__object/parameter/config")"
retention_days="$(cat "$__object/parameter/retention-days")" retention_days="$(cat "$__object/parameter/retention-days")"
storage_path="$(cat "$__object/parameter/storage-path")" storage_path="$(cat "$__object/parameter/storage-path")"
listen_address="$(cat "$__object/parameter/listen-address")"
alertmanager_url="$(cat "$__object/parameter/alertmanager-url")"
target_heap_size="$(cat "$__object/parameter/target-heap-size")"
rule_files="$(cat "$__object/parameter/rule-files")" rule_files="$(cat "$__object/parameter/rule-files")"
# explorer in kB => convert; by default we go with 1/2 RAM # explorer in kB => convert; by default we go with 1/2 RAM
[ "$target_heap_size" = "auto" ] && target_heap_size=$(($(cat $__global/explorer/memory)*1024/2)) [ "$target_heap_size" = "auto" ] && target_heap_size=$(($(cat $__global/explorer/memory)*1024/2))
##### INSTALL THE PACKAGE ###################################################
FLAGS="config.file '$CONF' require_pkg="" # what to require if I want to require "the package"
storage.local.path '$storage_path' if [ -f "$__object/parameter/install-from-backports" ]; then
storage.local.target-heap-size $(($target_heap_size)) # in bytes; should be 2/3 of available memory because it may be hungry os=$(cat "$__global/explorer/os")
storage.local.retention $(($retention_days*24))h # golang doesn't have days :D os_version=$(cat "$__global/explorer/os_version")
web.listen-address '$listen_address'
alertmanager.url '$alertmanager_url'
log.level $LOGLEVEL"
REAL_FLAGS="$(echo "$FLAGS" | sed -nE 's/^([^#]+).*/ --\1 \\/p')" case $os in
devuan)
[ "$os_version" = "ascii/ceres" ] && os_version='ascii' # "ascii" used in the repo URLs
__apt_source backports --uri http://auto.mirror.devuan.org/merged --distribution $os_version-backports --component main
require="$require __apt_source/backports" __package_apt prometheus --target-release $os_version-backports
require_pkg="__package_apt/prometheus"
;;
*)
echo "--install-from-backports is only supported on Devuan -- ignoring." >&2
echo "Send a pull request if you require it." >&2
;;
esac
else
__package prometheus
require_pkg="__package/prometheus"
fi
__go_get github.com/prometheus/prometheus/cmd/... ##### PREPARE PATHS AND SUCH ################################################
__user prometheus --system require="$require $require_pkg" __directory "$storage_path" --owner prometheus --parents
require="__user/prometheus" __directory "$storage_path" --owner prometheus --parents
require="__user/prometheus" __directory "$CONF_DIR" --owner prometheus --parents
__daemontools_service prometheus --run "setuidgid prometheus $GOBIN/prometheus $REAL_FLAGS" ##### CONFIGURE #############################################################
require="$require __directory/$storage_path __user/prometheus" \ FLAGS="--storage.tsdb.path $storage_path --storage.tsdb.retention $(($retention_days*24))h --web.listen-address [::]:9090"
# TODO it would be neat to restart prometheus on change -- __key_value really should have an --onchange parameter
require="$require $require_pkg" \
__key_value prometheus_args --file /etc/default/prometheus \
--key "ARGS" --value "\"$FLAGS\"" --delimiter "=" \
--onchange "service prometheus restart"
require="$require __directory/$storage_path $require_pkg" \
__config_file $CONF \ __config_file $CONF \
--source $config \ --source $config \
--group prometheus --mode 640 \ --group prometheus --mode 640 \
--onchange "$GOBIN/promtool check-config $CONF && svc -h /service/prometheus" --onchange "promtool check config $CONF && service prometheus reload"
for file in $rule_files; do for file in $rule_files; do
dest=$CONF_DIR/$(basename $file) dest=$CONF_DIR/$(basename $file)
require="$require __directory/$CONF_DIR __user/prometheus" \ require="$require $require_pkg" \
__config_file "$dest" \ __config_file "$dest" \
--source "$file" \ --source "$file" \
--owner prometheus \ --owner prometheus \
--onchange "$GOBIN/promtool check-rules '$dest' && svc -h /service/prometheus" --onchange "promtool check rules '$dest' && service prometheus reload"
done done

View File

@ -0,0 +1 @@
install-from-backports

View File

@ -1,4 +1,3 @@
target-heap-size
retention-days retention-days
rule-files rule-files
storage-path storage-path

View File

@ -1,3 +1 @@
alertmanager-url
config config
listen-address