Infino - Fast and scalable service to store time series and logs - written in Rust

Related tags

Command-line infino
Overview

Infino

   〽️ πŸͺ΅  β€”  πŸ” πŸ“Š  β€”  βš–οΈ πŸ’°

Ingest Metrics and Logs β€” Query and Insights β€” Scale and Save $$

Infino is an observability platform for storing metrics and logs at scale, and at lower cost


License GitHub commit activity Status Join Infino Slack

Report Bug Β· Request Feature


❓ What is Infino?

Infino is an observability platform that stores both metrics and application logs together. The key differences between Infino and other tools are:

  • It stores metrics and logs together - so you won't need to use two separate systems to store these.
  • It is built for focused observability use-case and written in Rust - you will find it faster and more cost-efficient than other tools. See benchmark.

πŸ€” Why Infino?

Infino was born out of the frustation of needing two open source systems (such as Prometheus + ELK) for storing metrics and application logs, even though the purpose of these two is the same - i.e., improve obervability and reliability of systems.

When we decided to write an open-source platform that stores both of these together, we built it from the ground up in Rust, with performance (which leads to cost reduction) as THE key criteria to focus on. Give us a try if you'd like to store metrics and logs together, and reduce the cost of your observability infrastructure along the way!

πŸ”₯ Features

  • Store metrics and logs together,
  • Ingest using FluentBit,
  • Search logs using boolean AND queries,
  • Query time series of metrics stored,
  • Coming Soon:
    • Store metrics and logs on S3,
    • More integrations: Prometheus, LogStash, and Grafana,
    • Powerful query language for metrics and logs,
    • Performance improvements while searching logs and metrics.
    • Inbuilt queue for disaster recovery - no data loss in case of failures.
    • Clients in other languages - Java, JavaScipt, Python,
    • UI for querying Infino.
    • Support for traces and Spans

πŸ”° Getting started

  • Install Docker.
  • Install Rust toolchain.
  • To get a quick taste of Infino, run the fluentbit example to publish logs and time series to Infino. This demontrates how to use fluentbit (a popular observability tool) to publish logs or metrics to Infino.
  • We are a project in active development, see the Contributions section below to understand the details as well as how you can contribute.

πŸ™ˆ Caveat

We are currently very much an Alpha product. Please file an issue if you face any problems. Please Contact Us if you want to discuss your use-case over virtual β˜• .

πŸ‘Š Contributions

Contributions are welcome in a bunch of areas and highly appreciated! To get started, check out the contributing guidelines.

You can also join us on Slack.

πŸ“ž Contact Us

Slack, or send an email to vinaykakade AT gmail DOT com.

β™₯️ Contributors

A big thank you to the community for making Infino possible!

Made with contrib.rocks.

Comments
  • Creating a new index at random location with tsldb crashes app

    Creating a new index at random location with tsldb crashes app

    With introduction of settings, we are expecting the index dir path to have default.toml file

    let result = Settings::new(config_dir_path);

    The behaviour ACC to me should be

    1. If path doesn't have default settings file, then copy from known location
    2. If it has continue
    opened by savannahar68 4
  • Tests fail when infino server is running

    Tests fail when infino server is running

    Description

    When infino server is running, tests fail due to a port conflict while starting rabbitmq.

    Steps to Reproduce

    1. Start infino server
    2. Run cargo test -- --ignored

    Expected behavior:

    Tests should pass.

    Actual behavior:

    Tests fail due to a port conflict in rabbitmq.

    Reproduces how often:

    Every time.

    Additional Information

    Need to make sure the tests use a different rabbitmq port than the server.

    high-priority 
    opened by vinaykakade 2
  • feat: retires added with exponential backoff to rabbitmq connection

    feat: retires added with exponential backoff to rabbitmq connection

    What does this PR do?

    • We try to connect to RabbitMq in exponential backoff fashion once docker is up and running

    How does this PR work? (optional)

    • Once docker containers are up, we are not certain when they'll start running so we should keep trying to connect to it

    Refer to a related PR or issue link

    opened by savannahar68 1
  • loom-tests: failing with error: no function or associated item named `new_with_max_params`

    loom-tests: failing with error: no function or associated item named `new_with_max_params`

    Description

    error[E0599]: no function or associated item named new_with_max_params found for struct Tsldb in the current scope. With the change to include configuration, the method new_with_max_params was removed and changes were made to load from configuration, but the loom tests were not updated.

    Steps to Reproduce

    1. Run loom tests.

    Expected behavior:

    Tests should pass.

    Actual behavior:

    Tests are failing with error[E0599]: no function or associated item namednew_with_max_paramsfound for structTsldbin the current scope.

    Additional Information

    • NA
    opened by naman-modi 1
  • feat: benchmark folder added in infino

    feat: benchmark folder added in infino

    What does this PR do?

    • This PR adds benchmark package to parent package

    How does this PR work? (optional)

    • Mentioned in README.md of benches folder

    Refer to a related PR or issue link

    • https://github.com/infinohq/infino/issues/10
    opened by savannahar68 1
  • Clean shutdown of server when Ctrl-C is pressed or SIGTERM is sent to the server process

    Clean shutdown of server when Ctrl-C is pressed or SIGTERM is sent to the server process

    Description

    As of now, there isn't a way to cleanly showdown the server. We should provide a way to cleanly shutdown the running threads when Ctrl-C is pressed or SIGTERM is sent to the server process.

    Additional Information

    Write a test for clean server shutdown as part of this change.

    high-priority 
    opened by vinaykakade 1
  • Allow configuration of the port number on which infino server is started

    Allow configuration of the port number on which infino server is started

    Summary

    Currently, infino always starts on port 3000. This needs to be configurable.

    Motivation

    Avoid port conflict in case the user has another service on port 3000.

    Describe alternatives you've considered

    NA

    Additional context

    NA

    opened by vinaykakade 1
  • chore: added pr and issues template

    chore: added pr and issues template

    What does this PR do?

    • Added issues and PR templates

    Refer to a related PR or issue link

    • #13

    Checklist

    • [X] I have written the necessary rustdoc comments.
    • [X] I have added the necessary unit tests and integration tests. (for non-documentation changes)
    opened by naman-modi 1
  • feat: Impletement overridable configuration settings

    feat: Impletement overridable configuration settings

    • Use 'config' crate to create overridable configuration such as threshold number of log messages, rabbitmq container name, etc.
    • The default configuration is specified in a default.toml file, and can be overridden using RUN_MODE specific toml file, and using environment variables.
    opened by vinaykakade 1
  • Precommit hook

    Precommit hook

    To run

    • Rust Fmt
    • cargo check
    • cargo test for infino and tsldb

    Why?

    These checks are done on every commit, so all the issues are caught before committing and code style is in check

    opened by savannahar68 1
  • Add a configuration management system

    Add a configuration management system

    A bunch of configuration (such as commit interval, max log messages per segment, and max data points per segment) is currently in code. This needs to be in a configuration managed in (yaml?) files with provision for overriding defaults on the command line and in tests.

    enhancement 
    opened by vinaykakade 1
  • GH Workflows

    GH Workflows

    Summary

    Leverage GH workflows to:

    • Run test when PR is raised.
    • Run CI when pushed to main

    Motivation

    To make sure any build of main is error free, and expected functionalities work well.

    Additional context

    N.A.

    opened by naman-modi 0
  • Read from rabbitmq at server startup

    Read from rabbitmq at server startup

    Description

    As of now, we only write to rabbitmq, but do not read from it at startup. We'll need to read messages from rabbitmq at startup, and apply them to the index. Also, periodically (at every commit?) we need to update rabbitmq with the 'marker' of which messages are applied to the index.

    Additional Information

    Write a test that Infino recovers without data loss in different crash scenarios.

    high-priority 
    opened by vinaykakade 0
  • Parallezing search operation

    Parallezing search operation

    Instead of iterating over each segment one by one, parallelly search the query in multiple segments.

    We can use this https://docs.rs/rayon/latest/rayon/ to search concurrently.

    Along with this PR, one should benchmark the optimal parameters for concurrency.

    opened by savannahar68 0
Owner
null
Command-line program to manage PS battle logs. WIP.

psbattletools psbattletools is a command-line tool written in Rust for manipulating PokΓ©mon Showdown battle logs. Installation psbattletools currently

Annika 2 Dec 27, 2022
A panic hook for wasm32-unknown-unknown that logs panics with console.error

console_error_panic_hook This crate lets you debug panics on wasm32-unknown-unknown by providing a panic hook that forwards panic messages to console.

Rust and WebAssembly 241 Jan 3, 2023
Workflows make it easy to browse, search, execute and share commands (or a series of commands)--without needing to leave your terminal.

Workflows The repo for all public Workflows that appear within Warp and within commands.dev. To learn how to create local or repository workflows, see

Warp 369 Jan 2, 2023
Workflows make it easy to browse, search, execute and share commands (or a series of commands)--without needing to leave your terminal.

Workflows The repo for all public Workflows that appear within Warp and within commands.dev. To learn how to create local or repository workflows, see

Warp 227 Jun 1, 2022
A series of crates that I made to compile images/video into asciinema & play them.

Bad Apple A series of crates that I made to compile images/video into asciinema & play them. The end goal is to make a kernel & legacy bootloader that

S0ra 10 Nov 29, 2022
Dash is a CLI tool that rapidly sets up new projects by running a series of pre-defined commands.

Dash Dash is a CLI tool that rapidly sets up new projects by running a series of pre-defined commands. Features Quick Initialization: Initialize the c

Kunal Bagaria 4 Nov 7, 2023
Write Cross-platform application with React-like decralative UI framework and scalable ECS architecture all in Rust.

bevy_dioxus Dioxus Plugin for Bevy Write Cross-platform application with React-like decralative UI framework and scalable ECS architecture all in Rust

Junichi Sugiura 269 Dec 29, 2022
Store your transfer.sh links, so you can remember them later and know when they will expire, but now written in Rust.

Transfer.sh helper Rusted The idea of the script is to store your transfer.sh links and simplify its usage, so you can remember them later and know wh

Reinaldo Rozato Junior 10 Nov 30, 2022
First class, scalable rust project generator with batteries included.

amble First class, scalable rust project generator with batteries included. Amble is in beta ??. Install | User Docs | Crate Docs | Reference | Contri

refcell.eth 13 Oct 23, 2023
A truly zero-dependency crate providing quick, easy, reliable, and scalable access to the name "jordin"

jordin Finally! A truly zero-dependency crate providing quick, easy, reliable, and scalable access to the name "jordin". Additionally, this one-of-a-k

jordin 2 Aug 4, 2022
Spoon Radio Echo Project, Lightweight and scalable broadcasting server.

Echo Project https://medium.com/p/3bd1434a163a Echo was initiated by a social network platform, Spoon Radio(https://www.spooncast.net). The main goal

Spoon Radio Inc. 23 Jan 3, 2023
belt is a command line app that can show your time from a list of selected time zones

A CLI app to show your time from a list of selected time zones, and a rust lib to parse dates in string formats that are commonly used.

Rollie Ma 23 Nov 4, 2022
Deadliner helps you keep track of the time left for your deadline by dynamically updating the wallpaper of your desktop with the time left.

Deadliner Watch the YouTube video What's Deadliner? Deadliner is a cross-platform desktop application for setting deadline for a project and keeping t

Deadliner 34 Dec 16, 2022
Helps you keep track of time for team members across different time zones & DST changes

Teamdate Helps you keep track of time for team members across different timezones and other daylight saving changes based off their location. Because

Alex Snaps 7 Jan 9, 2023
Authentication and authorization service, written in Rust

auth-rs auth-rs provides a simple authentication and authorization service for use in other services. The service is written in Rust and uses the acti

OpServa 3 Aug 17, 2023
Backend service to build customer facing dashboards 10x faster. Written in Rust.

Frolic is an open source backend service (written in Rust) to build customer facing dashboards 10x faster. You can directly connect your database to t

Frolic 82 Aug 7, 2023
garbage-collecting on-disk object store, supporting higher level KV stores and databases.

marble Garbage-collecting disk-based object-store. See examples/kv.rs for a minimal key-value store built on top of this. Supports 4 methods: read: de

Komora 215 Dec 30, 2022
A toy event store and event messaging system.

RDeeBee Follow this blog series for more details on this project. This system is inspired by Martin Kleppman's arguments that Event Sourcing system an

null 4 Nov 6, 2022
Simple, safe way to store and distribute tensors

Safetensors Ruby ?? Simple, safe way to store and distribute tensors Supports Torch.rb and Numo Installation Add this line to your application’s Gemfi

Andrew Kane 7 Feb 27, 2024