Módulo System O módulo system fornece funções para obter informações sobre o sistema operacional, rede e ambiente de execução do agente. Este módulo é útil para scripts que precisam adaptar seu comportamento com base no ambiente, coletar informações de inventário ou realizar diagnósticos do sistema. Características principais: Informações detalhadas do sistema operacional Nome do host e informações de rede Dados do agente (UUID, versão) Informações de kernel e distribuição Interface unificada para diferentes sistemas operacionais Funções Disponíveis 1. system.env() Retorna informações completas sobre o ambiente de execução do agente. Parâmetros: Nenhum Retorno: tabela: Estrutura com os seguintes campos: os_type (string): Tipo do sistema operacional (ex: "linux", "windows", "macos") os_name (string): Nome do sistema operacional (ex: "Ubuntu", "Windows 10", "macOS") os_version (string): Versão do sistema operacional kernel_version (string): Versão do kernel agent (tabela ou nil): Informações do agente Monagent (se disponível): uuid (string): UUID único do agente version (string): Versão do Monagent Exemplo de Uso: -- Obter todas as informações do ambiente local env_info = system.env() print("Tipo do SO:", env_info.os_type) print("Nome do SO:", env_info.os_name) print("Versão do SO:", env_info.os_version) print("Versão do Kernel:", env_info.kernel_version) if env_info.agent then print("UUID do Agente:", env_info.agent.uuid) print("Versão do Monagent:", env_info.agent.version) else print("Informações do agente não disponíveis") end -- Adaptar comportamento baseado no SO local env = system.env() if env.os_type == "linux" then -- Comandos específicos para Linux local saida, erro = process.exec("ps", "aux") elseif env.os_type == "windows" then -- Comandos específicos para Windows local saida, erro = process.exec("tasklist") elseif env.os_type == "macos" then -- Comandos específicos para macOS local saida, erro = process.exec("ps", "-ef") end 2. system.hostname() Retorna o nome do host do sistema. Parâmetros: Nenhum Retorno: string: Nome do host do sistema, ou "unknown" se não puder ser determinado Exemplo de Uso: -- Obter nome do host local nome_host = system.hostname() print("Nome do host:", nome_host) -- Usar em identificadores únicos local identificador = nome_host .. "_" .. os.date("%Y%m%d_%H%M%S") print("Identificador único:", identificador) -- Verificar se é um host específico if nome_host == "servidor-producao" then log.info("Executando em servidor de produção") config.modo = "producao" elseif string.find(nome_host:lower(), "test") then log.info("Executando em ambiente de teste") config.modo = "teste" else log.info("Executando em host desconhecido:", nome_host) config.modo = "desenvolvimento" end -- Criar tags para métricas local tags_metricas = { host = nome_host, ambiente = config.modo, timestamp = os.time() } 3. system.networks() Retorna uma lista de endereços IP de rede não-loopback do sistema. Parâmetros: Nenhum Retorno: array de strings: Lista de endereços IP das interfaces de rede (excluindo loopback) Comportamento: Exclui endereços de loopback (127.0.0.1, ::1, etc.) Inclui endereços IPv4 e IPv6 Atualiza a lista de interfaces antes de retornar Retorna apenas endereços IP, não nomes de interface Exemplo de Uso: -- Obter todos os endereços IP do sistema local enderecos_ip = system.networks() print("Endereços IP disponíveis:") for i, ip in ipairs(enderecos_ip) do print(" " .. i .. ". " .. ip) end -- Identificar endereços IPv4 vs IPv6 local function classificar_enderecos() local enderecos = system.networks() local classificacao = { ipv4 = {}, ipv6 = {}, outros = {} } for _, ip in ipairs(enderecos) do if string.find(ip, ":") then -- IPv6 table.insert(classificacao.ipv6, ip) elseif string.match(ip, "^%d+%.%d+%.%d+%.%d+$") then -- IPv4 table.insert(classificacao.ipv4, ip) else -- Outro formato table.insert(classificacao.outros, ip) end end return classificacao end local ips = classificar_enderecos() print("IPv4:", #ips.ipv4, "endereços") print("IPv6:", #ips.ipv6, "endereços") -- Encontrar endereço preferido para comunicação local function encontrar_endereco_preferido() local enderecos = system.networks() -- Prioridade: IPv4 privado > IPv4 público > IPv6 for _, ip in ipairs(enderecos) do -- Verificar se é IPv4 privado if string.match(ip, "^10%.") or string.match(ip, "^172%.%d?%d?%d?%.") or string.match(ip, "^192%.168%.") then