@cryptotaxi247 / netdata-1 / commits / 23ea59104

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");