AWS EC2

Este documento describe la funcionalidad AWS EC2 del discovery de PandoraFMS.

Introducción

Este plugin tiene como finalidad monitorizar intancias EC2 y regiones de AWS, mediante métricas claves referentes al CPU, redes, IOPs y discos que son esenciales para llevar un control y seguimiento de estas máquinas y para garantizar un rendimiento óptimo, solucionar problemas, planificar el escalado, cumplir con los SLAs y mejorar la seguridad. 

También se monitorizan los costos totales y por región, lo que es útil para llevar un control de estos directamente desde Pandora.

El plugin se conecta al API de AWS y monitoriza zonas e instancias mediante las métricas anteriormente mencionadas, generando un agente para cada zona e instancia via XML que envía al servidor de pandora.

Matriz de compatibilidad

 

Sistemas donde se ha probado Rocky linux, Fedora 34
Sistemas donde funciona Cualquier sistema linux

Prerrequisitos

El plugin es un binario que contiene las dependias empaquetadas por lo que no es necesaria la instalación de ningún tipo de dependencia para su uso.

Para hacer las solicitudes a través de la api, la cuenta utilizada para autenticar en la ejecución requiere de unos determinados permisos.

image-1687446666111.png

Billing (read)
CloudWatch (list,read)
Cost Explorer Service (Full access)
EC2 (full read, limited: list)

Asignación de permisos

Cree una política en JSON como la siguiente:

{
   "Version": "2012-10-17",
   "Statement": [
       {
           "Sid": "VisualEditor0",
           "Effect": "Allow",
           "Action": [
  			   "ec2:DescribeInstances",
               "ec2:DescribeVolumes",
               "aws-portal:ViewBilling",
               "cloudwatch:GetMetricStatistics",
               "ec2:DescribeAddresses",
               "ce:GetCostAndUsage",
               "ce:GetTags"
           ],
           "Resource": "*"
       }
   ]
}

Se debe de asignar la política anterior a un usuario nuevo.

image-1687445953019.png

El usuario que cuente con estos permisos podrá acceder a la monitorización de AWS EC2 a través de este plugin.

Para obtener estadísticas avanzadas de las instancias EC2 se debe de habilitar la monitorización detallada en la instancia específica. Esto se hace desde el menú de la instancia en AWS.

Acciones -> Monitoreo y solución de problemas -> Administrar el monitoreo detallado -> Habilitar

 

Parámetros y configuración

Parámetros

--conf Ruta al archivo de configuración

Archivo de configuración (--conf)

agents_group_name  = < Nombre del grupo de destino para los agentes creados >
interval           = < Intervalo en segundos para los agentes y para el analisis de métricas >
interval_cost      = < Intervalo de tiempo para los costes, en segundos >
threads            = < Número de hilos de ejecución, cada zona/instancia se repartirá equitativamente en el número de hilos >
transfer_mode      = < Modo de transferencia, tentacle o local > 
tentacle_ip        = < IP de la máquina destino para los agentes creados >
tentacle_port      = < Puerto de tentacle, por defecto : 41121 >
tentacle_opts      = < Opciones adicionales de tentacle client >
data_dir           = < (Solo se activa si el transfer_mode es local) Ruta de destino para los XML de cada agente, por defecto "/var/spool/pandora/data_in/" >

storage            = < Activar con 1 para habilitar la monitorización de los volúmenes >
elastic_ip_address = < Activar con 1 para habilitar la monitorización de direcciones IP elásticas >
advance_monitoring = < Activar con 1 para habilitar la monitorización generalizada (estos módulos solo se crearán en los agentes de las instancias que esten en ejecución) >
cpu_summary        = < Activar con 1 para habilitar la monitorización del CPU >
iops_summary       = < Activar con 1 para habilitar la monitorización IOPS  >
disk_summary       = < Activar con 1 para habilitar la monitorización de discos >
network_summary    = < Activar con 1 para habilitar la monitorización de redes  >

stats_agent        = < Activar con 1 para habilitar un agente global que monitorizará en base a la tarea creada y los parámetros utilizados >
stats_agent_name   = < Nombre para el agente que se activa con el parámetro "stats_agent". Si no utiliza y "stats_agent" esta habilitado, el agente se llamará "Aws" por defecto > 

total_cost         =  < Activar con 1 para habilitar la monitorización de costos  >
cost_regions       =  < Lista con las regiones en las que se quiere monitorizar los costos  >

aws_regions        = < Lista con las regiones a monitorizar (cuando se marca una región para monitorizar, automaticamente monitoriza todos los buckets que encuentre dentro de esa región) >
aws_instances      = < Lista con el id de las instancias ec2 a monitorizar >

creds_b64          = < Credenciales en base64 del archivo JSON para autenticar >

Ejemplo

agents_group_name  = Aws
interval           = 300
interval_cost      = 1 month
threads            = 4
transfer_mode      = tentacle 
tentacle_ip        = 172.42.42.101
tentacle_port      = 41121
data_dir           = /var/spool/pandora/data_in/

storage            = 1
elastic_ip_address = 1
general_monitoring = 1
cpu_summary        = 1
iops_summary       = 1
disk_summary       = 1
network_summary    = 1

stats_agent        = 1
stats_agent_name   = AwsCloud

total_cost         = 1
cost_regions       = ["us-east-1","us-west-1"]

aws_regions        = ["us-east-1","us-east-2","us-west-1","us-west-2","ca-central-1","eu-central-1","eu-west-1","eu-west-2","eu-west-3","ap-northeast-1","ap-northeast-2","ap-southeast-1","ap-southeast-2","ap-south-1","sa-east-1"]
aws_instances      = ["i-0922a7a2ccc2168c1","i-0a5abff9200feb631"]

creds_b64          =  ewdhBDJDdvb2tleV9pZGdhjDNDHDhbdjdKKDNDbdBiwKInNlY3JldFSHSHHDGJCJChfDHCNCNHCdjdghDMDBGBkxlSLiIKfQ==

Ejecución manual

El formato de la ejecución del plugin es el siguiente:

./pandora_aws_ec2 --conf < ruta al fichero de configuración >

Por ejemplo:

./pandora_aws_ec2 --conf /usr/share/pandora_server/util/plugin/aws_ec2.conf

La ejecución devolverá una salida en formato JSON con información sobre la ejecución, y generará un fichero XML para cada agente monitorizado que enviará al servidor de Pandora FMS por el método de transferencia indicado en la configuración.

Por ejemplo:

{"summary": {"Total agents": 23, "Zones agents": 5, "Instances agents": 17}}

 

 

Discovery

Este plugin puede integrarse con el Discovery de Pandora FMS.

Para ello se debe cargar el paquete ".disco" que puede descargar desde la librería de Pandora FMS:

https://pandorafms.com/library/

image-1687944732823.png

Una vez cargado, se podrán monitorizar entornos de Amazon EC2 creando tareas de Discovery desde la sección Management > Discovery > Cloud.

image-1687944800682.png

Para cada tarea se solicitarán los siguientes datos mínimos:

image-1687440476669.png

Si las credenciales proporcionadas son correctas y el servidor de Pandora FMS es capaz de conectar con el API de AWS, se podrá ver un árbol con las zonas e instancias de AWS EC2, las cuales se podrán marcar para su monitorización.

Si se selecciona una zona se monitorizarán, además de la propia zona, todas las instancias que contenga (tanto en el momento de configurar la tarea como en adelante si se incluyen nuevas instancias).

Si se seleccionan instancias específicas se monitorizarán independientemente de que no se hayan seleccionado sus zonas.

image-1687251817271.png

A continuación se podrá ajustar la monitorización que se desee obtener para cada agente:

image-1687251821926.png

Si las credenciales proporcionadas son correctas y el servidor de Pandora FMS es capaz de conectar con el API de AWS, se podrán monitorizar los costes por región de AWS indicando los siguientes datos:

image-1687251827152.png

 

Las tareas que se completen exitosamente dispondrán de un sumario de ejecución con la siguiente información:

image-1687250488891.png

Las tareas que no se completen exitosamente dispondrán de un sumario de ejecución registrando los errores producidos.

Agentes y módulos generados por el plugin

La ejecución del plugin, creara los siguientes agentes y módulos:

< Nombre utilizado con el parámetro "stats_agent_name" o en su defecto "Aws" >

Módulos

AWS EC2 Total cost
Costes totales de Aws
AWS EC2 Instances count
Total de instancias registradas en Aws
< Nombre de la región >

Módulos

summary.aws.ec2.CPUUtilization Porcentaje de CPU usado promedio de las instancias de esta zona
summary.aws.ec2.DiskReadBytes Sumario de la cantidad de bytes leídos desde el disco de cada instancia de esta zona
summary.aws.ec2.DiskReadOps  Sumario de el número de operaciones de lectura realizadas en el disco de cada instancia de esta zona
summary.aws.ec2.diskWriteBytes  Sumario de la cantidad de bytes escritos en el disco de cada instancia de esta zona
summary.aws.ec2.DiskWriteOps  Sumario del número de operaciones de escritura realizadas en el disco de cada instancia de esta zona
summary.aws.ec2.instances Número de instancias monitorizadas en esta zona
summary.aws.ec2.NetworkPacketsIn  Sumario del número de paquetes de red entrantes de cada instancia de esta zona
summary.aws.ec2.NetworkPacketsOut  Sumario del número de paquetes de red salientes de cada instancia de esta zona
cost Costos totales de la región
summary.aws.ec2.storage.count
Número de volúmenes  en la zona
summary.aws.ec2.storage.size Tamaño en gigabytes de todos los volúmenes
summary.aws.ec2.addresses.count Número de IPs
< ID de la instancia >

Módulos

State Estado de la máquina, en formato string
Instance State (bool) Estado de la máquina, 1 si esta corriendo, 0 de no ser este el caso
CPUUtilization Porcentaje de uso de CPU utilizado
DiskReadBytes Cantidad de bytes leídos desde el disco
DiskReadOps El número de operaciones de lectura realizadas en el disco
DiskWriteBytes Cantidad de bytes escritos en el disco
DiskWriteOps Número de operaciones de escritura realizadas en el disco
NetworkPacketsIn El número de paquetes de red entrantes
NetworkPacketsOut El número de paquetes de red salientes