diff --git a/.kitchen.yml b/.kitchen.yml new file mode 100644 index 0000000..c8edb38 --- /dev/null +++ b/.kitchen.yml @@ -0,0 +1,56 @@ +--- +driver: + name: docker + hostname: prometheus.ci.local + use_sudo: false + +provisioner: + name: salt_solo + salt_install: bootstrap + salt_bootstrap_url: https://bootstrap.saltstack.com + salt_version: latest + require_chef: false + log_level: error + formula: prometheus + grains: + noservices: True + state_top: + base: + "*": + - prometheus + pillars: + top.sls: + base: + "*": + - prometheus + +verifier: + name: inspec + sudo: true + + +platforms: + - name: <%=ENV['PLATFORM'] || 'ubuntu-xenial'%> + driver_config: + image: <%=ENV['PLATFORM'] || 'trevorj/salty-whales:xenial'%> + platform: ubuntu + +suites: + + - name: alertmanager + provisioner: + pillars-from-files: + prometheus.sls: tests/pillar/alertmanager.sls + +## Pushgateway not ready yet + # - name: pushgateway_complex + # provisioner: + # pillars-from-files: + # prometheus.sls: tests/pillar/pushgateway_complex.sls + + - name: server + provisioner: + pillars-from-files: + prometheus.sls: tests/pillar/server.sls + +# vim: ft=yaml sw=2 ts=2 sts=2 tw=125 diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..7a77247 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,39 @@ +sudo: required +services: + - docker + +install: + - pip install PyYAML + - pip install virtualenv + - | + test -e Gemfile || cat < Gemfile + source 'https://rubygems.org' + gem 'rake' + gem 'test-kitchen' + gem 'kitchen-docker' + gem 'kitchen-inspec' + gem 'inspec' + gem 'kitchen-salt', :git => 'https://github.com/salt-formulas/kitchen-salt.git' + - bundle install + +env: + - PLATFORM=trevorj/salty-whales:trusty + - PLATFORM=trevorj/salty-whales:xenial + +before_script: + - set -o pipefail + - make test | tail + +script: + - test ! -e .kitchen.yml || bundle exec kitchen test -t tests/integration + +notifications: + webhooks: + urls: + - https://webhooks.gitter.im/e/6123573504759330786b + on_success: change # options: [always|never|change] default: always + on_failure: never # options: [always|never|change] default: always + on_start: never # options: [always|never|change] default: always + on_cancel: never # options: [always|never|change] default: always + on_error: never # options: [always|never|change] default: always + email: false diff --git a/README.rst b/README.rst index 4b6c4bf..4c126b5 100644 --- a/README.rst +++ b/README.rst @@ -25,44 +25,41 @@ Configure prometheus server external_port: 15010 target: dns: - - name: 'pushgateway' - domain: - - 'tasks.prometheus_pushgateway' - type: A - port: 9091 - - name: 'prometheus' - domain: - - 'tasks.prometheus_server' - type: A - port: 9090 + enabled: true + endpoint: + - name: 'pushgateway' + domain: + - 'tasks.prometheus_pushgateway' + type: A + port: 9091 + - name: 'prometheus' + domain: + - 'tasks.prometheus_server' + type: A + port: 9090 kubernetes: - api_ip: ${_param:kubernetes_control_address} + enabled: true + api_ip: 127.0.0.1 ssl_dir: /opt/prometheus/config cert_name: prometheus-server.crt key_name: prometheus-server.key etcd: - scheme: https - ssl_dir: /opt/prometheus/config - cert_name: prometheus-server.crt - key_name: prometheus-server.key - member: - - host: ${_param:cluster_node01_address} - port: ${_param:cluster_node01_port} - - host: ${_param:cluster_node02_address} - port: ${_param:cluster_node02_port} - - host: ${_param:cluster_node03_address} - port: ${_param:cluster_node03_port} + endpoint: + scheme: https + ssl_dir: /opt/prometheus/config + cert_name: prometheus-server.crt + key_name: prometheus-server.key + member: + - host: ${_param:cluster_node01_address} + port: ${_param:cluster_node01_port} + - host: ${_param:cluster_node02_address} + port: ${_param:cluster_node02_port} + - host: ${_param:cluster_node03_address} + port: ${_param:cluster_node03_port} recording: - - name: 'instance:fd_utilization' + instance:fd_utilization: query: >- process_open_fds / process_max_fds - alert: - PrometheusTargetDown: - if: 'up != 1' - labels: - severity: down - annotations: - summary: 'Prometheus target down' storage: local: engine: "persisted" diff --git a/prometheus/alertmanager.sls b/prometheus/alertmanager.sls index 6f83334..6e1481d 100644 --- a/prometheus/alertmanager.sls +++ b/prometheus/alertmanager.sls @@ -7,6 +7,7 @@ file.managed: - source: salt://prometheus/files/alertmanager.yml - template: jinja + - makedirs: True {%- endif %} {%- endif %} diff --git a/prometheus/server.sls b/prometheus/server.sls index e4dfb5c..b324435 100644 --- a/prometheus/server.sls +++ b/prometheus/server.sls @@ -7,11 +7,13 @@ file.managed: - source: salt://prometheus/files/prometheus.yml - template: jinja + - makedirs: True {{server.dir.config}}/alerts.yml: file.managed: - source: salt://prometheus/files/alerts.yml - template: jinja + - makedirs: True {%- endif %} {%- endif %} diff --git a/tests/pillar/prometheus_alertmanager.sls b/tests/pillar/alertmanager.sls similarity index 81% rename from tests/pillar/prometheus_alertmanager.sls rename to tests/pillar/alertmanager.sls index 48a9d5d..092e788 100644 --- a/tests/pillar/prometheus_alertmanager.sls +++ b/tests/pillar/alertmanager.sls @@ -1,9 +1,12 @@ prometheus: alertmanager: enabled: true + dir: + config: /srv/volumes/prometheus bind: address: 0.0.0.0 port: 9093 + external_port: 15011 config: global: resolve_timeout: 5m @@ -34,3 +37,12 @@ prometheus: webhook_configs: - url: http://127.0.0.1 send_resolved: true +docker: + host: + enabled: true + experimental: true + insecure_registries: + - 127.0.0.1 + log: + engine: json-file + size: 50m \ No newline at end of file diff --git a/tests/pillar/prometheus_server.sls b/tests/pillar/prometheus_server.sls deleted file mode 100644 index c967b8f..0000000 --- a/tests/pillar/prometheus_server.sls +++ /dev/null @@ -1,30 +0,0 @@ -prometheus: - server: - enabled: true - bind: - port: 9090 - address: 0.0.0.0 - storage: - local: - engine: "persisted" - retention: "360h" - memory_chunks: 1048576 - max_chunks_to_persist: 524288 - num_fingerprint_mutexes: 4096 - alertmanager: - notification_queue_capacity: 10000 - config: - global: - scrape_interval: "15s" - scrape_timeout: "15s" - evaluation_interval: "1m" - external_labels: - region: 'region1' - alert: - PrometheusTargetDownKubernetesNodes: - if: 'up{job="kubernetes-nodes"} != 1' - labels: - severity: down - service: prometheus - annotations: - summary: 'Prometheus target down' diff --git a/tests/pillar/prometheus_pushgateway.sls b/tests/pillar/pushgateway.sls similarity index 79% rename from tests/pillar/prometheus_pushgateway.sls rename to tests/pillar/pushgateway.sls index 873daa2..583fcde 100644 --- a/tests/pillar/prometheus_pushgateway.sls +++ b/tests/pillar/pushgateway.sls @@ -4,3 +4,4 @@ prometheus: bind: address: 0.0.0.0 port: 9091 + external_port: 15012 diff --git a/tests/pillar/server.sls b/tests/pillar/server.sls new file mode 100644 index 0000000..9882410 --- /dev/null +++ b/tests/pillar/server.sls @@ -0,0 +1,79 @@ +prometheus: + server: + enabled: true + dir: + config: /srv/volumes/prometheus + config_in_container: /opt/prometheus/config + bind: + port: 9090 + address: 0.0.0.0 + external_port: 15010 + target: + dns: + enabled: true + endpoint: + - name: 'pushgateway' + domain: + - 'tasks.prometheus_pushgateway' + type: A + port: 9091 + - name: 'prometheus' + domain: + - 'tasks.prometheus_server' + type: A + port: 9090 + kubernetes: + enabled: true + api_ip: 127.0.0.1 + ssl_dir: /opt/prometheus/config + cert_name: prometheus-server.crt + key_name: prometheus-server.key + etcd: + endpoint: + scheme: https + ssl_dir: /opt/prometheus/config + cert_name: prometheus-server.crt + key_name: prometheus-server.key + member: + - host: ${_param:cluster_node01_address} + port: ${_param:cluster_node01_port} + - host: ${_param:cluster_node02_address} + port: ${_param:cluster_node02_port} + - host: ${_param:cluster_node03_address} + port: ${_param:cluster_node03_port} + recording: + instance:fd_utilization: + query: >- + process_open_fds / process_max_fds + alert: + PrometheusTargetDown: + if: 'up != 1' + labels: + severity: down + annotations: + summary: 'Prometheus target down' + storage: + local: + engine: "persisted" + retention: "360h" + memory_chunks: 1048576 + max_chunks_to_persist: 524288 + num_fingerprint_mutexes: 4096 + alertmanager: + notification_queue_capacity: 10000 + config: + global: + scrape_interval: "15s" + scrape_timeout: "15s" + evaluation_interval: "1m" + external_labels: + region: 'region1' +docker: + host: + enabled: true + experimental: true + insecure_registries: + - 127.0.0.1 + log: + engine: json-file + size: 50m \ No newline at end of file