Description

Telegraf is an agent written in Go for collecting metrics from the system it's running on, or from other services, and writing them into InfluxDB or other outputs. Design goals are to have a minimal memory footprint with a plugin system so that developers in the community can easily add support for collecting metrics from well known services (like Hadoop, Postgres, or Redis) and third party APIs (like Mailchimp, AWS CloudWatch, or Google Analytics). New input and output plugins are designed to be easy to contribute, we'll eagerly accept pull requests and will manage the set of plugins that Telegraf supports. See the contributing guide for instructions on writing new plugins.

Overview

This is a subordinate charm to deploy the telegraf metrics agent to collect
metrics from related services. The metrics may be scraped by or pushed
to supported systems such as Prometheus, Graphite or InfluxDB.

For details about telegraf see: https://github.com/influxdata/telegraf

Usage

Deploy telegraf alongside your service, and also a time series storage (in this case, influxdb)

juju deploy telegraf 
juju deploy influxdb 
juju deploy some-service

Add the relations:

juju add-relation telegraf:juju-info some-service:juju-info 
juju add-relation telegraf:influxdb-api influxdb:api

Configuration

Prometheus Output

By default, Prometheus output is presented available for scraping.

InfluxDB Output

When related to an InfluxDB service, metrics will be pushed to a database
named telegraf.

Apache Input

For the apache input plugin, the charm provides the apache relation which
uses apache-website interface. Current apache charm disables
mod_status and in order to telegraf apache input to work status
should be removed from the list of disable_modules in the apache charm
config.

Postgresql & MySQL input

Due to relation scope issues,
two relations need to be established between telegraf and the postgresql
service. first a plain juju-info relation to get standard system
metrics and a db-admin relation for PostgreSQL database metrics. eg.:

```
juju add-relation postgresql:juju-info telegraf
juju add-relation postgresql:db-admin telegraf
```

Similarly, for MySQL:

```
juju add-relation mysql:juju-info telegraf
juju add-relation mysql:db-admin telegraf
```

Advanced

Input

A basic set of input plugins are setup by default, which can be overriden
with the inputs_config configuration option. Both of these accept raw
telegraf configuration.

To configure any of the (default or via relation) plugins, the
extra_options charm config can be used. It's yaml, that needs to
be encoded as a string in the config. For example:

```yaml
telegraf:
# The trailing | means the following indented section is all one string.
extra_options: |
    inputs:
        cpu:
            percpu: false
            fielddrop: ["time_*"]
        disk:
            mount_points: ["/"]
            ignore_fs: ["tmpfs", "devtmpfs"]
        elasticsearch:
            local: false
            cluster_health: true
        postgresql:
            databases: ["foo", "bar"]
            tagpass: 
                db: ["template", "postgres"]
    outputs:
        influxdb:
            precision: ms
```

This extra options will only be applied to plugins configured via
relations and the following list (defined in templates/base_inputs.conf):
- inputs.cpu
- inputs.disk
- inputs.diskio
- inputs.mem
- inputs.net
- inputs.netstat
- inputs.swap
- inputs.system

Output

The only output plugin supported via relation is influxdb, any other output
plugin needs to be configured manually (via juju set).

To use a different metrics storage such as Graphite, the raw telegraf
plugin configuration needs to be set as a string in outputs_config
configuration. For example:

```yaml
telegraf:
  # The trailing | indicates a multiline string in yaml.
  outputs_config: |
    [[outputs.graphite]]
    servers = ["10.0.3.231:2003"]
    prefix = "juju_local.devel.telegraf"
    timeout = 10
```

This will make telegraf agents to send the metrics to the graphite instance.

Contact Information

Configuration

outputs_config
(string) [outputs.xxx] sections as a string
interval
(string) Default data collection interval for all plugins
10s
collection_jitter
(string) Collection jitter is used to jitter the collection by a random amount. Each plugin will sleep for a random time within jitter before collecting. This can be used to avoid many plugins querying things like sysfs at the same time, which can have a measurable effect on the system.
0s
promreg_url
(string) The http(s) url and port where the Prometheus Registration service is listening.
extra_options
(string) YAML with extra options for out|inputs managed by relations or in the default config. example: inputs: cpu: percpu: false fielddrop: ["time_*"] disk: mount_points: ["/"] ignore_fs: ["tmpfs", "devtmpfs"] elasticsearch: local: false cluster_health: true postgresql: databases: ["foo", "bar"] tagpass: db: ["template", "postgres"] outputs: influxdb: precision: ms
hostname
(string) Override default hostname. {model} is replaced with the Juju model name and {unit} is replaced with the sanitized unit name (eg. service_name-0). {uuid} is replaced by the model UUID, for sites without unique model names.
{model}:{unit}
promreg_authtoken
(string) The Prometheus Registration authtoken.
extra_plugins
(string) Extra plugins, manually configured. This is expected to be a string and will be saved "as is" in /etc/telegraf/telegraf.d/extra_plugins.conf
quiet
(boolean) Run telegraf in quiet mode
prometheus_output_port
(string) If set prometheus output plugin will be configured to listen on the provided port. If set to string "default" the charm will use default port (9103)
9103
flush_interval
(string) Default data flushing interval for all outputs. You should not set this below interval. Maximum flush_interval will be flush_interval + flush_jitter
10s
package_status
(string) The status of service-affecting packages will be set to this value in the dpkg database. Valid values are "install" and "hold".
install
extra_packages
(string) Space separated list of extra deb packages to install.
inputs_config
(string) [inputs.xxx] sections as a string, this override default input plugins.
round_interval
(boolean) Rounds collection interval to 'interval' ie, if interval="10s" then always collect on :00, :10, :20, etc.
True
debug
(boolean) Run telegraf in debug mode
metric_buffer_limit
(int) Telegraf will cache metric_buffer_limit metrics for each output, and will flush this buffer on a successful write.
10000
install_keys
(string) List of signing keys for install_sources package sources, per charmhelpers standard format (a yaml list of strings encoded as a string). The keys should be the full ASCII armoured GPG public keys. While GPG key ids are also supported and looked up on a keyserver, operators should be aware that this mechanism is insecure. null can be used if a standard package signing key is used that will already be installed on the machine, and for PPA sources where the package signing key is securely retrieved from Launchpad.
- null
install_sources
(string) List of extra apt sources, per charm-helpers standard format (a yaml list of strings encoded as a string). Each source may be either a line that can be added directly to sources.list(5), or in the form ppa:<user>/<ppa-name> for adding Personal Package Archives, or a distribution component to enable.
- ppa:telegraf-devs/ppa
tags
(string) Comma separated list of global tags. ie, 'dc=us-east-1,rack=1a' will tag all metrics with dc=us-east-1 and rack=1a
flush_jitter
(string) Jitter the flush interval by a random amount. This is primarily to avoid large write spikes for users running a large number of telegraf instances. ie, a jitter of 5s and interval 10s means flushes will happen every 10-15s
0s