A fast data collector in Rust

Overview

Flowgger

Build Status License: BSD2

Flowgger is a fast, simple and lightweight data collector written in Rust.

It reads log entries over a given protocol, extracts them, decodes them using a given format, re-encodes them into a different format, and asynchronously pushes the result into a remote data store.

Flowgger is designed to be:

  • Paranoid: it carefully validates input data to prevent injection of malformed/incomplete records down the chain.
  • Safe: written in Rust, without any unsafe code.
  • Fast: even though messages are systematically parsed and validated, Flowgger is orders of magnitude faster than Logstash and Fluentd.
  • Standalone: it comes as a single executable file, and doesn't require a JVM.

Flowgger supports common input types: stdin, UDP, TCP, TLS and Redis, as well as multiple input formats: JSON (GELF), LTSV, Cap'n Proto and RFC5424. Normalized messages can be sent to Kafka, Graylog, to downstream Flowgger servers, or to other log collectors for further processing.

Jump to the Flowgger documentation

Comments
  • Publish to crates.io

    Publish to crates.io

    Is there any plan to publish this package into crates.io to allow a simple cargo install and allow a better distribution model instead of cloning / building?

    enhancement question 
    opened by crisidev 10
  • File input

    File input

    Fixes #20.

    The file input:

    • supports tail-like reading for existing files and dynamic recognition of new files (via inotify)
    • handles multiple file inputs (src path can be glob compatible string with wildcards)
    opened by Trojan295 9
  • Flowgger 0.2.0 does not support multiline in gelf anymore.

    Flowgger 0.2.0 does not support multiline in gelf anymore.

    Example of working message on flowgger 0.1.X to gelf input with multiline: echo -e '{"version":"1.1", "host": "example.org", "short_message": "A short GELF message that helps you identify what is going on", "full_message": "Backtrace here\n\nmore stuff", "timestamp": 1470749969, "level": 1, "_user_id": 9001, "_some_info": "foo", "some_metric_num": 42.0}\0' | openssl s_client -quiet -no_ign_eof -connect localhost:12202

    [input]
    type = "tls"
    format = "gelf"
    listen = "0.0.0.0:12202"
    framing = "nul"
    ...
    

    Now with flowgger 0.2.0, I have the following error:

    Invalid GELF input, unable to parse as a JSON object: [{"version":"1.1", "host": "example.org", "short_message": "A short GELF message that helps you identify what is going on", "full_message": "Backtrace here
    
    more stuff", "timestamp": 1470749909, "level": 1, "_user_id": 9001, "_some_info": "foo", "some_metric_num": 42.0}]
    
    opened by edefaria 9
  • coio is not build in cargo.io migrate to tokyo the tls module

    coio is not build in cargo.io migrate to tokyo the tls module

    to unlock https://github.com/awslabs/flowgger/issues/32 coio has to go

    it's used in the TLS module as a scheduler and to control tcplistener and stream.

    The package doesn't seem to have been touched for at least an year: https://github.com/zonyitoo/coio-rs

    enhancement help wanted 
    opened by kurojishi 6
  • File input

    File input

    I may have missed it, but I didn't find in the docs how to get input from a log file.

    It would need to:

    • Not read the whole file from the start, but seek to the end and read from there (like tail -f)
    • Keep working if a logrotate service renames the log file and creates a new file with the previous name (flowgger should start reading the new file).
    opened by gyscos 6
  • Update capnp to 0.10

    Update capnp to 0.10

    Issue #, if available: part of #33

    Description of changes: This PR updates the capnp library to 0.10. As a result the capnp schema was recompiled. I couldn't find a flag to tell the capnp compiler to put the sources in a specific package path (now it is crate::flowgger::capnp_record, in my PR it's under crate::capnp_record), so I moved the compiled schema to the crate root.

    @jedisct1 , is there some way to change that, besides modifying the generated schema manually?

    By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

    opened by Trojan295 5
  • tls_ca_file behavior change and new option tls_cert_chain

    tls_ca_file behavior change and new option tls_cert_chain

    This little patch allows set CAfile to be set independantly of tls verify peer and add an option to specify one extra chain cert to the server chain cert.

    opened by jehuty0shift 4
  • Lower docker image size and switch to OpenSSL in docker image

    Lower docker image size and switch to OpenSSL in docker image

    Issue #, if available: none

    Description of changes: This PR updates the Dockerfile, by changing LibreSSL to OpenSSL there and lowering the output image size do 76MB, by using a multi-stage Docker build and debian:buster-slim as a base image

    --

    By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

    opened by Trojan295 3
  • input from nginx error_log show unsupported version

    input from nginx error_log show unsupported version

    I use nginx-1.12.0 version and flowgger-master on macOS 10.12.4

    in the nginx configuration file nginx.conf, I instruct nginx to send error log to local syslog server

    error_log   syslog:server=127.0.0.1 debug;
    

    in flowgger.toml

    [input]
    
    ### Syslog over UDP
    type = "udp"
    listen = "0.0.0.0:514"
    
    [output]
    
    ### Debug output (stdout)
    type = "stdout"
    
    grep -rnw 'src' -e 'Unsupported version'
    src/flowgger/decoder/rfc5424_decoder.rs:79:        return Err("Unsupported version");
    nano +79 src/flowgger/decoder/rfc5424_decoder.rs
    
    // I add a println! to this function to show line value
    fn parse_pri_version(line: &str) -> Result<Pri, &'static str> {
        println!("line:{}", line); // <----show line value
        if !line.starts_with('<') {
            return Err("The priority should be inside brackets");
        }
        let mut parts = line[1..].splitn(2, '>');
        let pri_encoded: u8 =
            try!(try!(parts.next().ok_or("Empty priority")).parse().or(Err("Invalid priority")));
        let version = try!(parts.next().ok_or("Missing version"));
        if version != "1" {
            return Err("Unsupported version");
        }
        Ok(Pri {
               facility: pri_encoded >> 3,
               severity: pri_encoded & 7,
           })
    }
    

    after I recompile and restart flowgger, start nginx and make some error to generate a error log

    target/release/flowgger
    Flowgger 0.2.6
    <184> Apr
    Unsupported version
    

    Do you have a plan to support input nginx log (both error_log and access_log)?

    opened by progamer71 3
  • Decoder RFC 5424 does not correctly parse structured data

    Decoder RFC 5424 does not correctly parse structured data

    The decoder RFC 5424 does not correctly parse structured data. Currently, the parser parses only one structured data, which completely breaks the specification. As defined by the RFC 5424 ABF a Syslog message can contain no, one or more than one structured data.

    Here is an example of a not properly parsed message:

    <165>1 2003-10-11T22:14:15.003Z mymachine.example.com evntslog - ID47 [exampleSDID@32473 iut="3" eventSource= "Application" eventID="1011"][examplePriority@32473 class="high"] hello world
    

    In this example, the message contains two structured data (but we can have a message with more than two) but the flowgger decoder only parses the first one and consider the rest a message, which is not correct too as the structured data and the message must be separated with a space.

    bug 
    opened by gearnode 2
  • Update dependencies version

    Update dependencies version

    Dependencies are old and needs to be updated. There are some which are going to be tricky:

    OpenSSL 0.9 -> 0.10: Blocked by Kafka using 0.9 and by API change in the library
    CapNProto: Change of API in the library force implementation of a new trait
    serde_json 0.8 -> 1.0: Change of API in the library
    

    ported over from https://github.com/amazon-archives/flowgger-hold/issues/3

    enhancement 
    opened by kurojishi 2
  • Build fail with redis feature

    Build fail with redis feature

    Hi. I'm getting errors while trying to build flowgger with --all-features (rust 1.62.0) as pointed out in https://gitlab.alpinelinux.org/alpine/aports/-/issues/13952#note_243393.

    Changing the declaration to let mut ... (like the log suggests) makes the build pass but I honestly don't know whether things will break. This seems to be happen after redis-rs 0.11.0-beta1 release (ref: https://github.com/redis-rs/redis-rs/blob/main/CHANGELOG.md#0110-beta1---2019-05-30)

    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tcp/tcpco_input.rs:52:18
       |
    52 |     decoder: Box<Decoder>,
       |                  ^^^^^^^
       |
       = note: `#[warn(bare_trait_objects)]` on by default
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    52 -     decoder: Box<Decoder>,
    52 +     decoder: Box<dyn Decoder>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tcp/tcpco_input.rs:53:18
       |
    53 |     encoder: Box<Encoder>,
       |                  ^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    53 -     encoder: Box<Encoder>,
    53 +     encoder: Box<dyn Encoder>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tcp/tcpco_input.rs:29:22
       |
    29 |         decoder: Box<Decoder + Send>,
       |                      ^^^^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    29 -         decoder: Box<Decoder + Send>,
    29 +         decoder: Box<dyn Decoder + Send>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tcp/tcpco_input.rs:30:22
       |
    30 |         encoder: Box<Encoder + Send>,
       |                      ^^^^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    30 -         encoder: Box<Encoder + Send>,
    30 +         encoder: Box<dyn Encoder + Send>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tls/tlsco_input.rs:52:18
       |
    52 |     decoder: Box<Decoder>,
       |                  ^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    52 -     decoder: Box<Decoder>,
    52 +     decoder: Box<dyn Decoder>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tls/tlsco_input.rs:53:18
       |
    53 |     encoder: Box<Encoder>,
       |                  ^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    53 -     encoder: Box<Encoder>,
    53 +     encoder: Box<dyn Encoder>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tls/tlsco_input.rs:29:22
       |
    29 |         decoder: Box<Decoder + Send>,
       |                      ^^^^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    29 -         decoder: Box<Decoder + Send>,
    29 +         decoder: Box<dyn Decoder + Send>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tls/tlsco_input.rs:30:22
       |
    30 |         encoder: Box<Encoder + Send>,
       |                      ^^^^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    30 -         encoder: Box<Encoder + Send>,
    30 +         encoder: Box<dyn Encoder + Send>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tcp/tcpco_input.rs:61:51
       |
    61 |         "capnp" => Box::new(CapnpSplitter) as Box<Splitter<_>>,
       |                                                   ^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    61 -         "capnp" => Box::new(CapnpSplitter) as Box<Splitter<_>>,
    61 +         "capnp" => Box::new(CapnpSplitter) as Box<dyn Splitter<_>>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tcp/tcpco_input.rs:62:49
       |
    62 |         "line" => Box::new(LineSplitter) as Box<Splitter<_>>,
       |                                                 ^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    62 -         "line" => Box::new(LineSplitter) as Box<Splitter<_>>,
    62 +         "line" => Box::new(LineSplitter) as Box<dyn Splitter<_>>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tcp/tcpco_input.rs:63:53
       |
    63 |         "syslen" => Box::new(SyslenSplitter) as Box<Splitter<_>>,
       |                                                     ^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    63 -         "syslen" => Box::new(SyslenSplitter) as Box<Splitter<_>>,
    63 +         "syslen" => Box::new(SyslenSplitter) as Box<dyn Splitter<_>>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tcp/tcpco_input.rs:64:47
       |
    64 |         "nul" => Box::new(NulSplitter) as Box<Splitter<_>>,
       |                                               ^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    64 -         "nul" => Box::new(NulSplitter) as Box<Splitter<_>>,
    64 +         "nul" => Box::new(NulSplitter) as Box<dyn Splitter<_>>,
       | 
    
    warning: use of deprecated associated function `may::Config::set_io_workers`: use `set_workers` only
      --> src/flowgger/input/tls/tlsco_input.rs:33:23
       |
    33 |         may::config().set_io_workers(tls_config.threads);
       |                       ^^^^^^^^^^^^^^
       |
       = note: `#[warn(deprecated)]` on by default
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tls/tlsco_input.rs:68:51
       |
    68 |         "capnp" => Box::new(CapnpSplitter) as Box<Splitter<_>>,
       |                                                   ^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    68 -         "capnp" => Box::new(CapnpSplitter) as Box<Splitter<_>>,
    68 +         "capnp" => Box::new(CapnpSplitter) as Box<dyn Splitter<_>>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tls/tlsco_input.rs:69:49
       |
    69 |         "line" => Box::new(LineSplitter) as Box<Splitter<_>>,
       |                                                 ^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    69 -         "line" => Box::new(LineSplitter) as Box<Splitter<_>>,
    69 +         "line" => Box::new(LineSplitter) as Box<dyn Splitter<_>>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tls/tlsco_input.rs:70:53
       |
    70 |         "syslen" => Box::new(SyslenSplitter) as Box<Splitter<_>>,
       |                                                     ^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    70 -         "syslen" => Box::new(SyslenSplitter) as Box<Splitter<_>>,
    70 +         "syslen" => Box::new(SyslenSplitter) as Box<dyn Splitter<_>>,
       | 
    
    warning: trait objects without an explicit `dyn` are deprecated
      --> src/flowgger/input/tls/tlsco_input.rs:71:47
       |
    71 |         "nul" => Box::new(NulSplitter) as Box<Splitter<_>>,
       |                                               ^^^^^^^^^^^
       |
       = warning: this is accepted in the current edition (Rust 2018) but is a hard error in Rust 2021!
       = note: for more information, see <https://doc.rust-lang.org/nightly/edition-guide/rust-2021/warnings-promoted-to-error.html>
    help: use `dyn`
       |
    71 -         "nul" => Box::new(NulSplitter) as Box<Splitter<_>>,
    71 +         "nul" => Box::new(NulSplitter) as Box<dyn Splitter<_>>,
       | 
    
    error[E0596]: cannot borrow `redis_cnx` as mutable, as it is not declared as mutable
       --> src/flowgger/input/redis_input.rs:105:46
        |
    99  |         let redis_cnx = self.redis_cnx;
        |             --------- help: consider changing this to be mutable: `mut redis_cnx`
    ...
    105 |             let dummy: RedisResult<String> = redis_cnx.rpoplpush(queue_key_tmp, queue_key);
        |                                              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
    
    error[E0596]: cannot borrow `redis_cnx` as mutable, as it is not declared as mutable
       --> src/flowgger/input/redis_input.rs:110:38
        |
    99  |         let redis_cnx = self.redis_cnx;
        |             --------- help: consider changing this to be mutable: `mut redis_cnx`
    ...
    110 |             let line: String = match redis_cnx.brpoplpush(queue_key, queue_key_tmp, 0) {
        |                                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
    
    error[E0596]: cannot borrow `redis_cnx` as mutable, as it is not declared as mutable
       --> src/flowgger/input/redis_input.rs:117:40
        |
    99  |         let redis_cnx = self.redis_cnx;
        |             --------- help: consider changing this to be mutable: `mut redis_cnx`
    ...
    117 |             let res: RedisResult<u8> = redis_cnx.lrem(queue_key_tmp as &str, 1, line as String);
        |                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cannot borrow as mutable
    
    For more information about this error, try `rustc --explain E0596`.
    warning: `flowgger` (lib) generated 17 warnings
    error: could not compile `flowgger` due to 3 previous errors; 17 warnings emitted
    
    opened by FollieHiyuki 1
  • Enhancement request:  NATS Output

    Enhancement request: NATS Output

    It would be great if Flowlogger supported output to NATS (https://nats.io/).

    Kafka is quite complex and has JVM dependency, NATS is fast becoming a popular alternative for people who don't need all the bells and whistles of Kafka.

    enhancement help wanted 
    opened by udf2457 1
  • Log file naming hardcode the time and extensions separators

    Log file naming hardcode the time and extensions separators

    In log file name the separator with the datetime string and the extension strings are hardcoded.

    So, using another char than "-" or no extension doesn't work.

    file_path = "var/output/logs/fwsyslog.log"
      file_rotation_timeformat = ".%Y-%m-%d-%H-%M"
      file_rotation_time = 60
    
      # want fwsyslog.2021-12-17-15-06.log
      # get fwsyslog-.2021-12-17-15-39.log
    
     file_path = "var/output/logs/fwsyslog"
      file_rotation_timeformat = ".%Y-%m-%d-%H-%M"
      file_rotation_time = 60
    
      # want fwsyslog.2021-12-17-15-06
      # get fwsyslog-.2021-12-17-15-39.log
    

    Update new_file.set_file_name(&format!("{}-{}.{}"

    • The datetime separator must be removed and put in the config string.
    • The ".{}" suffix should only be appended if the filename contains a suffix
    bug 
    opened by vche 0
  • Timezone ?

    Timezone ?

    Hello, We are trying flowgger for forwarding logs from remote site to our central Graylog server. Everything on our infrastructure is with timezone CEST. Flowgger seems to force the timestamp of the GELF to UTC Is there a way to configure and change this behavior ? Thanks in advance Flowgger seems to be a nice tool !!

    question 
    opened by jothoma1 1
  • Lua Parsing

    Lua Parsing

    Would you be open to accepting a PR to support a Lua parsing? This way some more custom log formats can be added without having to recompile, or add into source.

    enhancement 
    opened by avitex 1
  •  LTSV decoder doesn't respect output.ltsv_extra add or replace fields

    LTSV decoder doesn't respect output.ltsv_extra add or replace fields

    Found this while writing tests

    As for https://github.com/jedisct1/flowgger/wiki/LTSV-Encoder the encoders should support the ability to add or replace, without duplicating tags and fields.

    LTSV is not only not overriding it, but get duplicated as the encoding is done by appending data to a String:

    https://github.com/awslabs/flowgger/blob/master/src/flowgger/encoder/ltsv_encoder.rs#L41

    left: "some_info:foo\tsome_info:bar\thost:example.org\ttime:1385053862.3072\tmessage:A short message\tfull_message:Backtrace here with more\tlevel:1\tappname:appname\tprocid:44\tmsgid:msg_id", right: "some_info:bar\thost:example.org\ttime:1385053862.3072\tmessage:A short message\tfull_message:Backtrace here with more\tlevel:1\tappname:appname\tprocid:44\tmsgid:msg_id"', src/flowgger/encoder/ltsv_encoder.rs:175:9

    bug 
    opened by kurojishi 0
Releases(0.3.0)
  • 0.3.0(Jul 4, 2022)

    New major version: 0.3.0 (2022-03-14)

    Breaking Changes

    • Migrate from chrono to time as per https://rustsec.org/advisories/RUSTSEC-2020-0071
      • String formatting changed from strftime to time custom formatting - see flowgger.toml for examples on change

    What's Changed

    • Fix various items turned up by linting by @chills42 in https://github.com/awslabs/flowgger/pull/22
    • More linting related refactorings by @chills42 in https://github.com/awslabs/flowgger/pull/23
    • Graylog now expect a non-empty hostname. by @pdepaepe in https://github.com/awslabs/flowgger/pull/25
    • Added docstring to public library entry point by @kurojishi in https://github.com/awslabs/flowgger/pull/40
    • Feature/time rotation by @vche in https://github.com/awslabs/flowgger/pull/35
    • README.md updates by @kurojishi in https://github.com/awslabs/flowgger/pull/41
    • Answer to the Ultimate Question of Life, the Universe, and Everything by @crisidev in https://github.com/awslabs/flowgger/pull/42
    • Feature/rfc3164 prepend by @vche in https://github.com/awslabs/flowgger/pull/43
    • Feature/unit tests by @vche in https://github.com/awslabs/flowgger/pull/44
    • Update openssl from 0.9 to 0.10 by @Trojan295 in https://github.com/awslabs/flowgger/pull/49
    • GELF operational improvements tests, and bugfixes by @kurojishi in https://github.com/awslabs/flowgger/pull/47
    • Lower docker image size and switch to OpenSSL in docker image by @Trojan295 in https://github.com/awslabs/flowgger/pull/50
    • Replace coio with may by @Trojan295 in https://github.com/awslabs/flowgger/pull/51
    • Update capnp to 0.10 by @Trojan295 in https://github.com/awslabs/flowgger/pull/52
    • Github Releases by @Trojan295 in https://github.com/awslabs/flowgger/pull/53
    • Update cargo informations for crates.io push by @vche in https://github.com/awslabs/flowgger/pull/54
    • Update dependency for publishing by @vche in https://github.com/awslabs/flowgger/pull/55
    • Bumping package version (should have been done with previous changes) by @vche in https://github.com/awslabs/flowgger/pull/56
    • Add more format handling to rfc3164, and passthrough output by @vche in https://github.com/awslabs/flowgger/pull/57
    • Trim raw messages by @vche in https://github.com/awslabs/flowgger/pull/58
    • Fix travis ci issue with drop of ssl support by @vche in https://github.com/awslabs/flowgger/pull/63
    • Support multiple SD in RFC5424 (fix issue #61) by @vche in https://github.com/awslabs/flowgger/pull/62
    • Run cargo fmt by @rejao in https://github.com/awslabs/flowgger/pull/66
    • Bump dependencies version by @rejao in https://github.com/awslabs/flowgger/pull/67
    • Migrate from chrono to time by @rejao in https://github.com/awslabs/flowgger/pull/68
    • validate time format by @rejao in https://github.com/awslabs/flowgger/pull/69

    New Contributors

    • @chills42 made their first contribution in https://github.com/awslabs/flowgger/pull/22
    • @kurojishi made their first contribution in https://github.com/awslabs/flowgger/pull/40
    • @vche made their first contribution in https://github.com/awslabs/flowgger/pull/35
    • @crisidev made their first contribution in https://github.com/awslabs/flowgger/pull/42
    • @Trojan295 made their first contribution in https://github.com/awslabs/flowgger/pull/49
    • @rejao made their first contribution in https://github.com/awslabs/flowgger/pull/66

    Full Changelog: https://github.com/awslabs/flowgger/compare/0.2.6...0.3.0

    Source code(tar.gz)
    Source code(zip)
Owner
Amazon Web Services - Labs
AWS Labs
Amazon Web Services - Labs
A genetic algorithm for bechmark problems, written to learn Rust.

Genetic Algorithm A genetic algorithm in Rust for the following benchmark problems: Ackley Griewangk Rastrigin Rosenbrock Schwefel Sphere Usage: Insta

Andrew Schwartzmeyer 73 Dec 25, 2022
interative assembly shell written in rust

Overview this project is inspired by https://github.com/poppycompass/asmshell Preview Build from source git clone https://github.com/keystone-engine/k

Xargin 236 Dec 23, 2022
Distributed compute platform implemented in Rust, and powered by Apache Arrow.

Ballista: Distributed Compute Platform Overview Ballista is a distributed compute platform primarily implemented in Rust, powered by Apache Arrow. It

Ballista 2.3k Jan 3, 2023
Userspace WireGuard® Implementation in Rust

BoringTun BoringTun is an implementation of the WireGuard® protocol designed for portability and speed. BoringTun is successfully deployed on millions

Cloudflare 4.8k Jan 8, 2023
Drill is a HTTP load testing application written in Rust inspired by Ansible syntax

Drill Drill is a HTTP load testing application written in Rust. The main goal for this project is to build a really lightweight tool as alternative to

Ferran Basora 1.5k Dec 28, 2022
An experimental HTTP load testing application written in Rust.

Herd Herd was a small side project in building a HTTP load testing application in Rust with a main focus on being easy to use and low on OS level depe

Jacob Clark 100 Dec 27, 2022
kytan: High Performance Peer-to-Peer VPN in Rust

kytan: High Performance Peer-to-Peer VPN kytan is a high performance peer to peer VPN written in Rust. The goal is to to minimize the hassle of config

Chang Lan 368 Dec 31, 2022
A purpose-built proxy for the Linkerd service mesh. Written in Rust.

This repo contains the transparent proxy component of Linkerd2. While the Linkerd2 proxy is heavily influenced by the Linkerd 1.X proxy, it comprises

Linkerd 1.7k Jan 7, 2023
Full fake REST API generator written with Rust

Weld Full fake REST API generator. This project is heavily inspired by json-server, written with rust. Synopsis Our first aim is to generate a fake ap

Seray Uzgur 243 Dec 31, 2022
A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust

Wez's Terminal A GPU-accelerated cross-platform terminal emulator and multiplexer written by @wez and implemented in Rust User facing docs and guide a

Wez Furlong 6.7k Jan 2, 2023
pastebin written in pure rust. A rewrite of ptpb/pb.

rspb rust fork of ptpb/pb TL;DR Create a new paste from the output of cmd: cmd | curl -F c=@- https://pb.mgt.moe/ Usage Creating pastes > echo hi | c

mgt 39 Jan 4, 2023
The LibreTranslate API for Rust.

libretranslate-rs A LibreTranslate API for Rust. libretranslate = "0.2.4" libretranslate allows you to use open source machine translation in your pr

Grant Handy 51 Jan 5, 2023
Yet another pager in Rust

rust-pager Yet another pager in Rust Features Vim like keybindings Search substring Mouse wheel support Install cargo install rust-pager Usage <comman

null 19 Dec 7, 2022
A Rust serverless function to retrieve and relay a playlist for Twitch livestreams/VODs.

City17 A Rust serverless function to retrieve and relay a playlist for Twitch livestreams/VODs. By running this in specific countries and using a brow

Malloc Voidstar 5 Dec 15, 2021
Fork of async-raft, the Tokio-based Rust implementation of the Raft protocol.

Agreed Fork of async-raft, the Tokio-based Rust implementation of the Raft distributed consensus protocol. Agreed is an implementation of the Raft con

NLV8 Technologies 8 Jul 5, 2022
Rust runtime for Vercel Functions.

Rust Rust runtime for Vercel Functions. Community-maintained package to support using Rust inside Vercel Functions as a Runtime. Usage First, you'll n

Vercel Community 378 Dec 30, 2022
Active Directory data collector for BloodHound written in Rust. 🦀

RustHound Summary Limitation Description How to compile it? Using Makefile Using Dockerfile Using Cargo Linux x86_64 static version Windows static ver

OPENCYBER 575 Apr 25, 2023
Garbage Collector(Hyaline- Safe Memory Reclaimation) for lock free data structures

Hyaline-SMR This crate provides garbage collection using hyaline algorithm for building concurrent data structures. When a thread removes an object fr

Abishek 2 Dec 21, 2022
This is the data collector that gets your system's state and sends it to the backend

⚡ Installation Linux curl -s https://raw.githubusercontent.com/xornet-cloud/Reporter/main/scripts/install.sh | sudo bash Windows Invoke-Command -Scrip

Xornet 18 Sep 3, 2022
Implementation of Immix Mark-Region Garbage collector written in Rust Programming Language.

libimmixcons Implementation of Immix Mark-Region Garbage collector written in Rust Programming Language. Status This is mostly usable library. You can

playX 34 Dec 7, 2022