github.com/containerd/containerd@v22.0.0-20200918172823-438c87b8e050+incompatible/metrics/cgroups/v1/memory.go (about) 1 // +build linux 2 3 /* 4 Copyright The containerd Authors. 5 6 Licensed under the Apache License, Version 2.0 (the "License"); 7 you may not use this file except in compliance with the License. 8 You may obtain a copy of the License at 9 10 http://www.apache.org/licenses/LICENSE-2.0 11 12 Unless required by applicable law or agreed to in writing, software 13 distributed under the License is distributed on an "AS IS" BASIS, 14 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 See the License for the specific language governing permissions and 16 limitations under the License. 17 */ 18 19 package v1 20 21 import ( 22 v1 "github.com/containerd/containerd/metrics/types/v1" 23 metrics "github.com/docker/go-metrics" 24 "github.com/prometheus/client_golang/prometheus" 25 ) 26 27 var memoryMetrics = []*metric{ 28 { 29 name: "memory_cache", 30 help: "The cache amount used", 31 unit: metrics.Bytes, 32 vt: prometheus.GaugeValue, 33 getValues: func(stats *v1.Metrics) []value { 34 if stats.Memory == nil { 35 return nil 36 } 37 return []value{ 38 { 39 v: float64(stats.Memory.Cache), 40 }, 41 } 42 }, 43 }, 44 { 45 name: "memory_rss", 46 help: "The rss amount used", 47 unit: metrics.Bytes, 48 vt: prometheus.GaugeValue, 49 getValues: func(stats *v1.Metrics) []value { 50 if stats.Memory == nil { 51 return nil 52 } 53 return []value{ 54 { 55 v: float64(stats.Memory.RSS), 56 }, 57 } 58 }, 59 }, 60 { 61 name: "memory_rss_huge", 62 help: "The rss_huge amount used", 63 unit: metrics.Bytes, 64 vt: prometheus.GaugeValue, 65 getValues: func(stats *v1.Metrics) []value { 66 if stats.Memory == nil { 67 return nil 68 } 69 return []value{ 70 { 71 v: float64(stats.Memory.RSSHuge), 72 }, 73 } 74 }, 75 }, 76 { 77 name: "memory_mapped_file", 78 help: "The mapped_file amount used", 79 unit: metrics.Bytes, 80 vt: prometheus.GaugeValue, 81 getValues: func(stats *v1.Metrics) []value { 82 if stats.Memory == nil { 83 return nil 84 } 85 return []value{ 86 { 87 v: float64(stats.Memory.MappedFile), 88 }, 89 } 90 }, 91 }, 92 { 93 name: "memory_dirty", 94 help: "The dirty amount", 95 unit: metrics.Bytes, 96 vt: prometheus.GaugeValue, 97 getValues: func(stats *v1.Metrics) []value { 98 if stats.Memory == nil { 99 return nil 100 } 101 return []value{ 102 { 103 v: float64(stats.Memory.Dirty), 104 }, 105 } 106 }, 107 }, 108 { 109 name: "memory_writeback", 110 help: "The writeback amount", 111 unit: metrics.Bytes, 112 vt: prometheus.GaugeValue, 113 getValues: func(stats *v1.Metrics) []value { 114 if stats.Memory == nil { 115 return nil 116 } 117 return []value{ 118 { 119 v: float64(stats.Memory.Writeback), 120 }, 121 } 122 }, 123 }, 124 { 125 name: "memory_pgpgin", 126 help: "The pgpgin amount", 127 unit: metrics.Bytes, 128 vt: prometheus.GaugeValue, 129 getValues: func(stats *v1.Metrics) []value { 130 if stats.Memory == nil { 131 return nil 132 } 133 return []value{ 134 { 135 v: float64(stats.Memory.PgPgIn), 136 }, 137 } 138 }, 139 }, 140 { 141 name: "memory_pgpgout", 142 help: "The pgpgout amount", 143 unit: metrics.Bytes, 144 vt: prometheus.GaugeValue, 145 getValues: func(stats *v1.Metrics) []value { 146 if stats.Memory == nil { 147 return nil 148 } 149 return []value{ 150 { 151 v: float64(stats.Memory.PgPgOut), 152 }, 153 } 154 }, 155 }, 156 { 157 name: "memory_pgfault", 158 help: "The pgfault amount", 159 unit: metrics.Bytes, 160 vt: prometheus.GaugeValue, 161 getValues: func(stats *v1.Metrics) []value { 162 if stats.Memory == nil { 163 return nil 164 } 165 return []value{ 166 { 167 v: float64(stats.Memory.PgFault), 168 }, 169 } 170 }, 171 }, 172 { 173 name: "memory_pgmajfault", 174 help: "The pgmajfault amount", 175 unit: metrics.Bytes, 176 vt: prometheus.GaugeValue, 177 getValues: func(stats *v1.Metrics) []value { 178 if stats.Memory == nil { 179 return nil 180 } 181 return []value{ 182 { 183 v: float64(stats.Memory.PgMajFault), 184 }, 185 } 186 }, 187 }, 188 { 189 name: "memory_inactive_anon", 190 help: "The inactive_anon amount", 191 unit: metrics.Bytes, 192 vt: prometheus.GaugeValue, 193 getValues: func(stats *v1.Metrics) []value { 194 if stats.Memory == nil { 195 return nil 196 } 197 return []value{ 198 { 199 v: float64(stats.Memory.InactiveAnon), 200 }, 201 } 202 }, 203 }, 204 { 205 name: "memory_active_anon", 206 help: "The active_anon amount", 207 unit: metrics.Bytes, 208 vt: prometheus.GaugeValue, 209 getValues: func(stats *v1.Metrics) []value { 210 if stats.Memory == nil { 211 return nil 212 } 213 return []value{ 214 { 215 v: float64(stats.Memory.ActiveAnon), 216 }, 217 } 218 }, 219 }, 220 { 221 name: "memory_inactive_file", 222 help: "The inactive_file amount", 223 unit: metrics.Bytes, 224 vt: prometheus.GaugeValue, 225 getValues: func(stats *v1.Metrics) []value { 226 if stats.Memory == nil { 227 return nil 228 } 229 return []value{ 230 { 231 v: float64(stats.Memory.InactiveFile), 232 }, 233 } 234 }, 235 }, 236 { 237 name: "memory_active_file", 238 help: "The active_file amount", 239 unit: metrics.Bytes, 240 vt: prometheus.GaugeValue, 241 getValues: func(stats *v1.Metrics) []value { 242 if stats.Memory == nil { 243 return nil 244 } 245 return []value{ 246 { 247 v: float64(stats.Memory.ActiveFile), 248 }, 249 } 250 }, 251 }, 252 { 253 name: "memory_unevictable", 254 help: "The unevictable amount", 255 unit: metrics.Bytes, 256 vt: prometheus.GaugeValue, 257 getValues: func(stats *v1.Metrics) []value { 258 if stats.Memory == nil { 259 return nil 260 } 261 return []value{ 262 { 263 v: float64(stats.Memory.Unevictable), 264 }, 265 } 266 }, 267 }, 268 { 269 name: "memory_hierarchical_memory_limit", 270 help: "The hierarchical_memory_limit amount", 271 unit: metrics.Bytes, 272 vt: prometheus.GaugeValue, 273 getValues: func(stats *v1.Metrics) []value { 274 if stats.Memory == nil { 275 return nil 276 } 277 return []value{ 278 { 279 v: float64(stats.Memory.HierarchicalMemoryLimit), 280 }, 281 } 282 }, 283 }, 284 { 285 name: "memory_hierarchical_memsw_limit", 286 help: "The hierarchical_memsw_limit amount", 287 unit: metrics.Bytes, 288 vt: prometheus.GaugeValue, 289 getValues: func(stats *v1.Metrics) []value { 290 if stats.Memory == nil { 291 return nil 292 } 293 return []value{ 294 { 295 v: float64(stats.Memory.HierarchicalSwapLimit), 296 }, 297 } 298 }, 299 }, 300 { 301 name: "memory_total_cache", 302 help: "The total_cache amount used", 303 unit: metrics.Bytes, 304 vt: prometheus.GaugeValue, 305 getValues: func(stats *v1.Metrics) []value { 306 if stats.Memory == nil { 307 return nil 308 } 309 return []value{ 310 { 311 v: float64(stats.Memory.TotalCache), 312 }, 313 } 314 }, 315 }, 316 { 317 name: "memory_total_rss", 318 help: "The total_rss amount used", 319 unit: metrics.Bytes, 320 vt: prometheus.GaugeValue, 321 getValues: func(stats *v1.Metrics) []value { 322 if stats.Memory == nil { 323 return nil 324 } 325 return []value{ 326 { 327 v: float64(stats.Memory.TotalRSS), 328 }, 329 } 330 }, 331 }, 332 { 333 name: "memory_total_rss_huge", 334 help: "The total_rss_huge amount used", 335 unit: metrics.Bytes, 336 vt: prometheus.GaugeValue, 337 getValues: func(stats *v1.Metrics) []value { 338 if stats.Memory == nil { 339 return nil 340 } 341 return []value{ 342 { 343 v: float64(stats.Memory.TotalRSSHuge), 344 }, 345 } 346 }, 347 }, 348 { 349 name: "memory_total_mapped_file", 350 help: "The total_mapped_file amount used", 351 unit: metrics.Bytes, 352 vt: prometheus.GaugeValue, 353 getValues: func(stats *v1.Metrics) []value { 354 if stats.Memory == nil { 355 return nil 356 } 357 return []value{ 358 { 359 v: float64(stats.Memory.TotalMappedFile), 360 }, 361 } 362 }, 363 }, 364 { 365 name: "memory_total_dirty", 366 help: "The total_dirty amount", 367 unit: metrics.Bytes, 368 vt: prometheus.GaugeValue, 369 getValues: func(stats *v1.Metrics) []value { 370 if stats.Memory == nil { 371 return nil 372 } 373 return []value{ 374 { 375 v: float64(stats.Memory.TotalDirty), 376 }, 377 } 378 }, 379 }, 380 { 381 name: "memory_total_writeback", 382 help: "The total_writeback amount", 383 unit: metrics.Bytes, 384 vt: prometheus.GaugeValue, 385 getValues: func(stats *v1.Metrics) []value { 386 if stats.Memory == nil { 387 return nil 388 } 389 return []value{ 390 { 391 v: float64(stats.Memory.TotalWriteback), 392 }, 393 } 394 }, 395 }, 396 { 397 name: "memory_total_pgpgin", 398 help: "The total_pgpgin amount", 399 unit: metrics.Bytes, 400 vt: prometheus.GaugeValue, 401 getValues: func(stats *v1.Metrics) []value { 402 if stats.Memory == nil { 403 return nil 404 } 405 return []value{ 406 { 407 v: float64(stats.Memory.TotalPgPgIn), 408 }, 409 } 410 }, 411 }, 412 { 413 name: "memory_total_pgpgout", 414 help: "The total_pgpgout amount", 415 unit: metrics.Bytes, 416 vt: prometheus.GaugeValue, 417 getValues: func(stats *v1.Metrics) []value { 418 if stats.Memory == nil { 419 return nil 420 } 421 return []value{ 422 { 423 v: float64(stats.Memory.TotalPgPgOut), 424 }, 425 } 426 }, 427 }, 428 { 429 name: "memory_total_pgfault", 430 help: "The total_pgfault amount", 431 unit: metrics.Bytes, 432 vt: prometheus.GaugeValue, 433 getValues: func(stats *v1.Metrics) []value { 434 if stats.Memory == nil { 435 return nil 436 } 437 return []value{ 438 { 439 v: float64(stats.Memory.TotalPgFault), 440 }, 441 } 442 }, 443 }, 444 { 445 name: "memory_total_pgmajfault", 446 help: "The total_pgmajfault amount", 447 unit: metrics.Bytes, 448 vt: prometheus.GaugeValue, 449 getValues: func(stats *v1.Metrics) []value { 450 if stats.Memory == nil { 451 return nil 452 } 453 return []value{ 454 { 455 v: float64(stats.Memory.TotalPgMajFault), 456 }, 457 } 458 }, 459 }, 460 { 461 name: "memory_total_inactive_anon", 462 help: "The total_inactive_anon amount", 463 unit: metrics.Bytes, 464 vt: prometheus.GaugeValue, 465 getValues: func(stats *v1.Metrics) []value { 466 if stats.Memory == nil { 467 return nil 468 } 469 return []value{ 470 { 471 v: float64(stats.Memory.TotalInactiveAnon), 472 }, 473 } 474 }, 475 }, 476 { 477 name: "memory_total_active_anon", 478 help: "The total_active_anon amount", 479 unit: metrics.Bytes, 480 vt: prometheus.GaugeValue, 481 getValues: func(stats *v1.Metrics) []value { 482 if stats.Memory == nil { 483 return nil 484 } 485 return []value{ 486 { 487 v: float64(stats.Memory.TotalActiveAnon), 488 }, 489 } 490 }, 491 }, 492 { 493 name: "memory_total_inactive_file", 494 help: "The total_inactive_file amount", 495 unit: metrics.Bytes, 496 vt: prometheus.GaugeValue, 497 getValues: func(stats *v1.Metrics) []value { 498 if stats.Memory == nil { 499 return nil 500 } 501 return []value{ 502 { 503 v: float64(stats.Memory.TotalInactiveFile), 504 }, 505 } 506 }, 507 }, 508 { 509 name: "memory_total_active_file", 510 help: "The total_active_file amount", 511 unit: metrics.Bytes, 512 vt: prometheus.GaugeValue, 513 getValues: func(stats *v1.Metrics) []value { 514 if stats.Memory == nil { 515 return nil 516 } 517 return []value{ 518 { 519 v: float64(stats.Memory.TotalActiveFile), 520 }, 521 } 522 }, 523 }, 524 { 525 name: "memory_total_unevictable", 526 help: "The total_unevictable amount", 527 unit: metrics.Bytes, 528 vt: prometheus.GaugeValue, 529 getValues: func(stats *v1.Metrics) []value { 530 if stats.Memory == nil { 531 return nil 532 } 533 return []value{ 534 { 535 v: float64(stats.Memory.TotalUnevictable), 536 }, 537 } 538 }, 539 }, 540 { 541 name: "memory_usage_failcnt", 542 help: "The usage failcnt", 543 unit: metrics.Total, 544 vt: prometheus.GaugeValue, 545 getValues: func(stats *v1.Metrics) []value { 546 if stats.Memory == nil { 547 return nil 548 } 549 return []value{ 550 { 551 v: float64(stats.Memory.Usage.Failcnt), 552 }, 553 } 554 }, 555 }, 556 { 557 name: "memory_usage_limit", 558 help: "The memory limit", 559 unit: metrics.Bytes, 560 vt: prometheus.GaugeValue, 561 getValues: func(stats *v1.Metrics) []value { 562 if stats.Memory == nil { 563 return nil 564 } 565 return []value{ 566 { 567 v: float64(stats.Memory.Usage.Limit), 568 }, 569 } 570 }, 571 }, 572 { 573 name: "memory_usage_max", 574 help: "The memory maximum usage", 575 unit: metrics.Bytes, 576 vt: prometheus.GaugeValue, 577 getValues: func(stats *v1.Metrics) []value { 578 if stats.Memory == nil { 579 return nil 580 } 581 return []value{ 582 { 583 v: float64(stats.Memory.Usage.Max), 584 }, 585 } 586 }, 587 }, 588 { 589 name: "memory_usage_usage", 590 help: "The memory usage", 591 unit: metrics.Bytes, 592 vt: prometheus.GaugeValue, 593 getValues: func(stats *v1.Metrics) []value { 594 if stats.Memory == nil { 595 return nil 596 } 597 return []value{ 598 { 599 v: float64(stats.Memory.Usage.Usage), 600 }, 601 } 602 }, 603 }, 604 { 605 name: "memory_swap_failcnt", 606 help: "The swap failcnt", 607 unit: metrics.Total, 608 vt: prometheus.GaugeValue, 609 getValues: func(stats *v1.Metrics) []value { 610 if stats.Memory == nil { 611 return nil 612 } 613 return []value{ 614 { 615 v: float64(stats.Memory.Swap.Failcnt), 616 }, 617 } 618 }, 619 }, 620 { 621 name: "memory_swap_limit", 622 help: "The swap limit", 623 unit: metrics.Bytes, 624 vt: prometheus.GaugeValue, 625 getValues: func(stats *v1.Metrics) []value { 626 if stats.Memory == nil { 627 return nil 628 } 629 return []value{ 630 { 631 v: float64(stats.Memory.Swap.Limit), 632 }, 633 } 634 }, 635 }, 636 { 637 name: "memory_swap_max", 638 help: "The swap maximum usage", 639 unit: metrics.Bytes, 640 vt: prometheus.GaugeValue, 641 getValues: func(stats *v1.Metrics) []value { 642 if stats.Memory == nil { 643 return nil 644 } 645 return []value{ 646 { 647 v: float64(stats.Memory.Swap.Max), 648 }, 649 } 650 }, 651 }, 652 { 653 name: "memory_swap_usage", 654 help: "The swap usage", 655 unit: metrics.Bytes, 656 vt: prometheus.GaugeValue, 657 getValues: func(stats *v1.Metrics) []value { 658 if stats.Memory == nil { 659 return nil 660 } 661 return []value{ 662 { 663 v: float64(stats.Memory.Swap.Usage), 664 }, 665 } 666 }, 667 }, 668 { 669 name: "memory_kernel_failcnt", 670 help: "The kernel failcnt", 671 unit: metrics.Total, 672 vt: prometheus.GaugeValue, 673 getValues: func(stats *v1.Metrics) []value { 674 if stats.Memory == nil { 675 return nil 676 } 677 return []value{ 678 { 679 v: float64(stats.Memory.Kernel.Failcnt), 680 }, 681 } 682 }, 683 }, 684 { 685 name: "memory_kernel_limit", 686 help: "The kernel limit", 687 unit: metrics.Bytes, 688 vt: prometheus.GaugeValue, 689 getValues: func(stats *v1.Metrics) []value { 690 if stats.Memory == nil { 691 return nil 692 } 693 return []value{ 694 { 695 v: float64(stats.Memory.Kernel.Limit), 696 }, 697 } 698 }, 699 }, 700 { 701 name: "memory_kernel_max", 702 help: "The kernel maximum usage", 703 unit: metrics.Bytes, 704 vt: prometheus.GaugeValue, 705 getValues: func(stats *v1.Metrics) []value { 706 if stats.Memory == nil { 707 return nil 708 } 709 return []value{ 710 { 711 v: float64(stats.Memory.Kernel.Max), 712 }, 713 } 714 }, 715 }, 716 { 717 name: "memory_kernel_usage", 718 help: "The kernel usage", 719 unit: metrics.Bytes, 720 vt: prometheus.GaugeValue, 721 getValues: func(stats *v1.Metrics) []value { 722 if stats.Memory == nil { 723 return nil 724 } 725 return []value{ 726 { 727 v: float64(stats.Memory.Kernel.Usage), 728 }, 729 } 730 }, 731 }, 732 { 733 name: "memory_kerneltcp_failcnt", 734 help: "The kerneltcp failcnt", 735 unit: metrics.Total, 736 vt: prometheus.GaugeValue, 737 getValues: func(stats *v1.Metrics) []value { 738 if stats.Memory == nil { 739 return nil 740 } 741 return []value{ 742 { 743 v: float64(stats.Memory.KernelTCP.Failcnt), 744 }, 745 } 746 }, 747 }, 748 { 749 name: "memory_kerneltcp_limit", 750 help: "The kerneltcp limit", 751 unit: metrics.Bytes, 752 vt: prometheus.GaugeValue, 753 getValues: func(stats *v1.Metrics) []value { 754 if stats.Memory == nil { 755 return nil 756 } 757 return []value{ 758 { 759 v: float64(stats.Memory.KernelTCP.Limit), 760 }, 761 } 762 }, 763 }, 764 { 765 name: "memory_kerneltcp_max", 766 help: "The kerneltcp maximum usage", 767 unit: metrics.Bytes, 768 vt: prometheus.GaugeValue, 769 getValues: func(stats *v1.Metrics) []value { 770 if stats.Memory == nil { 771 return nil 772 } 773 return []value{ 774 { 775 v: float64(stats.Memory.KernelTCP.Max), 776 }, 777 } 778 }, 779 }, 780 { 781 name: "memory_kerneltcp_usage", 782 help: "The kerneltcp usage", 783 unit: metrics.Bytes, 784 vt: prometheus.GaugeValue, 785 getValues: func(stats *v1.Metrics) []value { 786 if stats.Memory == nil { 787 return nil 788 } 789 return []value{ 790 { 791 v: float64(stats.Memory.KernelTCP.Usage), 792 }, 793 } 794 }, 795 }, 796 }