global: {%- if server.get('config', {}).global is defined %} {{ server.config.global | yaml(False) | indent(2, true) }} {%- endif %} {%- if server.get('config', {}).get('alertmanager') %} alerting: {%- if server.get('config', {}).get('alert_relabel_configs') %} alert_relabel_configs: {%- for label in server.config.get('alert_relabel_configs', []) %} - action: {{ label.get('action', 'replace') }} {%- if label.get('source_labels') %} {%- if label.source_labels is string %} {%- set label_list = label.source_labels.split(',') %} {%- elif label.source_labels is list %} {%- set label_list = label.source_labels %} {%- endif %} {%- if label_list is defined %} source_labels: {{ label_list }} {%- endif %} {%- endif %} {%- if label.get('regex') %} regex: "{{ label.regex }}" {%- endif %} {%- if label.get('target_label') %} target_label: "{{ label.target_label }}" {%- endif %} {%- if label.get('replacement') %} replacement: "{{ label.replacement }}" {%- endif %} {%- endfor %} {%- endif %} alertmanagers: {%- for name, alertmanager in server.config.alertmanager.iteritems() %} {%- if alertmanager.get('enabled', True) %} # {{ name }} {%- if alertmanager.static_configs is defined %} - static_configs: - targets: {{ alertmanager.static_configs.get('target', [])|yaml }} {%- elif alertmanager.dns_sd_configs is defined %} - dns_sd_configs: - names: {{ alertmanager.dns_sd_configs.get('domain', [])|yaml }} type: {{ alertmanager.dns_sd_configs.type }} port: {{ alertmanager.dns_sd_configs.port }} {%- endif %} {%- endif %} {%- endfor %} {%- endif %} {%- if server.get('config', {}).get('remote_write') %} remote_write: {%- for name, remote_endpoint in server.config.remote_write.iteritems() %} {%- if remote_endpoint.get('enabled', True) %} # {{ name }} - url: {{ remote_endpoint.url }} {%- endif %} {%- endfor %} {%- endif %} rule_files: - alerts.yml {%- set static_target = server.target.static %} {%- if server.get('use_grains', {}).get('target', True) %} {%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %} {%- set static_grain = node_grains.get('prometheus', {}).get('server', {}).get('target', {}).get('static', {}) %} {%- for job_name, job in static_grain.iteritems() %} {%- if static_target[job_name] is not defined %} {%- do static_target.update({job_name: { 'enabled': job.get('enabled', True), 'metrics_path': job.get('metrics_path', '/metrics'), 'honor_labels': job.get('honor_labels', False), 'scrape_interval': job.get('scrape_interval', server.get('config', {}).get('global', {}).get('scrape_interval', '15s')), 'scrape_timeout': job.get('scrape_interval', server.get('config', {}).get('global', {}).get('scrape_interval', '15s')), 'scheme': job.get('scheme', 'http')} }) %} {%- if job.get('tls_config') %} {%- do static_target[job_name].update({ 'tls_config': { 'skip_verify': job.get('tls_config', {}).get('skip_verify', False), 'cert_name': job.get('tls_config', {}).get('cert_name'), 'key_name': job.get('tls_config', {}).get('key_name') } }) %} {%- endif %} {%- endif %} {%- if static_target[job_name]['endpoint'] is not defined %} {%- do static_target[job_name].update({'endpoint': []}) %} {%- endif %} {%- if static_target[job_name]['metric_relabel'] is not defined %} {%- do static_target[job_name].update({'metric_relabel': []}) %} {%- endif %} {%- if static_target[job_name]['relabel_configs'] is not defined %} {%- do static_target[job_name].update({'relabel_configs': []}) %} {%- endif %} {%- for target in job.get('endpoint', []) %} {%- do static_target[job_name]['endpoint'].append(target) %} {%- endfor %} {%- for label in job.get('metric_relabel', []) %} {%- do static_target[job_name]['metric_relabel'].append(label) %} {%- endfor %} {%- for label in job.get('relabel_configs', []) %} {%- do static_target[job_name]['relabel_configs'].append(label) %} {%- endfor %} {%- endfor %} {%- endfor %} {%- endif %} scrape_configs: {%- for job_name, job in static_target.iteritems() %} {%- set nodes = [] %} {%- for target in job.get('endpoint', []) %} {%- set address = "'%s:%d'" | format(target.address, target.port) %} {%- do nodes.append(address) %} {%- endfor %} {%- if nodes|length > 0 and job.get('enabled', True) %} - job_name: {{ job_name }} {% if job.get('scheme') %}scheme: {{ job.scheme }}{%- endif %} {% if job.get('metrics_path') %}metrics_path: {{ job.metrics_path }}{%- endif %} {% if job.honor_labels is defined %}honor_labels: {{ job.honor_labels }}{%- endif %} {% if job.scrape_interval is defined %}scrape_interval: {{ job.scrape_interval }}{%- endif %} {% if job.scrape_timeout is defined %}scrape_timeout: {{ job.scrape_timeout }}{%- endif %} {%- if job.get('params') %} params: {%- for param_name, param_value in job.get('params', {}).iteritems() %} {{ param_name }}: {{ param_value }} {%- endfor %} {%- endif %} {%- if job.get('tls_config') %} tls_config: {% if job.tls_config.get('skip_verify') is defined %}insecure_skip_verify: {{ job.tls_config.skip_verify | lower }}{%- endif %} {% if job.tls_config.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ job.tls_config.cert_name }}{%- endif %} {% if job.tls_config.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ job.tls_config.key_name }}{%- endif %} {%- endif %} static_configs: - targets: [{{ nodes | join(',') }}] {%- if job.get('metric_relabel') %} metric_relabel_configs: {%- for label in job.get('metric_relabel', []) %} - action: {{ label.get('action', 'replace') }} {%- if label.get('source_labels') %} {%- if label.source_labels is string %} {%- set label_list = label.source_labels.split(',') %} {%- elif label.source_labels is list %} {%- set label_list = label.source_labels %} {%- endif %} {%- if label_list is defined %} source_labels: {{ label_list }} {%- endif %} {%- endif %} {%- if label.get('regex') %} regex: "{{ label.regex }}" {%- endif %} {%- if label.get('target_label') %} target_label: "{{ label.target_label }}" {%- endif %} {%- if label.get('replacement') %} replacement: "{{ label.replacement }}" {%- endif %} {%- endfor %} {%- endif %} {%- if job.get('relabel_configs') %} relabel_configs: {%- for label in job.get('relabel_configs', []) %} {%- if label.source_labels is string %} {%- set label_list = label.source_labels.split(',') %} {%- elif label.source_labels is list %} {%- set label_list = label.source_labels %} {%- endif %} {%- if label_list is defined %} - source_labels: {{ label_list }} regex: "{{ label.regex }}" {%- if label.get('target_label') %} target_label: "{{ label.target_label }}" {%- endif %} {%- if label.get('replacement') %} replacement: "{{ label.replacement }}" {%- endif %} {%- endif %} {%- endfor %} {%- endif %} {%- endif %} {%- endfor %} {%- set kubernetes_target = {} %} {%- if server.get('use_grains', {}).get('target', True) %} {%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %} {%- set kubernetes_grain = node_grains.get('prometheus', {}).get('server', {}).get('target', {}).get('kubernetes', {}) %} {%- if kubernetes_grain %} {%- do kubernetes_target.update(kubernetes_grain) %} {%- endif %} {%- endfor %} {%- endif %} {%- if kubernetes_target.get('enabled', False) %} - job_name: 'kubernetes-api' scheme: https tls_config: insecure_skip_verify: true {% if kubernetes_target.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.cert_name }}{%- endif %} {% if kubernetes_target.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.key_name }}{%- endif %} kubernetes_sd_configs: - api_server: {{ kubernetes_target.api_ip }} role: endpoints tls_config: insecure_skip_verify: true {% if kubernetes_target.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.cert_name }}{%- endif %} {% if kubernetes_target.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.key_name }}{%- endif %} relabel_configs: - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_service_name, __meta_kubernetes_endpoint_port_name] action: keep regex: default;kubernetes;https - job_name: 'kubernetes-node' scheme: https tls_config: insecure_skip_verify: true {% if kubernetes_target.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.cert_name }}{%- endif %} {% if kubernetes_target.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.key_name }}{%- endif %} kubernetes_sd_configs: - api_server: {{ kubernetes_target.api_ip }} role: node tls_config: insecure_skip_verify: true {% if kubernetes_target.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.cert_name }}{%- endif %} {% if kubernetes_target.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.key_name }}{%- endif %} relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - job_name: 'kubernetes-cadvisor' scheme: https tls_config: insecure_skip_verify: true {% if kubernetes_target.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.cert_name }}{%- endif %} {% if kubernetes_target.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.key_name }}{%- endif %} kubernetes_sd_configs: - api_server: {{ kubernetes_target.api_ip }} role: node tls_config: insecure_skip_verify: true {% if kubernetes_target.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.cert_name }}{%- endif %} {% if kubernetes_target.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.key_name }}{%- endif %} relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - source_labels: [__address__] action: replace target_label: __address__ regex: (.+)(?::\d+) replacement: $1:{{ kubernetes_target.get('cadvisor', {}).get('port', 4194) }} - source_labels: [__scheme__] action: replace target_label: __scheme__ replacement: {{ kubernetes_target.get('cadvisor', {}).get('scheme', 'http') }} {%- if kubernetes_target.get('endpoint', {}).get('enabled') %} - job_name: 'kubernetes-service-endpoints' scheme: https tls_config: insecure_skip_verify: true {% if kubernetes_target.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.cert_name }}{%- endif %} {% if kubernetes_target.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.key_name }}{%- endif %} kubernetes_sd_configs: - api_server: {{ kubernetes_target.api_ip }} role: endpoints tls_config: insecure_skip_verify: true {% if kubernetes_target.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.cert_name }}{%- endif %} {% if kubernetes_target.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.key_name }}{%- endif %} relabel_configs: - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_scheme] action: replace target_label: __scheme__ regex: (https?) - source_labels: [__meta_kubernetes_service_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_service_annotation_prometheus_io_port] action: replace target_label: __address__ regex: (.+)(?::\d+);(\d+) replacement: $1:$2 - action: labelmap regex: __meta_kubernetes_service_label_(.+) - source_labels: [__meta_kubernetes_service_namespace] action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_service_name] action: replace target_label: kubernetes_name - source_labels: [__meta_kubernetes_pod_node_name] action: replace target_label: kubernetes_io_hostname - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: kubernetes_pod_name {%- endif %} {%- if kubernetes_target.get('pod', {}).get('enabled') %} - job_name: 'kubernetes-pod' scheme: https tls_config: insecure_skip_verify: true {% if kubernetes_target.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.cert_name }}{%- endif %} {% if kubernetes_target.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.key_name }}{%- endif %} kubernetes_sd_configs: - api_server: {{ kubernetes_target.api_ip }} role: pod tls_config: insecure_skip_verify: true {% if kubernetes_target.get('cert_name') %}cert_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.cert_name }}{%- endif %} {% if kubernetes_target.get('key_name') %}key_file: {{ server.dir.config_in_container }}/{{ kubernetes_target.key_name }}{%- endif %} relabel_configs: - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape] action: keep regex: true - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] action: replace regex: (.+):(?:\d+);(\d+) replacement: ${1}:${2} target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - source_labels: [__meta_kubernetes_pod_namespace] action: replace target_label: kubernetes_namespace - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: kubernetes_pod_name {%- endif %} {%- endif %} {%- set dns_endpoints = {} %} {%- if server.get('use_grains', {}).get('target', True) %} {%- for node_name, node_grains in salt['mine.get']('*', 'grains.items').iteritems() %} {%- set dns_grain = node_grains.get('prometheus', {}).get('server', {}).get('target', {}).get('dns', {}) %} {%- if dns_grain.get('enabled', False) %} {%- for endpoint in dns_grain.get('endpoint', []) %} {%- do dns_endpoints.update({endpoint.name: endpoint}) %} {%- endfor %} {%- endif %} {%- endfor %} {%- endif %} {%- if server.get('target', {}).get('dns', {}).get('enabled', False) %} {%- for endpoint in server.get('target', {}).get('dns', {}).get('endpoint', []) %} {%- do dns_endpoints.update({endpoint.name: endpoint}) %} {%- endfor %} {%- endif %} {%- for name, endpoint in dns_endpoints | dictsort %} - job_name: {{ endpoint.name }} dns_sd_configs: - names: {%- for domain in endpoint.domain %} - {{ domain }} {%- endfor %} type: {{ endpoint.type }} port: {{ endpoint.port }} {%- endfor %}