From 6207dc9037601d5188c86876c2ff79d6ddbbe540 Mon Sep 17 00:00:00 2001 From: Achilleas Pipinellis Date: Sun, 25 Sep 2016 12:16:14 +0200 Subject: [PATCH] Move monitoring/ to new location --- doc/README.md | 4 +- doc/administration/monitoring/health_check.md | 66 ++++++ .../monitoring/img/health_check_token.png | Bin .../performance/gitlab_configuration.md | 40 ++++ .../performance/grafana_configuration.md | 111 ++++++++++ .../img/grafana_dashboard_dropdown.png | Bin 0 -> 14368 bytes .../img/grafana_dashboard_import.png | Bin 0 -> 18267 bytes .../img/grafana_data_source_configuration.png | Bin 0 -> 26060 bytes .../img/grafana_data_source_empty.png | Bin 0 -> 21821 bytes .../performance/img/grafana_save_icon.png | Bin 0 -> 9107 bytes .../metrics_gitlab_configuration_settings.png | Bin 0 -> 61357 bytes .../performance/influxdb_configuration.md | 193 +++++++++++++++++ .../monitoring/performance/influxdb_schema.md | 97 +++++++++ .../monitoring/performance/introduction.md | 65 ++++++ doc/monitoring/health_check.md | 67 +----- .../performance/gitlab_configuration.md | 41 +--- .../performance/grafana_configuration.md | 112 +--------- .../performance/influxdb_configuration.md | 194 +----------------- doc/monitoring/performance/influxdb_schema.md | 98 +-------- doc/monitoring/performance/introduction.md | 66 +----- 20 files changed, 580 insertions(+), 574 deletions(-) create mode 100644 doc/administration/monitoring/health_check.md rename doc/{ => administration}/monitoring/img/health_check_token.png (100%) create mode 100644 doc/administration/monitoring/performance/gitlab_configuration.md create mode 100644 doc/administration/monitoring/performance/grafana_configuration.md create mode 100644 doc/administration/monitoring/performance/img/grafana_dashboard_dropdown.png create mode 100644 doc/administration/monitoring/performance/img/grafana_dashboard_import.png create mode 100644 doc/administration/monitoring/performance/img/grafana_data_source_configuration.png create mode 100644 doc/administration/monitoring/performance/img/grafana_data_source_empty.png create mode 100644 doc/administration/monitoring/performance/img/grafana_save_icon.png create mode 100644 doc/administration/monitoring/performance/img/metrics_gitlab_configuration_settings.png create mode 100644 doc/administration/monitoring/performance/influxdb_configuration.md create mode 100644 doc/administration/monitoring/performance/influxdb_schema.md create mode 100644 doc/administration/monitoring/performance/introduction.md diff --git a/doc/README.md b/doc/README.md index dd0eb97489e..5a6f467c17c 100644 --- a/doc/README.md +++ b/doc/README.md @@ -46,8 +46,8 @@ - [Migrate GitLab CI to CE/EE](migrate_ci_to_ce/README.md) Follow this guide to migrate your existing GitLab CI data to GitLab CE/EE. - [Git LFS configuration](workflow/lfs/lfs_administration.md) - [Housekeeping](administration/housekeeping.md) Keep your Git repository tidy and fast. -- [GitLab Performance Monitoring](monitoring/performance/introduction.md) Configure GitLab and InfluxDB for measuring performance metrics. -- [Monitoring uptime](monitoring/health_check.md) Check the server status using the health check endpoint. +- [GitLab Performance Monitoring](administration/monitoring/performance/introduction.md) Configure GitLab and InfluxDB for measuring performance metrics. +- [Monitoring uptime](administration/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. - [High Availability](administration/high_availability/README.md) Configure multiple servers for scaling or high availability. diff --git a/doc/administration/monitoring/health_check.md b/doc/administration/monitoring/health_check.md new file mode 100644 index 00000000000..eac57bc3de4 --- /dev/null +++ b/doc/administration/monitoring/health_check.md @@ -0,0 +1,66 @@ +# Health Check + +> [Introduced][ce-3888] in GitLab 8.8. + +GitLab provides a health check endpoint for uptime monitoring on the `health_check` web +endpoint. The health check reports on the overall system status based on the status of +the database connection, the state of the database migrations, and the ability to write +and access the cache. This endpoint can be provided to uptime monitoring services like +[Pingdom][pingdom], [Nagios][nagios-health], and [NewRelic][newrelic-health]. + +## Access Token + +An access token needs to be provided while accessing the health check endpoint. The current +accepted token can be found on the `admin/health_check` page of your GitLab instance. + +![access token](img/health_check_token.png) + +The access token can be passed as a URL parameter: + +``` +https://gitlab.example.com/health_check.json?token=ACCESS_TOKEN +``` + +or as an HTTP header: + +```bash +curl --header "TOKEN: ACCESS_TOKEN" https://gitlab.example.com/health_check.json +``` + +## Using the Endpoint + +Once you have the access token, health information can be retrieved as plain text, JSON, +or XML using the `health_check` endpoint: + +- `https://gitlab.example.com/health_check?token=ACCESS_TOKEN` +- `https://gitlab.example.com/health_check.json?token=ACCESS_TOKEN` +- `https://gitlab.example.com/health_check.xml?token=ACCESS_TOKEN` + +You can also ask for the status of specific services: + +- `https://gitlab.example.com/health_check/cache.json?token=ACCESS_TOKEN` +- `https://gitlab.example.com/health_check/database.json?token=ACCESS_TOKEN` +- `https://gitlab.example.com/health_check/migrations.json?token=ACCESS_TOKEN` + +For example, the JSON output of the following health check: + +```bash +curl --header "TOKEN: ACCESS_TOKEN" https://gitlab.example.com/health_check.json +``` + +would be like: + +``` +{"healthy":true,"message":"success"} +``` + +## Status + +On failure, the endpoint will return a `500` HTTP status code. On success, the endpoint +will return a valid successful HTTP status code, and a `success` message. Ideally your +uptime monitoring should look for the success message. + +[ce-3888]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/3888 +[pingdom]: https://www.pingdom.com +[nagios-health]: https://nagios-plugins.org/doc/man/check_http.html +[newrelic-health]: https://docs.newrelic.com/docs/alerts/alert-policies/downtime-alerts/availability-monitoring diff --git a/doc/monitoring/img/health_check_token.png b/doc/administration/monitoring/img/health_check_token.png similarity index 100% rename from doc/monitoring/img/health_check_token.png rename to doc/administration/monitoring/img/health_check_token.png diff --git a/doc/administration/monitoring/performance/gitlab_configuration.md b/doc/administration/monitoring/performance/gitlab_configuration.md new file mode 100644 index 00000000000..771584268d9 --- /dev/null +++ b/doc/administration/monitoring/performance/gitlab_configuration.md @@ -0,0 +1,40 @@ +# GitLab Configuration + +GitLab Performance Monitoring is disabled by default. To enable it and change any of its +settings, navigate to the Admin area in **Settings > Metrics** +(`/admin/application_settings`). + +The minimum required settings you need to set are the InfluxDB host and port. +Make sure _Enable InfluxDB Metrics_ is checked and hit **Save** to save the +changes. + +--- + +![GitLab Performance Monitoring Admin Settings](img/metrics_gitlab_configuration_settings.png) + +--- + +Finally, a restart of all GitLab processes is required for the changes to take +effect: + +```bash +# For Omnibus installations +sudo gitlab-ctl restart + +# For installations from source +sudo service gitlab restart +``` + +## Pending Migrations + +When any migrations are pending, the metrics are disabled until the migrations +have been performed. + +--- + +Read more on: + +- [Introduction to GitLab Performance Monitoring](introduction.md) +- [InfluxDB Configuration](influxdb_configuration.md) +- [InfluxDB Schema](influxdb_schema.md) +- [Grafana Install/Configuration](grafana_configuration.md) diff --git a/doc/administration/monitoring/performance/grafana_configuration.md b/doc/administration/monitoring/performance/grafana_configuration.md new file mode 100644 index 00000000000..7947b0fedc4 --- /dev/null +++ b/doc/administration/monitoring/performance/grafana_configuration.md @@ -0,0 +1,111 @@ +# Grafana Configuration + +[Grafana](http://grafana.org/) is a tool that allows you to visualize time +series metrics through graphs and dashboards. It supports several backend +data stores, including InfluxDB. GitLab writes performance data to InfluxDB +and Grafana will allow you to query InfluxDB to display useful graphs. + +For the easiest installation and configuration, install Grafana on the same +server as InfluxDB. For larger installations, you may want to split out these +services. + +## Installation + +Grafana supplies package repositories (Yum/Apt) for easy installation. +See [Grafana installation documentation](http://docs.grafana.org/installation/) +for detailed steps. + +> **Note**: Before starting Grafana for the first time, set the admin user +and password in `/etc/grafana/grafana.ini`. Otherwise, the default password +will be `admin`. + +## Configuration + +Login as the admin user. Expand the menu by clicking the Grafana logo in the +top left corner. Choose 'Data Sources' from the menu. Then, click 'Add new' +in the top bar. + +![Grafana empty data source page](img/grafana_data_source_empty.png) + +Fill in the configuration details for the InfluxDB data source. Save and +Test Connection to ensure the configuration is correct. + +- **Name**: InfluxDB +- **Default**: Checked +- **Type**: InfluxDB 0.9.x (Even if you're using InfluxDB 0.10.x) +- **Url**: https://localhost:8086 (Or the remote URL if you've installed InfluxDB +on a separate server) +- **Access**: proxy +- **Database**: gitlab +- **User**: admin (Or the username configured when setting up InfluxDB) +- **Password**: The password configured when you set up InfluxDB + +![Grafana data source configurations](img/grafana_data_source_configuration.png) + +## Apply retention policies and create continuous queries + +If you intend to import the GitLab provided Grafana dashboards, you will need to +set up the right retention policies and continuous queries. The easiest way of +doing this is by using the [influxdb-management](https://gitlab.com/gitlab-org/influxdb-management) +repository. + +To use this repository you must first clone it: + +``` +git clone https://gitlab.com/gitlab-org/influxdb-management.git +cd influxdb-management +``` + +Next you must install the required dependencies: + +``` +gem install bundler +bundle install +``` + +Now you must configure the repository by first copying `.env.example` to `.env` +and then editing the `.env` file to contain the correct InfluxDB settings. Once +configured you can simply run `bundle exec rake` and the InfluxDB database will +be configured for you. + +For more information see the [influxdb-management README](https://gitlab.com/gitlab-org/influxdb-management/blob/master/README.md). + +## Import Dashboards + +You can now import a set of default dashboards that will give you a good +start on displaying useful information. GitLab has published a set of default +[Grafana dashboards][grafana-dashboards] to get you started. Clone the +repository or download a zip/tarball, then follow these steps to import each +JSON file. + +Open the dashboard dropdown menu and click 'Import' + +![Grafana dashboard dropdown](img/grafana_dashboard_dropdown.png) + +Click 'Choose file' and browse to the location where you downloaded or cloned +the dashboard repository. Pick one of the JSON files to import. + +![Grafana dashboard import](img/grafana_dashboard_import.png) + +Once the dashboard is imported, be sure to click save icon in the top bar. If +you do not save the dashboard after importing it will be removed when you +navigate away. + +![Grafana save icon](img/grafana_save_icon.png) + +Repeat this process for each dashboard you wish to import. + +Alternatively you can automatically import all the dashboards into your Grafana +instance. See the README of the [Grafana dashboards][grafana-dashboards] +repository for more information on this process. + +[grafana-dashboards]: https://gitlab.com/gitlab-org/grafana-dashboards + +--- + +Read more on: + +- [Introduction to GitLab Performance Monitoring](introduction.md) +- [GitLab Configuration](gitlab_configuration.md) +- [InfluxDB Installation/Configuration](influxdb_configuration.md) +- [InfluxDB Schema](influxdb_schema.md) diff --git a/doc/administration/monitoring/performance/img/grafana_dashboard_dropdown.png b/doc/administration/monitoring/performance/img/grafana_dashboard_dropdown.png new file mode 100644 index 0000000000000000000000000000000000000000..7e34fad71ce6ef121704f909617c827e7f706967 GIT binary patch literal 14368 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 Pe*iftWyxA`lfeH65ITm3 literal 0 HcmV?d00001 diff --git a/doc/administration/monitoring/performance/img/grafana_dashboard_import.png b/doc/administration/monitoring/performance/img/grafana_dashboard_import.png new file mode 100644 index 0000000000000000000000000000000000000000..f97624365c70d63dd24ef54ef578882b0081403e GIT binary patch literal 18267 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�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ădG&ndUuCfy&IzE#7X?c%-iM@o=FpKp))Jqbw zG*uX>l7(L&TZ1JDRFdIq=A=iCt^?G7y6*IUmDT-(tL|wH--fX zy3f_80}Q#nshX_dbpKA90e1Fx8F4KE?maES&McI3`)9rzy_dmr0j!#8t?EVb#y@?_ z+Xt}a#0=G<00)k z_{kkidx{j#dpM18sK1yL2=CpcD&T%vN6hzQ&h}D^ki5kfCQUq}ZB=MT<#68<<8wY9 zce$r>rJY=L4ujPx;Z&iFN}a(ck21DqpyVWwPN z_rFRdN7w$i@isIPH%L5K;R%{AB5iI)zkB+I4)8lfCm3Du)U!^JCp1$+hFekwAo%RXKNJ*n0;0C@@TW5wAF?N4{q|Bs8Ka{PiF=g`Z)cF#Kg7jU?WD!f4 zW2l8;z?6^QPPB;|3(MJIOTyiLt84~G{t9q@EBWOy7T1ZjGHFqYn~!iGkyYA-c=;XJ z`U6?+d#3GPwofHO6Rnxdr@UkgV2YwLTvr}$Q}Hla^jn>i;hYB5H)^?0XDnu+q2g>2UmN|sEFf@~JWQ@Bv8T)Iwc1hSPe zl&Xk!4Nsf7>N{;xD0U!r{c`>SHhJXq*q^w7!7YrCSc(4%*!L$Ql>9U8X*TF2YbsB6 z^DJ+9FGg26y{S%^`RM^o2=`zaM6;5II0yy?t7R#NM5T2lH`k3V$yAq(rv$fRPncNI5&NMoQn2Q65jy7#~t-HIz7nTKcPDORjtyJ>wZ%@?}~_>F@+KEi|?Lp z5Bj!q#&S*~W{XbU?=ID$gxZ#C#P?VKaJYZCL*++k_VIhYc4S_@hawL5QFQ)P<@|KZ z;=OwAH^v^7w5y3r2{}iJYW8ud3LLSD`&~DZM*XxUd}3Cl@q&ut=Bu?M&pGw31+(bb%_D`pVJWB;gXZ;aH?7-`Nztyxz#O`k-DziB)(OzYEIU%vwFUQ=1dZ-cG4~ zdr;&D7~=o?WEJRVvZ(x*u{XG>UdLQ{SPwbPZzSFSX4`tMc|Y+Of@2$WP!9i~cpceV z0)NF}rPAJY797Pk`IDlfPlhrT5GCBHs$&JBqg&GfIp80Yj4ND{JA%{3;`C_{$q# zzu*~EXq}et7^;I;^fQB#;BlI~_YDuf=V#QyH@;2dN_x}+E_rt@_FjctBO}ctKt?ww zI;#XukKHjI6qK(vbP%<+*FTEOuOW@GI;}^YW`1~uMt`@DPRwXVz987eXJ^e4Vk}fl zikceTBoN)A1Rjd>z`B z3(S1etd33HbNRUjQ+}%ABR3k>x2 zCA@Yr*l1=k%otBW)lhv2fj`&(Jk{3L-t|;|^MzTRbL9I2ZgfP$gP+%x5|l3f`O_Mb zt&+?QmC|ESaG0wLmen;j-u$WB=ykjgCg+4s{-0eVEV?RUepTMW(_kR$fmkwG&-_WaBmUOxnY$9^&aX<*coJ`8G=5I z%G-eLrHcyA>{_oK>PZWDy9^qKqE`f2+uafyR)#PoX~HK*mfpwFjBA3dU0Pw$8&Sfm zSfKAo#PhSYHmrcq3g4Xp6giLpNI8%I3<8k;Kf)al4zFG{HnpG2#b^LrW)cNCmFI=e H-n{=eA3alp literal 0 HcmV?d00001 diff --git a/doc/administration/monitoring/performance/img/grafana_data_source_empty.png b/doc/administration/monitoring/performance/img/grafana_data_source_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..aa39a53acaeec2ac38f2d18f0cae31c58dd9c166 GIT binary patch literal 21821 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

o3(stgDv-D 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 F_Fo)gB%S~O literal 0 HcmV?d00001 diff --git a/doc/administration/monitoring/performance/img/grafana_save_icon.png b/doc/administration/monitoring/performance/img/grafana_save_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c740e33cd1c3bc105f247dcbec3d42a0a632dfd1 GIT binary patch literal 9107 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

L6p;E-`?Je#bT*cs$3UH!%p+Qq%I@MAp|+* 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 RoACeu002ovPDHLkV1g%MbC3W4 literal 0 HcmV?d00001 diff --git a/doc/administration/monitoring/performance/img/metrics_gitlab_configuration_settings.png b/doc/administration/monitoring/performance/img/metrics_gitlab_configuration_settings.png new file mode 100644 index 0000000000000000000000000000000000000000..db396423e30d9c7705e6852c7fbede02c4ef67bc GIT binary patch literal 61357 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 +and password (`-password `) you set earlier to the commands below._ + +Run the following command to create a database named `gitlab`: + +```bash +influx -execute 'CREATE DATABASE gitlab' +``` + +The name **must** be `gitlab`, do not use any other name. + +Next, make sure that the database was successfully created: + +```bash +influx -execute 'SHOW DATABASES' +``` + +The output should be similar to: + +``` +name: databases +--------------- +name +_internal +gitlab +``` + +That's it! Now your GitLab instance should send data to InfluxDB. + +--- + +Read more on: + +- [Introduction to GitLab Performance Monitoring](introduction.md) +- [GitLab Configuration](gitlab_configuration.md) +- [InfluxDB Schema](influxdb_schema.md) +- [Grafana Install/Configuration](grafana_configuration.md) + +[influxdb-retention]: https://docs.influxdata.com/influxdb/v0.9/query_language/database_management/#retention-policy-management +[influxdb documentation]: https://docs.influxdata.com/influxdb/v0.9/ +[influxdb cli]: https://docs.influxdata.com/influxdb/v0.9/tools/shell/ +[udp]: https://docs.influxdata.com/influxdb/v0.9/write_protocols/udp/ +[influxdb]: https://influxdata.com/time-series-platform/influxdb/ +[tsm tree]: https://influxdata.com/blog/new-storage-engine-time-structured-merge-tree/ +[tsm1-commit]: https://github.com/influxdata/influxdb/commit/15d723dc77651bac83e09e2b1c94be480966cb0d +[influx-admin]: https://docs.influxdata.com/influxdb/v0.9/administration/authentication_and_authorization/#create-a-new-admin-user diff --git a/doc/administration/monitoring/performance/influxdb_schema.md b/doc/administration/monitoring/performance/influxdb_schema.md new file mode 100644 index 00000000000..eff0e29f58d --- /dev/null +++ b/doc/administration/monitoring/performance/influxdb_schema.md @@ -0,0 +1,97 @@ +# InfluxDB Schema + +The following measurements are currently stored in InfluxDB: + +- `PROCESS_file_descriptors` +- `PROCESS_gc_statistics` +- `PROCESS_memory_usage` +- `PROCESS_method_calls` +- `PROCESS_object_counts` +- `PROCESS_transactions` +- `PROCESS_views` +- `events` + +Here, `PROCESS` is replaced with either `rails` or `sidekiq` depending on the +process type. In all series, any form of duration is stored in milliseconds. + +## PROCESS_file_descriptors + +This measurement contains the number of open file descriptors over time. The +value field `value` contains the number of descriptors. + +## PROCESS_gc_statistics + +This measurement contains Ruby garbage collection statistics such as the amount +of minor/major GC runs (relative to the last sampling interval), the time spent +in garbage collection cycles, and all fields/values returned by `GC.stat`. + +## PROCESS_memory_usage + +This measurement contains the process' memory usage (in bytes) over time. The +value field `value` contains the number of bytes. + +## PROCESS_method_calls + +This measurement contains the methods called during a transaction along with +their duration, and a name of the transaction action that invoked the method (if +available). The method call duration is stored in the value field `duration`, +while the method name is stored in the tag `method`. The tag `action` contains +the full name of the transaction action. Both the `method` and `action` fields +are in the following format: + +``` +ClassName#method_name +``` + +For example, a method called by the `show` method in the `UsersController` class +would have `action` set to `UsersController#show`. + +## PROCESS_object_counts + +This measurement is used to store retained Ruby objects (per class) and the +amount of retained objects. The number of objects is stored in the `count` value +field while the class name is stored in the `type` tag. + +## PROCESS_transactions + +This measurement is used to store basic transaction details such as the time it +took to complete a transaction, how much time was spent in SQL queries, etc. The +following value fields are available: + +| Value | Description | +| ----- | ----------- | +| `duration` | The total duration of the transaction | +| `allocated_memory` | The amount of bytes allocated while the transaction was running. This value is only reliable when using single-threaded application servers | +| `method_duration` | The total time spent in method calls | +| `sql_duration` | The total time spent in SQL queries | +| `view_duration` | The total time spent in views | + +## PROCESS_views + +This measurement is used to store view rendering timings for a transaction. The +following value fields are available: + +| Value | Description | +| ----- | ----------- | +| `duration` | The rendering time of the view | +| `view` | The path of the view, relative to the application's root directory | + +The `action` tag contains the action name of the transaction that rendered the +view. + +## events + +This measurement is used to store generic events such as the number of Git +pushes, Emails sent, etc. Each point in this measurement has a single value +field called `count`. The value of this field is simply set to `1`. Each point +also has at least one tag: `event`. This tag's value is set to the event name. +Depending on the event type additional tags may be available as well. + +--- + +Read more on: + +- [Introduction to GitLab Performance Monitoring](introduction.md) +- [GitLab Configuration](gitlab_configuration.md) +- [InfluxDB Configuration](influxdb_configuration.md) +- [Grafana Install/Configuration](grafana_configuration.md) diff --git a/doc/administration/monitoring/performance/introduction.md b/doc/administration/monitoring/performance/introduction.md new file mode 100644 index 00000000000..79904916b7e --- /dev/null +++ b/doc/administration/monitoring/performance/introduction.md @@ -0,0 +1,65 @@ +# GitLab Performance Monitoring + +GitLab comes with its own application performance measuring system as of GitLab +8.4, simply called "GitLab Performance Monitoring". GitLab Performance Monitoring is available in both the +Community and Enterprise editions. + +Apart from this introduction, you are advised to read through the following +documents in order to understand and properly configure GitLab Performance Monitoring: + +- [GitLab Configuration](gitlab_configuration.md) +- [InfluxDB Install/Configuration](influxdb_configuration.md) +- [InfluxDB Schema](influxdb_schema.md) +- [Grafana Install/Configuration](grafana_configuration.md) + +## Introduction to GitLab Performance Monitoring + +GitLab Performance Monitoring makes it possible to measure a wide variety of statistics +including (but not limited to): + +- The time it took to complete a transaction (a web request or Sidekiq job). +- The time spent in running SQL queries and rendering HAML views. +- The time spent executing (instrumented) Ruby methods. +- Ruby object allocations, and retained objects in particular. +- System statistics such as the process' memory usage and open file descriptors. +- Ruby garbage collection statistics. + +Metrics data is written to [InfluxDB][influxdb] over [UDP][influxdb-udp]. Stored +data can be visualized using [Grafana][grafana] or any other application that +supports reading data from InfluxDB. Alternatively data can be queried using the +InfluxDB CLI. + +## Metric Types + +Two types of metrics are collected: + +1. Transaction specific metrics. +1. Sampled metrics, collected at a certain interval in a separate thread. + +### Transaction Metrics + +Transaction metrics are metrics that can be associated with a single +transaction. This includes statistics such as the transaction duration, timings +of any executed SQL queries, time spent rendering HAML views, etc. These metrics +are collected for every Rack request and Sidekiq job processed. + +### Sampled Metrics + +Sampled metrics are metrics that can't be associated with a single transaction. +Examples include garbage collection statistics and retained Ruby objects. These +metrics are collected at a regular interval. This interval is made up out of two +parts: + +1. A user defined interval. +1. A randomly generated offset added on top of the interval, the same offset + can't be used twice in a row. + +The actual interval can be anywhere between a half of the defined interval and a +half above the interval. For example, for a user defined interval of 15 seconds +the actual interval can be anywhere between 7.5 and 22.5. The interval is +re-generated for every sampling run instead of being generated once and re-used +for the duration of the process' lifetime. + +[influxdb]: https://influxdata.com/time-series-platform/influxdb/ +[influxdb-udp]: https://docs.influxdata.com/influxdb/v0.9/write_protocols/udp/ +[grafana]: http://grafana.org/ diff --git a/doc/monitoring/health_check.md b/doc/monitoring/health_check.md index eac57bc3de4..23ae1b17258 100644 --- a/doc/monitoring/health_check.md +++ b/doc/monitoring/health_check.md @@ -1,66 +1 @@ -# Health Check - -> [Introduced][ce-3888] in GitLab 8.8. - -GitLab provides a health check endpoint for uptime monitoring on the `health_check` web -endpoint. The health check reports on the overall system status based on the status of -the database connection, the state of the database migrations, and the ability to write -and access the cache. This endpoint can be provided to uptime monitoring services like -[Pingdom][pingdom], [Nagios][nagios-health], and [NewRelic][newrelic-health]. - -## Access Token - -An access token needs to be provided while accessing the health check endpoint. The current -accepted token can be found on the `admin/health_check` page of your GitLab instance. - -![access token](img/health_check_token.png) - -The access token can be passed as a URL parameter: - -``` -https://gitlab.example.com/health_check.json?token=ACCESS_TOKEN -``` - -or as an HTTP header: - -```bash -curl --header "TOKEN: ACCESS_TOKEN" https://gitlab.example.com/health_check.json -``` - -## Using the Endpoint - -Once you have the access token, health information can be retrieved as plain text, JSON, -or XML using the `health_check` endpoint: - -- `https://gitlab.example.com/health_check?token=ACCESS_TOKEN` -- `https://gitlab.example.com/health_check.json?token=ACCESS_TOKEN` -- `https://gitlab.example.com/health_check.xml?token=ACCESS_TOKEN` - -You can also ask for the status of specific services: - -- `https://gitlab.example.com/health_check/cache.json?token=ACCESS_TOKEN` -- `https://gitlab.example.com/health_check/database.json?token=ACCESS_TOKEN` -- `https://gitlab.example.com/health_check/migrations.json?token=ACCESS_TOKEN` - -For example, the JSON output of the following health check: - -```bash -curl --header "TOKEN: ACCESS_TOKEN" https://gitlab.example.com/health_check.json -``` - -would be like: - -``` -{"healthy":true,"message":"success"} -``` - -## Status - -On failure, the endpoint will return a `500` HTTP status code. On success, the endpoint -will return a valid successful HTTP status code, and a `success` message. Ideally your -uptime monitoring should look for the success message. - -[ce-3888]: https://gitlab.com/gitlab-org/gitlab-ce/merge_requests/3888 -[pingdom]: https://www.pingdom.com -[nagios-health]: https://nagios-plugins.org/doc/man/check_http.html -[newrelic-health]: https://docs.newrelic.com/docs/alerts/alert-policies/downtime-alerts/availability-monitoring +This document was moved to [administration/monitoring/health_check](../administration/monitoring/health_check.md). diff --git a/doc/monitoring/performance/gitlab_configuration.md b/doc/monitoring/performance/gitlab_configuration.md index 771584268d9..a669bb28904 100644 --- a/doc/monitoring/performance/gitlab_configuration.md +++ b/doc/monitoring/performance/gitlab_configuration.md @@ -1,40 +1 @@ -# GitLab Configuration - -GitLab Performance Monitoring is disabled by default. To enable it and change any of its -settings, navigate to the Admin area in **Settings > Metrics** -(`/admin/application_settings`). - -The minimum required settings you need to set are the InfluxDB host and port. -Make sure _Enable InfluxDB Metrics_ is checked and hit **Save** to save the -changes. - ---- - -![GitLab Performance Monitoring Admin Settings](img/metrics_gitlab_configuration_settings.png) - ---- - -Finally, a restart of all GitLab processes is required for the changes to take -effect: - -```bash -# For Omnibus installations -sudo gitlab-ctl restart - -# For installations from source -sudo service gitlab restart -``` - -## Pending Migrations - -When any migrations are pending, the metrics are disabled until the migrations -have been performed. - ---- - -Read more on: - -- [Introduction to GitLab Performance Monitoring](introduction.md) -- [InfluxDB Configuration](influxdb_configuration.md) -- [InfluxDB Schema](influxdb_schema.md) -- [Grafana Install/Configuration](grafana_configuration.md) +This document was moved to [administration/monitoring/performance/gitlab_configuration](../administration/monitoring/performance/gitlab_configuration.md). diff --git a/doc/monitoring/performance/grafana_configuration.md b/doc/monitoring/performance/grafana_configuration.md index 7947b0fedc4..93320b40174 100644 --- a/doc/monitoring/performance/grafana_configuration.md +++ b/doc/monitoring/performance/grafana_configuration.md @@ -1,111 +1 @@ -# Grafana Configuration - -[Grafana](http://grafana.org/) is a tool that allows you to visualize time -series metrics through graphs and dashboards. It supports several backend -data stores, including InfluxDB. GitLab writes performance data to InfluxDB -and Grafana will allow you to query InfluxDB to display useful graphs. - -For the easiest installation and configuration, install Grafana on the same -server as InfluxDB. For larger installations, you may want to split out these -services. - -## Installation - -Grafana supplies package repositories (Yum/Apt) for easy installation. -See [Grafana installation documentation](http://docs.grafana.org/installation/) -for detailed steps. - -> **Note**: Before starting Grafana for the first time, set the admin user -and password in `/etc/grafana/grafana.ini`. Otherwise, the default password -will be `admin`. - -## Configuration - -Login as the admin user. Expand the menu by clicking the Grafana logo in the -top left corner. Choose 'Data Sources' from the menu. Then, click 'Add new' -in the top bar. - -![Grafana empty data source page](img/grafana_data_source_empty.png) - -Fill in the configuration details for the InfluxDB data source. Save and -Test Connection to ensure the configuration is correct. - -- **Name**: InfluxDB -- **Default**: Checked -- **Type**: InfluxDB 0.9.x (Even if you're using InfluxDB 0.10.x) -- **Url**: https://localhost:8086 (Or the remote URL if you've installed InfluxDB -on a separate server) -- **Access**: proxy -- **Database**: gitlab -- **User**: admin (Or the username configured when setting up InfluxDB) -- **Password**: The password configured when you set up InfluxDB - -![Grafana data source configurations](img/grafana_data_source_configuration.png) - -## Apply retention policies and create continuous queries - -If you intend to import the GitLab provided Grafana dashboards, you will need to -set up the right retention policies and continuous queries. The easiest way of -doing this is by using the [influxdb-management](https://gitlab.com/gitlab-org/influxdb-management) -repository. - -To use this repository you must first clone it: - -``` -git clone https://gitlab.com/gitlab-org/influxdb-management.git -cd influxdb-management -``` - -Next you must install the required dependencies: - -``` -gem install bundler -bundle install -``` - -Now you must configure the repository by first copying `.env.example` to `.env` -and then editing the `.env` file to contain the correct InfluxDB settings. Once -configured you can simply run `bundle exec rake` and the InfluxDB database will -be configured for you. - -For more information see the [influxdb-management README](https://gitlab.com/gitlab-org/influxdb-management/blob/master/README.md). - -## Import Dashboards - -You can now import a set of default dashboards that will give you a good -start on displaying useful information. GitLab has published a set of default -[Grafana dashboards][grafana-dashboards] to get you started. Clone the -repository or download a zip/tarball, then follow these steps to import each -JSON file. - -Open the dashboard dropdown menu and click 'Import' - -![Grafana dashboard dropdown](img/grafana_dashboard_dropdown.png) - -Click 'Choose file' and browse to the location where you downloaded or cloned -the dashboard repository. Pick one of the JSON files to import. - -![Grafana dashboard import](img/grafana_dashboard_import.png) - -Once the dashboard is imported, be sure to click save icon in the top bar. If -you do not save the dashboard after importing it will be removed when you -navigate away. - -![Grafana save icon](img/grafana_save_icon.png) - -Repeat this process for each dashboard you wish to import. - -Alternatively you can automatically import all the dashboards into your Grafana -instance. See the README of the [Grafana dashboards][grafana-dashboards] -repository for more information on this process. - -[grafana-dashboards]: https://gitlab.com/gitlab-org/grafana-dashboards - ---- - -Read more on: - -- [Introduction to GitLab Performance Monitoring](introduction.md) -- [GitLab Configuration](gitlab_configuration.md) -- [InfluxDB Installation/Configuration](influxdb_configuration.md) -- [InfluxDB Schema](influxdb_schema.md) +This document was moved to [administration/monitoring/performance/grafana_configuration](../administration/monitoring/performance/grafana_configuration.md). diff --git a/doc/monitoring/performance/influxdb_configuration.md b/doc/monitoring/performance/influxdb_configuration.md index c30cd2950d8..02647de1eb0 100644 --- a/doc/monitoring/performance/influxdb_configuration.md +++ b/doc/monitoring/performance/influxdb_configuration.md @@ -1,193 +1 @@ -# InfluxDB Configuration - -The default settings provided by [InfluxDB] are not sufficient for a high traffic -GitLab environment. The settings discussed in this document are based on the -settings GitLab uses for GitLab.com, depending on your own needs you may need to -further adjust them. - -If you are intending to run InfluxDB on the same server as GitLab, make sure -you have plenty of RAM since InfluxDB can use quite a bit depending on traffic. - -Unless you are going with a budget setup, it's advised to run it separately. - -## Requirements - -- InfluxDB 0.9.5 or newer -- A fairly modern version of Linux -- At least 4GB of RAM -- At least 10GB of storage for InfluxDB data - -Note that the RAM and storage requirements can differ greatly depending on the -amount of data received/stored. To limit the amount of stored data users can -look into [InfluxDB Retention Policies][influxdb-retention]. - -## Installation - -Installing InfluxDB is out of the scope of this document. Please refer to the -[InfluxDB documentation]. - -## InfluxDB Server Settings - -Since InfluxDB has many settings that users may wish to customize themselves -(e.g. what port to run InfluxDB on), we'll only cover the essentials. - -The configuration file in question is usually located at -`/etc/influxdb/influxdb.conf`. Whenever you make a change in this file, -InfluxDB needs to be restarted. - -### Storage Engine - -InfluxDB comes with different storage engines and as of InfluxDB 0.9.5 a new -storage engine is available, called [TSM Tree]. All users **must** use the new -`tsm1` storage engine as this [will be the default engine][tsm1-commit] in -upcoming InfluxDB releases. - -Make sure you have the following in your configuration file: - -``` -[data] - dir = "/var/lib/influxdb/data" - engine = "tsm1" -``` - -### Admin Panel - -Production environments should have the InfluxDB admin panel **disabled**. This -feature can be disabled by adding the following to your InfluxDB configuration -file: - -``` -[admin] - enabled = false -``` - -### HTTP - -HTTP is required when using the [InfluxDB CLI] or other tools such as Grafana, -thus it should be enabled. When enabling make sure to _also_ enable -authentication: - -``` -[http] - enabled = true - auth-enabled = true -``` - -_**Note:** Before you enable authentication, you might want to [create an -admin user](#create-a-new-admin-user)._ - -### UDP - -GitLab writes data to InfluxDB via UDP and thus this must be enabled. Enabling -UDP can be done using the following settings: - -``` -[[udp]] - enabled = true - bind-address = ":8089" - database = "gitlab" - batch-size = 1000 - batch-pending = 5 - batch-timeout = "1s" - read-buffer = 209715200 -``` - -This does the following: - -1. Enable UDP and bind it to port 8089 for all addresses. -2. Store any data received in the "gitlab" database. -3. Define a batch of points to be 1000 points in size and allow a maximum of - 5 batches _or_ flush them automatically after 1 second. -4. Define a UDP read buffer size of 200 MB. - -One of the most important settings here is the UDP read buffer size as if this -value is set too low, packets will be dropped. You must also make sure the OS -buffer size is set to the same value, the default value is almost never enough. - -To set the OS buffer size to 200 MB, on Linux you can run the following command: - -```bash -sysctl -w net.core.rmem_max=209715200 -``` - -To make this permanent, add the following to `/etc/sysctl.conf` and restart the -server: - -```bash -net.core.rmem_max=209715200 -``` - -It is **very important** to make sure the buffer sizes are large enough to -handle all data sent to InfluxDB as otherwise you _will_ lose data. The above -buffer sizes are based on the traffic for GitLab.com. Depending on the amount of -traffic, users may be able to use a smaller buffer size, but we highly recommend -using _at least_ 100 MB. - -When enabling UDP, users should take care to not expose the port to the public, -as doing so will allow anybody to write data into your InfluxDB database (as -[InfluxDB's UDP protocol][udp] doesn't support authentication). We recommend either -whitelisting the allowed IP addresses/ranges, or setting up a VLAN and only -allowing traffic from members of said VLAN. - -## Create a new admin user - -If you want to [enable authentication](#http), you might want to [create an -admin user][influx-admin]: - -``` -influx -execute "CREATE USER jeff WITH PASSWORD '1234' WITH ALL PRIVILEGES" -``` - -## Create the `gitlab` database - -Once you get InfluxDB up and running, you need to create a database for GitLab. -Make sure you have changed the [storage engine](#storage-engine) to `tsm1` -before creating a database. - -_**Note:** If you [created an admin user](#create-a-new-admin-user) and enabled -[HTTP authentication](#http), remember to append the username (`-username `) -and password (`-password `) you set earlier to the commands below._ - -Run the following command to create a database named `gitlab`: - -```bash -influx -execute 'CREATE DATABASE gitlab' -``` - -The name **must** be `gitlab`, do not use any other name. - -Next, make sure that the database was successfully created: - -```bash -influx -execute 'SHOW DATABASES' -``` - -The output should be similar to: - -``` -name: databases ---------------- -name -_internal -gitlab -``` - -That's it! Now your GitLab instance should send data to InfluxDB. - ---- - -Read more on: - -- [Introduction to GitLab Performance Monitoring](introduction.md) -- [GitLab Configuration](gitlab_configuration.md) -- [InfluxDB Schema](influxdb_schema.md) -- [Grafana Install/Configuration](grafana_configuration.md) - -[influxdb-retention]: https://docs.influxdata.com/influxdb/v0.9/query_language/database_management/#retention-policy-management -[influxdb documentation]: https://docs.influxdata.com/influxdb/v0.9/ -[influxdb cli]: https://docs.influxdata.com/influxdb/v0.9/tools/shell/ -[udp]: https://docs.influxdata.com/influxdb/v0.9/write_protocols/udp/ -[influxdb]: https://influxdata.com/time-series-platform/influxdb/ -[tsm tree]: https://influxdata.com/blog/new-storage-engine-time-structured-merge-tree/ -[tsm1-commit]: https://github.com/influxdata/influxdb/commit/15d723dc77651bac83e09e2b1c94be480966cb0d -[influx-admin]: https://docs.influxdata.com/influxdb/v0.9/administration/authentication_and_authorization/#create-a-new-admin-user +This document was moved to [administration/monitoring/performance/influxdb_configuration](../administration/monitoring/performance/influxdb_configuration.md). diff --git a/doc/monitoring/performance/influxdb_schema.md b/doc/monitoring/performance/influxdb_schema.md index eff0e29f58d..a989e323e04 100644 --- a/doc/monitoring/performance/influxdb_schema.md +++ b/doc/monitoring/performance/influxdb_schema.md @@ -1,97 +1 @@ -# InfluxDB Schema - -The following measurements are currently stored in InfluxDB: - -- `PROCESS_file_descriptors` -- `PROCESS_gc_statistics` -- `PROCESS_memory_usage` -- `PROCESS_method_calls` -- `PROCESS_object_counts` -- `PROCESS_transactions` -- `PROCESS_views` -- `events` - -Here, `PROCESS` is replaced with either `rails` or `sidekiq` depending on the -process type. In all series, any form of duration is stored in milliseconds. - -## PROCESS_file_descriptors - -This measurement contains the number of open file descriptors over time. The -value field `value` contains the number of descriptors. - -## PROCESS_gc_statistics - -This measurement contains Ruby garbage collection statistics such as the amount -of minor/major GC runs (relative to the last sampling interval), the time spent -in garbage collection cycles, and all fields/values returned by `GC.stat`. - -## PROCESS_memory_usage - -This measurement contains the process' memory usage (in bytes) over time. The -value field `value` contains the number of bytes. - -## PROCESS_method_calls - -This measurement contains the methods called during a transaction along with -their duration, and a name of the transaction action that invoked the method (if -available). The method call duration is stored in the value field `duration`, -while the method name is stored in the tag `method`. The tag `action` contains -the full name of the transaction action. Both the `method` and `action` fields -are in the following format: - -``` -ClassName#method_name -``` - -For example, a method called by the `show` method in the `UsersController` class -would have `action` set to `UsersController#show`. - -## PROCESS_object_counts - -This measurement is used to store retained Ruby objects (per class) and the -amount of retained objects. The number of objects is stored in the `count` value -field while the class name is stored in the `type` tag. - -## PROCESS_transactions - -This measurement is used to store basic transaction details such as the time it -took to complete a transaction, how much time was spent in SQL queries, etc. The -following value fields are available: - -| Value | Description | -| ----- | ----------- | -| `duration` | The total duration of the transaction | -| `allocated_memory` | The amount of bytes allocated while the transaction was running. This value is only reliable when using single-threaded application servers | -| `method_duration` | The total time spent in method calls | -| `sql_duration` | The total time spent in SQL queries | -| `view_duration` | The total time spent in views | - -## PROCESS_views - -This measurement is used to store view rendering timings for a transaction. The -following value fields are available: - -| Value | Description | -| ----- | ----------- | -| `duration` | The rendering time of the view | -| `view` | The path of the view, relative to the application's root directory | - -The `action` tag contains the action name of the transaction that rendered the -view. - -## events - -This measurement is used to store generic events such as the number of Git -pushes, Emails sent, etc. Each point in this measurement has a single value -field called `count`. The value of this field is simply set to `1`. Each point -also has at least one tag: `event`. This tag's value is set to the event name. -Depending on the event type additional tags may be available as well. - ---- - -Read more on: - -- [Introduction to GitLab Performance Monitoring](introduction.md) -- [GitLab Configuration](gitlab_configuration.md) -- [InfluxDB Configuration](influxdb_configuration.md) -- [Grafana Install/Configuration](grafana_configuration.md) +This document was moved to [administration/monitoring/performance/influxdb_schema](../administration/monitoring/performance/influxdb_schema.md). diff --git a/doc/monitoring/performance/introduction.md b/doc/monitoring/performance/introduction.md index 79904916b7e..ab3f3ac1664 100644 --- a/doc/monitoring/performance/introduction.md +++ b/doc/monitoring/performance/introduction.md @@ -1,65 +1 @@ -# GitLab Performance Monitoring - -GitLab comes with its own application performance measuring system as of GitLab -8.4, simply called "GitLab Performance Monitoring". GitLab Performance Monitoring is available in both the -Community and Enterprise editions. - -Apart from this introduction, you are advised to read through the following -documents in order to understand and properly configure GitLab Performance Monitoring: - -- [GitLab Configuration](gitlab_configuration.md) -- [InfluxDB Install/Configuration](influxdb_configuration.md) -- [InfluxDB Schema](influxdb_schema.md) -- [Grafana Install/Configuration](grafana_configuration.md) - -## Introduction to GitLab Performance Monitoring - -GitLab Performance Monitoring makes it possible to measure a wide variety of statistics -including (but not limited to): - -- The time it took to complete a transaction (a web request or Sidekiq job). -- The time spent in running SQL queries and rendering HAML views. -- The time spent executing (instrumented) Ruby methods. -- Ruby object allocations, and retained objects in particular. -- System statistics such as the process' memory usage and open file descriptors. -- Ruby garbage collection statistics. - -Metrics data is written to [InfluxDB][influxdb] over [UDP][influxdb-udp]. Stored -data can be visualized using [Grafana][grafana] or any other application that -supports reading data from InfluxDB. Alternatively data can be queried using the -InfluxDB CLI. - -## Metric Types - -Two types of metrics are collected: - -1. Transaction specific metrics. -1. Sampled metrics, collected at a certain interval in a separate thread. - -### Transaction Metrics - -Transaction metrics are metrics that can be associated with a single -transaction. This includes statistics such as the transaction duration, timings -of any executed SQL queries, time spent rendering HAML views, etc. These metrics -are collected for every Rack request and Sidekiq job processed. - -### Sampled Metrics - -Sampled metrics are metrics that can't be associated with a single transaction. -Examples include garbage collection statistics and retained Ruby objects. These -metrics are collected at a regular interval. This interval is made up out of two -parts: - -1. A user defined interval. -1. A randomly generated offset added on top of the interval, the same offset - can't be used twice in a row. - -The actual interval can be anywhere between a half of the defined interval and a -half above the interval. For example, for a user defined interval of 15 seconds -the actual interval can be anywhere between 7.5 and 22.5. The interval is -re-generated for every sampling run instead of being generated once and re-used -for the duration of the process' lifetime. - -[influxdb]: https://influxdata.com/time-series-platform/influxdb/ -[influxdb-udp]: https://docs.influxdata.com/influxdb/v0.9/write_protocols/udp/ -[grafana]: http://grafana.org/ +This document was moved to [administration/monitoring/performance/introduction](../administration/monitoring/performance/introduction.md).