Nota:
- Este tutorial requiere acceso a Oracle Cloud. Para registrarse para obtener una cuenta gratuita, consulte Introducción al nivel gratuito de Oracle Cloud Infrastructure.
- Utiliza valores de ejemplo para las credenciales, el arrendamiento y los compartimentos de Oracle Cloud Infrastructure. Al finalizar el laboratorio, sustituya estos valores por otros específicos de su entorno en la nube.
Automatice el despliegue de OCI Stack Monitoring para instancias informáticas de OCI
Introducción
El control de pila es uno de los servicios ofrecidos para controlar las instancias informáticas en Oracle Cloud Infrastructure (OCI) en Observability and Management para la infraestructura desplegada en el arrendamiento de OCI. Stack Monitoring no solo permite el almacenamiento de cada disco, sino también de los sistemas de archivos creados en cada volumen asociado a las instancias informáticas. Además del almacenamiento, la supervisión de pila proporciona métricas sobre disponibilidad, CPU, memoria y actividad en disco + paginación de las instancias informáticas.
En nuestro tutorial anterior: Gestionar el uso del disco de VM mediante la supervisión de pila, se analizó la supervisión de los sistemas de archivos de almacenamiento de las instancias informáticas mediante el servicio OCI Stack Monitoring, donde activamos manualmente el agente Monitoring para cada instancia y, a continuación, ejecutamos un trabajo de detección para una sola instancia mediante un archivo JSON.
Sin embargo, cuando se trata de un entorno de producción real, hay miles de máquinas presentes y podemos automatizar el despliegue de OCI Stack Monitoring para instancias informáticas de OCI.
Objetivo
Automatice el proceso completo de instalación y despliegue de Stack Monitoring con scripts personalizados.
Requisitos
- Si ya ha implementado la solución presente en este tutorial, puede omitir los pasos del 2 al 5.
- El usuario debe tener los permisos de IAM mencionados en este tutorial.
- El grupo dinámico para los agentes de gestión con las políticas necesarias se debe crear como se menciona en este tutorial.
- El usuario debe tener instalada la versión 3.16 o superior de la CLI de OCI en la máquina en la que se desplegarán los scripts.
- La solución consta de scripts de shell, por lo que es necesario alojarlos en una máquina compatible con shell de Linux/Unix.
Tarea 1: Despliegue de la solución
Cree un directorio independiente en el dispositivo basado en Linux para instalar la solución. A continuación, se muestran los pasos detallados para desplegar la solución en OCI:
-
Despliegue el script para instalar el agente de supervisión.
-
Cree un nuevo archivo denominado
agent-enable.sh
en el directorio mediante el comando:vi agent-enable.sh
-
Copie el siguiente fragmento de código y péguelo en el archivo enable.sh del agente. Guarde los cambios realizados en el archivo y salga.
#************************************************************************ # # Licensed under the Apache License, Version 2.0 (the “License”); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an “AS IS” BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # #************************************************************************ # Available at: https://github.com/dbarj/oci-scripts # Created on: Oct/2022 by Maninder Singh Flora and Akarsha Itigi # Version 2.0 #************************************************************************ #!/bin/bash DATE=$(date +'%m-%d-%Y-%T') Help() { # Display Help echo "This script will enable the Monitoring agent on the OCI Compute Instances by taking input of a Compartment-id or an Instance-id." echo echo "Syntax: sh <script-name> [-h|i|c]" echo "options:" echo "h Print this Help." echo "i Takes Instance-id as input and enables agent for that particular compute instance only." echo "c Takes Compartment-id as input and enables agent for all the compute instances in that compartment." echo } Allinstance() { LOG_FILE=$INPUT_ID-$DATE STR=$INPUT_ID MATCH1=$(echo $INPUT_ID | awk -F"." {'print $2'} | tr -d " ") MATCH2="compartment" INPUT_LENGTH=${#STR} LENGTH=83 if [ $MATCH1 = $MATCH2 ] && [ $INPUT_LENGTH = $LENGTH ] then touch /tmp/monitoring_agent/monitoring_agent_logs/agent_enable_logs/$LOG_FILE.log for INSTANCE_ID in $(oci compute instance list --compartment-id $INPUT_ID | grep ocid1.instance | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " "); do echo " " INSTANCE_NAME=$(oci compute instance get --instance-id "$INSTANCE_ID" | grep -i display-name | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " ") echo "$DATE Enabling Monitoring Agent for $INSTANCE_NAME ..." echo "$DATE Enabling Monitoring Agent for $INSTANCE_NAME ..." >> /tmp/monitoring_agent/monitoring_agent_logs/agent_enable_logs/$LOG_FILE.log oci compute instance update --instance-id "$INSTANCE_ID" --from-json file:///tmp/monitoring_agent/monitoring_agent_templates/agent_enable.json --force >> /tmp/monitoring_agent/monitoring_agent_logs/agent_enable_logs/$LOG_FILE.log echo "$DATE Enabled Monitoring Agent for $INSTANCE_NAME" >> /tmp/monitoring_agent/monitoring_agent_logs/agent_enable_logs/$LOG_FILE.log echo "$DATE Enabled Monitoring Agent for $INSTANCE_NAME" done else echo "[ERORR] : Invalid Compartment-id" fi } Instance() { LOG_FILE=$INPUT_ID-$DATE STR=$INPUT_ID MATCH1=$(echo $INPUT_ID | awk -F"." {'print $2'} | tr -d " ") MATCH2="instance" INPUT_LENGTH=${#STR} LENGTH=83 if [ $MATCH1 = $MATCH2 ] && [ $INPUT_LENGTH = $LENGTH ] then touch /tmp/monitoring_agent/monitoring_agent_logs/agent_enable_logs/$LOG_FILE.log echo " " INSTANCE_NAME=$(oci compute instance get --instance-id "$INPUT_ID" | grep -i display-name | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " ") echo "$DATE Enabling Monitoring Agent for $INSTANCE_NAME ..." echo "$DATE Enabling Monitoring Agent for $INSTANCE_NAME ..." >> /tmp/monitoring_agent/monitoring_agent_logs/agent_enable_logs/$LOG_FILE.log oci compute instance update --instance-id "$INPUT_ID" --from-json file:///tmp/monitoring_agent/monitoring_agent_templates/agent_enable.json --force >> /tmp/monitoring_agent/monitoring_agent_logs/agent_enable_logs/$LOG_FILE.log echo "$DATE Enabled Monitoring Agent for $INSTANCE_NAME" >> /tmp/monitoring_agent/monitoring_agent_logs/agent_enable_logs/$LOG_FILE.log echo "$DATE Enabled Monitoring Agent for $INSTANCE_NAME" else echo "[ERORR] : Invalid Instance-id" fi } # Get the options while getopts " hi:c: " option; do case $option in h) # display Help Help exit;; i) # Enter Instance-id INPUT_ID=$OPTARG Instance exit;; c) # Enter Compartment-id INPUT_ID=$OPTARG Allinstance exit;; \?) # Invalid option echo "[Error] : Invalid option" echo "Please check the valid options using ./<script-name> -h" exit;; esac done
-
Proporcione permiso de ejecución al archivo mediante el siguiente comando:
chmod +x agent-enable.sh
-
Cree otro archivo denominado
agent_enable.json
en el mismo directorio mediante el siguiente comando:vi agent_enable.json
-
Copie el fragmento de código desde abajo y péguelo en el archivo
agent_enable.json
. Guarde los cambios realizados en el archivo y salga.{ "agent-config": { "are-all-plugins-disabled": false, "is-management-disabled": false, "is-monitoring-disabled": false, "plugins-config": [ { "desired-state": "ENABLED", "name": "Management Agent" } ] } }
-
-
Despliegue el script para ejecutar los trabajos de detección de supervisión de pila de OCI.
-
Cree un nuevo archivo denominado
discovery-job.sh
en el directorio mediante el comando:vi discovery-job.sh
-
Copie el siguiente fragmento de código y péguelo en el archivo
discovery-job.sh
. Guarde los cambios realizados en el archivo y salga.#************************************************************************ # # Licensed under the Apache License, Version 2.0 (the “License”); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an “AS IS” BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # #************************************************************************ # Available at: https://github.com/dbarj/oci-scripts # Created on: Oct/2022 by Maninder Singh Flora and Akarsha Itigi # Version 1 #************************************************************************ #!/bin/bash DATE=$(date +'%m-%d-%Y-%T') Help() { # Display Help echo "This script will run Stack-Monitoring Discovery-job on the OCI Compute Instances by taking input of a Compartment-id or an Instance-id." echo echo "Syntax: sh <script-name> [-h|i|c]" echo "options:" echo "h Print this Help." echo "i Takes Instance-id as input and enables agent for that particular compute instance only." echo "c Takes Compartment-id as input and enables agent for all the compute instances in that compartment." echo } Allinstance() { LOG_FILE=$INPUT_ID-$DATE STR=$INPUT_ID MATCH1=$(echo $INPUT_ID | awk -F"." {'print $2'} | tr -d " ") MATCH2="compartment" INPUT_LENGTH=${#STR} LENGTH=83 if [ $MATCH1 = $MATCH2 ] && [ $INPUT_LENGTH = $LENGTH ] then touch /tmp/monitoring_agent/monitoring_agent_logs/stack_monitoring_discovery_job_logs/$LOG_FILE.log for AGENT_ID in $(oci management-agent agent list --compartment-id $INPUT_ID | grep "CreatedBy" | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " "); do echo " " INSTANCE_ID=$(oci management-agent agent get --agent-id $AGENT_ID | grep -i ocid1.instance | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " ") INSTANCE_IP=$(oci compute instance list-vnics --instance-id $INSTANCE_ID | grep -i private-ip | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " " | head -n 1) INSTANCE_NAME=$(oci compute instance get --instance-id "$INSTANCE_ID" | grep -i display-name | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " ") cp /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template.json /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json sed -i s/COMPARTMENT_ID/$INPUT_ID/ /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json sed -i s/AGENT_ID/$AGENT_ID/ /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json sed -i s/INSTANCE_IP/$INSTANCE_IP/ /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json echo "$DATE Running Stack-Monitoring Discovery-job for $INSTANCE_NAME ($INSTANCE_IP)..." echo "$DATE Running Stack-Monitoring Discovery-job for $INSTANCE_NAME ($INSTANCE_IP)..." >> /tmp/monitoring_agent/monitoring_agent_logs/stack_monitoring_discovery_job_logs/$LOG_FILE.log oci stack-monitoring discovery-job create --compartment-id "$INPUT_ID" --from-json file:///tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json >> /tmp/monitoring_agent/monitoring_agent_logs/stack_monitoring_discovery_job_logs/$LOG_FILE.log echo "$DATE Stack-Monitoring Discovery-job created for $INSTANCE_NAME ($INSTANCE_IP)" >> /tmp/monitoring_agent/monitoring_agent_logs/stack_monitoring_discovery_job_logs/$LOG_FILE.log echo "$DATE Stack-Monitoring Discovery-job created for $INSTANCE_NAME ($INSTANCE_IP)" done else echo "[ERORR] : Invalid Compartment-id" fi } Instance() { LOG_FILE=$INPUT_ID-$DATE STR=$INPUT_ID MATCH1=$(echo $INPUT_ID | awk -F"." {'print $2'} | tr -d " ") MATCH2="instance" INPUT_LENGTH=${#STR} LENGTH=83 if [ $MATCH1 = $MATCH2 ] && [ $INPUT_LENGTH = $LENGTH ] then touch /tmp/monitoring_agent/monitoring_agent_logs/stack_monitoring_discovery_job_logs/$LOG_FILE.log echo " " INSTANCE_NAME=$(oci compute instance get --instance-id "$INPUT_ID" | grep -i display-name | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " ") INSTANCE_IP=$(oci compute instance list-vnics --instance-id $INPUT_ID | grep -i private-ip | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " " | head -n 1) COMPARTMENT_ID=$(oci compute instance get --instance-id "$INPUT_ID" | grep -i compartment | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " ") AGENT_ID=$(oci management-agent agent list --compartment-id $COMPARTMENT_ID --host-id $INPUT_ID | grep "CreatedBy" | awk -F":" {print'$2'} | awk -F"," {print'$1'} | tr -d "\"" | tr -d " ") cp /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template.json /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json sed -i s/COMPARTMENT_ID/$COMPARTMENT_ID/ /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json sed -i s/AGENT_ID/$AGENT_ID/ /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json sed -i s/INSTANCE_IP/$INSTANCE_IP/ /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json echo "$DATE Running Stack-Monitoring Discovery-job for $INSTANCE_NAME ($INSTANCE_IP)..." echo "$DATE Running Stack-Monitoring Discovery-job for $INSTANCE_NAME ($INSTANCE_IP)..." >> /tmp/monitoring_agent/monitoring_agent_logs/stack_monitoring_discovery_job_logs/$LOG_FILE.log oci stack-monitoring discovery-job create --compartment-id "$COMPARTMENT_ID" --from-json file:///tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json >> /tmp/monitoring_agent/monitoring_agent_logs/stack_monitoring_discovery_job_logs/$LOG_FILE.log echo "$DATE Stack-Monitoring Discovery-job created for $INSTANCE_NAME ($INSTANCE_IP)" >> /tmp/monitoring_agent/monitoring_agent_logs/stack_monitoring_discovery_job_logs/$LOG_FILE.log echo "$DATE Stack-Monitoring Discovery-job created for $INSTANCE_NAME ($INSTANCE_IP)" else echo "[ERORR] : Invalid Instance-id" fi } # Get the options while getopts " hi:c: " option; do case $option in h) # display Help Help exit;; i) # Enter Instance-id INPUT_ID=$OPTARG Instance exit;; c) # Enter Compartment-id INPUT_ID=$OPTARG Allinstance exit;; \?) # Invalid option echo "[Error] : Invalid option" echo "Please check the valid options using ./<script-name> -h" exit;; esac done
-
Proporcione permiso de ejecución al archivo mediante el comando.
chmod +x discovery-job.sh
-
Cree otro archivo denominado
discovery_job_template.json
en el mismo directorio mediante el comando.vi discovery_job_template.json
-
Copie el fragmento de código desde abajo y péguelo en el archivo
discovery_job_template.json
. Guarde los cambios realizados en el archivo y salga.{ "discoveryType": "ADD", "discoveryClient": "host-discovery", "compartmentId": "COMPARTMENT_ID", "discoveryDetails": { "agentId": "AGENT_ID", "resourceType": "HOST", "resourceName": "INSTANCE_IP", "properties": { "propertiesMap": {} } } }
-
Cree otro archivo denominado discovery_job_template1.json en el mismo directorio mediante el comando.
vi discovery_job_template1.json
-
Copie el siguiente fragmento de código y péguelo en el archivo
discovery_job_template1.json
. Guarde los cambios realizados en el archivo y salga.{ "discoveryType": "ADD", "discoveryClient": "host-discovery", "compartmentId": "ocid1.compartment.oc1..aaaaaaaapi7c22bjp3zcuiywo2nabufke2lktkfhbf2ehqfclomnjc3vqh3q", "discoveryDetails": { "agentId": "ocid1.managementagent.oc1.iad.amaaaaaawe6j4fqa4f5q5pj3izevwffdpe63dvykmqzub2xakevch3a7xgtq", "resourceType": "HOST", "resourceName": "10.0.0.53", "properties": { "propertiesMap": {} } } }
-
-
Despliegue el script de instalación para completar la configuración.
-
Cree un nuevo archivo denominado
installation.sh
en el directorio mediante el comando.vi installation.sh
-
Copie el fragmento de código de seguimiento y péguelo en el archivo
installation.sh
. Guarde los cambios realizados en el archivo y salga.#!/bin/bash mkdir Monitoring-Agent-Scripts mkdir /tmp/monitoring_agent mkdir /tmp/monitoring_agent/monitoring_agent_logs mkdir /tmp/monitoring_agent/monitoring_agent_templates mkdir /tmp/monitoring_agent/monitoring_agent_logs/agent_enable_logs/ mkdir /tmp/monitoring_agent/monitoring_agent_logs/stack_monitoring_discovery_job_logs cp agent_enable.json /tmp/monitoring_agent/monitoring_agent_templates/agent_enable.json cp discovery_job_template.json /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template.json cp discovery_job_template1.json /tmp/monitoring_agent/monitoring_agent_templates/discovery_job_template1.json cp discovery-job.sh Monitoring-Agent-Scripts/discovery-job.sh cp agent-enable.sh Monitoring-Agent-Scripts/agent-enable.sh chmod +x Monitoring-Agent-Scripts/discovery-job.sh chmod +x Monitoring-Agent-Scripts/agent-enable.sh rm -f agent_enable.json rm -f discovery_job_template.json rm -f discovery_job_template1.json rm -f discovery-job.sh rm -f agent-enable.sh rm -f installation.sh
-
Proporcione permiso de ejecución al archivo mediante el comando.
chmod +x agent-enable.sh
-
-
Complete el despliegue. Ahora tenemos todos los archivos necesarios con todos los permisos necesarios.
-
Para completar la configuración, ejecute el siguiente comando en el mismo directorio.
sh installation.sh
-
De esta forma, se copiarán las plantillas JSON en las ubicaciones adecuadas y se crearán los archivos log para almacenar las ejecuciones del trabajo de instalación del agente y supervisión de pila.
-
Todas las plantillas y archivos JSON mencionados anteriormente se copiarán en las ubicaciones
/tmp/monitoring_agent/monitoring_agent_templates
y/tmp/monitoring_agent/monitoring_agent_logs
respectivamente.
Nota: Puede ver un directorio denominado
Monitoring-Agent-Scripts
en el directorio actual. Este directorio tiene 2 scripts para instalar el agente y ejecutar el trabajo de detección respectivamente. -
Tarea 2: Ejecución de la solución
Una vez que los scripts se hayan desplegado en el dispositivo, puede ejecutar los scripts para instalar los agentes y ejecutar los trabajos de detección para la supervisión de pila. Vaya al directorio Monitoring-Agent-Scripts
y siga los pasos adicionales.
-
Ejecute los agentes de supervisión en instancias informáticas.
-
Para instalar el agente de supervisión para una única instancia informática, debe ejecutar el siguiente script con la opción '-i'.
sh agent-enable.sh -i <oci_compute_instance_ocid>
-
Para instalar el agente de supervisión en todas las instancias informáticas de un compartimento, debe ejecutar el script con la opción '-c'.
sh agent-enable.sh -c <compartment_ocid>
-
Puede comprobar la sintaxis y los detalles de la opción mediante la opción '-h' con el script de la siguiente manera.
sh agent-enable.sh -h
-
Una vez que el script (1) o (2) anterior se haya ejecutado correctamente para la instancia informática, puede comprobar el estado del mismo en la página de detalles de la instancia informática en el separador Oracle Cloud Agent.
Nota: Una vez que el agente de gestión se muestre en estado de ejecución, continúe con los pasos adicionales porque si el agente de gestión no se está ejecutando en la instancia, obtendrá errores en los pasos posteriores.
-
-
Ejecute los trabajos de detección de supervisión de pila de OCI.
-
Una vez que el agente de gestión se esté ejecutando para la instancia informática, puede ejecutar el siguiente script con la opción '-i' para ejecutar el trabajo de detección de supervisión de pila de OCI.
sh discovery-job.sh -i <oci_compute_instance_ocid>
-
Para ejecutar el trabajo de detección de supervisión de pila de OCI para todas las instancias informáticas de un compartimento determinado, debe ejecutar el script con la opción '-c'.
sh discovery-job.sh -c <compartment_ocid>
-
Puede comprobar la sintaxis y los detalles de la opción anterior mediante la opción '-h' con el script de la siguiente manera.
sh discovery-job.sh -h
-
El guion anterior (1) o (2) puede tardar hasta 5-10 minutos en completarse. Conéctese al portal de OCI, vaya al menú Inicio, Observación y gestión, Supervisión de pila. Puede ver la supervisión de pila activada y un panel de control completo en la página Supervisión de pila. Después de la promoción, el tipo de recurso de la instancia informática es un host.
-
Compruebe el estado del trabajo de promoción en Detección de recursos para verificar si se han detectado los recursos correctamente.
-
En el panel de control de supervisión de pila, seleccione el bloque de recursos y verá una lista de instancias informáticas y hosts para los que ha activado la supervisión.
-
Seleccione el host deseado de la lista y se le presentará la vista detallada de las métricas y tablas mostradas para ese host concreto.
-
La información y las métricas del host se muestran como gráficos y tablas en la página Detalles de recurso.
-
Puede elegir el sistema de archivos utilizado (GB) y el uso del sistema de archivos (%) para obtener información más específica sobre el almacenamiento presente en el host. La vista de tabla proporciona todas las métricas en un estilo/formato de tabla.
-
Una vez que seleccione la información específica de las instancias, se mostrará tanto en porcentaje como en almacenamiento en GB. Cada uno de los sistemas de archivos presentados en la máquina host se representará con los puntos de montaje en formato de tabla.
-
-
Enlaces relacionados
- Gestionar el uso de discos de VM mediante la supervisión de pila
- Capacidad de observación del host con supervisión de pila
- Supervisión de pila de OCI
Agradecimientos
- Autores: Maninder Flora (arquitecto de nube), Akarsha I K (arquitecto de nube)
Más recursos de aprendizaje
Explore otros laboratorios en docs.oracle.com/learn o acceda a más contenido de aprendizaje gratuito en el canal YouTube de Oracle Learning. Además, visite education.oracle.com/learning-explorer para convertirse en un explorador de Oracle Learning.
Para obtener documentación sobre los productos, visite Oracle Help Center.
Automate OCI Stack Monitoring deployment for OCI Compute Instances
F76829-01
January 2023
Copyright © 2023, Oracle and/or its affiliates.