kollekt-erlang
Yet another implementation of the kollekt service (origin by Paul Asmuth).
Motivation
Collect statistical data without handling them in the corresponding app itself.
Using UDP for a fire-and-forget mechanism (if we loose some packets we don't care).
Using Erlang to reduce the packet drops as much as possible (because Erlang has message inboxes for every process).
Building a distributed collector app, so the overlying production app servers do not need to communicate to one single collect service. And the distributed system will give fault-tolerance by sharing collected data across the node cluster.
Bucket data
Can be send as following:
mybucket;mybucketdata
or as concatenated list:
bucket1;valueA|||bucket2;valueB|||...
Delimiters can be changed in src/kollekt.hrl
.
Take care, which delimiters you want to use, they must not occur in the bucket or value data!
Usage
Prerequisites
Install Erlang (I build with R15B).
Compile
./compile
Run
Demo service:
./run
Test emitter:
./run_emitter
in development, everything can (and will) change, stay tuned …
Status
- OTP'fied where possible and reasonable
- statistical output on console
- app handles incoming buckets, collects data and let buckets die when needed
TODOs
- when buckets die they should export their bucket data to a storage (files, DB, …)
- exports rules (time based, size based, …)
- distributable (running on different nodes)
- using Mnesia as a first level storage (a dedicated process can then export to further targets based on rules)