Supervisión de Oracle WebLogic Server para Oracle Container Engine para Kubernetes con Grafana y Prometheus

Cómo utilizar herramientas de código abierto para controlar las aplicaciones empresarialesde Adrian Padilla Duarte

Todos deben monitorear su sistema de producción para comprender cómo se está comportando. Los monitores lo ayudan a comprender las cargas de trabajo y garantizan que reciba notificaciones cuando algo falla o está a punto de fallar.

En las aplicaciones Java EE, puede optar por monitorear muchas métricas en sus servidores que identificarán cargas de trabajo y problemas con las aplicaciones. Por ejemplo, puede supervisar el montón de Java, los subprocesos activos, los sockets abiertos, el uso de la CPU y el uso de la memoria.

Si tiene una aplicación Java EE implementada en Oracle WebLogic Server para Oracle Cloud Infrastructure Container Engine para Kubernetes, este artículo es para usted.

(Si no está familiarizado con Oracle WebLogic Server para Oracle Cloud Infrastructure Container Engine para Kubernetes, mi artículo ” Oracle WebLogic Server para OKE ahora disponible en Oracle Cloud Marketplace ” es una buena introducción).

Oracle WebLogic Server para Oracle Cloud Infrastructure Container Engine para Kubernetes puede ayudarlo a crear rápidamente configuraciones de Oracle WebLogic en Oracle Cloud, por ejemplo, para asignar recursos de red, reutilizar redes o subredes de nube virtual existentes, configurar el equilibrador de carga, integrarse con Identity Cloud Manager, o configurar la base de datos Oracle.

En este artículo, le mostraré cómo usar dos herramientas de código abierto, Grafana y Prometheus, para monitorear un dominio de Oracle WebLogic implementado en Oracle WebLogic Server para Oracle Cloud Infrastructure Container Engine para Kubernetes.

Por cierto, este procedimiento utilizará varios gráficos de Helm para recorrer los pasos individuales necesarios para instalar y configurar Prometheus y Grafana. Para su propia implementación, depende de usted crear un único gráfico de Helm para implementar Prometheus o Grafana.

Prerrequisitos

Antes de comenzar, debe haber instalado al menos una de estas aplicaciones de Oracle Cloud Marketplace. ( UCM se refiere al modelo de créditos universales; BYOL significa traer su propia licencia ).

Implemente WebLogic Monitoring Exporter en su dominio de Oracle WebLogic

Aquí están las instrucciones paso a paso.

  1. Abra una ventana de terminal y acceda a la instancia de administración que se crea con Oracle WebLogic Server para Oracle Cloud Infrastructure Container Engine para Kubernetes. Puedes ver instrucciones detalladas aquí .
  2. Vaya a la carpeta raíz de Oracle Cloud Infrastructure File Storage Service, que es 
    /u01/shared
    .
    cd /u01/shared
  3. Descargue el 
    war
    archivo Exportador de monitoreo de WebLogic de GitHub a la 
    wlsdeploy
    carpeta.
    wget https://github.com/oracle/weblogic-monitoring-exporter/releases/download/v2.0.0/wls-exporter.war -P wlsdeploy/applications
  4. Incluya el archivo de configuración del exportador de muestra.
    zip -r weblogic-exporter-archive.zip wlsdeploy/ wget https://raw.githubusercontent.com/oracle/weblogic-monitoring-exporter/master/samples/kubernetes/end2end/dashboard/exporter-config.yaml -O config.yml
  5. Cree un archivo de herramientas de implementación de WebLogic Server donde colocará el 
    weblogic-exporter-archive.war
    archivo.
    zip -r weblogic-exporter-archive.zip wlsdeploy/
  6. Cree un modelo de herramientas de implementación de WebLogic Server para implementar la aplicación WebLogic Monitoring Exporter en su dominio.
    ADMIN_SERVER_NAME=$(curl -s -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/ | jq -r '.metadata.wls_admin_server_name') DOMAIN_CLUSTER_NAME=$(curl -s -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/ | jq -r '.metadata.wls_cluster_name') cat > deploy-monitoring-exporter.yaml << EOF appDeployments: Application: 'wls-exporter' : SourcePath: 'wlsdeploy/applications/wls-exporter.war' Target: '$DOMAIN_CLUSTER_NAME,$ADMIN_SERVER_NAME' ModuleType: war StagingMode: nostage EOF
  7. Implemente la aplicación WebLogic Monitoring Exporter en su dominio usando la pantalla de dominio de actualización de Pipeline.

    Acceda a la consola de Jenkins como se describe en la documentación .
  8. Desde el panel de Jenkins, abra la pantalla del dominio de actualización de la canalización y especifique los parámetros, como se indica a continuación (y consulte la Figura 1 ):
    • Para 
      Archive_Source
      , seleccione 
      Shared File System
      .
    • Para 
      Archive_File_Location
      , ingrese 
      /u01/shared/weblogic-exporter-archive.zip
      .
    • Para 
      Domain_Model_Source
      , seleccione 
      Shared File System
      .
    • Para 
      Model_File_Location,
      entrar 
      /u01/shared/deploy-monitoring-exporter.yaml
      .
    La pantalla de parámetros de dominio de actualización de canalizaciónFigura 1. Pantalla de parámetros de dominio de actualización de la canalizaciónLuego haga clic en el 
    build
    botón.Para verificar que la implementación esté funcionando, ejecute los siguientes comandos:
    WLS_CLUSTER_URL=$(kubectl get svc -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx-external -o jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}') curl -k https://$WLS_CLUSTER_URL/wls-exporter/metrics
    La salida debería tener un aspecto similar al siguiente:
    [opc@wlsoke-admin ~]$ curl -k https://$WLS_CLUSTER_URL/wls-exporter/metrics # No configuration defined.

Cree PersistentVolume y PersistentVolumeClaim para Grafana, Prometheus Server y Prometheus Alertmanager

Oracle WebLogic Server para Oracle Cloud Infrastructure Container Engine para Kubernetes crea un sistema de archivos compartido utilizando Oracle Cloud Infrastructure File Storage Service, que se monta en los diferentes pods que se ejecutan en el clúster de Oracle Container Engine para Kubernetes y el host de administración. Para almacenar datos en ese sistema de archivos compartidos, el siguiente paso es crear subrutas para que Grafana y Prometheus almacenen datos.

Este procedimiento creará un gráfico de Helm con PersistentVolume (PV) y PersistentVolumeClaim (PVC) para Grafana, Prometheus Server y Prometheus Alertmanager. Este paso no utiliza los gráficos de Prometheus y Grafana para crear el PVC porque aún no son compatibles con Oracle Cloud Infrastructure Container Engine para Kubernetes con Oracle Cloud Infrastructure File Storage Service.

  1. Abra una ventana de terminal y acceda a la instancia de administración que se crea con Oracle WebLogic Server para Oracle Cloud Infrastructure Container Engine para Kubernetes. Puede encontrar instrucciones detalladas aquí .
  2. Cree carpetas para 
    monitoringpv
    templates
    . Colocará el gráfico de Helm aquí.
    mkdir -p monitoringpv/templates
  3. Crea el 
    Chart.yaml
    archivo en la 
    monitoringpv
    carpeta.
    cat > monitoringpv/Chart.yaml << EOF apiVersion: v1 appVersion: "1.0" description: A Helm chart for creating pv and pvc for Grafana, Prometheus and Alertmanager name: monitoringpv version: 0.1.0 EOF
  4. Del mismo modo, cree el 
    values.yaml
    archivo necesario para el gráfico utilizando los metadatos de la instancia de administración.
    cat > monitoringpv/values.yaml << EOF exportpath: $(curl -s -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/ | jq -r '.metadata.fss_export_path') classname: $(curl -s -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/ | jq -r '.metadata.fss_chart_name') serverip: $(kubectl get pv jenkins-oke-pv -o jsonpath='{.spec.nfs.server}') EOF
  5. Cree las carpetas de destino en el sistema de archivos compartidos.
    mkdir /u01/shared/alertmanager mkdir /u01/shared/prometheus mkdir /u01/shared/grafana
  6. Cree archivos de plantilla para PV y PVC para Grafana, Prometheus Server y Prometheus Alertmanager.
    cat > monitoringpv/templates/grafanapv.yaml << EOF apiVersion: v1 kind: PersistentVolume metadata: name: pv-grafana spec: accessModes: - ReadWriteMany capacity: storage: 10Gi mountOptions: - nosuid nfs: path: {{ .Values.exportpath }}{{"/grafana"}} server: "{{ .Values.serverip }}" persistentVolumeReclaimPolicy: Retain storageClassName: "{{ .Values.classname }}" volumeMode: Filesystem EOF cat > monitoringpv/templates/grafanapvc.yaml << EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-grafana namespace: monitoring spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: "{{ .Values.classname }}" volumeMode: Filesystem volumeName: pv-grafana EOF cat > monitoringpv/templates/prometheuspv.yaml << EOF apiVersion: v1 kind: PersistentVolume metadata: name: pv-prometheus spec: accessModes: - ReadWriteMany capacity: storage: 10Gi mountOptions: - nosuid nfs: path: {{ .Values.exportpath }}{{"/prometheus"}} server: "{{ .Values.serverip }}" persistentVolumeReclaimPolicy: Retain storageClassName: "{{ .Values.classname }}" volumeMode: Filesystem EOF cat > monitoringpv/templates/prometheuspvc.yaml << EOF apiVersion: v1 kind: PersistentVolumeClaim metadata: name: pvc-prometheus namespace: monitoring spec: accessModes: - ReadWriteMany resources: requests: storage: 10Gi storageClassName: "{{ .Values.classname }}" volumeMode: Filesystem volumeName: pv-prometheus EOF cat > monitoringpv/templates/alertmanagerpv.yaml << EOF apiVersion: v1 kind: PersistentVolume metadata: name: pv-alertmanager spec: accessModes: - ReadWriteMany capacity: storage: 10Gi mountOptions: - nosuid nfs: path: {{ .Values.exportpath }}{{"/alertmanager"}} server: "{{ .Values.serverip }}" persistentVolumeReclaimPolicy: Retain storageClassName: "{{ .Values.classname }}" volumeMode: Filesystem EOF
  7. Instale el 
    monitoringpv
    gráfico de Helm que creó.
    helm install monitoringpv monitoringpv --create-namespace --namespace monitoring --wait
  8. Verifique que la salida sea similar a la siguiente:
    [opc@wlsoke-admin ~]$ helm install monitoringpv monitoringpv --namespace monitoring --wait NAME: monitoringpv LAST DEPLOYED: Wed Apr 15 16:43:41 2021 NAMESPACE: default STATUS: deployed REVISION: 1 TEST SUITE: None
     

Instale la tabla Prometheus Helm

Estas instrucciones son un subconjunto de las del proyecto de GitHub Prometheus Community Kubernetes Helm Charts . Siga estos pasos en la misma ventana de terminal donde accedió a la instancia de administración creada con Oracle WebLogic Server para Oracle Cloud Infrastructure Container Engine para Kubernetes ( aquí están esas instrucciones nuevamente ):

  1. Agregue los repositorios de Helm necesarios.
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo add kube-state-metrics https://kubernetes.github.io/kube-state-metrics helm repo update
    En este momento, puede inspeccionar opcionalmente todas las opciones configurables disponibles de Helm mostrando el 
    values.yaml
    archivo de Prometheus .
    helm show values prometheus-community/Prometheus
  2. Copie los valores necesarios del proyecto de GitHub del exportador de monitorización de WebLogic en el 
    Prometheus
    directorio.
    wget https://raw.githubusercontent.com/oracle/weblogic-monitoring-exporter/master/samples/kubernetes/end2end/prometheus/values.yaml -P prometheus
  3. Para personalizar su implementación de Prometheus con su propia información de dominio, cree un 
    custom-values.yaml
    archivo para anular algunos de los valores del paso anterior.
    DOMAIN_NS=$(curl -s -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/ | jq -r '.metadata.wls_domain_namespace') DOMAIN_NAME=$(curl -s -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/ | jq -r '.metadata.wls_domain_uid') DOMAIN_CLUSTER_NAME=$(curl -s -H "Authorization: Bearer Oracle" http://169.254.169.254/opc/v2/instance/ | jq -r '.metadata.wls_cluster_name') cat > prometheus/custom-values.yaml << EOF alertmanager: prefixURL: '/alertmanager' baseURL: http://localhost:9093/alertmanager nodeExporter: hostRootfs: false server: prefixURL: '/prometheus' baseURL: "http://localhost:9090/prometheus" extraScrapeConfigs: | - job_name: '$DOMAIN_NAME' kubernetes_sd_configs: - role: pod relabel_configs: - source_labels: [__meta_kubernetes_namespace, __meta_kubernetes_pod_label_weblogic_domainUID, __meta_kubernetes_pod_label_weblogic_clusterName] action: keep regex: $DOMAIN_NS;$DOMAIN_NAME;$DOMAIN_CLUSTER_NAME - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_path] action: replace target_label: __metrics_path__ regex: (.+) - source_labels: [__address__, __meta_kubernetes_pod_annotation_prometheus_io_port] action: replace regex: ([^:]+)(?::\d+)?;(\d+) replacement: \$1:\$2 target_label: __address__ - action: labelmap regex: __meta_kubernetes_pod_label_(.+) - source_labels: [__meta_kubernetes_pod_name] action: replace target_label: pod_name basic_auth: username: --FIX ME-- password: --FIX ME-- EOF
  4. Abra el 
    custom-values.yaml
    archivo y actualice el nombre de usuario y la contraseña. Utilice las credenciales que utiliza para iniciar sesión en la consola administrativa.
    basic_auth: username: myadminuser password: myadminpwd
  5. Instale la tabla Prometheus.
    helm install --wait prometheus prometheus-community/prometheus --namespace monitoring -f prometheus/values.yaml -f prometheus/custom-values.yaml
  6. Verifique que la salida sea similar a la siguiente:
    [opc@wlsoke-admin ~]$ helm install --wait prometheus prometheus-community/prometheus --namespace monitoring -f prometheus/values.yaml -f prometheus/custom-values.yaml NAME: prometheus LAST DEPLOYED: Wed Apr 15 22:35:15 2021 NAMESPACE: monitoring STATUS: deployed REVISION: 1 TEST SUITE: None NOTES: . . .
  7. Cree un archivo de entrada para exponer Prometheus a través del equilibrador de carga interno.
    cat << EOF | kubectl apply -f - apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx name: prometheus namespace: monitoring spec: rules: - http: paths: - backend: serviceName: prometheus-server servicePort: 80 path: /prometheus EOF
  8. El panel de Prometheus ahora debería estar disponible en la misma dirección IP utilizada para acceder a la Consola de administración de Oracle WebLogic Server o la consola Jenkins, pero en la 
    /Prometheus
    ruta (consulte la Figura 2 ).

    El tablero de PrometheusFigura 2. Panel de control de Prometheus

Instale el gráfico Grafana Helm

Las instrucciones que se describen aquí son un subconjunto de las del proyecto de GitHub de gráficos de helm de Kubernetes de la comunidad de Grafana . Como antes, siga estos pasos dentro de la misma ventana de terminal donde accedió a la instancia de administración creada con Oracle WebLogic Server para Oracle Cloud Infrastructure Container Engine para Kubernetes.

  1. Agregue el repositorio de gráficos de Grafana.
    helm repo add grafana https://grafana.github.io/helm-charts helm repo update
  2. Cree un 
    values.yaml
    archivo para personalizar la instalación de Grafana.
    INTERNAL_LB_IP=$(kubectl get svc -n ingress-nginx -l app.kubernetes.io/name=ingress-nginx -o jsonpath='{.items[*].status.loadBalancer.ingress[0].ip}') mkdir grafana cat > grafana/values.yaml << EOF persistence: enabled: true existingClaim: pvc-grafana admin: existingSecret: "grafana-secret" userKey: username passwordKey: password grafana.ini: server: domain: "$INTERNAL_LB_IP" root_url: "%(protocol)s://%(domain)s:%(http_port)s/grafana/" serve_from_sub_path: true EOF
  3. Cree un archivo de 
    grafana-secret
    Kubernetes 
    secret
    que contenga las credenciales de administrador para el servidor Grafana (con sus propias credenciales, por supuesto).
    kubectl --namespace monitoring create secret generic grafana-secret --from-literal=username=your username --from-literal=password=yourpassword
  4. Instale el gráfico Grafana Helm.
    helm install --wait grafana grafana/grafana --namespace monitoring -f grafana/values.yaml
  5. Verifique que la salida sea similar a la siguiente:
    [opc@wlsoke-admin ~]$ helm install --wait grafana grafana/grafana --namespace monitoring -f grafana/values.yaml NAME: grafana LAST DEPLOYED: Fri Apr 16 16:40:21 2021 NAMESPACE: monitoring STATUS: deployed REVISION: 1 NOTES: . . .
     
  6. Exponga el panel de Grafana con el controlador de entrada.
    cat <<EOF | kubectl apply -f - apiVersion: extensions/v1beta1 kind: Ingress metadata: annotations: kubernetes.io/ingress.class: nginx name: grafana namespace: monitoring spec: rules: - http: paths: - backend: serviceName: grafana servicePort: 80 path: /grafana EOF
  7. El panel de Grafana ahora debería estar disponible en la misma dirección IP utilizada para acceder a la Consola de administración de Oracle WebLogic Server o la consola Jenkins y Prometheus, pero en la 
    /Grafana
    ruta (consulte la Figura 3 ). Debe iniciar sesión con las credenciales que configuró en el 
    secret
    archivo. Este documento contiene instrucciones sobre cómo acceder a estos puntos finales a través de un navegador .
     La pantalla de inicio de sesión de GrafanaFigura 3. La pantalla de inicio de sesión de Grafana

Cree la fuente de datos de Grafana

Para este artículo, reutilizaré los pasos descritos en el ejemplo de Exportador de monitoreo de WebLogic . Puede encontrar la documentación completa sobre cómo crear fuentes de datos de Grafana en la documentación de Grafana .

  1. Una vez que inicie sesión en el panel de Grafana (como se muestra en la Figura 3 ), vaya a 
    Configuration > Data Sources
    (ver Figura 4 ) y haga clic 
    Add data source
    para ir a la pantalla donde agrega la nueva fuente de datos (ver Figura 5 ).
     El menú Configuración con la opción Fuentes de datosFigura 4. El menú Configuración con la opción Fuentes de datosPantalla donde agrega una nueva fuente de datosFigura 5.  La pantalla donde agrega una nueva fuente de datos
  2. Seleccione Prometheus como tipo de fuente de datos (consulte la Figura 6 ).
     Elija Prometheus como tipo de fuente de datos.Figura 6. Elija Prometheus como tipo de fuente de datos.
  3. Establezca la URL en 
    http://<INTERNAL_LB_IP>/prometheus
    y haga clic en el 
    Save&Test
    botón (consulte la Figura 7 ).

Nota IMPORTANTE. 

INTERNAL_LB_IP
es la misma dirección IP que utiliza para acceder a Grafana, Prometheus, Jenkins y Oracle WebLogic Server Administration Console. Puede ver cómo obtener esa dirección en este documento .

Establecer la URL de la fuente de datos;  asegúrese de utilizar su propia dirección IP.

Figura 7. Establezca la URL de la fuente de datos; asegúrese de utilizar su propia dirección IP.

Importe el panel de Oracle WebLogic Server a Grafana

  1. Inicie sesión en el panel de Grafana. Navegue 
    Dashboards > Manage
    y haga clic 
    Import
    (vea la Figura 8 ).
     La pantalla para importar un nuevo tableroFigura 8. La pantalla para importar un nuevo tablero
  2. Abra este archivo de código JSON en un navegador. Copie el contenido en la 
    Import via panel json
    sección de la pantalla del tablero y haga clic en 
    Load
    (ver Figura 9 ).
     Aquí es donde pegará el código JSON.Figura 9. Aquí es donde pegará el código JSON.
  3. Haga clic en el 
    Import
    botón y verifique que puede ver el panel de Oracle WebLogic Server en Grafana (consulte la Figura 10 ). ¡Eso es todo! ¡Listo!
     El panel de Oracle WebLogic Server que se ejecuta dentro de GrafanaFigura 10. El panel de Oracle WebLogic Server que se ejecuta dentro de Grafana

Fuente: https://blogs.oracle.com/javamagazine/weblogic-oke-grafana-prometheus

Créditos. Este artículo es una adaptación y actualización de la muestra de extremo a extremo de WebLogic Monitoring Exporter.