added systemd services swap memory, memory limits fail count, disk queued and disk merged charts
Costa Tsaousis (ktsaou) committed
Jan 17, 2017 at 00:42 UTC
23ea591040f95b6e6008be463f8a077915c01527
1 file changed
+120
-10
src/sys_fs_cgroup.c
+120
-10
@@ -381,6 +381,8 @@ struct cgroup {
381
// services
382
RRDDIM *rd_cpu;
383
RRDDIM *rd_mem_usage;
384
+ RRDDIM *rd_mem_failcnt;
385
+ RRDDIM *rd_swap_usage;
386
387
RRDDIM *rd_io_service_bytes_read;
388
RRDDIM *rd_io_serviced_read;
@@ -1378,32 +1380,34 @@ static inline void find_all_cgroups() {
1380
void update_services_charts(int update_every,
1381
int do_cpu,
1382
int do_mem_usage,
1383
+ int do_mem_failcnt,
1384
+ int do_swap_usage,
1385
int do_io,
1386
int do_io_ops,
1387
int do_throttle_io,
1384
- int do_throttle_ops /*,
1388
+ int do_throttle_ops,
1389
int do_queued_ops,
1386
- int do_merged_ops */
1390
+ int do_merged_ops
1391
) {
1392
static RRDSET
1393
*st_cpu = NULL,
1394
*st_mem_usage = NULL,
1395
+ *st_mem_failcnt = NULL,
1396
+ *st_swap_usage = NULL,
1397
1398
*st_io_read = NULL,
1399
*st_io_serviced_read = NULL,
1400
*st_throttle_io_read = NULL,
1401
*st_throttle_ops_read = NULL,
1396
- /*
1402
*st_queued_ops_read = NULL,
1403
*st_merged_ops_read = NULL,
1399
- * */
1404
1405
*st_io_write = NULL,
1406
*st_io_serviced_write = NULL,
1407
*st_throttle_io_write = NULL,
1404
- *st_throttle_ops_write = NULL/*,
1408
+ *st_throttle_ops_write = NULL,
1409
*st_queued_ops_write = NULL,
1406
- *st_merged_ops_write = NULL*/;
1410
+ *st_merged_ops_write = NULL;
1411
1412
// create the charts
1413
@@ -1425,12 +1429,32 @@ void update_services_charts(int update_every,
1429
if(unlikely(!st_mem_usage)) {
1430
st_mem_usage = rrdset_find_bytype("services", "mem_usage");
1431
if(likely(!st_mem_usage))
1428
- st_mem_usage = rrdset_create("services", "mem_usage", NULL, "mem", "services.mem_usage", "Systemd Services RAM Usage", "MB", 30001, update_every, RRDSET_TYPE_STACKED);
1432
+ st_mem_usage = rrdset_create("services", "mem_usage", NULL, "mem", "services.mem_usage", "Systemd Services Used RAM with Cache", "MB", 30001, update_every, RRDSET_TYPE_STACKED);
1433
}
1434
else
1435
rrdset_next(st_mem_usage);
1436
}
1437
1438
+ if(likely(do_mem_failcnt)) {
1439
+ if(unlikely(!st_mem_failcnt)) {
1440
+ st_mem_failcnt = rrdset_find_bytype("services", "mem_failcnt");
1441
+ if(likely(!st_mem_failcnt))
1442
+ st_mem_failcnt = rrdset_create("services", "mem_failcnt", NULL, "mem", "services.mem_failcnt", "Systemd Services Memory Limit Failures", "MB", 30003, update_every, RRDSET_TYPE_STACKED);
1443
+ }
1444
+ else
1445
+ rrdset_next(st_mem_failcnt);
1446
+ }
1447
+
1448
+ if(likely(do_swap_usage)) {
1449
+ if(unlikely(!st_swap_usage)) {
1450
+ st_swap_usage = rrdset_find_bytype("services", "swap_usage");
1451
+ if(likely(!st_swap_usage))
1452
+ st_swap_usage = rrdset_create("services", "swap_usage", NULL, "swap", "services.swap_usage", "Systemd Services Swap Memory Used", "MB", 30002, update_every, RRDSET_TYPE_STACKED);
1453
+ }
1454
+ else
1455
+ rrdset_next(st_swap_usage);
1456
+ }
1457
+
1458
if(likely(do_io)) {
1459
if(unlikely(!st_io_read)) {
1460
st_io_read = rrdset_find_bytype("services", "io_read");
@@ -1503,6 +1527,42 @@ void update_services_charts(int update_every,
1527
rrdset_next(st_throttle_ops_write);
1528
}
1529
1530
+ if(likely(do_queued_ops)) {
1531
+ if(unlikely(!st_queued_ops_read)) {
1532
+ st_queued_ops_read = rrdset_find_bytype("services", "queued_io_ops_read");
1533
+ if(likely(!st_queued_ops_read))
1534
+ st_queued_ops_read = rrdset_create("services", "queued_io_ops_read", NULL, "disk", "services.queued_io_ops_read", "Systemd Services Queued Disk Read Operations", "operations/s", 30020, update_every, RRDSET_TYPE_STACKED);
1535
+ }
1536
+ else
1537
+ rrdset_next(st_queued_ops_read);
1538
+
1539
+ if(unlikely(!st_queued_ops_write)) {
1540
+ st_queued_ops_write = rrdset_find_bytype("services", "queued_io_ops_write");
1541
+ if(likely(!st_queued_ops_write))
1542
+ st_queued_ops_write = rrdset_create("services", "queued_io_ops_write", NULL, "disk", "services.queued_io_ops_write", "Systemd Services Queued Disk Write Operations", "operations/s", 30021, update_every, RRDSET_TYPE_STACKED);
1543
+ }
1544
+ else
1545
+ rrdset_next(st_queued_ops_write);
1546
+ }
1547
+
1548
+ if(likely(do_merged_ops)) {
1549
+ if(unlikely(!st_merged_ops_read)) {
1550
+ st_merged_ops_read = rrdset_find_bytype("services", "merged_io_ops_read");
1551
+ if(likely(!st_merged_ops_read))
1552
+ st_merged_ops_read = rrdset_create("services", "merged_io_ops_read", NULL, "disk", "services.merged_io_ops_read", "Systemd Services Merged Disk Read Operations", "operations/s", 30022, update_every, RRDSET_TYPE_STACKED);
1553
+ }
1554
+ else
1555
+ rrdset_next(st_merged_ops_read);
1556
+
1557
+ if(unlikely(!st_merged_ops_write)) {
1558
+ st_merged_ops_write = rrdset_find_bytype("services", "merged_io_ops_write");
1559
+ if(likely(!st_merged_ops_write))
1560
+ st_merged_ops_write = rrdset_create("services", "merged_io_ops_write", NULL, "disk", "services.merged_io_ops_write", "Systemd Services Merged Disk Write Operations", "operations/s", 30023, update_every, RRDSET_TYPE_STACKED);
1561
+ }
1562
+ else
1563
+ rrdset_next(st_merged_ops_write);
1564
+ }
1565
+
1566
// update the values
1567
struct cgroup *cg;
1568
for(cg = cgroup_root; cg ; cg = cg->next) {
@@ -1523,6 +1583,20 @@ void update_services_charts(int update_every,
1583
rrddim_set_by_pointer(st_mem_usage, cg->rd_mem_usage, cg->memory.usage_in_bytes);
1584
}
1585
1586
+ if(likely(do_mem_failcnt && cg->memory.failcnt_updated)) {
1587
+ if(unlikely(!cg->rd_mem_failcnt))
1588
+ cg->rd_mem_failcnt = rrddim_add(st_mem_failcnt, cg->chart_id, cg->chart_title, 1, 1, RRDDIM_INCREMENTAL);
1589
+
1590
+ rrddim_set_by_pointer(st_mem_failcnt, cg->rd_mem_failcnt, cg->memory.failcnt);
1591
+ }
1592
+
1593
+ if(likely(do_swap_usage && cg->memory.msw_usage_in_bytes_updated)) {
1594
+ if(unlikely(!cg->rd_swap_usage))
1595
+ cg->rd_swap_usage = rrddim_add(st_swap_usage, cg->chart_id, cg->chart_title, 1, 1024 * 1024, RRDDIM_ABSOLUTE);
1596
+
1597
+ rrddim_set_by_pointer(st_swap_usage, cg->rd_swap_usage, cg->memory.msw_usage_in_bytes);
1598
+ }
1599
+
1600
if(likely(do_io && cg->io_service_bytes.updated)) {
1601
if(unlikely(!cg->rd_io_service_bytes_read))
1602
cg->rd_io_service_bytes_read = rrddim_add(st_io_read, cg->chart_id, cg->chart_title, 1, 1024, RRDDIM_INCREMENTAL);
@@ -1570,6 +1644,30 @@ void update_services_charts(int update_every,
1644
1645
rrddim_set_by_pointer(st_throttle_ops_write, cg->rd_throttle_io_serviced_write, cg->throttle_io_serviced.Write);
1646
}
1647
+
1648
+ if(likely(do_queued_ops && cg->io_queued.updated)) {
1649
+ if(unlikely(!cg->rd_io_queued_read))
1650
+ cg->rd_io_queued_read = rrddim_add(st_queued_ops_read, cg->chart_id, cg->chart_title, 1, 1, RRDDIM_INCREMENTAL);
1651
+
1652
+ rrddim_set_by_pointer(st_queued_ops_read, cg->rd_io_queued_read, cg->io_queued.Read);
1653
+
1654
+ if(unlikely(!cg->rd_io_queued_write))
1655
+ cg->rd_io_queued_write = rrddim_add(st_queued_ops_write, cg->chart_id, cg->chart_title, 1, 1, RRDDIM_INCREMENTAL);
1656
+
1657
+ rrddim_set_by_pointer(st_queued_ops_write, cg->rd_io_queued_write, cg->io_queued.Write);
1658
+ }
1659
+
1660
+ if(likely(do_merged_ops && cg->io_merged.updated)) {
1661
+ if(unlikely(!cg->rd_io_merged_read))
1662
+ cg->rd_io_merged_read = rrddim_add(st_merged_ops_read, cg->chart_id, cg->chart_title, 1, 1, RRDDIM_INCREMENTAL);
1663
+
1664
+ rrddim_set_by_pointer(st_merged_ops_read, cg->rd_io_merged_read, cg->io_merged.Read);
1665
+
1666
+ if(unlikely(!cg->rd_io_merged_write))
1667
+ cg->rd_io_merged_write = rrddim_add(st_merged_ops_write, cg->chart_id, cg->chart_title, 1, 1, RRDDIM_INCREMENTAL);
1668
+
1669
+ rrddim_set_by_pointer(st_merged_ops_write, cg->rd_io_merged_write, cg->io_merged.Write);
1670
+ }
1671
}
1672
1673
// complete the iteration
@@ -1579,6 +1677,12 @@ void update_services_charts(int update_every,
1677
if(likely(do_mem_usage))
1678
rrdset_done(st_mem_usage);
1679
1680
+ if(likely(do_mem_failcnt))
1681
+ rrdset_done(st_mem_failcnt);
1682
+
1683
+ if(likely(do_swap_usage))
1684
+ rrdset_done(st_swap_usage);
1685
+
1686
if(likely(do_io)) {
1687
rrdset_done(st_io_read);
1688
rrdset_done(st_io_write);
@@ -1620,6 +1724,8 @@ void update_cgroup_charts(int update_every) {
1724
1725
int services_do_cpu = 0,
1726
services_do_mem_usage = 0,
1727
+ services_do_mem_failcnt = 0,
1728
+ services_do_swap_usage = 0,
1729
services_do_io = 0,
1730
services_do_io_ops = 0,
1731
services_do_throttle_io = 0,
@@ -1635,6 +1741,8 @@ void update_cgroup_charts(int update_every) {
1741
if(likely(cgroup_enable_systemd_services && cg->options & CGROUP_OPTIONS_SYSTEM_SLICE_SERVICE)) {
1742
if(cg->cpuacct_stat.updated && (cg->cpuacct_stat.user || cg->cpuacct_stat.system)) services_do_cpu++;
1743
if(cg->memory.usage_in_bytes_updated && (cg->memory.usage_in_bytes)) services_do_mem_usage++;
1744
+ if(cg->memory.failcnt_updated && (cg->memory.failcnt)) services_do_mem_failcnt++;
1745
+ if(cg->memory.msw_usage_in_bytes_updated && (cg->memory.msw_usage_in_bytes)) services_do_swap_usage++;
1746
if(cg->io_service_bytes.updated && (cg->io_service_bytes.Read || cg->io_service_bytes.Write)) services_do_io++;
1747
if(cg->io_serviced.updated && (cg->io_serviced.Read || cg->io_serviced.Write)) services_do_io_ops++;
1748
if(cg->throttle_io_service_bytes.updated && (cg->throttle_io_service_bytes.Read || cg->throttle_io_service_bytes.Write)) services_do_throttle_io++;
@@ -1796,7 +1904,7 @@ void update_cgroup_charts(int update_every) {
1904
cg->st_mem_failcnt = rrdset_find_bytype(cgroup_chart_type(type, cg->chart_id, RRD_ID_LENGTH_MAX), "mem_failcnt");
1905
if(likely(!cg->st_mem_failcnt)) {
1906
snprintfz(title, CHART_TITLE_MAX, "Memory Limit Failures for cgroup %s", cg->chart_title);
1799
- cg->st_mem_failcnt = rrdset_create(type, "mem_failcnt", NULL, "mem", "cgroup.mem_failcnt", title, "MB", 40250, update_every, RRDSET_TYPE_LINE);
1907
+ cg->st_mem_failcnt = rrdset_create(type, "mem_failcnt", NULL, "mem", "cgroup.mem_failcnt", title, "count", 40250, update_every, RRDSET_TYPE_LINE);
1908
}
1909
rrddim_add(cg->st_mem_failcnt, "failures", NULL, 1, 1, RRDDIM_INCREMENTAL);
1910
}
@@ -1920,12 +2028,14 @@ void update_cgroup_charts(int update_every) {
2028
update_services_charts(update_every,
2029
services_do_cpu,
2030
services_do_mem_usage,
2031
+ services_do_mem_failcnt,
2032
+ services_do_swap_usage,
2033
services_do_io,
2034
services_do_io_ops,
2035
services_do_throttle_io,
1926
- services_do_throttle_ops/*,
2036
+ services_do_throttle_ops,
2037
services_do_queued_ops,
1928
- services_do_merged_ops*/
2038
+ services_do_merged_ops
2039
);
2040
2041
debug(D_CGROUP, "done updating cgroups charts");