Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Fix wording and punctuation.

...

Status
colourGreen
titleLAST TESTED ON CHECKMK 2.23.0P1


Panel
borderColorblack
bgColor#f8f8f8
titleTable of Contents

Table of Contents

Step-by-step guide


GUI Profiling

Warning

Don't use 'Enable profiling for all requests'. This option will profile a Multisite request randomly, and most of the time, it will be the slowest one.

...

Enable profiling in Checkmk

  1. SetupGeneralGlobal SettingsUser InterfaceProfile Request
    Screenshot of enable profiling by request via global settings.Image Modified
    .
  2. Modify the URL to profile by adding '&_profile=1' and fire submit the request in your browser.

    Code Block
    languagebash
    themeRDark
    http://localhost/nagnis_master/check_mk/view.py?view_name=allhosts&_profile=1

    .

  3. Now two files are created in ~{{$OMD_ROOT/var/check_mk/}}.

    Code Block
    themeRDark
    root@mylinuxhost:/opt/omd/sites/mysite/var/check_mk# ll |grep multisite
    -rw-rw---- 1 mysite mysite 100246 Nov 6 13:35 multisite.profile
    -rwxr-xr-x 1 mysite mysite 155 Nov 6 13:35 multisite.py*

    .

  4. By executing 'multisite.py', you can get runtime statistics about the last processed page.

    Code Block
    languagebash
    themeRDark
    root@mylinuxhost:/opt/omd/sites/mysite/var/check_mk# ./multisite.py |more
    Fri Nov  6 13:35:33 2020    /omd/sites/nagnis_master/var/check_mk/multisite.profile
    
             9585 function calls (9480 primitive calls) in 0.007 seconds
    
       Ordered by: internal time
    
       ncalls  tottime  percall  cumtime  percall filename:lineno(function)
            1    0.001    0.001    0.002    0.002 /omd/sites/mysite/lib/python/cmk/gui/modules.py:140(_cmk_gui_top_level_modules)
         4652    0.000    0.000    0.000    0.000 {method 'startswith' of 'str' objects}
    ...
    ...

    .

  5. For viewing multisite. Profile profile with snakeviz, move the file to another directory (e.g., /tmp), and change the owner to the owner of your Internet Browser.

    Code Block
    languagebash
    themeRDark
    linuxuser@mylinuxhost:/omd/sites/mysite/var/check_mk$ sudo cp multisite.profile /tmp/
    linuxuser@mylinuxhost:/tmp$ sudo chown linuxuser:linuxuser multisite.profile
    

    .

  6. Install the Python module (for Python 2 or Python 3, respectively).

    Code Block
    languagebash
    themeRDark
    root@mylinuxhost:~# pip install snakeviz
    root@mylinuxhost:~# pip3 install snakeviz

    .

  7. Now you can use snakeviz to view the profiling file.

    Code Block
    languagebash
    themeRDark
    linuxuser@mylinuxhost:/tmp$ snakeviz multisite.profile


    Screenshot of snakevizImage Modified

.Now you can analyze at which point of the request your view needs the most time!.

Profiling via cli


  1. The cmk commands have the option to profile them.

    Code Block
    languagebash
    themeRDark
    OMD[mysite]:~$ cmk |grep profile
       --profile           Enable profiling mode

    .

  2. The profile file will be created in the current directory. Let's go to tmp and run the cmk command with the profile option.

    Code Block
    languagebash
    themeRDark
    ➜  ~ su - at                                        
    OMD[mysite]:~$ cd tmp
    OMD[mysite]:~$ cmk -Afv --profile


    Note

    cmk -Afv --profile is only one example. This command will trigger the agent baking via the CLI. You may need to profile a different command.

    .

      1. Now we will see two files:

        Code Block
        languagebash
        themeRDark
        OMD[mysite]:~/tmp$ ls |grep profile
        profile.out*
        show_profile.py*

        .

      2. To work with these files, we need to copy them outside the site.

        Code Block
        languagebash
        themeRDark
        OMD[mysite]:~/tmp$ cp show_profile.py profile.out /tmp/

        .

      3. Now there are two ways to analyze these files:

        1. Open the profile file via the command line:

          Code Block
          languagebash
          themeRDark
          ➜  /tmp ./show_profile.py 


        2. Analyze via snakevize as described here: 9473249 Checkmk profiling#GUIProfiling

Profile a Checkmk function

Warning

Please note that we do not support any changes to our code. If you do this, please keep a backup of the file!

...

Code Block
languagebash
themeRDark
from cmk.utils.profile import profile_call
.....

@profile_call("/tmp/myprofile_dir")
def my_func_to_profile(self):
    print("ding dong")


Analyze a profiling file with python3 but generated on python2

Note

If you're running Checkmk <1.6 and >2.0 on your system, you will also have python2 and python3 installed.

If you generate a profile on Checkmk 1.6 (pyhon2), you won't be able to open this file if python3 is your default python on your system.

There is a simple to achieve this anyway:

The solution is: Python virtualenv inspired by: https://computingforgeeks.com/how-to-install-python2-with-virtualenv-on-ubuntu/How To Install Python 2 with Virtualenv on Ubuntu 20.04

Here is my short step-by-step guide:

...

In this env, you can analyze all profile files generated with python2!


Network Analyze with the Internet browser

  1. Start the Network Monitor
  2. Reload the slow/ crashing view again and save/export this file as .har. Please submit this file to us.

Slow views


Note

This option is only available in Checkmk 2.2 or greater.

...

The logging is disabled by default. The default threshold is set to 60 seconds.

Screenshot of slow views threshold set to 60 seconds via global settingsImage Modified


If enabled, one log entry per view rendering that exceeds the configured threshold is logged to var/log/web.log.

...

Code Block
languagebash
themeRDark
2023-10-05 14:01:02,467 [10] [cmk.web.slow-views 783147] View name: logfile, User: cmkadmin, Row limit: None, Limit type: none, URL variables: ['csrf_token=deaacdae-e2ad-47bb-a497-8a41c4f5e378', 
'filled_in=filter', 'is_log_notification_phase=-1', 'limit=none', 'logclass0=on', 'logclass1=on', 'logclass2=on', 'logclass3=on', 'logclass5=on', 'logclass8=on', 'logst_h0=on', 'logst_h1=on', 
'logst_h2=on', 'logst_s0=on', 'logst_s1=on', 'logst_s2=on', 'logst_s3=on', 'logtime_from=400', 'logtime_from_range=86400', 'logtime_until_range=3600', 'view_name=logfile', '_show_filter_form=1'], 
View context: {'optservicegroup': {'optservice_group': '', 'neg_optservice_group': ''}, 'siteopt': {'site': ''}, 'log_class': {'logclass0': 'on', 'logclass1': 'on', 'logclass2': 'on', 'logclass3': 
'on', 'logclass4': '', 'logclass5': 'on', 'logclass6': '', 'logclass8': 'on'}, 'log_notification_phase': {'is_log_notification_phase': '-1'}, 'hostregex': {'host_regex': ''}, 'serviceregex': 
{'service_regex': ''}, 'opthostgroup': {'opthost_group': '', 'neg_opthost_group': ''}, 'logtime': {'logtime_from': '400', 'logtime_until': '', 'logtime_from_range': '86400', 'logtime_until_range': '3600'},
'log_state': {'logst_h0': 'on', 'logst_h1': 'on', 'logst_h2': 'on', 'logst_s0': 'on', 'logst_s1': 'on', 'logst_s2': 'on', 'logst_s3': 'on'}, 'wato_folder': {'wato_folder': ''}}, Unfiltered rows: 
24783, Filtered rows: 24783, Rows after limit: 0, Duration fetching rows: 0.69s, Duration filtering rows: 0.00s, Duration rendering view: 18.44s, Rendering page exceeds 3s: 19.21s


Filter by label (Content by label)
showLabelsfalse
max5
spacesKB
showSpacefalse
sortmodified
reversetrue
typepage
cqllabel = "gui" and type = "page" and space = "KB"
labelsagent_bakery user_roles_permissions roles user

...