From c180221a5b0e58c42632412d2084efc3bd4cda99 Mon Sep 17 00:00:00 2001 From: Ahmad Sherif Date: Fri, 14 Oct 2016 19:49:36 +0200 Subject: [PATCH] Add docs for request profiling Closes #23239 --- CHANGELOG | 1 + doc/README.md | 1 + .../performance/img/request_profile_result.png | Bin 0 -> 9720 bytes .../performance/img/request_profiling_token.png | Bin 0 -> 30076 bytes .../monitoring/performance/request_profiling.md | 16 ++++++++++++++++ doc/development/performance.md | 3 ++- 6 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 doc/administration/monitoring/performance/img/request_profile_result.png create mode 100644 doc/administration/monitoring/performance/img/request_profiling_token.png create mode 100644 doc/administration/monitoring/performance/request_profiling.md diff --git a/CHANGELOG b/CHANGELOG index d2f1501bd2a..9def97ca342 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -115,6 +115,7 @@ v 8.13.0 (unreleased) - Fixes padding in all clipboard icons that have .btn class - Fix a typo in doc/api/labels.md - API: all unknown routing will be handled with 404 Not Found + - Add docs for request profiling - Make guests unable to view MRs on private projects v 8.12.7 diff --git a/doc/README.md b/doc/README.md index 7e3d9b00900..c30bf328003 100644 --- a/doc/README.md +++ b/doc/README.md @@ -49,6 +49,7 @@ - [Git LFS configuration](workflow/lfs/lfs_administration.md) - [Housekeeping](administration/housekeeping.md) Keep your Git repository tidy and fast. - [GitLab Performance Monitoring](administration/monitoring/performance/introduction.md) Configure GitLab and InfluxDB for measuring performance metrics. +- [Request Profiling](administration/monitoring/performance/request_profiling.md) Get a detailed profile on slow requests. - [Monitoring uptime](user/admin_area/monitoring/health_check.md) Check the server status using the health check endpoint. - [Debugging Tips](administration/troubleshooting/debug.md) Tips to debug problems when things go wrong - [Sidekiq Troubleshooting](administration/troubleshooting/sidekiq.md) Debug when Sidekiq appears hung and is not processing jobs. diff --git a/doc/administration/monitoring/performance/img/request_profile_result.png b/doc/administration/monitoring/performance/img/request_profile_result.png new file mode 100644 index 0000000000000000000000000000000000000000..73e2fdcab679dc299607a24dcfdb97de8121dbaa GIT binary patch literal 9720 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 Uf3u44MHi9!BOR4erRT5y4{A$;BLDyZ literal 0 HcmV?d00001 diff --git a/doc/administration/monitoring/performance/img/request_profiling_token.png b/doc/administration/monitoring/performance/img/request_profiling_token.png new file mode 100644 index 0000000000000000000000000000000000000000..04d87567816aaf0aa174c3506556111fc1f99e4f GIT binary patch literal 30076 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 Requests Profiles` admin page +(highlighted in a blue in the image below). +![Profile token](img/request_profiling_token.png) +1. Pass the header `X-Profile-Token: ` to the request you want to profile. You can use any of these tools + * [ModHeader](https://chrome.google.com/webstore/detail/modheader/idgpnmonknjnojddfkpgkljpfnnfcklj) Chrome extension + * [Modify Headers](https://addons.mozilla.org/en-US/firefox/addon/modify-headers/) Firefox extension + * `curl --header 'X-Profile-Token: ' https://gitlab.example.com/group/project` +1. Once request is finished (which will take a little longer than usual), you can +view the profiling output from `Monitoring > Requests Profiles` admin page. +![Profiling output](img/request_profile_result.png) + +## Cleaning up +Profiling output will be cleared out every day via a Sidekiq worker. diff --git a/doc/development/performance.md b/doc/development/performance.md index 7ff603e2c4a..65d34829025 100644 --- a/doc/development/performance.md +++ b/doc/development/performance.md @@ -34,10 +34,11 @@ graphs/dashboards. ## Tooling -GitLab provides two built-in tools to aid the process of improving performance: +GitLab provides built-in tools to aid the process of improving performance: * [Sherlock](profiling.md#sherlock) * [GitLab Performance Monitoring](../monitoring/performance/monitoring.md) +* [Request Profiling](../administration/monitoring/performance/request_profiling.md) GitLab employees can use GitLab.com's performance monitoring systems located at , this requires you to log in using your