Repository files navigation

MeshCentral-LXC_Monitoring

Export metrics for LXC containers and running services within them with the MeshCentral monitoring module.

Installation

Pre-requisite: First, make sure you have plugins and the monitoring module enabled for your MeshCentral installation:

"plugins": {
"enabled": true
},
"prometheus": true,

Restart your MeshCentral server after making this change.

To install, simply add the plugin configuration URL when prompted: https://raw.githubusercontent.com/bitctrl/MeshCentral-LXC_Monitoring/refs/heads/main/config.json

After installation copy the configuration template and adapt it to your needs. Restart your MeshCentral server again after making this change.

cgroup filesystem

Set the cgroupRootPath in lxc_monitoring.conf.json to the directory where the cgroup2-fs is mounted.

If MeshCentral is running on bare metal this might be /sys/fs/cgroup, if running inside a container you might bind-mount it anywhere.

  • mount -o bind /sys/fs/cgroup /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup/
  • mount | grep cgroup
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    cgroup2 on /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    

Performance

The evaluated data comes from The Kernel and is well documented. To reduce the time required for collecting the metrics we expect the data is delivered as described.

Measurements

On a smaller host with 5 containers and 55 services (60 cgroups) where the development was done the duration was reduced from 0.0.1 to 0.0.2 from 23ms to 14ms (60%) per scrape. The equivalent bash script for the node_exporters' textfile collector takes 44ms.

On a bigger host with 25 containers and 184 services (209 cgroups, 3.5 times) used for comparison the bash script takes about 160ms (3.6 times). If we apply the factor 3.5 to this pluging it would take 80ms in version 0.0.1 and 49ms in version 0.0.2 on each scrape.

avg_over_time(bitctrl_lxc_scrape_collector_duration_seconds{collector="bitctrl_lxc",instance=~"(bcs-lxc-(16|64)-one|meshcentral-playground).*"}[120m] @1739487600)

{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.02238333333333333
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.043978025000000004
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.167014575
{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.013825
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.04408181666666667
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.15913569166666666

About

Export metrics for LXC containers and running services within them

Topics

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

MeshCentral-LXC_Monitoring

Export metrics for LXC containers and running services within them with the MeshCentral monitoring module.

Installation

Pre-requisite: First, make sure you have plugins and the monitoring module enabled for your MeshCentral installation:

"plugins": {
"enabled": true
},
"prometheus": true,

Restart your MeshCentral server after making this change.

To install, simply add the plugin configuration URL when prompted: https://raw.githubusercontent.com/bitctrl/MeshCentral-LXC_Monitoring/refs/heads/main/config.json

After installation copy the configuration template and adapt it to your needs. Restart your MeshCentral server again after making this change.

cgroup filesystem

Set the cgroupRootPath in lxc_monitoring.conf.json to the directory where the cgroup2-fs is mounted.

If MeshCentral is running on bare metal this might be /sys/fs/cgroup, if running inside a container you might bind-mount it anywhere.

  • mount -o bind /sys/fs/cgroup /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup/
  • mount | grep cgroup
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    cgroup2 on /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    

Performance

The evaluated data comes from The Kernel and is well documented. To reduce the time required for collecting the metrics we expect the data is delivered as described.

Measurements

On a smaller host with 5 containers and 55 services (60 cgroups) where the development was done the duration was reduced from 0.0.1 to 0.0.2 from 23ms to 14ms (60%) per scrape. The equivalent bash script for the node_exporters' textfile collector takes 44ms.

On a bigger host with 25 containers and 184 services (209 cgroups, 3.5 times) used for comparison the bash script takes about 160ms (3.6 times). If we apply the factor 3.5 to this pluging it would take 80ms in version 0.0.1 and 49ms in version 0.0.2 on each scrape.

avg_over_time(bitctrl_lxc_scrape_collector_duration_seconds{collector="bitctrl_lxc",instance=~"(bcs-lxc-(16|64)-one|meshcentral-playground).*"}[120m] @1739487600)

{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.02238333333333333
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.043978025000000004
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.167014575
{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.013825
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.04408181666666667
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.15913569166666666

About

Export metrics for LXC containers and running services within them

Topics

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MeshCentral-LXC_Monitoring

Export metrics for LXC containers and running services within them with the MeshCentral monitoring module.

Installation

Pre-requisite: First, make sure you have plugins and the monitoring module enabled for your MeshCentral installation:

"plugins": {
"enabled": true
},
"prometheus": true,

Restart your MeshCentral server after making this change.

To install, simply add the plugin configuration URL when prompted: https://raw.githubusercontent.com/bitctrl/MeshCentral-LXC_Monitoring/refs/heads/main/config.json

After installation copy the configuration template and adapt it to your needs. Restart your MeshCentral server again after making this change.

cgroup filesystem

Set the cgroupRootPath in lxc_monitoring.conf.json to the directory where the cgroup2-fs is mounted.

If MeshCentral is running on bare metal this might be /sys/fs/cgroup, if running inside a container you might bind-mount it anywhere.

  • mount -o bind /sys/fs/cgroup /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup/
  • mount | grep cgroup
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    cgroup2 on /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    

Performance

The evaluated data comes from The Kernel and is well documented. To reduce the time required for collecting the metrics we expect the data is delivered as described.

Measurements

On a smaller host with 5 containers and 55 services (60 cgroups) where the development was done the duration was reduced from 0.0.1 to 0.0.2 from 23ms to 14ms (60%) per scrape. The equivalent bash script for the node_exporters' textfile collector takes 44ms.

On a bigger host with 25 containers and 184 services (209 cgroups, 3.5 times) used for comparison the bash script takes about 160ms (3.6 times). If we apply the factor 3.5 to this pluging it would take 80ms in version 0.0.1 and 49ms in version 0.0.2 on each scrape.

avg_over_time(bitctrl_lxc_scrape_collector_duration_seconds{collector="bitctrl_lxc",instance=~"(bcs-lxc-(16|64)-one|meshcentral-playground).*"}[120m] @1739487600)

{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.02238333333333333
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.043978025000000004
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.167014575
{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.013825
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.04408181666666667
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.15913569166666666

About

Export metrics for LXC containers and running services within them

Topics

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MeshCentral-LXC_Monitoring

Export metrics for LXC containers and running services within them with the MeshCentral monitoring module.

Installation

Pre-requisite: First, make sure you have plugins and the monitoring module enabled for your MeshCentral installation:

"plugins": {
"enabled": true
},
"prometheus": true,

Restart your MeshCentral server after making this change.

To install, simply add the plugin configuration URL when prompted: https://raw.githubusercontent.com/bitctrl/MeshCentral-LXC_Monitoring/refs/heads/main/config.json

After installation copy the configuration template and adapt it to your needs. Restart your MeshCentral server again after making this change.

cgroup filesystem

Set the cgroupRootPath in lxc_monitoring.conf.json to the directory where the cgroup2-fs is mounted.

If MeshCentral is running on bare metal this might be /sys/fs/cgroup, if running inside a container you might bind-mount it anywhere.

  • mount -o bind /sys/fs/cgroup /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup/
  • mount | grep cgroup
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    cgroup2 on /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    

Performance

The evaluated data comes from The Kernel and is well documented. To reduce the time required for collecting the metrics we expect the data is delivered as described.

Measurements

On a smaller host with 5 containers and 55 services (60 cgroups) where the development was done the duration was reduced from 0.0.1 to 0.0.2 from 23ms to 14ms (60%) per scrape. The equivalent bash script for the node_exporters' textfile collector takes 44ms.

On a bigger host with 25 containers and 184 services (209 cgroups, 3.5 times) used for comparison the bash script takes about 160ms (3.6 times). If we apply the factor 3.5 to this pluging it would take 80ms in version 0.0.1 and 49ms in version 0.0.2 on each scrape.

avg_over_time(bitctrl_lxc_scrape_collector_duration_seconds{collector="bitctrl_lxc",instance=~"(bcs-lxc-(16|64)-one|meshcentral-playground).*"}[120m] @1739487600)

{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.02238333333333333
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.043978025000000004
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.167014575
{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.013825
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.04408181666666667
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.15913569166666666

About

Export metrics for LXC containers and running services within them

Topics

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

MeshCentral-LXC_Monitoring

Export metrics for LXC containers and running services within them with the MeshCentral monitoring module.

Installation

Pre-requisite: First, make sure you have plugins and the monitoring module enabled for your MeshCentral installation:

"plugins": {
"enabled": true
},
"prometheus": true,

Restart your MeshCentral server after making this change.

To install, simply add the plugin configuration URL when prompted: https://raw.githubusercontent.com/bitctrl/MeshCentral-LXC_Monitoring/refs/heads/main/config.json

After installation copy the configuration template and adapt it to your needs. Restart your MeshCentral server again after making this change.

cgroup filesystem

Set the cgroupRootPath in lxc_monitoring.conf.json to the directory where the cgroup2-fs is mounted.

If MeshCentral is running on bare metal this might be /sys/fs/cgroup, if running inside a container you might bind-mount it anywhere.

  • mount -o bind /sys/fs/cgroup /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup/
  • mount | grep cgroup
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    cgroup2 on /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    

Performance

The evaluated data comes from The Kernel and is well documented. To reduce the time required for collecting the metrics we expect the data is delivered as described.

Measurements

On a smaller host with 5 containers and 55 services (60 cgroups) where the development was done the duration was reduced from 0.0.1 to 0.0.2 from 23ms to 14ms (60%) per scrape. The equivalent bash script for the node_exporters' textfile collector takes 44ms.

On a bigger host with 25 containers and 184 services (209 cgroups, 3.5 times) used for comparison the bash script takes about 160ms (3.6 times). If we apply the factor 3.5 to this pluging it would take 80ms in version 0.0.1 and 49ms in version 0.0.2 on each scrape.

avg_over_time(bitctrl_lxc_scrape_collector_duration_seconds{collector="bitctrl_lxc",instance=~"(bcs-lxc-(16|64)-one|meshcentral-playground).*"}[120m] @1739487600)

{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.02238333333333333
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.043978025000000004
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.167014575
{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.013825
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.04408181666666667
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.15913569166666666

About

Export metrics for LXC containers and running services within them

Topics

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MeshCentral-LXC_Monitoring

Export metrics for LXC containers and running services within them with the MeshCentral monitoring module.

Installation

Pre-requisite: First, make sure you have plugins and the monitoring module enabled for your MeshCentral installation:

"plugins": {
"enabled": true
},
"prometheus": true,

Restart your MeshCentral server after making this change.

To install, simply add the plugin configuration URL when prompted: https://raw.githubusercontent.com/bitctrl/MeshCentral-LXC_Monitoring/refs/heads/main/config.json

After installation copy the configuration template and adapt it to your needs. Restart your MeshCentral server again after making this change.

cgroup filesystem

Set the cgroupRootPath in lxc_monitoring.conf.json to the directory where the cgroup2-fs is mounted.

If MeshCentral is running on bare metal this might be /sys/fs/cgroup, if running inside a container you might bind-mount it anywhere.

  • mount -o bind /sys/fs/cgroup /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup/
  • mount | grep cgroup
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    cgroup2 on /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    

Performance

The evaluated data comes from The Kernel and is well documented. To reduce the time required for collecting the metrics we expect the data is delivered as described.

Measurements

On a smaller host with 5 containers and 55 services (60 cgroups) where the development was done the duration was reduced from 0.0.1 to 0.0.2 from 23ms to 14ms (60%) per scrape. The equivalent bash script for the node_exporters' textfile collector takes 44ms.

On a bigger host with 25 containers and 184 services (209 cgroups, 3.5 times) used for comparison the bash script takes about 160ms (3.6 times). If we apply the factor 3.5 to this pluging it would take 80ms in version 0.0.1 and 49ms in version 0.0.2 on each scrape.

avg_over_time(bitctrl_lxc_scrape_collector_duration_seconds{collector="bitctrl_lxc",instance=~"(bcs-lxc-(16|64)-one|meshcentral-playground).*"}[120m] @1739487600)

{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.02238333333333333
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.043978025000000004
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.167014575
{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.013825
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.04408181666666667
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.15913569166666666

About

Export metrics for LXC containers and running services within them

Topics

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

MeshCentral-LXC_Monitoring

Export metrics for LXC containers and running services within them with the MeshCentral monitoring module.

Installation

Pre-requisite: First, make sure you have plugins and the monitoring module enabled for your MeshCentral installation:

"plugins": {
"enabled": true
},
"prometheus": true,

Restart your MeshCentral server after making this change.

To install, simply add the plugin configuration URL when prompted: https://raw.githubusercontent.com/bitctrl/MeshCentral-LXC_Monitoring/refs/heads/main/config.json

After installation copy the configuration template and adapt it to your needs. Restart your MeshCentral server again after making this change.

cgroup filesystem

Set the cgroupRootPath in lxc_monitoring.conf.json to the directory where the cgroup2-fs is mounted.

If MeshCentral is running on bare metal this might be /sys/fs/cgroup, if running inside a container you might bind-mount it anywhere.

  • mount -o bind /sys/fs/cgroup /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup/
  • mount | grep cgroup
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    cgroup2 on /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    

Performance

The evaluated data comes from The Kernel and is well documented. To reduce the time required for collecting the metrics we expect the data is delivered as described.

Measurements

On a smaller host with 5 containers and 55 services (60 cgroups) where the development was done the duration was reduced from 0.0.1 to 0.0.2 from 23ms to 14ms (60%) per scrape. The equivalent bash script for the node_exporters' textfile collector takes 44ms.

On a bigger host with 25 containers and 184 services (209 cgroups, 3.5 times) used for comparison the bash script takes about 160ms (3.6 times). If we apply the factor 3.5 to this pluging it would take 80ms in version 0.0.1 and 49ms in version 0.0.2 on each scrape.

avg_over_time(bitctrl_lxc_scrape_collector_duration_seconds{collector="bitctrl_lxc",instance=~"(bcs-lxc-(16|64)-one|meshcentral-playground).*"}[120m] @1739487600)

{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.02238333333333333
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.043978025000000004
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.167014575
{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.013825
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.04408181666666667
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.15913569166666666

About

Export metrics for LXC containers and running services within them

Topics

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

MeshCentral-LXC_Monitoring

Export metrics for LXC containers and running services within them with the MeshCentral monitoring module.

Installation

Pre-requisite: First, make sure you have plugins and the monitoring module enabled for your MeshCentral installation:

"plugins": {
"enabled": true
},
"prometheus": true,

Restart your MeshCentral server after making this change.

To install, simply add the plugin configuration URL when prompted: https://raw.githubusercontent.com/bitctrl/MeshCentral-LXC_Monitoring/refs/heads/main/config.json

After installation copy the configuration template and adapt it to your needs. Restart your MeshCentral server again after making this change.

cgroup filesystem

Set the cgroupRootPath in lxc_monitoring.conf.json to the directory where the cgroup2-fs is mounted.

If MeshCentral is running on bare metal this might be /sys/fs/cgroup, if running inside a container you might bind-mount it anywhere.

  • mount -o bind /sys/fs/cgroup /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup/
  • mount | grep cgroup
    cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    cgroup2 on /var/lib/lxc/meshcentral--develop/rootfs/media/lxc-host-cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime)
    

Performance

The evaluated data comes from The Kernel and is well documented. To reduce the time required for collecting the metrics we expect the data is delivered as described.

Measurements

On a smaller host with 5 containers and 55 services (60 cgroups) where the development was done the duration was reduced from 0.0.1 to 0.0.2 from 23ms to 14ms (60%) per scrape. The equivalent bash script for the node_exporters' textfile collector takes 44ms.

On a bigger host with 25 containers and 184 services (209 cgroups, 3.5 times) used for comparison the bash script takes about 160ms (3.6 times). If we apply the factor 3.5 to this pluging it would take 80ms in version 0.0.1 and 49ms in version 0.0.2 on each scrape.

avg_over_time(bitctrl_lxc_scrape_collector_duration_seconds{collector="bitctrl_lxc",instance=~"(bcs-lxc-(16|64)-one|meshcentral-playground).*"}[120m] @1739487600)

{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.02238333333333333
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.043978025000000004
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.167014575
{collector="bitctrl_lxc", instance="meshcentral-playground:9464", job="meshcentral"}	0.013825
{collector="bitctrl_lxc", instance="bcs-lxc-16-one:9100", job="nodeexporter"} 0.04408181666666667
{collector="bitctrl_lxc", instance="bcs-lxc-64-one:9100", job="nodeexporter"} 0.15913569166666666

About

Export metrics for LXC containers and running services within them

Topics

Resources

Stars

0 stars

Watchers

4 watching

Forks

Releases

Packages

Used by

Contributors

Languages