Git Product home page Git Product logo

puppet-graphite's Introduction

graphite

Table of Contents

  1. Overview - What is the graphite module?

  2. Module Description - What does this module do?

  3. Setup - The basics of getting started with graphite

  4. Usage - The class and available configurations

  5. Requirements

  6. Limitations - OS compatibility, etc.

  7. Contributing to the graphite module

Overview

This module installs and makes basic configs for graphite, with carbon and whisper.

Puppet Forge Build Status Puppet Forge Downloads

Module Description

Graphite, and its components Carbon and Whisper, is an enterprise-scale monitoring tool. This module sets up a simple graphite server with all its components. Furthermore it can be used to set up more complex graphite environments with metric aggregation, clustering and so on.

Setup

What graphite affects:

  • packages/services/configuration files for Graphite
  • on default sets up webserver (can be disabled if manage by other module)

Beginning with Graphite

To install Graphite with default parameters

    class { 'graphite': }

The defaults are determined by your operating system e.g. Debian systems have one set of defaults, and RedHat systems have another). This defaults should work well on testing environments with graphite as a standalone service on the machine. For production use it is recommend to use a database like MySQL and cache data in memcached (not installed with this module) and configure it here. Furthermore you should check things like gr_storage_schemas.

Configure MySQL and Memcached

  class { 'graphite':
    gr_max_updates_per_second => 100,
    gr_timezone               => 'Europe/Berlin',
    secret_key                => 'CHANGE_IT!',
    gr_storage_schemas        => [
      {
        name       => 'carbon',
        pattern    => '^carbon\.',
        retentions => '1m:90d'
      },
      {
        name       => 'special_server',
        pattern    => '^longtermserver_',
        retentions => '10s:7d,1m:365d,10m:5y'
      },
      {
        name       => 'default',
        pattern    => '.*',
        retentions => '60:43200,900:350400'
      }
    ],
    gr_django_db_engine       => 'django.db.backends.mysql',
    gr_django_db_name         => 'graphite',
    gr_django_db_user         => 'graphite',
    gr_django_db_password     => 'MYsEcReT!',
    gr_django_db_host         => 'mysql.my.domain',
    gr_django_db_port         => '3306',
    gr_memcache_hosts         => ['127.0.0.1:11211']
  }

Configure Graphite with Grafana

This setup will use the puppetlabs-apache and bfraser-grafana modules to setup a graphite system with grafana frontend. You will also need an elasticsearch as it is required for grafana.

include '::apache'

apache::vhost { 'graphite.my.domain':
  port    => '80',
  docroot => '/opt/graphite/webapp',
  wsgi_application_group      => '%{GLOBAL}',
  wsgi_daemon_process         => 'graphite',
  wsgi_daemon_process_options => {
    processes          => '5',
    threads            => '5',
    display-name       => '%{GROUP}',
    inactivity-timeout => '120',
  },
  wsgi_import_script          => '/opt/graphite/conf/graphite_wsgi.py',
  wsgi_import_script_options  => {
    process-group     => 'graphite',
    application-group => '%{GLOBAL}'
  },
  wsgi_process_group          => 'graphite',
  wsgi_script_aliases         => {
    '/' => '/opt/graphite/conf/graphite_wsgi.py'
  },
  headers => [
    'set Access-Control-Allow-Origin "*"',
    'set Access-Control-Allow-Methods "GET, OPTIONS, POST"',
    'set Access-Control-Allow-Headers "origin, authorization, accept"',
  ],
  directories => [{
    path => '/media/',
    order => 'deny,allow',
    allow => 'from all'}
  ]
}->
class { 'graphite':
  gr_web_server           => 'none',
  gr_disable_webapp_cache => true,
}

class {'grafana':
 # see manual of this module
}

Configuration with Apache 2.4 and CORS

If you use a system which ships Apache 2.4, then you will need a slightly different vhost config. Here is an example with Apache 2.4 and CORS enabled. If you do not know what CORS, then do not use it. Its disabled by default. You will need CORS for Webguis like Grafana.

  class { 'graphite':
    gr_apache_24               => true,
    gr_web_cors_allow_from_all => true,
    secret_key                 => 'CHANGE_IT!'
  }

Configuration with Additional LDAP Options

If additional LDAP parameters are needed for your Graphite installation, you can specify them using the gr_ldap_options parameter. For example, this is useful if you're using SSL and need to configure LDAP to use your SSL cert and key files.

This Puppet configuration...

  class { 'graphite':
    gr_ldap_options => {
      'ldap.OPT_X_TLS_REQUIRE_CERT' => 'ldap.OPT_X_TLS_ALLOW',
      'ldap.OPT_X_TLS_CACERTDIR'    => '"/etc/ssl/ca"',
      'ldap.OPT_X_TLS_CERTFILE'     => '"/etc/ssl/mycert.crt"',
      'ldap.OPT_X_TLS_KEYFILE'      => '"/etc/ssl/mykey.pem"',
    },
  }

... adds these lines to the local_settings.py configuration file for Graphite web.

import ldap
ldap.set_option(ldap.OPT_X_TLS_CACERTDIR, "/etc/ssl/ca")
ldap.set_option(ldap.OPT_X_TLS_CERTFILE, "/etc/ssl/mycert.crt")
ldap.set_option(ldap.OPT_X_TLS_KEYFILE, "/etc/ssl/mykey.pem")
ldap.set_option(ldap.OPT_X_TLS_REQUIRE_CERT, ldap.OPT_X_TLS_ALLOW)

See http://www.python-ldap.org/ for more details about these options.

Configuration with multiple cache, relay and/or aggregator instances

You could create more than one instance for cache, relay or aggregator using the gr_cache_instances, gr_relay_instances and gr_aggregator_instances parameters. These paremeters must be hashes, and the keys are the name of the instances (cache:b, cache:c, relay:b, relay:c, etc.). Every hash must have an array of parameters which will be written as is in the config file. The defaults settings for the additional instances will be the ones set for the principal instance.

   class {'graphite':
      gr_line_receiver_port => 2003,
      gr_pickle_receiver_port => 2004,
      gr_cache_query_port => 7002,

      gr_cache_instances => {
         'cache:b' => {
            'LINE_RECEIVER_PORT' => 2103,
            'PICKLE_RECEIVER_PORT' => 2104,
            'CACHE_QUERY_PORT' => 7102,
         },
         'cache:c' => {
            'LINE_RECEIVER_PORT' => 2203,
            'PICKLE_RECEIVER_PORT' => 2204,
            'CACHE_QUERY_PORT' => 7202,
         }
      }
   }

So in this case you would have 3 cache instances, the first one is cache (you can refer to it as cache:a too), cache:b and cache:c. cache:a will listen on ports 2003, 2004 and 7002 for line, pickle and query respectively. But, cache:b will do it on ports 2103, 2104, and 7102, and cache:c on 2203, 2204 and 7202. All other parameters from cache:a will be inherited by cache:b and c.

Install Graphite 1.1 and enable tag-support

Taged metrics are available in Graphite/Carbon 1.1.1 and later. To use tags Carbon has to add tags to a TagDB (see https://graphite.readthedocs.io/en/latest/tags.html) for details. To enable this feature in Carbon set the parameter gr_tags_enable to true. This will configure Carbon to pass tags to Graphite-web listening on 127.0.0.1 and port gr_web_server_port. Redis and HTTP(S) Tag DBs are not yet supported.

To use tags at least version 1.1.1 of Graphite-Web/Carbopn/Whisper as well as compatible versions of Django, Django Tagging and Twisted have to be installed.

class { 'graphite': 
    gr_tags_enable            => true,
    #
    # Needed to install / upgrade to Graphite 1.1
    #
    gr_graphite_ver           => '1.1.7',
    gr_carbon_ver             => '1.1.7',
    gr_whisper_ver            => '1.1.7',
    gr_django_ver             => '1.11',
    gr_django_tagging_ver     => '0.4.6',
    gr_twisted_ver            => '20.3.0',
    gr_django_init_command    => 'PYTHONPATH=/opt/graphite/webapp /usr/local/bin/django-admin.py migrate --setting=graphite.settings --fake-initial',
    gr_django_init_provider   => 'shell',
}

Installing with something other than pip and specifying package names and versions

If you need to install via something other than pip, an internal apt repo with fpm converted packages for instance, you can set gr_pip_install to false. If you're doing this you'll most likely have to override the default package names and versions as well.

  class { '::graphite':
    gr_pip_install        => false,
    gr_django_tagging_pkg => 'python-django-tagging',
    gr_django_tagging_ver => 'present',
    gr_twisted_pkg        => 'python-twisted',
    gr_twisted_ver        => 'present',
    gr_txamqp_pkg         => 'python-txamqp',
    gr_txamqp_ver         => 'present',
    gr_graphite_pkg       => 'python-graphite-web',
    gr_graphite_ver       => 'present',
    gr_carbon_pkg         => 'python-carbon',
    gr_carbon_ver         => 'present',
    gr_whisper_pkg        => 'python-whisper',
    gr_whisper_ver        => 'present',
  }

Additionally, the Django package is normally installed from a system package, but can be changed to install from pip instead.

  class { '::graphite':
    gr_django_pkg      => 'django',
    gr_django_ver      => '1.5',
    gr_django_provider => 'pip',
  }

Managing system pip and Python development packages

If gr_pip_install is set to true, both python-pip and Python development packages will need to be installed. If you want to manage those packages separately, set gr_manage_python_packages to false.

class { '::graphite': gr_pip_install => true, gr_manage_python_packages => false, }

Installing with pip from a non-PyPI source

You can also chose to install the pip packages from a source other than PyPI, such as a file on disk or an HTTP server. If you do this you will also have to set the package versions to 'present' to avoid errors from Puppet:

  class { '::graphite':
    gr_django_tagging_ver    => 'present',
    gr_django_tagging_source => 'http://example.com/django-tagging-0.3.1.tar.gz',
    gr_twisted_ver           => 'present',
    gr_twisted_source        => 'http://example.com/Twisted-11.1.0.tar.bz2',
    gr_txamqp_ver            => 'present',
    gr_txamqp_source         => 'http://example.com/txAMQP-0.4.tar.gz',
    gr_graphite_ver          => 'present',
    gr_graphite_source       => 'http://example.com/graphite-web-0.9.15.tar.gz',
    gr_carbon_ver            => 'present',
    gr_carbon_source         => 'http://example.com/carbon-0.9.15.tar.gz',
    gr_whisper_ver           => 'present',
    gr_whisper_source        => 'http://example.com/whisper-0.9.15.tar.gz',
  }

You can also specify an alternate source for all packages (and their dependencies) by passing options to pip install using gr_pip_install_options:

  class { '::graphite':
    gr_pip_install_options => [
      '--no-index',
      '--find-links', 'https://example.com/pip_packages/',
    ],
  }

For more details on how these options work, see the documentation for pip install.

Usage

Class: graphite

This is the primary class. And the only one which should be used.

Parameters within graphite:

gr_group

Default is empty. The group of the user (see gr_user) who runs graphite.

gr_user

Default is empty. The user who runs graphite. If this is empty carbon runs as the user that invokes it.

gr_enable_carbon_cache

Default is true. Enable carbon cache.

gr_max_cache_size

Default is 'inf'. Limits the size of the cache to avoid swapping or becoming CPU bound. Use the value "inf" (infinity) for an unlimited cache size.

gr_max_updates_per_second

Default is 500. Limits the number of whisper update_many() calls per second, which effectively means the number of write requests sent to the disk.

gr_max_updates_per_second_on_shutdown

Default is 'undef' (no limit change on shutdown). Change the limits of gr_max_updates_per_second in case of an stop/shutdown event to speed up/slow down the shutdown process.

gr_max_creates_per_minute

Default is 50. Softly limits the number of whisper files that get created each minute.

gr_carbon_metric_prefix

The prefix to be applied to internal performance metrics. Defaults to 'carbon'.

gr_carbon_metric_interval

Default is 60. Set the interval between sending internal performance metrics; affects all carbon daemons.

gr_carbon_relay_ulimit

Default is undef. Set the maximum number of file descriptors for carbon-relay process.

gr_line_receiver_interface

Default is '0.0.0.0' (string). Interface the line receiver listens.

gr_line_receiver_port

Default is 2003. Port of line receiver.

gr_enable_udp_listener

Default is 'False' (string). Set this to True to enable the UDP listener.

gr_udp_receiver_interface

Default is '0.0.0.0' (string). Its clear, isnt it?

gr_udp_receiver_port

Default is 2003. Self explaining.

gr_pickle_receiver_interface

Default is '0.0.0.0' (string). Pickle is a special receiver who handle tuples of data.

gr_pickle_receiver_port

Default is 2004. Self explaining

gr_log_listener_connections

Default is 'True' (string). Logs successful connections

gr_use_insecure_unpickler

Default is 'False' (string). Set this to 'True' to revert to the old-fashioned insecure unpickler.

gr_use_whitelist

Default is 'False' (string). Set this to 'True' to enable whitelists and blacklists.

gr_whitelist

List of patterns to be included in whitelist.conf. Default is [ '.*' ].

gr_blacklist

List of patterns to be included in blacklist.conf. Default is [ ].

gr_cache_query_interface

Default is '0.0.0.0'. Interface to send cache queries to.

gr_cache_query_port

Default is 7002. Self explaining.

gr_timezone

Default is 'GMT' (string). Timezone for graphite to be used.

gr_base_dir

Default is '/opt/graphite'. Set base install location of Graphite. This forms the base location for installs, predominantly appropriate for pip installations. When not installing using pip a typical location for this may be '/opt/carbon'.

gr_base_dir_managed_externally

Boolean, default to false . Useful if the base install location of Graphite is managed by other Puppet resource (like a mountpoint for example)

gr_storage_dir

Default is '${gr_base_dir}/storage'. Set location of base storage files. When not installing using pip a typical location for this may be '/opt/carbon'. This dir is also used as pid dir on RedHat.

gr_local_data_dir

Default is '${gr_storage_dir}/whisper'. Set location of whisper files.

gr_rrd_dir

Default is '${gr_storage_dir}/rrd'. Set location of rrd data files.

gr_whitelists_dir

Default is '${gr_storage_dir}/rrd'. Set location of whitelist configuration files.

gr_carbon_conf_dir

Default is '${gr_base_dir}/conf'. Set location of Carbon's configuration files. Most relevant when not using pip for installation. A typical location for this may be '/etc/carbon'.

gr_carbon_log_dir

Default is '${gr_storage_dir}/log/carbon-cache'. Set location of carbon cache log files.

gr_carbon_log_rotate

Default is 'True'. Enable daily log rotation.

gr_graphiteweb_log_dir

Default is '${gr_storage_dir}/log'. Set location of graphite web log files.

gr_graphiteweb_conf_dir

Default is '${gr_base_dir}/conf'. Set location of graphite web configuration.

gr_graphiteweb_webapp_dir

Default is '${gr_base_dir}/webapp'. Set location of graphite web's webapp files.

gr_graphiteweb_storage_dir

Default is '/var/lib/graphite-web'. Set location of graphite web's storage, used for graphite.db file.

gr_graphiteweb_install_lib_dir

Default is '${gr_graphiteweb_webapp_dir}/graphite'. Set location of libraries directory for graphite web.

gr_storage_schemas

Default is

[
  {
    name       => 'carbon',
    pattern    => '^carbon\.',
    retentions => '1m:90d'
  },
  {
    name       => 'default',
    pattern    => '.*',
    retentions => '1s:30m,1m:1d,5m:2y'
  }
]

The storage schemas, which describes how long matching graphs are to be stored in detail.

gr_storage_aggregation_rules

Default is the Hashmap:

{
  '00_min'         => { pattern => '\.min$',   factor => '0.1', method => 'min' },
  '01_max'         => { pattern => '\.max$',   factor => '0.1', method => 'max' },
  '02_sum'         => { pattern => '\.count$', factor => '0.1', method => 'sum' },
  '99_default_avg' => { pattern => '.*',       factor => '0.5', method => 'average'}
}

The storage aggregation rules.

gr_web_server

Default is 'apache'. The web server to configure. Valid values are 'apache', 'nginx', 'wsgionly' or 'none'.

Apache is configured with mod_wsgi, nginx is configured with gunicorn. 'wsgionly' configures only gunicorn.

The value 'none' means that you will manage the webserver yourself.

gr_web_server_port

Default is 80. The HTTP port which the web server will use. Only used for $gr_web_server => 'apache' or 'nginx'.

gr_web_server_port_https

Default is 443. The HTTPS port which the web server will use. Only used for $gr_web_server => 'apache'.

gr_web_servername

Default is $::fqdn (string). Virtualhostname of Graphite webgui.

gr_web_cors_allow_from_all

Default is false (boolean). Include CORS Headers for all hosts (*) in web server config. This is needed for tools like Grafana.

gr_use_ssl

If true, alter web server config to enable SSL. Default is false (boolean). Only used for apache at the moment.

gr_ssl_cert

Path to SSL cert file. Default is undef.

gr_ssl_key

Path to SSL key file. Default is undef.

gr_ssl_dir

Path to SSL dir containing keys and certs. Default is undef.

gr_web_group

Group name to chgrp the files that will served by webserver. Only necessary for gr_web_server => 'wsgionly' or 'none'.

gr_web_user

Username to chown the files that will served by webserver. Only necessary for gr_web_server => 'wsgionly' or 'none'.

gr_apache_conf_template

Template to use for Apache vhost config. Default is 'graphite/etc/apache2/sites-available/graphite.conf.erb'.

gr_apache_conf_prefix

Default is '' (String). Prefix of the Apache config file. Useful if you want to change the order of the virtual hosts to be loaded. For example: '000-'

gr_apache_24

Boolean to enable configuration parts for Apache 2.4 instead of 2.2 Default is false/true (autodected. see params.pp)

gr_apache_noproxy

Optional setting to disable proxying of requests. When set, will supply a value to 'NoProxy'.

{
  gr_apache_noproxy   => "0.0.0.0/0"
}

Will insert:

  NoProxy 0.0.0.0/0

In the /etc/apache2/conf.d/graphite.conf file.

gr_django_1_4_or_less

Default is false (boolean). Django settings style.

gr_django_db_engine

Default is 'django.db.backends.sqlite3' (string). Can be set to

  • django.db.backends.postgresql <- Removed in Django 1.4
  • django.db.backends.postgresql_psycopg2
  • django.db.backends.mysql
  • django.db.backends.sqlite3
  • django.db.backends.oracle
gr_django_db_name

Default is '/opt/graphite/storage/graphite.db' (string). Name of database to be used by django.

gr_django_db_user

Default is '' (string). Name of database user.

gr_django_db_password

Default is '' (string). Password of database user.

gr_django_db_host

Default is '' (string). Hostname/IP of database server.

gr_django_db_port

Default is '' (string). Port of database.

gr_enable_carbon_relay

Default is false. Enable carbon relay.

gr_relay_line_interface

Default is '0.0.0.0' (string)

gr_relay_line_port

Default is 2013 (integer)

gr_relay_enable_udp_listener

Default is 'False'. Enables the UDP listener for carbon-relay.

gr_relay_udp_receiver_interface

Default is '0.0.0.0' (string)

gr_relay_udp_receiver_port

Default is 2013 (integer)

gr_relay_pickle_interface

Default is '0.0.0.0' (string)

gr_relay_pickle_port

Default is 2014 (integer)

gr_relay_log_listener_connections

Default is 'True' (string). Logs successful connections

gr_relay_method

Default is 'rules'

gr_relay_replication_factor

Default is 1 (integer). Add redundancy by replicating every datapoint to more than one machine.

gr_relay_diverse_replicas

Default is 'True' (string). Add to guarantee replicas across distributed hosts.

gr_relay_destinations

Default is [ '127.0.0.1:2004' ] (array). Array of backend carbons for relay.

gr_relay_max_queue_size

Default is 10000 (integer)

gr_relay_use_flow_control

Default is 'True' (string).

gr_relay_rules

Relay rule set. Default is

{
   all       => { pattern      => '.*',
                  destinations => [ '127.0.0.1:2004' ] },
   'default' => { 'default'    => true,
                  destinations => [ '127.0.0.1:2004:a' ] },
}
gr_enable_carbon_aggregator

Default is false (boolean) Enable the carbon aggregator daemon.

gr_aggregator_line_interface

Default is '0.0.0.0' (string). Address for line interface to listen on.

gr_aggregator_line_port

Default is 2023. TCP port for line interface to listen on.

gr_aggregator_enable_udp_listener

Default is 'False' (string). Set this to True to enable the UDP listener.

gr_aggregator_udp_receiver_interface

Default is '0.0.0.0' (string). Its clear, isnt it?

gr_aggregator_udp_receiver_port

Default is 2023. Self explaining.

gr_aggregator_pickle_interface

Default is '0.0.0.0' (string). IP address for pickle interface.

gr_aggregator_pickle_port

Default is 2024. Pickle port.

gr_aggregator_log_listener_connections

Default is 'True' (string). Logs successful connections

gr_aggregator_forward_all

Default is 'True' (string). Forward all metrics to the destination(s) defined in gr_aggregator_destinations.

gr_aggregator_destinations

Default is [ '127.0.0.1:2004' ] (array). Array of backend carbons.

gr_aggregator_max_queue_size

Default is 10000. Maximum queue size.

gr_aggregator_use_flow_control

Default is 'True' (string). Enable flow control Can be True or False.

gr_aggregator_max_intervals

Default is 5. Maximum number intervals to keep around.

gr_aggregator_rules

Default is

{
  'carbon-class-mem'  => 'carbon.all.<class>.memUsage (60) = sum carbon.<class>.*.memUsage',
  'carbon-all-mem'    => 'carbon.all.memUsage (60) = sum carbon.*.*.memUsage',
}

Hashmap of carbon aggregation rules.

gr_memcache_hosts

Default is undef (array). List of memcache hosts to use. eg ['127.0.0.1:11211','10.10.10.1:11211']

secret_key

Default is 'UNSAFE_DEFAULT' (string). CHANGE IT! Secret used as salt for things like hashes, cookies, sessions etc. Has to be the same on all nodes of a graphite cluster.

gr_cluster_servers

Default is undef (array). Array of webbapp hosts. eg.: ['10.0.2.2:80', '10.0.2.3:80']

gr_carbonlink_hosts

Default is undef (array). Array of carbonlink hosts. eg.: ['10.0.2.2:80', '10.0.2.3:80']

gr_carbonlink_hashing_type

Default is undef (string). Defines consistent-hashing type for 0.9.16+, e.g.: 'carbon_ch'

gr_cluster_fetch_timeout

Default is 6. Timeout to fetch series data.

gr_cluster_find_timeout

Default is 2.5 . Timeout for metric find requests.

gr_cluster_retry_delay

Default is 10. Time before retrying a failed remote webapp.

gr_cluster_cache_duration

Default is 300. Time to cache remote metric find results.

gr_cluster_store_merge_results

Default is 'True'. During a rebalance of a consistent hash cluster, after a partition event on a replication > 1 cluster or in other cases we might receive multiple TimeSeries data for a metric key. Merge them together rather than choosing the "most complete" one (pre-0.9.14 behaviour).

nginx_htpasswd

Default is undef (string). The user and salted SHA-1 (SSHA) password for Nginx authentication. If set, Nginx will be configured to use HTTP Basic authentication with the given user & password. e.g.: 'testuser:$jsfak3.c3Fd0i1k2kel/3sdf3'

nginx_proxy_read_timeout

Default is 10. Value to use for nginx's proxy_read_timeout setting

manage_ca_certificate

Default is true (boolean). Used to determine if the module should install ca-certificate on Debian machines during the initial installation.

gr_use_ldap

Default is false (boolean). Turn ldap authentication on/off.

gr_ldap_uri

Default is '' (string). Set ldap uri.

gr_ldap_search_base

Default is '' (string). Set the ldap search base.

gr_ldap_base_user

Default is '' (string).Set ldap base user.

gr_ldap_base_pass

Default is '' (string). Set ldap password.

gr_ldap_user_query

Default is '(username=%s)' (string). Set ldap user query.

gr_ldap_options

Hash of additional LDAP options to be enabled. For example, { 'ldap.OPT_X_TLS_REQUIRE_CERT' => 'ldap.OPT_X_TLS_ALLOW' }. Default is { }.

gr_use_remote_user_auth

Default is 'False' (string). Allow use of REMOTE_USER env variable within Django/Graphite.

gr_remote_user_header_name

Default is undef. Allows the use of a custom HTTP header, instead of the REMOTE_USER env variable (mainly for nginx use) to tell Graphite a user is authenticated. Useful when using an external auth handler with X-Accel-Redirect etc. Example value - HTTP_X_REMOTE_USER The specific use case for this is OpenID right now, but could be expanded to anything. One example is something like http://antoineroygobeil.com/blog/2014/2/6/nginx-ruby-auth/ combined with the option gr_web_server = 'wsgionly' and http://forge.puppetlabs.com/jfryman/nginx with some custom vhosts. The sample external auth app is available from here

gunicorn_arg_timeout

Default is 30. value to pass to gunicorns --timeout arg.

gunicorn_bind

Default is 'unix:/var/run/graphite.sock'. value to pass to gunicorns --bind arg.

gunicorn_workers

Default is 2. value to pass to gunicorn's --worker arg.

gr_cache_instances

Default is empty array. Allow multiple additional cache instances. (beside the default one) Example value:

{
    'cache:b' => {
        'LINE_RECEIVER_PORT' => 2103,
        'PICKLE_RECEIVER_PORT' => 2104,
        'CACHE_QUERY_PORT' => 7102,
    },
    'cache:c' => {
        'LINE_RECEIVER_PORT' => 2203,
        'PICKLE_RECEIVER_PORT' => 2204,
        'CACHE_QUERY_PORT' => 7202,
    }
}
gr_relay_instances

Default is empty array. Allow multiple additional relay instances. (beside the default one)

Example: see gr_cache_instances

gr_aggregator_instances

Default is empty array. Allow multiple additional aggregator instances. (beside the default one)

Example: see gr_cache_instances

gr_whisper_autoflush

Default is 'False'. Set autoflush for whisper

gr_whisper_lock_writes

Default is false. Set lock writes for whisper

gr_whisper_fallocate_create

Default is false. Set fallocate_create for whisper

gr_log_cache_performance

Default is 'False' (string). Logs timings for remote calls to carbon-cache

gr_log_cache_queue_sorts

Default is 'True' (String). Logs time required for the queue sorts

gr_log_rendering_performance

Default is 'False' (string). Triggers the creation of rendering.log which logs timings for calls to the The Render URL API

gr_log_metric_access

Default is 'False' (string). Trigges the creation of metricaccess.log which logs access to Whisper and RRD data files

gr_django_tagging_pkg

Default is 'django-tagging' (string) The name of the django-tagging package that should be installed

gr_django_tagging_ver

Default is '0.3.1' (string) The version of the django-tagging package that should be installed

gr_django_tagging_source

Default is undef (string). The source of the django-tagging package that should be installed.

gr_twisted_pkg

Default is 'Twisted' (string) The name of the twisted package that should be installed

gr_twisted_ver

Default is '11.1.0' (string) The version of the twisted package that should be installed

gr_twisted_source

Default is undef (string). The source of the twisted package that should be installed.

gr_txamqp_pkg

Default is 'txAMQP' (string) The name of the txamqp package that should be installed

gr_txamqp_ver

Default is '0.4' (string) The version of the txamqp package that should be installed

gr_txamqp_source

Default is undef (string). The source of the txamqp package that should be installed.

gr_graphite_pkg

Default is 'graphite-web' (string) The name of the graphite package that should be installed

gr_graphite_ver

Default is '0.9.12' (string) The version of the graphite package that should be installed

gr_graphite_source

Default is undef (string). The source of the graphite package that should be installed.

gr_carbon_pkg

Default is 'carbon' (string) The name of the carbon package that should be installed

gr_carbon_ver

Default is '0.9.12' (string) The version of the carbon package that should be installed

gr_carbon_source

Default is undef (string). The source of the carbon package that should be installed.

gr_whisper_pkg

Default is 'whisper' (string) The name of the whisper package that should be installed

gr_whisper_ver

Default is '0.9.12' (string) The version of the whisper package that should be installed

gr_whisper_source

Default is undef (string). The source of the whisper package that should be installed.

gr_django_pkg

Default is a platform-specific name of the django package that should be installed (string).

gr_django_ver

Default is 'installed' (string) The version of the django package that should be installed.

gr_django_source

Default is undef (string). The source of the django package that should be installed.

gr_django_provider

Default is undef (string) The provider of the django package that should be installed.

gr_pip_install_options

Default is undef (array). An array of options to pass to pip install when installing graphite.

For example, to install packages from a repository other than PyPI, you could pass --index-url like this:

  class { 'graphite':
    gr_pip_install_options => ['--index-url', 'https://custom-packge-server/simple/'],
  }

For details on available options, see the documentation for pip install.

gr_pip_install

Default is true (Bool). Should packages be installed via pip

gr_python_binary

Default is 'python' (string). Can be set to a fully-qualify path or an alternative binary name.

gr_disable_webapp_cache

Default is false (Bool). Should the caching of the webapp be disabled. This helps with some display issues in grafana.

Requirements

Modules needed:

stdlib by puppetlabs

Software versions needed:

On Redhat distributions you need the EPEL or RPMforge repository, because Graphite needs packages, which are not part of the default repos.

Limitations

This module is tested on CentOS 6.5 and Debian 7 (Wheezy) and should also run on

  • RHEL/CentOS/Scientific 6+
  • Debian 6+
  • Ubunutu 10.04 and newer

Most settings of Graphite can be set by parameters. So their can be special configurations for you. In this case you should edit the file templates/opt/graphite/webapp/graphite/local_settings.py.erb.

Compatibility Notes

  • There is currently an open ticket with Puppet about broken pip support in CentOS 6/7. The workaround for this bug is to create a symlink from /usr/bin/pip-python (which doesn't exist) to /usr/bin/pip (which does).
  • CentOS 7's default nginx.conf includes a server section listening on port 80. Thus, it is not possible to set up graphite without modifying the package-provided configuration file. You will have to either manually remove the server section, or provide a gr_web_server_port other than port 80.
  • nginx/gunicorn requires a systemctl restart gunicorn after installing on Ubuntu 15.10
  • SELinux must be disabled
  • Installing on Ubuntu 16.04 Xenial requires Puppet 4.1+ (see commit 71251c9)

Contributing

Echocat modules are open projects. So if you want to make this module even better, you can contribute to this module on Github.

Make sure to read the repository's DEVELOP.md file first.

puppet-graphite's People

Contributors

abednarik avatar adrianlzt avatar ajedi32 avatar arioch avatar dagobert avatar decibelhertz avatar dsacchet avatar dwerder avatar fessyfoo avatar frfoe avatar gposton avatar greenaar avatar gregfenton avatar hany avatar jlawrienyt avatar johanek avatar jordiclariana avatar kronn avatar marcelharkema avatar miksercz avatar mrsecure avatar nibalizer avatar peikk0 avatar rafael-driutti-olx avatar robbyt avatar savar avatar stevie- avatar teancom avatar thijsferyn avatar tpoindessous avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

puppet-graphite's Issues

Disable carbon cache

If I want a relay tier without the cache daemons running is there a way to do this?

config.js content keeps changing?

Hi.

I'm having an issue where every time I run "puppet agent -t" on the node where this module is installed, Puppet always thinks the content of the config.js file changes, so it re-writes it, and bounces httpd. I can run it two times immediately, and get this output every time:

Info: Caching catalog for n6.example.com
Info: Applying configuration version '1398300771'
Notice: /Stage[main]/Kibana3::Install/Vcsrepo[/opt/kibana3]/revision: revision changed '3a485aaed852b489997842034bc690b58b0af4ae' to 'v3.0.0'
Info: /Stage[main]/Kibana3::Install/Vcsrepo[/opt/kibana3]: Scheduling refresh of Class[Apache::Service]
Notice: /Stage[main]/Kibana3::Config/File[/opt/kibana3/src/config.js]/content:
--- /opt/kibana3/src/config.js 2014-04-24 00:53:04.051464340 +0000
+++ /tmp/puppet-file20140424-6085-rs1p47 2014-04-24 00:53:05.715464340 +0000
[snip]

Any ideas why that might be happening?

missing python-psycopg2

Hi all

Great module btw! You might want to consider adding 'python-psycopg2' to $graphitepkgs array in params.pp

Thanks

Chris

use upstream web server modules like puppetlabs/apache

many modules are now depending on upstream httpd configuration modules instead of reinventing the wheel. this makes it easier to use multiple modules together and avoid duplicate package declarations. it would be nice to have here :)

I'm not sure what the "preferred" solution for ngnix is, but puppetlabs/apache seems to be dominating the ecosystem for apache management.

Latest puppetforge release on OEL 6.5 - missing /opt/graphite/bin/carbon-cache.py

Just pulled the module and installed on new host, but it seems it didn't install the carbon-cache before trying to init the service. will dig around and see if something is out of order.

Jan 23 12:44:03 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Install::Redhat/Package[python-ldap]/ensure) created
Jan 23 12:45:54 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Install::Redhat/Exec[Install txamqp]/returns) executed successfully
Jan 23 12:45:57 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Install::Redhat/Exec[Install django-tagging]/returns) executed successfully
Jan 23 12:46:23 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Install::Redhat/Exec[Install twisted]/returns) executed successfully
Jan 23 12:46:24 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Install::Redhat/Exec[Install webapp 0.9.12]) Triggered 'refresh' from 1 events
Jan 23 12:46:24 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Install::Redhat/Exec[Install webapp 0.9.12]) Scheduling refresh of Exec[Initial django db creation]
Jan 23 12:46:25 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Install::Redhat/Exec[Install whisper 0.9.12]) Triggered 'refresh' from 1 events
Jan 23 12:46:25 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/File[/opt/graphite/conf/storage-schemas.conf]/ensure) defined content as '{md5}c9e2cc2b133ffe704015d91d4876817e'
Jan 23 12:46:25 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/File[/opt/graphite/conf/storage-schemas.conf]) Scheduling refresh of Service[carbon-cache]
Jan 23 12:46:25 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/File[/opt/graphite/conf/carbon.conf]/ensure) defined content as '{md5}7ba1909d0ad4db336bf9623d60c73801'
Jan 23 12:46:25 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/File[/opt/graphite/conf/carbon.conf]) Scheduling refresh of Service[carbon-cache]
Jan 23 12:46:25 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/File[/opt/graphite/conf/storage-aggregation.conf]/ensure) defined content as '{md5}9a9a9319750430659ba6b0c938c9655b'
Jan 23 12:46:25 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/File[/opt/graphite/webapp/graphite/local_settings.py]/ensure) defined content as '{md5}47c672cf6ab93084fb2ea665745fd25c'
Jan 23 12:46:27 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/Exec[Initial django db creation]) Triggered 'refresh' from 1 events
Jan 23 12:46:27 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/Exec[Initial django db creation]) Scheduling refresh of Exec[Chown graphite for web user]
Jan 23 12:46:27 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/File[/opt/graphite/bin/carbon-logrotate.sh]/ensure) defined content as '{md5}7c13f336dd820daada4d1dd2b1b8fb9c'
Jan 23 12:46:27 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/Cron[Rotate carbon logs]/ensure) created
Jan 23 12:46:27 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/File[/etc/init.d/carbon-cache]/ensure) defined content as '{md5}90dcc40af47f8a5a9d08e8b5ff0ad1e4'
Jan 23 12:46:27 graphite puppet-agent[4045]: Could not start Service[carbon-cache]: Execution of '/sbin/service carbon-cache start' returned 2:
Jan 23 12:46:27 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/Service[carbon-cache]/ensure) change from stopped to running failed: Could not start Service[carbon-cache]: Execution of '/sbin/service carbon-cache start' returned 2:
Jan 23 12:46:27 graphite puppet-agent[4045]: Could not start Service[carbon-cache]: Execution of '/sbin/service carbon-cache start' returned 2:
Jan 23 12:46:27 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/Service[carbon-cache]/ensure) change from stopped to running failed: Could not start Service[carbon-cache]: Execution of '/sbin/service carbon-cache start' returned 2:
Jan 23 12:46:28 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/Service[carbon-cache]/enable) enable changed 'false' to 'true'
Jan 23 12:46:28 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/Service[carbon-cache]) Triggered 'refresh' from 2 events
Jan 23 12:46:28 graphite puppet-agent[4045]: (/Stage[main]/Graphite::Config/Anchor[graphite::config::end]) Dependency Service[carbon-cache] has failures: true

New init scripts break Ubuntu compatability

Looks like you are using some specific RH features of the new init scripts which unfortunately breaks compatibility with Ubuntu/Debian

Specifically sourcing /etc/rc.d/init.d/functions and the calls to rh_status

Having a real hard time installing graphite on centos 6.5.

This is the error we're seeing.

Error: Could not update: Execution of '/usr/bin/pip-python install -q twisted==11.1.0' returned 1: Command /usr/bin/python -c "import setuptools;file='/tmp/pip-build-root/twisted/setup.py';exec(compile(open(file).read().replace('\r\n', '\n'), file, 'exec'))" install --record /tmp/pip-e3n5qe-record/install-record.txt --single-version-externally-managed failed with error code 1 in /tmp/pip-build-root/twisted
Storing complete log in /root/.pip/pip.log

Error: /Stage[main]/Graphite::Install/Package[twisted]/ensure: change from absent to 11.1.0 failed: Could not update: Execution of '/usr/bin/pip-python install -q twisted==11.1.0' returned 1: Command /usr/bin/python -c "import setuptools;file='/tmp/pip-build-root/twisted/setup.py';exec(compile(open(file).read().replace('\r\n', '\n'), file, 'exec'))" install --record /tmp/pip-e3n5qe-record/install-record.txt --single-version-externally-managed failed with error code 1 in /tmp/pip-build-root/twisted
Storing complete log in /root/.pip/pip.log

Using this in my node definition.

class { 'graphite':
require => [Yumrepo['rpmforge'], Yumrepo['epel']],
}

Also, this only happens on an initial puppet run. If I run puppet a second time everything installs without issue.

mod_python is installed after httpd restart

Thank you for your work!

Config.pp has:

    package {
        "${::graphite::params::apache_pkg}":        ensure => installed;
        "${::graphite::params::apache_python_pkg}": ensure => installed;
    }

I believe the apache_python_pkg package resource is missing a:

notify  => Service["${::graphite::params::apache_service_name}"]

This will fix mod_python being installed -after- apache is installed & configured, thus graphite not being accessible.

What do you think?

some centos 7 dependencies not found in EPEL

In trying to install graphite on CentOS 7.0.1406, I found that a couple of the packages that the puppet-graphite module was looking for were not available via EPEL. The packages were Django14 and python-sqlite2. For Django, I found a python-django package. I didn't find immediately anything which appeared to be comparable for sqlite2 on python. Not sure if the functionality was absorbed into one of the other django packages for newer versions?

I found that if I modified manifests/params.pp to use python-django instead of Django14 and not use python-sqlite2 at all that I was able to get graphite to install. I had to also manually apply the changes from graphite master on graphite-project/graphite-web@fc3f018 in order for my installed grafana UI to extract data from the graphite backend. Everything did appear to be working fine after doing this.

It may make sense to update params.pp to cover CentOS 7.0.1406 installation. If there is another repo besides EPEL that would satisfy these dependencies, I'd be interested in knowing what that is. Thanks!

Issues with Redeclaring Packages. Dublicates #48

I'm having issues with redeclared packages:

Error: Duplicate declaration: Package[gcc] is already declared in file /etc/puppet/modules/rbenv/manifests/deps/redhat.pp:11; cannot redeclare at /etc/puppet/modules/graphite/manifests/install/redhat.pp:26 on node foo.local

This will occur if you have another module somewhere with the package declared.

The normal course of action is to do:

if ! defined(Package['gcc']) {
    package { 'gcc': ensure => installed }
  }

So puppet won't bomb-out on the re-declaration. Not sure what the cleanest way of doing that for an array of packages would be? I'll have a look into it ๐Ÿ‘

question about graphitepkgs

Hi,
Why is $graphite::params::graphitepkgs for redhat so big?

These are the packages I am unsure about:

  • git
  • python-zope-filesystem + python-zope-interface
  • python-ldap
  • python-crypto
  • pyOpenSSL
  • gcc
  • gcc-c++
  • zlib-static
  • MySQL-python

Why are these needed? I like your module, but these requirements look a bit strange.

Regards.

puppet error on fresh system installation of this module (relates to txamqp install)

just did a fresh EC2 instance creation, and ran the latest version of this module (after my last PR was added), getting the below error for txamqp on initial puppet run:

2014-03-19 07:49:05 +0000 /Stage[main]/Graphite::Install::Debian/Package[python-sqlite]/ensure (notice): ensure changed 'purged' to 'present'
2014-03-19 07:49:07 +0000 /Stage[main]/Graphite::Install::Debian/Package[python-pip]/ensure (notice): ensure changed 'purged' to 'present'
2014-03-19 07:49:08 +0000 /Stage[main]/Graphite::Install::Debian/Package[python-memcache]/ensure (notice): ensure changed 'purged' to 'present'
2014-03-19 07:49:14 +0000 Puppet (err): Execution of '/usr/bin/pip install -q txamqp' returned 1: Command /usr/bin/python -c "import setuptools;__file__='/usr/src/build/Twisted/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-uVXZHK-record/install-record.txt failed with error code 1
Storing complete log in /root/.pip/pip.log
2014-03-19 07:49:14 +0000 /Stage[main]/Graphite::Install::Debian/Package[txamqp]/ensure (err): change from absent to present failed: Execution of '/usr/bin/pip install -q txamqp' returned 1: Command /usr/bin/python -c "import setuptools;__file__='/usr/src/build/Twisted/setup.py';exec(compile(open(__file__).read().replace('\r\n', '\n'), __file__, 'exec'))" install --single-version-externally-managed --record /tmp/pip-uVXZHK-record/install-record.txt failed with error code 1
Storing complete log in /root/.pip/pip.log
2014-03-19 07:49:22 +0000 /Stage[main]/Graphite::Install::Debian/Package[python-django]/ensure (notice): ensure changed 'purged' to 'present'
2014-03-19 07:49:24 +0000 /Stage[main]/Graphite::Install::Debian/Package[python-django-tagging]/ensure (notice): ensure changed 'purged' to 'present'
2014-03-19 07:49:29 +0000 /Stage[main]/Graphite::Install::Debian/Package[python-twisted]/ensure (notice): ensure changed 'purged' to 'present'

next puppet run seems to succeed fine.

any ideas?

Problem with graphite and Django 1.6

Django 1.6 fails with Graphite as reported in graphite-project/graphite-web@fc3f018#diff-e383725a971fca0685db19bfe7c65b32

I have make a workaround in the node manifest:

  # Fix graphite for Django 1.6
  if $::osfamily == "Debian" {
    exec { "fix_graphite_django1.6":
      command => '/usr/bin/find /opt/graphite/webapp/graphite -iname "urls.py" -exec /bin/sed -i s/"from django.conf.urls.defaults import \*"/"from django.conf.urls import \*"/ {} \;',
      onlyif => "/bin/grep -r 'from django.conf.urls.defaults import' /opt/graphite/webapp/graphite",
      require => Class['graphite'],
    }
  }

Question - Uninstallation

Hi,

I was trying to install a grafana module on a server that was built with your module. At some point I tried to adjust the apache vhost settings in puppet and that ended very badly. Now the module will not successfully complete a puppet run on this server.

I would like to know if it is possible to completely uninstall this module? I believe that if I uninstall it and reinstall it, the configuration may be corrected and would like to try this before wiping the server completely and starting over.

installation issue

hi!

im trying to install it with puppet masterless

what is the right command to execute the install?
puppet apply -e "include graphite"
err: State got corrupted
err: State got corrupted

on centos 6.5 x64

epel rename of django-tagging package?

I got catalog failure in a test VM and it looks like EPEL may have changed the name of the django-tagging package:

Error: Could not update: Could not find package django-tagging
Error: /Stage[main]/Graphite::Install/Package[django-tagging]/ensure: change from absent to 0.3.1 failed: Could not update: Could not find package django-tagging
yum install -y django-tagging
...
Package django-tagging-0.3.1-3.el6.noarch is obsoleted by python-django-tagging-0.3.1-7.el6.noarch which is already installed
[root@localhost ~]# yum info python-django-tagging django-tagging
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
 * base: mirrors.usc.edu
 * epel: mirror.metrocast.net
 * extras: mirror.oss.ou.edu
 * updates: centos.mirror.constant.com
Installed Packages
Name        : python-django-tagging
Arch        : noarch
Version     : 0.3.1
Release     : 7.el6
Size        : 229 k
Repo        : installed
From repo   : epel
Summary     : A generic tagging application for Django projects
URL         : http://code.google.com/p/django-tagging/
License     : MIT
Description : A generic tagging application for Django projects, which allows
            : association of a number of tags with any Model instance and makes
            : retrieval of tags simple.

Available Packages
Name        : django-tagging
Arch        : noarch
Version     : 0.3.1
Release     : 3.el6
Size        : 58 k
Repo        : epel
Summary     : A generic tagging application for Django projects
URL         : http://code.google.com/p/django-tagging/
License     : MIT
Description : A generic tagging application for Django projects, which allows
            : association of a number of tags with any Model instance and makes
            : retrieval of tags simple.

Setup multiple carbon-caches with a relay

I've been looking for a way to setup multiple carbon caches with a relay in front of them. I see that you can setup the relay to point to multiple destinations, but there doesn't appear to be a way to setup multiple caches on the one node.

                      ----- carbon-cache--
node--relay--<                                > whisper
                      ----- carbon-cache--

Is this kind of setup possible to do with this module? I don't think it is, because you'd (probably) need to have an array of hashes for defining the carbon caches.. but you also might be able to get away with having a user provided template that takes care of the configuration themselves.

Thanks for the very useful module - the last time I tried to setup a graphite installation, it took a very long time in comparison.

issues after going from 5.1.1 to 5.3.4

We've had some issues after using 5.3.4 in our environment. It looks liek the local_settings.py file adds some additional brackets and a trailing comma. Also, which maybe a side effect, the graphite.db django file is not being created.

Django-Tagging question

Hi

When the module tries to run on my ubuntu 12.04 box, it tries to install django-tagging package but cannot find pip.

Should the module therefore require Python as a dependency in the Modulefile?

Paul

gunicorn fails to start workers for some reason?

Currently configured with:

  class { '::graphite':
    gr_web_server => 'nginx',
  }

Everything looks started, but the child pid's for gunicorn only last a split second. When tailing /var/log/gunicorn/graphite.log I get the below:

2014-03-18 05:25:46 [6054] [INFO] Booting worker with pid: 6054
2014-03-18 05:25:46 [6051] [INFO] Worker exiting (pid: 6051)
2014-03-18 05:25:46 [6055] [INFO] Booting worker with pid: 6055
2014-03-18 05:25:46 [6052] [INFO] Worker exiting (pid: 6052)
2014-03-18 05:25:46 [6053] [INFO] Worker exiting (pid: 6053)
2014-03-18 05:25:46 [6056] [INFO] Booting worker with pid: 6056
2014-03-18 05:25:46 [6057] [INFO] Booting worker with pid: 6057
2014-03-18 05:25:46 [6054] [INFO] Worker exiting (pid: 6054)
2014-03-18 05:25:46 [6056] [INFO] Worker exiting (pid: 6056)
2014-03-18 05:25:46 [6058] [INFO] Booting worker with pid: 6058
2014-03-18 05:25:46 [6055] [INFO] Worker exiting (pid: 6055)
2014-03-18 05:25:46 [6059] [INFO] Booting worker with pid: 6059
2014-03-18 05:25:46 [6060] [INFO] Booting worker with pid: 6060
2014-03-18 05:25:46 [6057] [INFO] Worker exiting (pid: 6057)
2014-03-18 05:25:46 [6058] [INFO] Worker exiting (pid: 6058)
2014-03-18 05:25:46 [6061] [INFO] Booting worker with pid: 6061
2014-03-18 05:25:46 [6062] [INFO] Booting worker with pid: 6062
2014-03-18 05:25:46 [6059] [INFO] Worker exiting (pid: 6059)
2014-03-18 05:25:46 [6060] [INFO] Worker exiting (pid: 6060)
2014-03-18 05:25:46 [6062] [INFO] Worker exiting (pid: 6062)
2014-03-18 05:25:46 [6063] [INFO] Booting worker with pid: 6063
2014-03-18 05:25:46 [6064] [INFO] Booting worker with pid: 6064
2014-03-18 05:25:46 [6061] [INFO] Worker exiting (pid: 6061)
2014-03-18 05:25:46 [6065] [INFO] Booting worker with pid: 6065
2014-03-18 05:25:47 [6066] [INFO] Booting worker with pid: 6066
2014-03-18 05:25:47 [6063] [INFO] Worker exiting (pid: 6063)

I then tried starting gunicorn using the params I could see in the ps output, omitting --daemon and --log-file and saw the below:

/usr/bin/python /usr/bin/gunicorn_django --pid /var/run/gunicorn/graphite.pid --name graphite --user www-data --group www-data --bind=unix:/var/run/graphite.sock --workers=2

2014-03-18 05:24:53 [4750] [INFO] Booting worker with pid: 4750
2014-03-18 05:24:53 [4749] [INFO] Booting worker with pid: 4749
Settings file '/root/settings.py' not found in current folder.
2014-03-18 05:24:54 [4749] [INFO] Worker exiting (pid: 4749)
Settings file '/root/settings.py' not found in current folder.
2014-03-18 05:24:54 [4750] [INFO] Worker exiting (pid: 4750)
2014-03-18 05:24:54 [4753] [INFO] Booting worker with pid: 4753
2014-03-18 05:24:54 [4754] [INFO] Booting worker with pid: 4754
Settings file '/root/settings.py' not found in current folder.

If I cd into /opt/graphite/webapp/graphite/ and run the same command, it works fine.

I suspect somewhere in either /etc/init.d/gunicorn or /usr/share/gunicorn/initscript-helper.py there needs to be a working directory change or something possibly?

Dependency issue for "Chown graphite for apache" exec

There seems to be an issue with Exec[Chown graphite for apache] running before the Package[httpd] is installed:

Notice: /Stage[main]/Graphite::Config/Exec[Chown graphite for apache]/returns: chown: invalid user: `apache:apache'
Error: /Stage[main]/Graphite::Config/Exec[Chown graphite for apache]: Failed to call refresh: chown -R apache:apache /opt/graphite/storage/ returned 1 instead of one of [0]
Error: /Stage[main]/Graphite::Config/Exec[Chown graphite for apache]: chown -R apache:apache /opt/graphite/storage/ returned 1 instead of one of [0]

I intend to check this out tomorrow but maybe with your knowledge of the module you'll have a solution faster ;)

fqdn in local_settings.py template?

In the latest 0.9.11 refactoring code, the graphite::config class uses a dynamic template for local_settings.py:

graphite/opt/graphite/webapp/graphite/local_settings.py_${::fqdn}.erb

I don't really understand that design decision?

carbon-cache init script restart method

When carbon-cache has a kill signal sent to it, it will spend some time trying to flush out any pending metrics to disk. The current restart method in the init script has it just sleeping for 3 seconds, and then trying to start back up again, often resulting in the process just eventually dying, but then not starting back up.

It would be better to have the stop method wait for the pid file to disappear before it returned that the stop was successful

carbon.conf.erb

There are a lot of duplicate stanzas in carbon.conf.erb such as the following:

# Set this to True to enable whitelisting and blacklisting of metrics in
# CONF_DIR/whitelist and CONF_DIR/blacklist. If the whitelist is missing or
# empty, all metrics will pass through
# USE_WHITELIST = False

This specific example shows up three times. Is there a reason for this? I'm new to Puppet so perhaps I'm just ignorant. Let me know and I'd be happy to clean up the redundancy and submit a PR.

Switching from apache to nginx webserver kills our cluster

We wanted to switch our cluster from apache to nginx as nginx runs wsgi faster than apache

When we changed the web_server from apache to nginx, we got a cluster failure. The switch in the web_server doesn't take into account that other processes may be bound to a port:

e.g.

https://github.com/echocat/puppet-graphite/blob/master/manifests/config.pp#L21

in this case statement, the apache2 config doesnt ensure there is no nginx service running and vice-versa

I have fixed this in a local branch. Are you interested in having this feed back to the main repo?

Thanks

Paul

Enable Mod Headers

We have the settings in hiera that include:

graphite::gr_web_cors_allow_from_all: true

On every puppet run, we get the following

screen shot 2014-06-25 at 15 46 50

This seems to be due to the following

  if $::graphite::gr_web_cors_allow_from_all {
    exec { 'enable mod_headers':
      command => 'a2enmod headers',
      require => Package[$::graphite::params::apache_wsgi_pkg]
    }
  }

There is no unless command on the exec. Is this a known issue?

Puppet warning on $gr_storage_schemas default value

The default configuration in init.pp for $gr_storage_schemas generates the following warning:

Warning: Unrecognised escape sequence '\.' in file /tmp/vagrant-puppet/modules-0/graphite/manifests/init.pp at line 98

I recommend using simple quoted strings instead to wrap the patterns.

gcc package dependency Duplicate declaration: Package[gcc] is already declared in file

Do you know if there is any way to override the inclusion of 'gcc' package? I have another module that provides Package['gcc'] and it's causing the issue below:

puppet agent -t
Warning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations
   (at /usr/lib/ruby/site_ruby/1.8/puppet/settings.rb:1134:in `issue_deprecation_warning')
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Error: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate declaration: Package[gcc] is already declared in file /etc/puppetmaster/environments/production/modules/graphite/manifests/install.pp:57; cannot redeclare at /etc/puppetmaster/environments/production/modules/gcc/manifests/init.pp:19 on node eng-sensu-poc.dev.ca1.foo.co
Warning: Not using cache on failed catalog
Error: Could not retrieve catalog; skipping run

Installation question please

Hi Daniel,

Question for you. I've installed your module twice now with no issues. Once on a CentOS VM, once on CentOS in EC2, and most recently on a physical CentOS server. The puppet install runs fine with no errors. I have no custom variables assigned. The problem is when I access the URL, all I get is a directory listing of "/".

There are no errors in /etc/httpd/error_log.

Neither of these files are present, which was a little weird:
ErrorLog /opt/graphite/storage/error.log
CustomLog /opt/graphite/storage/access.log

/opt/graphite/webapp is set as the DocumentRoot, and has this content:
root@bdprodm04:[55]:/opt/graphite/webapp> ls -l
total 12
drwxr-xr-x 6 root root 4096 Oct 3 15:34 content
drwxr-xr-x 15 root root 4096 Oct 3 15:35 graphite
drwxr-xr-x 2 root root 4096 Oct 3 15:34 graphite_web-0.9.12-py2.6.egg-info

The content directory looks right as well:
root@bdprodm04:[59]:/opt/graphite/webapp/content> ls -l
total 16
drwxr-xr-x 4 root root 4096 Oct 3 15:34 css
drwxr-xr-x 2 root root 4096 Oct 3 15:34 html
drwxr-xr-x 2 root root 4096 Oct 3 15:34 img
drwxr-xr-x 6 root root 4096 Oct 3 15:34 js

It's probably something easy, but for the life of me I have not been able to figure out what the problem is.

Would you have any ideas of what might be going on?

Thank you so much for your time!
Chris Neal

Adding upstream dependency of stankevich/puppet-python

Hi echocat devs, I have a couple questions about your project. I'm planning a pull request for our group so we can use your graphite module. However, We'd like to remove some of the dependencies on Epel by using python virtualenv and changing manifests/install.pp logic.

Would you be willing to accept a new puppet module dependency?

  • currently the built in Pip provider for package doesn't support virtualenv.
  • this would require hooks into the init scripts and the graphite web wsgi script
  • new install method would need to be used
  • https://github.com/stankevich/puppet-python

Errors with gr_web_site => 'none'

I'm on CentOS but suspect the same issue will occur with Debian or any system that does not have Apache installed.

I am trying a very basic use:

class {'graphite':
  gr_web_server => 'none'
}

which causes:

Error: Could not set 'file' on ensure: Could not find user apache at 103:/usr/share/puppet/modules/graphite/manifests/config.pp
Error: Could not set 'file' on ensure: Could not find user apache at 103:/usr/share/puppet/modules/graphite/manifests/config.pp
Wrapped exception:
Could not find user apache
Error: /Stage[main]/Graphite::Config/File[/opt/graphite/webapp/graphite/local_settings.py]/ensure: change from absent to file failed: Could not set 'file' on ensure: Could not find user apache at 103:/usr/share/puppet/modules/graphite/manifests/config.pp

I would expect that with 'none', no file permission changing should be attempted at all. Am I missing something? Or should a number of the commands in config.pp be wrapped in an if( $web_server_package_require != '') ?

Pacakge python-zope-filesystem is not needed

I get the following error when trying to use this module on a RHEL system:
Package python-zope-filesystem-1-5.el6.x86_64 is obsoleted by python-zope-interface-3.7.0-2.el6.x86_64 which is already installed

So, I guess you can remove the dependency on package python-zope-filesystem from your graphite::params class.

Puppet 3.7, RHEL 6.5: Error: No such file or directory - /opt/graphite/webapp/graphite/local_settings.py20141107-27378-dcxps8.lock

Hi, I've added mysql backend config and get this error on agent run (puppet 3.7, rhel 6.5):

Warning: Setting templatedir is deprecated. See http://links.puppetlabs.com/env-settings-deprecations
   (at /usr/lib/ruby/site_ruby/1.8/puppet/settings.rb:1134:in `issue_deprecation_warning')
Info: Retrieving pluginfacts
Info: Retrieving plugin
Info: Loading facts
Info: Caching catalog for eng-sensu-poc.dev.ca1.foo.co
Warning: The package type's allow_virtual parameter will be changing its default value from false to true in a future release. If you do not want to allow virtual packages, please explicitly set allow_virtual to false.
   (at /usr/lib/ruby/site_ruby/1.8/puppet/type/package.rb:430:in `default')
Info: Applying configuration version '1415375783'
Notice: /Stage[main]/Mcollective::Server::Config::Factsource::Yaml/Cron[refresh-mcollective-metadata]/environment: environment changed 'PATH=/opt/puppet/bin:/usr/bin:/sbin:/bin:/usr/sbin' to 'PATH=/opt/puppet/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin'
Notice: /Stage[main]/Graphite::Config/File[/opt/graphite/webapp/graphite/local_settings.py]/content:
--- /opt/graphite/webapp/graphite/local_settings.py 2014-11-06 22:03:09.696135041 -0500
+++ /tmp/puppet-file20141107-27378-14zw8vi-0    2014-11-07 10:58:36.076978915 -0500
@@ -153,12 +153,12 @@

 DATABASES = {
    'default': {
-        'ENGINE': 'django.db.backends.sqlite3',
-        'NAME': '/opt/graphite/storage/graphite.db',
-        'USER': '',
-        'PASSWORD': '',
-        'HOST': '',
-        'PORT': '',
+        'ENGINE': 'django.db.backends.mysql',
+        'NAME': 'graphite',
+        'USER': 'graphite',
+        'PASSWORD': 'xxxxx',
+        'HOST': 'localhost',
+        'PORT': '3306',
     }
 }


Info: Computing checksum on file /opt/graphite/webapp/graphite/local_settings.py
Info: FileBucket got a duplicate file {md5}89d396679a60c1008ae3f2393885ba95
Info: /Stage[main]/Graphite::Config/File[/opt/graphite/webapp/graphite/local_settings.py]: Filebucketed /opt/graphite/webapp/graphite/local_settings.py to puppet with sum 89d396679a60c1008ae3f2393885ba95
Error: No such file or directory - /opt/graphite/webapp/graphite/local_settings.py20141107-27378-dcxps8.lock
Error: /Stage[main]/Graphite::Config/File[/opt/graphite/webapp/graphite/local_settings.py]/content: change from {md5}89d396679a60c1008ae3f2393885ba95 to {md5}00ce4cfacfea126534bd64f827ad6d37 failed: No such file or directory - /opt/graphite/webapp/graphite/local_settings.py20141107-27378-dcxps8.lock
Notice: /Stage[main]/Graphite::Config/Exec[Initial django db creation]: Dependency File[/opt/graphite/webapp/graphite/local_settings.py] has failures: true
Warning: /Stage[main]/Graphite::Config/Exec[Initial django db creation]: Skipping because of failed dependencies
Notice: /Stage[main]/Graphite::Config/Exec[Chown graphite for web user]: Dependency File[/opt/graphite/webapp/graphite/local_settings.py] has failures: true
Warning: /Stage[main]/Graphite::Config/Exec[Chown graphite for web user]: Skipping because of failed dependencies
Notice: /Stage[main]/Graphite/Anchor[graphite::end]: Dependency File[/opt/graphite/webapp/graphite/local_settings.py] has failures: true
Warning: /Stage[main]/Graphite/Anchor[graphite::end]: Skipping because of failed dependencies
Notice: Finished catalog run in 54.60 seconds

Duplicate [ ] in the memcache hosts list

In hiera, we specify the memcache hosts list as:

graphite::gr_memcache_hosts: "['10.70.6.9:11211', '10.70.6.177:11211', '10.70.6.129:11211', '10.70.7.207:11211', '10.70.7.175:11211', '10.70.7.161:11211']"

In the erb, this gets processed as:
MEMCACHE_HOSTS = ['<%= scope.lookupvar('graphite::gr_memcache_hosts').join("','") %>']

This then surrounds our list with extra [ ]

The issue here is that the processing of this list is different to that of cluster_servers. In the erb, that is processed as:

CLUSTER_SERVERS = <%= scope.lookupvar('graphite::gr_cluster_servers') %>

Should these be managed in a standard way? (I have fixed this in a fork and will happily send a PR if you want to manage the lists in a similar way)

Paul

Yum package "Django" cannot be found in EPEL

Hey there, I'm wondering if you know where the Yum package "Django" can be found?

I checked on the latest EPEL repo and only "Django14" is available. Since the module uses "Django" I had to manually override the package and replaced by a pip-installed Django 1.3.7 version, so it works but is cumbersome.

Carbon service error on CentOS 6.4

This module is great, and was using this module successfully until this week, when it looks like something changed upstream in the carbon / twisted / daemonize. Here is the specific error when running on a CentOS 6.4, using just the default parameters.

sudo service carbon-cache start

Traceback (most recent call last):
File "/opt/graphite/bin/carbon-cache.py", line 28, in
from carbon.util import run_twistd_plugin
File "/opt/graphite/lib/carbon/util.py", line 21, in
from twisted.scripts._twistd_unix import daemonize
ImportError: cannot import name daemonize

There seems to be a bunch of people online who have noticed this same symptom since last week, here is one for reference:

http://stackoverflow.com/questions/19894708/cant-start-carbon-12-04-python-error-importerror-cannot-import-name-daem

Not sure if this can/should be resolved upstream or if there's anything in this puppet module's default params that can be tweaked, but posting this issue to raise awareness in case other people are wondering why their module stopped working.

Initial Django DB Creation fails

Hi,

I'm running the script on Ubuntu 12.04 with puppet server @ version 2.6.4 and puppet client @ 0.25.4. Client is a completely clean VM.

This is my error log:

Sep 2 12:43:06 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/Package[apache2]) Scheduling refresh of Exec[Chown graphite for apache]
Sep 2 12:43:06 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/File[/opt/graphite/webapp/graphite/local_settings.py]/ensure) content changed '{md5}b32a2da0dae6bf44ff69f9bfeaf02762' to 'unknown checksum'
Sep 2 12:43:06 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/Exec[Initial django db creation]) Triggering 'refresh' from 1 dependencies
Sep 2 12:43:06 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/Exec[Initial django db creation]) Failed to call refresh on Exec[Initial django db creation]: python manage.py syncdb --noinput returned 1 instead of one of [0] at /etc/sokrati/config/puppetMaster/modules/graphite/manifests/config.pp:61
Sep 2 12:43:06 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/Exec[Initial django db creation]) Scheduling refresh of Exec[Chown graphite for apache]
Sep 2 12:43:06 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/Exec[Chown graphite for apache]) Triggering 'refresh' from 2 dependencies
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/Package[libapache2-mod-python]/ensure) ensure changed 'purged' to 'present'
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/Exec[Disable default apache site]/returns) executed successfully
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/Exec[Disable default apache site]) Scheduling refresh of Service[apache2]
Sep 2 12:43:12 puppetclient puppetd[12214]: (Filebucket[/var/lib/puppet/clientbucket]) Adding /etc/apache2/ports.conf(38b31d20326f3640a8dfbe1ff5d1c4ad)
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/File[/etc/apache2/ports.conf]) Filebucketed /etc/apache2/ports.conf to puppet with sum 38b31d20326f3640a8dfbe1ff5d1c4ad
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/File[/etc/apache2/ports.conf]/content) content changed '{md5}38b31d20326f3640a8dfbe1ff5d1c4ad' to 'unknown checksum'
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/File[/etc/apache2/ports.conf]/owner) owner changed 'root' to 'www-data'
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/File[/etc/apache2/ports.conf]/group) group changed 'root' to 'www-data'
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/File[/etc/apache2/sites-available/graphite.conf]/ensure) content changed '{md5}2e629df6d71e135f4c94917fca31d0b5' to 'unknown checksum'
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/File[/etc/apache2/sites-enabled/graphite.conf]/ensure) created
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/File[/etc/apache2/sites-enabled/graphite.conf]) Scheduling refresh of Service[apache2]
Sep 2 12:43:12 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/Service[apache2]) Triggering 'refresh' from 2 dependencies
Sep 2 12:43:13 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/File[/opt/graphite/bin/carbon-logrotate.sh]/ensure) content changed '{md5}7c13f336dd820daada4d1dd2b1b8fb9c' to 'unknown checksum'
Sep 2 12:43:13 puppetclient puppetd[12214]: (/Stage[main]/Graphite::Config/Cron[Rotate carbon logs]/ensure) created
Sep 2 12:43:13 puppetclient crontab[13436]: (root) REPLACE (root)

This error prevents me from starting graphite. If i manually run the 'python manage.py syncdb --noinput' it executes successfully and graphite starts.

Redhat exec is applied on every run

Notice: /Stage[main]/Graphite::Install::Redhat/Exec[Install txamqp]/returns: executed successfully
Notice: /Stage[main]/Graphite::Install::Redhat/Exec[Install django-tagging]/returns: executed successfully
Notice: /Stage[main]/Graphite::Install::Redhat/Exec[Install twisted]/returns: executed successfully

These 3 execs are applied on every run after graphite installs.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.