InfluxDB

InfluxData is based on the TICK stack, the first open source platform for managing IoT time-series data at scale.

Sample pillars

Single-node influxdb, enabled http frontend and admin web interface:

influxdb:
  server:
    enabled: true
    http:
      enabled: true
      bind:
        address: 0.0.0.0
        port: 8086
    admin:
      enabled: true
      bind:
        address: 0.0.0.0
        port: 8083

Single-node influxdb, SSL for http frontend:

influxdb:
  server:
    enabled: true
    http:
      bind:
        ssl:
          enabled: true
          key_file: /etc/influxdb/ssl/key.pem
          cert_file: /etc/influxdb/ssl/cert.pem

Single-node influxdb where you specify paths for data and metastore directories. Custom directories are created by this formula:

influxdb:
  server:
    enabled: true
    data:
      dir: '/opt/influxdb/data'
      wal_dir: '/opt/influxdb/wal'
    meta:
      dir: '/opt/influxdb/meta'

InfluxDB server with customized parameters for the data service:

influxdb:
  server:
    enabled: true
    data:
      max_series_per_database: 20000000
      cache_max_memory_size: 524288000
      cache_snapshot_memory_size: 26214400
      cache_snapshot_write_cold_duration: "5m"
      compact_full_write_cold_duration: "2h"2h"
      max_values_per_tag: 5000

Single-node influxdb with an admin user:

influxdb:
  server:
    enabled: true
    http:
      enabled: true
      bind:
        address: 0.0.0.0
        port: 8086
    admin:
      enabled: true
      bind:
        address: 0.0.0.0
        port: 8083
      user:
        enabled: true
        name: root
        password: secret

Single-node influxdb with new users:

influxdb:
  server:
    user:
      user1:
        enabled: true
        admin: true
        name: username1
        password: keepsecret1
      user2:
        enabled: true
        admin: false
        name: username2
        password: keepsecret2

Single-node influxdb with new databases:

influxdb:
  server:
    database:
      mydb1:
        enabled: true
        name: mydb1
      mydb2:
        enabled: true
        name: mydb2

Manage the retention policies for a database:

influxdb:
  server:
    database:
      mydb1:
        enabled: true
        name: mydb1
        retention_policy:
        - name: rp_db1
          duration: 30d
          replication: 1
          is_default: true

Where default values are:

  • name = autogen
  • duration = INF
  • replication = 1
  • is_default: false

Here is how to manage grants on database:

influxdb:
  server:
    grant:
      username1_mydb1:
        enabled: true
        user: username1
        database: mydb1
        privilege: all
      username2_mydb1:
        enabled: true
        user: username2
        database: mydb1
        privilege: read
      username2_mydb2:
        enabled: true
        user: username2
        database: mydb2
        privilege: write

InfluxDB relay:

influxdb:
  server:
    enabled: true
    http:
      enabled: true
      output:
        idb01:
          location: http://idb01.local:8086/write
          timeout: 10
        idb02:
          location: http://idb02.local:8086/write
          timeout: 10
    udp:
      enabled: true
      output:
        idb01:
          location: idb01.local:9096
        idb02:
          location: idb02.local:9096

InfluxDB cluster:

influxdb:
  server:
    enabled: true
  meta:
    bind:
      address: 0.0.0.0
      port: 8088
      http_address: 0.0.0.0
      http_port: 8091
  cluster:
    members:
      - host: idb01.local
        port: 8091
      - host: idb02.local
        port: 8091
      - host: idb03.local
        port: 8091

Deploy influxdb apt repository (using linux formula):

linux:
  system:
    os: ubuntu
    dist: xenial
    repo:
      influxdb:
        enabled: true
        source: 'deb https://repos.influxdata.com/${linux:system:os} ${linux:system:dist} stable'
        key_url: 'https://repos.influxdata.com/influxdb.key'

InfluxDB client for configuring databases, users and retention policies:

influxdb:
  client:
    enabled: true
    server:
      protocol: http
      host: 127.0.0.1
      port: 8086
      user: admin
      password: foobar
    user:
      user1:
        enabled: true
        admin: true
        name: username1
    database:
      mydb1:
        enabled: true
        name: mydb1
        retention_policy:
        - name: rp_db1
          duration: 30d
          replication: 1
          is_default: true
    grant:
      username1_mydb1:
        enabled: true
        user: username1
        database: mydb1
        privilege: all

InfluxDB client state’s that uses curl can be forced to retry query if curl call fails:

influxdb:
  client:
    enabled: true
    retry:
      count: 3
      delay: 3

Create an continuous queries:

influxdb:
  client:
    database:
      mydb1:
        continuous_query:
          cq_avg_bus_passengers: >-
            SELECT mean("passengers") INTO "transportation"."three_weeks"."average_passengers" FROM "bus_data" GROUP BY time(1h)

Prunning data and data management:

Intended to use in scheduled jobs, executed to maintain data life cycle above retention policy. These states are executed by query.sls and you are expected to trigger sls_id individually.

influxdb:
  client:
    database:
      mydb1:
        query:
          drop_measurement_h2o: >-
            DROP MEASUREMENT h2o_quality
          drop_shard_h2o: >-
            DROP SHARD h2o_quality
          drop_series_h2o_feet: >-
            DROP SERIES FROM "h2o_feet"
          drop_series_h2o_feet_loc_smonica: >-
            DROP SERIES FROM "h2o_feet" WHERE "location" = 'santa_monica'
          delete_h2o_quality_rt3: >-
            DELETE FROM "h2o_quality" WHERE "randtag" = '3'
          delete_h2o_quality: >-
            DELETE FROM "h2o_quality"
salt \* state.sls_id influxdb_query_delete_h2o_quality influxdb.query

InfluxDB relay with HTTP outputs:

influxdb:
  relay:
    enabled: true
    telemetry:
      enabled: true
      bind:
        address: 127.0.0.1
        port: 9196
    listen:
      http_backend:
        type: http
        bind:
          address: 127.0.0.1
          port: 9096
        output:
          server1:
            location: http://server1:8086/write
            timeout: 20s
            buffer_size_mb: 512
            max_batch_kb: 1024
            max_delay_interval: 30s
          server2:
            location: http://server2:8086/write

Documentation and Bugs

To learn how to install and update salt-formulas, consult the documentation available online at:

In the unfortunate event that bugs are discovered, they should be reported to the appropriate issue tracker. Use Github issue tracker for specific salt formula:

For feature requests, bug reports or blueprints affecting entire ecosystem, use Launchpad salt-formulas project:

You can also join salt-formulas-users team and subscribe to mailing list:

Developers wishing to work on the salt-formulas projects should always base their work on master branch and submit pull request against specific formula.

Any questions or feedback is always welcome so feel free to join our IRC channel:

#salt-formulas @ irc.freenode.net