< All Topics

InfluxDBLogTarget

Experior 7 – TECH TIP 🐱💻

Someone asked; “Is it possible to get the logs generated by Experior inside my VM or docker container, stored somewhere in a common accessible location – and can you perhaps make them easily searchable/filtered etc. ? ”.

Ok…first question;

Getting hold of the logs ?;

Experior already provides an easy way to get a hold of the logs (or rather receive the logs as they are generated) via the API. Simply create an Experior plugin where you implement interface ‘Experior.Interfaces.ILogTarget’ and subscribe in to our Experior.Core.Environment.Log.Subscribe(ILogTarget) and you have a class that will receive all logs from Experior.

public class InfluxDBLogTarget : Experior.Interfaces.ILogTarget
{
    public string LoggerId { get; } = "MyId";
    public string LoggerLocation { get; } = "MyLocation";
    public bool Enabled { get; set; }
    public bool Active { get; }

    public void Open() {
        Experior.Core.Environment.Log.Subscribe(this);
    }

    public void Close() {
        Experior.Core.Environment.Log.Unsubscribe(this);
    }

    public void Log(ILog log) {
        //todo - log to destination
    }

    public void Log(List<ILog> logs) {
        //todo - log to destination
    }

    public void ClearLog() {
        //todo - clear destination if supported
    }

    public void Dispose() {
        Close();
    }
}

So far so good…

Destination ?:

You have a ton of options here, since Experior doesn’t restrict you using any of the thousands of 3rd party software, nugets, libraries or custom code (build from scratch in F# if that’s your preferred flavor). For this example we decided to try out the interesting InfluxDb (https://www.influxdata.com/).

InfluxDb is a high-performance time series database, that comes with several ways of ingesting data (getting data into it).

After a few minutes of google time, InfluxDb was installed on our windows box using docker (www.docker.com).

For getting data into the Influx database, there seems to be a couple of ways to go about this. Direct web API, C# client, or using a Telegraf plugin.

We love nugets and luckily there’s a nuget for it (InfluxDb.Client – https://www.nuget.org/packages/InfluxDB.Client/). Add the nuget to the project and copy the example code and you are off.

Result;

So after a couple of hours, filling out the methods of our ILogTarget implementation, we end up with an Experior plugin (in this case I named it ‘InfluxDbLogTargetPlugin’) that is able to receive all Experior logs, and relay them to a running InfluxDb server. I added some extra options to convert logs into ‘syslog’ format etc. – just for the fun of it – it was that simple.

Seems to be working great, but I need play around with doing a proper logview dashboard (below is just raw-data viewing using the built-in InfluxDb UI). Sounds like the older 1.8 version had a syslog logviewer built in, but it was removed from the 2.0 version.

Or perhabs Grafana has a better one. Grafana is another interresting visualization tool that can easily be used in conjuction with InfluxDb.

Thoughts have already started on doing a plugin that provides means for logging simulation/emulation data to InfluxDb and using one of the visualization packets on top of it – that could also be cool 👾

 

Happy logging 🐱🏍

Was this article helpful?
How can we improve this article?
Please submit the reason for your vote so that we can improve the article.
Previous C# – Tips and Tricks
Next Performance Tips