Ad Widget

Collapse

system.cpu.load and Windows Agent

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • jpomorski
    Junior Member
    • Jul 2013
    • 7

    #1

    system.cpu.load and Windows Agent

    Hi,

    Could somebody explain me how Zabbix Agent in Windows get system.cpu.load value? I'm asking about versions 3.0 and higher.
    Previously I used version 2.2.7 and values were more or less comparable to values from "System\Processor Queue Length" counter. After upgrade to 3.0.4, I receive much higher values.
  • allexpetrov
    Senior Member
    Zabbix Certified Trainer
    Zabbix Certified SpecialistZabbix Certified Professional
    • May 2017
    • 361

    #2
    Originally posted by jpomorski
    Hi,

    Could somebody explain me how Zabbix Agent in Windows get system.cpu.load value? I'm asking about versions 3.0 and higher.
    Previously I used version 2.2.7 and values were more or less comparable to values from "System\Processor Queue Length" counter. After upgrade to 3.0.4, I receive much higher values.
    Hi, could you please show the values (from Windows as from Zabbix) ? As well as paste the your key.

    Thank you,
    Alexey!

    Comment

    • jpomorski
      Junior Member
      • Jul 2013
      • 7

      #3
      Hi Alexey

      Values from Zabbix

      Click image for larger version

Name:	zabbix2.jpg
Views:	1
Size:	49.7 KB
ID:	313900

      Values from Performance Monitor on monitored machine

      Click image for larger version

Name:	zabbix1.jpg
Views:	1
Size:	70.1 KB
ID:	313901

      Item configuration

      Click image for larger version

Name:	zabbix3.jpg
Views:	1
Size:	6.7 KB
ID:	313902

      Jarek

      Comment

      • allexpetrov
        Senior Member
        Zabbix Certified Trainer
        Zabbix Certified SpecialistZabbix Certified Professional
        • May 2017
        • 361

        #4
        Hi Jarek,
        please expand the item.

        Thanks,
        Alex!

        Comment

        • jpomorski
          Junior Member
          • Jul 2013
          • 7

          #5

          Comment

          • jan.garaj
            Senior Member
            Zabbix Certified Specialist
            • Jan 2010
            • 506

            #6
            system.cpu.load - windows implementation: https://www.zabbix.org/websvn/wsvn/z...fo/win32/cpu.c:

            Code:
             if (NULL == (tmp = get_rparam(request, 1)) || '\0' == *tmp || 0 == strcmp(tmp, "avg1"))
                    {
                            ret = get_perf_counter_value(collector->cpus.queue_counter, 1 * SEC_PER_MIN, &value, &error);
                    }
            So cpus.queue_counter is used. But that's 1 minute average in your case != 1 second average in Performance Monitor case.
            Devops Monitoring Expert advice: Dockerize/automate/monitor all the things.
            My DevOps stack: Docker / Kubernetes / Mesos / ECS / Terraform / Elasticsearch / Zabbix / Grafana / Puppet / Ansible / Vagrant

            Comment

            • jpomorski
              Junior Member
              • Jul 2013
              • 7

              #7
              Jan, thank you for above link.

              I've done some investigation, and IMO the problem is related to power management settings in Windows. If power plan is set as Balanced or Power saver, then on less loaded server,s some cores are parked (https://support.microsoft.com/en-us/...havior-changes). After change power plan on High performance, core parking is disabled, and values from Zabbix Agent are comparable to values from Performance Monitor.

              I'm doing code review of Zabbix Agent, but I'm not dev, so it takes me a lot of time... Maybe someone who knows better Zabbix code, can do it faster and better, and can confirm (or not) my guesswork...

              Jarek

              Comment

              • jan.garaj
                Senior Member
                Zabbix Certified Specialist
                • Jan 2010
                • 506

                #8
                Please try to use item:
                Code:
                system.cpu.load[percpu,avg1]
                percpu = total load divided by online CPU count = normalized CPU load

                Devops Monitoring Expert advice: Dockerize/automate/monitor all the things.
                My DevOps stack: Docker / Kubernetes / Mesos / ECS / Terraform / Elasticsearch / Zabbix / Grafana / Puppet / Ansible / Vagrant

                Comment

                • jpomorski
                  Junior Member
                  • Jul 2013
                  • 7

                  #9
                  After change key to system.cpu.load[percpu,avg1], returned values are divided by 2 (server has two 1 core vCPUs) but still too high beside to values from Performance Monitor.

                  Comment

                  Working...