SonarQube

Supported OS Linux Windows Mac OS

Integration version5.0.0

Información general

Este check monitoriza SonarQube.

Configuración

Instalación

El check de SonarQube está incluido en el paquete del Datadog Agent. No es necesaria ninguna instalación adicional en tu servidor.

Configuración

SonarQube expone métricas desde dos fuentes: su API web y JMX. Para recopilar todas las métricas especificadas a continuación, configura tres instancias de este check. Una para monitorizar la API web de SonarQube y las otras dos para monitorizar los beans JMX de SonarQube.

La documentación sobre la API web de SonarQube está disponible en /web_api en tu interfaz de usuario web de SonarQube. Por defecto, esta integración recopila todas las métricas de rendimiento pertinentes de SonarQube expuestas a través de beans JMX de SonarQube. La configuración para estas métricas por defecto está disponible en el archivo sonarqube.d/metrics.yaml. La documentación sobre estos beans está disponible en el sitio web de SonarQube.

El servidor JMX de SonarQube no está habilitado por defecto, esto significa que a menos que esté habilitado, las métricas sonarqube.server.* no se recopilan. Puedes encontrar más información sobre cómo habilitar y configurar JMX dentro de SonarQube en la documentación de SonarQube. A continuación, se muestran las configuraciones necesarias para habilitar el servidor JMX para algunos procesos comunes de Java:

# WEB SERVER
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
  ...
  "

Este es un ejemplo básico de sonarqube.d/conf.yaml basado en los valores por defecto de SonarQube y JMX. Puedes utilizarlo como punto de partida para configurar tanto la instalación del Agent basada en host como la basada en contenedor.

init_config:
    is_jmx: false
    collect_default_metrics: true
instances:

  # Instancia de API web
  - is_jmx: false
    web_endpoint: http://localhost:9000
    auth_type: basic
    username: <username>    # Definido en la IU Web
    password: <password>    # Definido en la IU Web
    default_tag: component  # Opcional
    components:             # Obligatorio
      my-project:
        tag: project_name

  # Instancia de JMX web
  - is_jmx: true
    host: localhost
    port: 10443           # Consulta sonar.web.javaAdditionalOpts en el archivo sonar.properties de SonarQube
    user: <username>      # Definido en el archivo sonar.properties de SonarQube
    password: <password>  # Definido en el archivo sonar.properties de SonarQube

  # Instancia JMX de motor de cómputo
  - is_jmx: true
    host: localhost
    port: 10444           # Consulta sonar.ce.javaAdditionalOpts en el archivo sonar.properties de SonarQube
    user: <username>      # Definido en el archivo sonar.properties de SonarQube
    password: <password>  # Definido en el archivo de sonar.properties

Nota: Una vez configurada la integración, haz que SonarQube escanee al menos un proyecto para enviar métricas a Datadog.

Las métricas recopiladas por esta integración se etiquetan por defecto con una etiqueta component. Si deseas cambiar el nombre de etiqueta por componente, especifica la propiedad tag en la definición del componente. Para establecerlo para todos los proyectos, establece la propiedad default_tag en la configuración de instancia.

Nota: Los proyectos en SonarQube a menudo contienen múltiples ramas de control de código fuente. Esta integración sólo puede recopilar métricas de la rama por defecto en SonarQube (normalmente main).

Buscar métricas de servidor

SonarQube expone un servidor de búsqueda, que puede ser monitorizado mediante una instancia adicional de esta integración y una configuración de las métricas de JMX. Para aprender a personalizar las métricas a recopilar, consulta la documentación de checks de JMX para obtener instrucciones más detalladas. A modo de ejemplo, utiliza la siguiente configuración y la configuración predeterminada de métrica de JMX en sonarqube.d/metrics.yaml.

init_config:
  # La lista de métricas a recopilar por la integración.
  config:
    - include:
      domain: SonarQube
      name: <name>
      exclude_tags:
        - name
      attribute:
        MyMetric:
          alias: sonarqube.search_server.my_metric
          metric_type: gauge
instances:
  # Buscar instancia JMX de servidor
  - is_jmx: true
    host: localhost
    port: 10445           # Consulta sonar.search.javaAdditionalOpts en el archivo sonar.properties de SonarQube
    user: <username>      # Definido en el archivo sonar.properties de SonarQube
    password: <password>  # Definido en el archivo sonar.properties de SonarQube

Host

Para configurar este check para un Agent que se ejecuta en un host:

Recopilación de métricas
  1. Edita el archivo sonarqube.d/conf.yaml, en la carpeta conf.d/ en la raíz de tu directorio de configuración del Agent para empezar a recopilar los datos de SonarQube. Consulta el sonarqube.d/conf.yaml de ejemplo para conocer todas las opciones disponibles de configuración.

    Este check tiene un límite de 350 métricas por instancia de JMX. El número de métricas se indica en la página de estado. Puedes especificar las métricas que te interesan editando la siguiente configuración. Para saber cómo personalizar las métricas a recopilar, consulta la documentación de checks de JMX para obtener instrucciones más detalladas. Si necesitas monitorizar más métricas ponte en contacto con el soporte de Datadog.

  2. Reinicia el Agent.

Recopilación de logs
  1. Activar el registro de SonarQube.

  2. La recopilación de logs está desactivada por defecto en el archivo del Datadog Agent. Actívala en tu archivo datadog.yaml:

    logs_enabled: true
    
  3. Añade el siguiente bloque de configuración a tu archivo sonarqube.d/conf.yaml. Cambia los valores de los parámetros path y service en función de tu entorno. Consulta el sonarqube.d/conf.yaml de ejemplo para ver todas las opciones disponibles de configuración.

    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. Reinicia el Agent.

Contenedores

Recopilación de métricas

Para obtener información sobre entornos en contenedores, consulta la guía Autodiscovery con JMX.

Recopilación de logs

La recopilación de logs está deshabilitada por defecto en el Datadog Agent. Para activarla, consulta recopilación de logs de Docker.

ParámetroValor
<LOG_CONFIG>{"source": "sonarqube"}

Detección de componentes

Puedes configurar cómo se detectan tus componentes con el parámetro components_discovery.

limit
número máximo de elementos a detectar automáticamente.
Valor por defecto: 10
include
asignación de claves de expresiones regulares y valores de configuración de componentes para la detección automática.
Valor por defecto: asignación vacía
exclude
lista de expresiones regulares con los patrones de componentes a excluir de Autodiscovery. Valor por defecto: lista vacía

Ejemplos:

Incluye un máximo de 5 componentes cuyos nombres empiecen por my_project:

components_discovery:
  limit: 5
  include:
    'my_project*':

Incluye un máximo de 20 componentes y excluye los que empiecen por temp:

components_discovery:
  limit: 20
  include:
    '.*':
  exclude:
    - 'temp*'

Incluye todos los componentes cuyos nombres empiecen por issues, aplica la etiqueta (tag) issues_project y recopila solo las métricas pertenecientes a la categoría issues. Como limit no está definido, el número de componentes detectados se limita al valor por defecto 10:

components_discovery:
  include:
    'issues*':
       tag: issues_project
       include:
         - issues.

Validación

Ejecuta el subcomando de estado del Agent y busca sonarqube en la sección 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 configuras una instancia sin is_jmx: true, busca también sonarqube en la sección Collector (Recopilador):

=========
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

Datos recopilados

Métricas

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

Eventos

SonarQube no incluye eventos.

Checks de servicio

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

Solucionar problemas

¿Necesitas ayuda? Ponte en contacto con el servicio de asistencia de Datadog.

Referencias adicionales

Additional helpful documentation, links, and articles: