Digger is designed to run as a Windows service (using TopShelf). The idea is that it has Collectors
that collects time series data that are via a Dispatcher
forwarded to a Processor
that e.g. stores the data in InfluxDb.
This is a small "util/sample/poc" that I put together to show usage of my .Net InfluxDb client, InfluxDb and Grafana.
Serilog is used for logging: booting, exceptions... Configure file target in App.config
.
It's licensed under MIT. It's as I said. Still a POC/sample. So use at your own risk ;-)
Collectors collects data and transforms the data to IMeasurement
instances that carries InfluxDbPoint(s)
. They are configured dynamically in: digger.agent.conf
. The location of this file is determined by App.config
.
Currently, the supported collectors are:
- Performance counters
- Windows Services (State, ThreadCount, WorkingSetMb)
- WebHooks
Produces PerformanceCounterMeasurement
. You define what performance counters to monitor and how often they should be extracted in the digger.agent.conf
.
{
"collectors": [
{
"type": "PerformanceCounterCollector",
"name": "cpuPctTotal",
"collectInterval": "00:00:01.000",
"performanceCounterConfig": {
"categoryName": "Processor",
"counterName": "% Processor Time",
"instanceName": "_Total"
}
},
{
"type": "PerformanceCounterCollector",
"name": "ramAvailableMb",
"collectInterval": "00:00:01.000",
"performanceCounterConfig": {
"categoryName": "Memory",
"counterName": "Available MBytes"
}
}
]
}
Produces WinServiceStatusMeasurement
. You can have many WinServiceStatusCollector
configured, but that would only make sense if you would like different collectInterval
or inclussion of process info (includeProcessInfo
) for different services (serviceNames
).
{
"collectors": [
{
"type": "WinServiceStatusCollector",
"name": "serviceStatus",
"collectInterval": "00:00:15.000",
"includeProcessInfo": true,
"serviceNames": [ "MSSQL$SQLEXPRESS2014" ]
}
]
}
Produces WebHookMeasurement
. There's an embeded ASP.Net WebAPI
hosted in the Digger.Agent
. You can use this to accept e.g. POSTS
of web hooks from Mandrill or something and transform them to InfluxDb points.
{
"collectors": [
{
"type": "WebHooksCollector",
"baseAddress": "http://127.0.0.1:62333"
}
]
}
The dispatchers accepts an IMeasurement
that is dispatched to IProcessors
. There are currently two implementations:
- ImmediateInProcessDispatcher
- QueuedInProcessDispatcher
Which one to use is defined in the config:
{
"dispatcherType": "Digger.Agent.Dispatchers.QueuedInProcessDispatcher, Digger.Agent"
}
The processors is what processes the collected IMeasurements
and their InfluxPoints
. There are two processors:
- ConsoleProcessor
- QueuedInfluxDbProcessor
When just running the application manually, e.g. by pressing (F5
) in Visual Studio, it will use the ConsoleProcessor
. Otherwise the InfluxDbProcessor
. You can tweak this in Digger.Agent.Bootstrap.ProcessorsModule
.
{
"processors": {
"influxDb": {
"host": "http://192.168.1.176:8086",
"database": "digger"
}
}
}
In code there's support for having different measurements sent to different InfluxDbTargetInfo
, but there's no config support for that yet so, the above will be used as the sinlge target.