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 ).
- Oracle WebLogic Suite para OKE UCM
- Oracle WebLogic Server, Enterprise Edition para OKE UCM
- Oracle WebLogic Suite para OKE BYOL
- Oracle WebLogic Server, Enterprise Edition para OKE BYOL
Implemente WebLogic Monitoring Exporter en su dominio de Oracle WebLogic
Aquí están las instrucciones paso a paso.
- 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í .
- Vaya a la carpeta raíz de Oracle Cloud Infrastructure File Storage Service, que es
./u01/sharedcd /u01/shared
- Descargue el
archivo Exportador de monitoreo de WebLogic de GitHub a lawarcarpeta.wlsdeploywget https://github.com/oracle/weblogic-monitoring-exporter/releases/download/v2.0.0/wls-exporter.war -P wlsdeploy/applications
- 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
- Cree un archivo de herramientas de implementación de WebLogic Server donde colocará el
archivo.weblogic-exporter-archive.warzip -r weblogic-exporter-archive.zip wlsdeploy/
- 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
- 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 . - 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
, seleccioneArchive_Source.Shared File System
- Para
, ingreseArchive_File_Location./u01/shared/weblogic-exporter-archive.zip
- Para
, seleccioneDomain_Model_Source.Shared File System
- Para
entrarModel_File_Location,./u01/shared/deploy-monitoring-exporter.yaml
botón.Para verificar que la implementación esté funcionando, ejecute los siguientes comandos:buildLa salida debería tener un aspecto similar al siguiente: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[opc@wlsoke-admin ~]$ curl -k https://$WLS_CLUSTER_URL/wls-exporter/metrics # No configuration defined. - Para
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.
- 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í .
- Cree carpetas para
ymonitoringpv. Colocará el gráfico de Helm aquí.templatesmkdir -p monitoringpv/templates
- Crea el
archivo en laChart.yamlcarpeta.monitoringpvcat > 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
- Del mismo modo, cree el
archivo necesario para el gráfico utilizando los metadatos de la instancia de administración.values.yamlcat > 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
- Cree las carpetas de destino en el sistema de archivos compartidos.
mkdir /u01/shared/alertmanager mkdir /u01/shared/prometheus mkdir /u01/shared/grafana
- 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
- Instale el
gráfico de Helm que creó.monitoringpvhelm install monitoringpv monitoringpv --create-namespace --namespace monitoring --wait
- 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 ):
- Agregue los repositorios de Helm necesarios.
En este momento, puede inspeccionar opcionalmente todas las opciones configurables disponibles de Helm mostrando elhelm 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 updatearchivo de Prometheus .values.yamlhelm show values prometheus-community/Prometheus
- Copie los valores necesarios del proyecto de GitHub del exportador de monitorización de WebLogic en el
directorio.Prometheuswget https://raw.githubusercontent.com/oracle/weblogic-monitoring-exporter/master/samples/kubernetes/end2end/prometheus/values.yaml -P prometheus
- Para personalizar su implementación de Prometheus con su propia información de dominio, cree un
archivo para anular algunos de los valores del paso anterior.custom-values.yamlDOMAIN_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
- Abra el
archivo y actualice el nombre de usuario y la contraseña. Utilice las credenciales que utiliza para iniciar sesión en la consola administrativa.custom-values.yamlbasic_auth: username: myadminuser password: myadminpwd
- Instale la tabla Prometheus.
helm install --wait prometheus prometheus-community/prometheus --namespace monitoring -f prometheus/values.yaml -f prometheus/custom-values.yaml
- 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: . . .
- 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
- 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
ruta (consulte la Figura 2 )./Prometheus
Figura 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.
- Agregue el repositorio de gráficos de Grafana.
helm repo add grafana https://grafana.github.io/helm-charts helm repo update
- Cree un
archivo para personalizar la instalación de Grafana.values.yamlINTERNAL_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
- Cree un archivo de
Kubernetesgrafana-secretque contenga las credenciales de administrador para el servidor Grafana (con sus propias credenciales, por supuesto).secretkubectl --namespace monitoring create secret generic grafana-secret --from-literal=username=your username --from-literal=password=yourpassword
- Instale el gráfico Grafana Helm.
helm install --wait grafana grafana/grafana --namespace monitoring -f grafana/values.yaml
- 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: . . .
- 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
- 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
ruta (consulte la Figura 3 ). Debe iniciar sesión con las credenciales que configuró en el/Grafanaarchivo. Este documento contiene instrucciones sobre cómo acceder a estos puntos finales a través de un navegador .secret
Figura 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 .
- Una vez que inicie sesión en el panel de Grafana (como se muestra en la Figura 3 ), vaya a
(ver Figura 4 ) y haga clicConfiguration > Data Sourcespara ir a la pantalla donde agrega la nueva fuente de datos (ver Figura 5 ).Add data source
Figura 4. El menú Configuración con la opción Fuentes de datosFigura 5. La pantalla donde agrega una nueva fuente de datos - Seleccione Prometheus como tipo de fuente de datos (consulte la Figura 6 ).
Figura 6. Elija Prometheus como tipo de fuente de datos. - Establezca la URL en
y haga clic en elhttp://<INTERNAL_LB_IP>/prometheusbotón (consulte la Figura 7 ).Save&Test
Nota IMPORTANTE.
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
- Inicie sesión en el panel de Grafana. Navegue
y haga clicDashboards > Manage(vea la Figura 8 ).Import
Figura 8. La pantalla para importar un nuevo tablero - Abra este archivo de código JSON en un navegador. Copie el contenido en la
sección de la pantalla del tablero y haga clic enImport via panel json(ver Figura 9 ).Load
Figura 9. Aquí es donde pegará el código JSON. - Haga clic en el
botón y verifique que puede ver el panel de Oracle WebLogic Server en Grafana (consulte la Figura 10 ). ¡Eso es todo! ¡Listo!Import
Figura 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.