# Fluentd Server
[![Build Status](https://secure.travis-ci.org/sonots/fluentd-server.png?branch=master)](http://travis-ci.org/sonots/fluentd-server)
[![Coverage Status](https://coveralls.io/repos/sonots/fluentd-server/badge.png?branch=master)](https://coveralls.io/r/sonots/fluentd-server?branch=master)
A Fluentd config distribution server
Demo: [http://fluentd-server.herokuapp.com](http://fluentd-server.herokuapp.com)
## What You Can Do
With Fluentd Server, you can manage fluentd configuration files centrally with `erb`.
For example, you may create a config post whose name is `worker` as:
```
type stdout
```
Then you can download the config via an API whose uri is like `/api/worker?port=24224` where its query parameters are replaced with variables in the erb.
The downloaded contents should become as follows:
```
type stdout
```
## How to Use
The `include` directive of fluentd config supports `http`, so write just one line on your fluentd.conf as:
```
# /etc/fluentd.conf
include http://fqdn.to.fluentd-server/api/:name?port=24224
```
so that it will download the real configuration from the Fluentd Server where :name is the name of your post.
## Installation
Prerequisites
* SQLite
* Ruby 2.0 or later
### From Gem package
Easy steps on installation with gem and SQLite.
```bash
$ gem install fluentd-server
$ gem install sqlite3
$ fluentd-server new
$ cd fluentd-server
$ fluentd-server init # creates database scheme on SQLite
$ fluentd-server start
```
Then see `http://localhost:5126/`.
### From Git repository
Install from git repository.
```bash
$ git clone https://github.com/sonots/fluentd-server.git
$ cd fluentd-server
$ bundle
$ bundle exec fluentd-server init # creates database scheme on SQLite
$ bundle exec fluentd-server start
```
Then see `http://localhost:5126/`.
## Configuration
To configure fluentd-server, edit the `.env` file in the project root directory.
The default configuration is as follows:
```
PORT=5126
HOST=0.0.0.0
# DATABASE_URL=sqlite3:data/fluentd_server.db
# JOB_DIR=jobs
# LOG_PATH=STDOUT
# LOG_LEVEL=debug
# LOG_SHIFT_AGE=0
# LOG_SHIFT_SIZE=1048576
```
## HTTP API
See [API.md](API.md).
### Use Fluentd Server from Command Line
For the case you want to edit Fluentd configuration files from your favorite editors rather than from the Web UI, `LOCAL STORAGE` feature is available.
With this feature, you should also be able to manage your configuration files with git (or any VCS).
To use this feature, enable `LOCAL_STORAGE` in `.env` file as:
```
LOCAL_STORAGE=true
DATA_DIR=data
SYNC_INTERVAL=60
```
where the `DATA_DIR` is the location to place your configuration files locally, and the `SYNC_INTERVAL` is the interval where a synchronization worker works.
Putting any files whose name ends with `.erb` in `DATA_DIR` is automatically synchronized with DB by the synchronization worker. Removing `.erb` files is also synchronized with DB.
For the case you want to synchronize immediately, `sync` command is also available.
```
$ fluentd-server sync
```
NOTE: Enabling this feature disables to edit the Fluentd configuration from the Web UI.
### CLI (Command Line Interface)
Here is a full list of fluentd-server commands.
```bash
$ fluentd-server help
Commands:
fluentd-server help [COMMAND] # Describe available commands or one specific command
fluentd-server init # Creates database schema
fluentd-server job-clean # Clean fluentd_server delayed_job queue
fluentd-server job-worker # Sartup fluentd_server job worker
fluentd-server migrate # Migrate database schema
fluentd-server new # Creates fluentd-server resource directory
fluentd-server start # Sartup fluentd_server
fluentd-server sync # Synchronize local file storage with db immediately
fluentd-server sync-worker # Sartup fluentd_server sync worker
fluentd-server td-agent-condrestart # Run `/etc/init.d/td-agent condrestart` via serf event
fluentd-server td-agent-configtest # Run `/etc/init.d/td-agent configtest` via serf query
fluentd-server td-agent-reload # Run `/etc/init.d/td-agent reload` via serf event
fluentd-server td-agent-restart # Run `/etc/init.d/td-agent restart` via serf event
fluentd-server td-agent-start # Run `/etc/init.d/td-agent start` via serf event
fluentd-server td-agent-status # Run `/etc/init.d/td-agent status` via serf query
fluentd-server td-agent-stop # Run `/etc/init.d/td-agent stop` via serf event
```
## ToDo
* Automatic deployment (restart) support like the one of chef-server
## ChangeLog
See [CHANGELOG.md](CHANGELOG.md) for details.
## Contributing
1. Fork it
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create new [Pull Request](../../pull/new/master)
## Copyright
Copyright (c) 2014 Naotoshi Seo. See [LICENSE](LICENSE) for details.