Menu

Prometheus Configure

module.exports = (service) ->
  options = service.options

Identities

  # Group
  options.group ?= {}
  options.group = name: options.group if typeof options.group is 'string'
  options.group.name ?= 'prometheus'
  options.group.system ?= true
  # User
  options.user ?= {}
  options.user = name: options.user if typeof options.user is 'string'
  options.user.name ?= 'prometheus'
  options.user.home ?= "/var/lib/#{options.user.name}"
  options.user.system ?= true
  options.user.comment ?= 'Prometheus User'
  # options.user.groups ?= 'hadoop'
  options.user.gid ?= options.group.name
  options.user.limits ?= {}
  options.user.limits.nofile ?= 64000
  options.user.limits.nproc ?= true

Packages

November 2017: lucasbak Ryba does only support prometheus 2.0. If admisitrator want to use older version the commandline options should be changed (for example -config.file has become --config.file) in order for systemd to start correctly the process.

  options.version ?= '2.0.0-rc.2'
  options.source ?= "https://github.com/prometheus/prometheus/releases/download/v#{options.version}/prometheus-#{options.version}.linux-amd64.tar.gz"
  # options.repo ?= 'https://packagecloud.io/prometheus-rpm/release/packages/el/7/prometheus-1.8.1-1.el7.centos.x86_64.rpm'
  options.download = service.deps.prometheus_monitor[0].node.fqdn is service.node.fqdn
  options.install_dir ?= "/usr/prometheus/#{options.version}/monitor"
  options.latest_dir ?= '/usr/prometheus/latest/monitor'

Layout

  options.conf_dir ?= '/etc/prometheus-monitor/conf'
  options.log_dir ?= '/var/log/prometheus'
  options.run_dir ?= '/var/run/prometheus'
  options.iptables ?= !!service.deps.iptables and service.deps.iptables?.options?.action is 'start'

Configuration

  options.port ?= '9091'
  options.config ?= {}
  options.config['global'] ?= {}
  options.config['global']['scrape_interval'] ?= '15s'
  options.config['global']['evaluation_interval'] ?= '20s'
  options.config['scrape_configs'] ?= []

Scrappers

configure by default two new label, one cluster and the other service Note: cluster name shoul not contain other character than ([a-zA-Z0-9-_]*)

  options.relabel_configs ?= [
      source_labels: ['job']
      regex: "([a-zA-Z0-9\\-\\_]*).([a-zA-Z0-9]*)"
      target_label: "cluster"
      replacement: "$1"
    ,
      source_labels: ['job']
      regex: "([a-zA-Z0-9\\-\\_]*).([a-zA-Z0-9]*)"
      target_label: "service"
      replacement: "$2"
    ,
      source_labels: ['__address__']
      regex: "([a-zA-Z0-9\\-\\_\\.]*):([a-zA-Z0-9]*)"
      target_label: "hostname"
      replacement: "$1"
    ]

options.config['scrape_configs'] ?= []

## Zookeeper

if service.deps.jmx_exporter_zookeeper?.length > 0

options.config['scrape_configs'].push

job_name: "#{service.deps.jmx_exporter_zookeeper[0].options.cluster_name}.zookeeper"

static_configs:

[

targets: for srv in service.deps.jmx_exporter_zookeeper

"#{srv.node.fqdn}:#{srv.options.port}"

]

relabel_configs: options.relabel_configs

## HDFS CLient

if service.deps.jmx_exporter_hdfs_dn?.length > 0

options.config['scrape_configs'].push

job_name: "#{service.deps.jmx_exporter_hdfs_dn[0].options.cluster_name}.datanode"

static_configs:

[

targets: for srv in service.deps.jmx_exporter_hdfs_dn

"#{srv.node.fqdn}:#{srv.options.port}"

]

relabel_configs: options.relabel_configs

## HDFS JournalNode

if service.deps.jmx_exporter_hdfs_jn?.length > 0

options.config['scrape_configs'].push

job_name: "#{service.deps.jmx_exporter_hdfs_jn[0].options.cluster_name}.journalnode"

static_configs:

[

targets: for srv in service.deps.jmx_exporter_hdfs_jn

"#{srv.node.fqdn}:#{srv.options.port}"

]

relabel_configs: options.relabel_configs

## HDFS NameNode

if service.deps.jmx_exporter_hdfs_nn?.length > 0

options.config['scrape_configs'].push

job_name: "#{service.deps.jmx_exporter_hdfs_nn[0].options.cluster_name}.namenode"

static_configs:

[

targets: for srv in service.deps.jmx_exporter_hdfs_nn

"#{srv.node.fqdn}:#{srv.options.port}"

]

relabel_configs: options.relabel_configs

Storage

  options.storage ?= {}
  options.storage.path ?= "#{options.user.home}/data"

SSL

  # options.ssl = merge {}, service.deps.ssl?.options, options.ssl
  # options.ssl.enabled ?= !!service.deps.ssl
  # if options.ssl.enabled
  #   throw Error "Required Option: ssl.cert" if  not options.ssl.cert
  #   throw Error "Required Option: ssl.key" if not options.ssl.key
  #   throw Error "Required Option: ssl.cacert" if not options.ssl.cacert
  #   options.config['tls_config'] ?= {}
  #   options.config['tls_config']['ca_file'] ?= "#{options.conf_dir}/cacert.pem"
  #   options.config['tls_config']['cert_file'] ?= "#{options.conf_dir}/cert.pem"
  #   options.config['tls_config']['key_file'] ?= "#{options.conf_dir}/key.pem"
  #   options.config['tls_config']['server_name'] ?= service.node.fqdn
  #   options.config['tls_config']['insecure_skip_verify'] ?= true

Wait

  options.wait ?= {}
  options.wait.tcp ?= for srv in service.deps.prometheus_monitor
      host: srv.node.fqdn
      port: srv.options.port or options.port or 9091

Dependencies

{merge} = require '@nikitajs/core/lib/misc'

Documentation