SonarQube

Supported OS Linux Mac OS Windows

Intégration2.0.1

Présentation

Ce check permet de surveiller SonarQube.

Configuration

Installation

Le check SonarQube est inclus avec le package de l’Agent Datadog. Vous n’avez donc rien d’autre à installer sur votre serveur.

Configuration

SonarQube recueille des métriques à partir de deux sources : son API Web et JMX. Pour recueillir toutes les métriques spécifiées ci-dessous, configurez trois instances de ce check : la première pour surveiller l’API Web de SonarQube, et les deux autres pour surveiller les beans JMX de SonarQube.

La documentation relative à l’API Web de SonarQube est disponible sous /web_api dans l’interface Web de SonarQube. Par défaut, cette intégration recueille toutes les métriques de performance SonarQube pertinentes qui sont exposées via des beans JMX SonarQube. La configuration pour ces métriques par défaut est disponible dans le fichier sonarqube.d/metrics.yaml. La documentation relative à ces beans figure sur le site Web de SonarQube (en anglais).

Le serveur JMX de SonarQube n’est pas activé par défaut. Tant que vous ne l’activez pas, les métriques sonarqube.server.* ne sont pas recueillies. Pour obtenir plus d’informations concernant l’activation et la configuration de JMX dans SonarQube, consultez la documentation SonarQube (en anglais). Vous trouverez ci-dessous les configurations requises pour activer le serveur JMX pour quelques-uns des processus Java communs :

# SERVEUR WEB
sonar.web.javaAdditionalOpts="
  -Dcom.sun.management.jmxremote=true
  -Dcom.sun.management.jmxremote.port=10443
  -Dcom.sun.management.jmxremote.rmi.port=10443
  ...
  "

# COMPUTE ENGINE
sonar.ce.javaAdditionalOpts="
  -Dcom.sun.management.jmxremote=true
  -Dcom.sun.management.jmxremote.port=10444
  -Dcom.sun.management.jmxremote.rmi.port=10444
  ...
  "

# ELASTICSEARCH
sonar.search.javaAdditionalOpts="
  -Dcom.sun.management.jmxremote=true
  -Dcom.sun.management.jmxremote.port=10445
  -Dcom.sun.management.jmxremote.rmi.port=10445
  ...
  "

Voici un exemple de fichier sonarqube.d/conf.yaml de base, reposant sur les valeurs par défaut de SonarQube et JMX. Vous pouvez l’utiliser comme point de départ lorsque vous configurez l’installation de l’Agent, qu’il soit basé sur des hosts ou des conteneurs.

init_config:
    is_jmx: false
    collect_default_metrics: true
instances:

  # Instance d'API Web
  - is_jmx: false
    web_endpoint: http://localhost:9000
    auth_type: basic
    username: <nom_utilisateur>    # Défini dans l'interface Web
    password: <mot_de_passe>    # Défini dans l'interface Web
    default_tag: component  # Facultatif
    components:             # Obligatoire
      my-project:
        tag: project_name

  # Instance JMX Web
  - is_jmx: true
    host: localhost
    port: 10443           # Voir sonar.web.javaAdditionalOpts dans le fichier sonar.properties de SonarQube
    user: <nom_utilisateur>      # Défini dans le fichier sonar.properties de SonarQube
    password: <password>  # Défini dans le fichier sonar.properties de SonarQube

  # Instance JMX Compute Engine
  - is_jmx: true
    host: localhost
    port: 10444           # Voir sonar.ce.javaAdditionalOpts dans le fichier sonar.properties de SonarQube
    user: <nom_utilisateur>      # Défini dans le fichier sonar.properties de SonarQube
    password: <mot_de_passe>  # Défini dans le fichier sonar.properties de SonarQube

Remarque : une fois l’intégration configurée, demandez à SonarQube d’analyser au moins un de vos projets afin que les métriques soient renseignées dans Datadog.

Par défaut, le tag component est appliqué aux métriques recueillies par cette intégration. Si vous souhaitez changer le nom du tag pour chaque composant, spécifiez la propriété tag dans la définition du composant. Pour configurer ce tag pour tous les projets, définissez la propriété default_tag sur la configuration de l’instance.

Remarque : les projets dans SonarQube contiennent souvent plusieurs branches de contrôle de source. Cette intégration ne peut recueillir des métriques qu’à partir de la branche par défaut dans SonarQube (généralement main).

SonarQube expose un serveur de recherche qui peut être surveillé en utilisant une instance supplémentaire de cette intégration et en configurant les métriques JMX à recueillir. Pour découvrir en détail comment personnaliser les métriques à recueillir, consultez la documentation relative aux checks JMX. À titre d’exemple, vous pouvez utiliser la configuration ci-dessous ainsi que la configuration de métriques JMX par défaut dans sonarqube.d/metrics.yaml.

init_config:
  # La liste des métriques qui seront recueillies par cette intégration.
  config:
    - include:
      domain: SonarQube
      name: <name>
      exclude_tags:
        - name
      attribute:
        MyMetric:
          alias: sonarqube.search_server.my_metric
          metric_type: gauge
instances:
  # Instance JMX du serveur de recherche
  - is_jmx: true
    host: localhost
    port: 10445           # Voir sonar.search.javaAdditionalOpts dans le fichier sonar.properties de SonarQube
    user: <nom_utilisateur>      # Défini dans le fichier sonar.properties de SonarQube
    password: <mot_de_passe>  # Défini dans le fichier sonar.properties de SonarQube

Host

Pour configurer ce check lorsque l’Agent est exécuté sur un host :

Collecte de métriques
  1. Modifiez le fichier sonarqube.d/conf.yaml dans le dossier conf.d/ à la racine du répertoire de configuration de votre Agent pour commencer à recueillir vos données SonarQube. Consultez le fichier d’exemple sonarqube.d/conf.yaml pour découvrir toutes les options de configuration disponibles.

    Ce check prévoit une limite de 350 métriques par instance JMX. Le nombre de métriques renvoyées est indiqué sur la page d’informations. Choisissez les métriques qui vous intéressent en modifiant la configuration ci-dessous. Pour découvrir comment modifier la liste des métriques à recueillir, consultez la documentation relative aux checks JMX afin d’obtenir des instructions détaillées. Si vous devez surveiller davantage de métriques, contactez l’assistance Datadog.

  2. Redémarrez l’Agent.

Collecte de logs
  1. Activez la journalisation SonarQube.

  2. La collecte de logs est désactivée par défaut dans l’Agent Datadog. Vous devez l’activer dans datadog.yaml :

    logs_enabled: true
    
  3. Ajoutez le bloc de configuration suivant à votre fichier sonarqube.d/conf.yaml. Modifiez les valeurs des paramètres path et service en fonction de votre environnement. Consultez le fichier d’exemple sonarqube.d/conf.yaml pour découvrir toutes les options de configuration disponibles.

    logs:
      - type: file
        path: /opt/sonarqube/logs/access.log
        source: sonarqube
      - type: file
        path: /opt/sonarqube/logs/ce.log
        source: sonarqube
        log_processing_rules:
          - type: multi_line
            name: log_start_with_date
            pattern: \d{4}\.\d{2}\.\d{2}
      - type: file
        path: /opt/sonarqube/logs/es.log
        source: sonarqube
        log_processing_rules:
          - type: multi_line
            name: log_start_with_date
            pattern: \d{4}\.\d{2}\.\d{2}
      - type: file
        path: /opt/sonarqube/logs/sonar.log
        source: sonarqube
        log_processing_rules:
          - type: multi_line
            name: log_start_with_date
            pattern: \d{4}\.\d{2}\.\d{2}
      - type: file
        path: /opt/sonarqube/logs/web.log
        source: sonarqube
        log_processing_rules:
          - type: multi_line
            name: log_start_with_date
            pattern: \d{4}\.\d{2}\.\d{2}
    
  4. Redémarrez l’Agent.

Environnement conteneurisé

Collecte de métriques

Pour les environnements conteneurisés, consultez le guide Autodiscovery avec JMX.

Collecte de logs

La collecte des logs est désactivée par défaut dans l’Agent Datadog. Pour l’activer, consultez la section Collecte de logs avec Docker.

ParamètreValeur
<CONFIG_LOG>{"source": "sonarqube"}

Validation

Lancez la sous-commande status de l’Agent et cherchez sonarqube dans la section JMXFetch :

========
JMXFetch
========
  Initialized checks
  ==================
    sonarqube
      instance_name : sonarqube-localhost-10444
      message : <no value>
      metric_count : 33
      service_check_count : 0
      status : OK
      instance_name : sonarqube-localhost-10443
      message : <no value>
      metric_count : 38
      service_check_count : 0
      status : OK

Si vous avez défini une instance sans is_jmx: true, cherchez également sonarqube dans la section Collector :

=========
Collector
=========
  Running Checks
  ==============
    sonarqube (1.1.0)
    -----------------
      Instance ID: sonarqube:1249c1ed7c7b489a [OK]
      Configuration Source: file:/etc/datadog-agent/conf.d/sonarqube.d/conf.yaml
      Total Runs: 51
      Metric Samples: Last Run: 39, Total: 1,989
      Events: Last Run: 0, Total: 0
      Service Checks: Last Run: 1, Total: 51
      Average Execution Time : 1.19s
      Last Execution Date : 2021-03-12 00:00:44.000000 UTC
      Last Successful Execution Date : 2021-03-12 00:00:44.000000 UTC

Données collectées

Métriques

sonarqube.complexity.cognitive_complexity
(gauge)
Cognitive complexity
sonarqube.complexity.complexity
(gauge)
Cyclomatic complexity
sonarqube.coverage.branch_coverage
(gauge)
Condition coverage
Shown as percent
sonarqube.coverage.conditions_to_cover
(gauge)
Conditions to cover
sonarqube.coverage.coverage
(gauge)
Coverage by tests
Shown as percent
sonarqube.coverage.line_coverage
(gauge)
Line coverage
Shown as percent
sonarqube.coverage.lines_to_cover
(gauge)
Lines to cover
sonarqube.coverage.new_branch_coverage
(gauge)
Condition coverage of new/changed code
Shown as percent
sonarqube.coverage.new_conditions_to_cover
(gauge)
Conditions to cover on new code
sonarqube.coverage.new_coverage
(gauge)
Coverage of new/changed code
Shown as percent
sonarqube.coverage.new_line_coverage
(gauge)
Line coverage of added/changed code
Shown as percent
sonarqube.coverage.new_lines_to_cover
(gauge)
Lines to cover on new code
sonarqube.coverage.new_uncovered_conditions
(gauge)
Uncovered conditions on new code
sonarqube.coverage.new_uncovered_lines
(gauge)
Uncovered lines on new code
sonarqube.coverage.skipped_tests
(gauge)
Number of skipped unit tests
sonarqube.coverage.test_errors
(gauge)
Number of unit test errors
sonarqube.coverage.test_failures
(gauge)
Number of unit test failures
sonarqube.coverage.test_success_density
(gauge)
Density of successful unit tests
Shown as percent
sonarqube.coverage.tests
(gauge)
Number of unit tests
sonarqube.coverage.uncovered_conditions
(gauge)
Uncovered conditions
sonarqube.coverage.uncovered_lines
(gauge)
Uncovered lines
sonarqube.duplications.duplicated_blocks
(gauge)
Duplicated blocks
sonarqube.duplications.duplicated_files
(gauge)
Duplicated files
sonarqube.duplications.duplicated_lines
(gauge)
Duplicated lines
sonarqube.duplications.duplicated_lines_density
(gauge)
Duplicated lines balanced by statements
Shown as percent
sonarqube.duplications.new_duplicated_blocks
(gauge)
Duplicated blocks on new code
sonarqube.duplications.new_duplicated_lines
(gauge)
Duplicated Lines on New Code
sonarqube.duplications.new_duplicated_lines_density
(gauge)
Duplicated lines (%) on new code balanced by statements
Shown as percent
sonarqube.issues.blocker_violations
(gauge)
Blocker issues
sonarqube.issues.confirmed_issues
(gauge)
Confirmed issues
sonarqube.issues.critical_violations
(gauge)
Critical issues
sonarqube.issues.false_positive_issues
(gauge)
False positive issues
sonarqube.issues.info_violations
(gauge)
Info issues
sonarqube.issues.major_violations
(gauge)
Major issues
sonarqube.issues.minor_violations
(gauge)
Minor issues
sonarqube.issues.new_blocker_violations
(gauge)
New Blocker issues
sonarqube.issues.new_critical_violations
(gauge)
New Critical issues
sonarqube.issues.new_info_violations
(gauge)
New Info issues
sonarqube.issues.new_major_violations
(gauge)
New Major issues
sonarqube.issues.new_minor_violations
(gauge)
New Minor issues
sonarqube.issues.new_violations
(gauge)
New issues
sonarqube.issues.open_issues
(gauge)
Open issues
sonarqube.issues.reopened_issues
(gauge)
Reopened issues
sonarqube.issues.violations
(gauge)
Issues
sonarqube.issues.wont_fix_issues
(gauge)
Won't fix issues
sonarqube.maintainability.code_smells
(gauge)
Code Smells
sonarqube.maintainability.new_code_smells
(gauge)
New Code Smells
sonarqube.maintainability.new_maintainability_rating
(gauge)
Maintainability rating on new code
sonarqube.maintainability.new_sqale_debt_ratio
(gauge)
Technical Debt Ratio of new/changed code.
Shown as percent
sonarqube.maintainability.sqale_debt_ratio
(gauge)
Ratio of the actual technical debt compared to the estimated cost to develop the whole source code from scratch
Shown as percent
sonarqube.maintainability.sqale_rating
(gauge)
A-to-E rating based on the technical debt ratio
sonarqube.reliability.bugs
(gauge)
Bugs
sonarqube.reliability.new_bugs
(gauge)
New Bugs
sonarqube.reliability.new_reliability_rating
(gauge)
Reliability rating on new code
sonarqube.reliability.reliability_rating
(gauge)
Reliability rating
sonarqube.security.new_security_rating
(gauge)
Security rating on new code
sonarqube.security.new_vulnerabilities
(gauge)
New Vulnerabilities
sonarqube.security.security_rating
(gauge)
Security rating
sonarqube.security.vulnerabilities
(gauge)
Vulnerabilities
sonarqube.security_review.new_security_hotspots
(gauge)
New Security Hotspots
sonarqube.security_review.new_security_hotspots_reviewed
(gauge)
Percentage of Security Hotspots Reviewed on New Code
Shown as percent
sonarqube.security_review.new_security_review_rating
(gauge)
Security Review Rating on New Code
sonarqube.security_review.security_hotspots
(gauge)
Security Hotspots
sonarqube.security_review.security_hotspots_reviewed
(gauge)
Percentage of Security Hotspots Reviewed
Shown as percent
sonarqube.security_review.security_review_rating
(gauge)
Security Review Rating
sonarqube.server.async_execution.largest_worker_count
(gauge)
sonarqube.server.async_execution.queue_size
(gauge)
sonarqube.server.async_execution.worker_count
(gauge)
sonarqube.server.compute_engine_tasks.error_count
(count)
Number of Background Tasks which failed since the last restart of SonarQube
Shown as error
sonarqube.server.compute_engine_tasks.in_progress_count
(gauge)
Number of Background Tasks currently under processing. Its value is either 1 or 0, since SonarQube can process only one task at a time.
sonarqube.server.compute_engine_tasks.longest_pending_time
(gauge)
Pending time (ms) of the oldest Background Task waiting to be processed. This measure, together with PendingCount, helps you know if analyses are stacking and taking too long to start processing. This helps you evaluate if it might be worth configuring additional Compute Engine workers (Enterprise Edition) or additional nodes (Data Center Edition) to improve performance. Requires SonarQube >=9.0.
Shown as millisecond
sonarqube.server.compute_engine_tasks.pending_count
(count)
Number of Background Tasks waiting to be processed since the last restart of SonarQube
sonarqube.server.compute_engine_tasks.processing_time
(gauge)
Measure the time spent to process Background Tasks since the last restart. The value will always increase. This measure is powerful when combined with SuccessCount and ErrorCount measures to get the average time to handle a Background Task, or when used to understand how much time the server is spending during a day to handle Background Tasks. It gives you an indication of the load on your server.
sonarqube.server.compute_engine_tasks.success_count
(count)
Number of Background Tasks successfully processed since the last restart of SonarQube
sonarqube.server.compute_engine_tasks.worker_count
(gauge)
Number of Background Tasks that can be processed at the same time
sonarqube.server.compute_engine_tasks.worker_max_count
(gauge)
sonarqube.server.database.pool_active_connections
(gauge)
Number of active database connections
Shown as connection
sonarqube.server.database.pool_idle_connections
(gauge)
Number of database connections waiting to be used
Shown as connection
sonarqube.server.database.pool_initial_size
(gauge)
Initial size of the database connections pool
Shown as connection
sonarqube.server.database.pool_max_active_connections
(gauge)
Maximum number of active database connections
Shown as connection
sonarqube.server.database.pool_max_idle_connections
(gauge)
Maximum number of database connections waiting to be used
Shown as connection
sonarqube.server.database.pool_max_wait_millis
(gauge)

Shown as millisecond
sonarqube.server.database.pool_min_idle_connections
(gauge)

Shown as connection
sonarqube.server.database.pool_remove_abandoned_timeout_seconds
(gauge)

Shown as second
sonarqube.size.classes
(gauge)
Classes
sonarqube.size.comment_lines
(gauge)
Number of comment lines
sonarqube.size.comment_lines_density
(gauge)
Comments balanced by ncloc + comment lines
Shown as percent
sonarqube.size.directories
(gauge)
Directories
sonarqube.size.files
(gauge)
Number of files
sonarqube.size.functions
(gauge)
Functions
sonarqube.size.generated_lines
(gauge)
Number of generated lines
sonarqube.size.generated_ncloc
(gauge)
Generated non Commenting Lines of Code
sonarqube.size.lines
(gauge)
Lines
sonarqube.size.ncloc
(gauge)
Non commenting lines of code
sonarqube.size.new_lines
(gauge)
New lines
sonarqube.size.projects
(gauge)
Number of projects
sonarqube.size.statements
(gauge)
Number of statements

Événements

SonarQube n’inclut aucun événement.

Checks de service

sonarqube.can_connect
Returns CRITICAL if the Agent is unable to connect to and collect metrics from the monitored SonarQube instance’s JMX endpoint, WARNING if no metrics are collected, and OK otherwise.
Statuses: ok, critical, warning

sonarqube.api_access
Returns CRITICAL if the Agent is unable to connect to and collect metrics from the monitored SonarQube instance’s web endpoint, otherwise returns OK.
Statuses: ok, critical

Dépannage

Besoin d’aide ? Contactez l’assistance Datadog.

Pour aller plus loin

Documentation, liens et articles supplémentaires utiles: