O agente Go segue esta ordem de precedência para configuração. Se ativada, a configuração no lado do servidor substitui all valores correspondentes na estrutura newrelic.Config , mesmo que os valores do lado do servidor sejam deixados em branco.
Se a configuração no lado do servidor estiver ativada com o agente Go, ela substituirá all valores correspondentes na estrutura newrelic.Config , mesmo que os valores do lado do servidor sejam deixados em branco.
Aqui estão descrições detalhadas de cada método de configuração:
A configuração no lado do servidor está disponível nas versões 2.7.0 ou superior do agente Go. Isso permite que você defina certas configurações na interface. Isso aplica suas alterações automaticamente a todos os agentes, mesmo que eles sejam executados em vários hosts. Quando disponível, este documento inclui os rótulos de interface para configuração do lado do servidor em opções de configuração individuais como Server-side label.
Você ainda deve chamar newrelic.NewApplication() no processo do seu aplicativo seguindo as etapas descritas na configuração em processo. As opções de configuração definidas no lado do servidor substituirão aquelas definidas localmente. Como nem todas as opções de configuração estão disponíveis no servidor, talvez você ainda queira atualizar sua estrutura newrelic.Config .
Cuidado
Se a configuração do lado do servidor estiver ativada, o agente ignorará qualquer valor na estrutura newrelic.Config que could seja definido na interface. Mesmo que o valor da interface esteja vazio, o agente trata isso como um valor vazio e não utiliza o valor newrelic.Config .
Você configura seu agente Go a partir da estrutura local no processo newrelic.Config . Esta estrutura pode ser acessada ao chamar newrelic.NewApplication().
Adicione o seguinte na função main ou em um bloco init :
Observe o uso de os.Getenv para ler sua chave de licença do ambiente em vez de codificá-la como um valor literal de string passado para newrelic.ConfigLicense. Recomendamos que você não coloque chave de licença ou outras informações confidenciais em seu código-fonte, pois isso pode resultar no armazenamento delas em seu repositório SCM e possivelmente na revelação a terceiros não autorizados.
Atualize os valores na estrutura newrelic.Config para configurar seu aplicativo usando newrelic.ConfigOptions. Estas são funções que aceitam um ponteiro para a estrutura newrelic.Config . Adicione newrelic.ConfigOptions adicionais para configurar ainda mais seu aplicativo. Por exemplo, você pode usar uma das opções predefinidas para fazer configurações comuns:
// add more specific configuration of the agent within a custom ConfigOption
config.HighSecurity =true
config.CrossApplicationTracer.Enabled =false
},
)
Alterar definições de configuração
Para fazer alterações na configuração do agente Go, defina os valores na estrutura newrelic.Config de dentro de um newrelic.ConfigOption personalizado. Por exemplo, para desativar temporariamente o monitoramento do New Relic para fins de teste, altere o valor Enabled para false:
Neste e nos exemplos a seguir, config representa sua estrutura de configuração do New Relic, embora você possa ter dado a ela um nome de variável diferente quando instalou o agente Go e iniciou a configuração em seu aplicativo.
Especifica sua chave de licença New Relic, usada para associar a métrica do seu aplicativo a uma conta New Relic. A licença e o nome do aplicativo são definidos como parte do processo de instalação do New Relic.
Para relatar dados para vários aplicativos ao mesmo tempo, especifique uma lista de nomes separados por ponto e vírgula. Não coloque espaço antes do próprio ponto e vírgula. Por exemplo:
Isso pode ser útil para instalar o New Relic em um ambiente de desenvolvimento ou para fins de resolução de problemas. Quando Enabled está definido como false:
O agente New Relic Go não se comunicará com o coletor New Relic.
O agente não gerará goroutines.
A chave de licença não é necessária durante a instalação.
O modo de alta segurança impõe determinadas configurações de segurança e evita que sejam substituídas, para que o agente não envie dados confidenciais. O modo de alta segurança faz o seguinte:
Ativa SSL
Desativa o relatório de strings de mensagem de erro
Desativa reporte de evento personalizado
Esta configuração deve corresponder à configuração da conta correspondente na interface. Por exemplo:
Controla se HTTPS ou HTTP é usado para enviar dados para o New Relic. O agente se comunica com o New Relic via HTTPS por padrão (que usa o protocolo TLS), e o New Relic requer HTTPS para todo o tráfego para o APM e a API REST do New Relic.
Para maior flexibilidade, você pode definir muitas opções de configuração definindo variáveis de ambiente em vez de codificá-las no código-fonte do seu aplicativo. Para usá-los, adicione uma chamada para ConfigFromEnvironment() entre suas outras opções de configuração:
Observe que as variáveis de ambiente serão lidas e suas entradas correspondentes na estrutura newrelic.Config serão atualizadas, no ponto da lista de opções onde newrelic.ConfigFromEnvironment() aparece. Se houver opções de configuração adicionais listadas após ConfigFromEnvironment, elas poderão substituir os valores definidos por ConfigFromEnvironment.
Por exemplo, se as seguintes variáveis de ambiente forem definidas:
Nem todas as opções de configuração possíveis podem ser definidas por meio de variáveis de ambiente. A tabela de variáveis e funções de ambiente no recolhido abaixo lista todas as funções de configuração disponíveis e suas variáveis de ambiente correspondentes. Embora qualquer opção de configuração nomeada possa ser definida atribuindo-se diretamente um valor ao campo correspondente na estrutura Config , recomendamos o uso de funções de configuração e/ou variáveis de ambiente sempre que possível.
Aqui estão algumas dicas de como usar a tabela:
Se uma variável de ambiente estiver listada na tabela, você poderá definir a opção correspondente definindo a variável de ambiente nomeada. Você também deve incluir a função ConfigFromEnvironment() , que fará com que o agente aceite todas as variáveis de ambiente NEW_RELIC_* .
Se uma função de configuração estiver listada, você poderá usar essa função para definir a opção correspondente em vez de usar ConfigFromEnvironment(). Lembre-se de que as funções de configuração listadas no programa, incluindo ConfigFromEnvironment(), são resolvidas na ordem em que aparecem no código. Isso significa que se você criar uma variável de ambiente e chamar a função ConfigFromEnvironment(), ela substituirá a configuração correspondente que você pode ter definido anteriormente usando uma função específica. As opções de configuração subsequentes após ConfigFromEnvironment() substituirão funções de configuração e variáveis de ambiente anteriores.
Consulte a documentação aqui e no site de documentação do Go para obter mais informações sobre como usar cada função.
Chamar uma das funções listadas para habilitar um recurso subordinado também habilita o recurso principal e/ou define outros valores de configuração:
ConfigAppLogForwardingEnabled(true) conjuntos ApplicationLogging.Forwarding.Enabled=true mas também conjuntos ApplicationLogging.Enabled=true.
ConfigAppLogForwardingEnabled(false) conjuntos ApplicationLogging.Forwarding.Enabled=false mas também conjuntos ApplicationLogging.Forwarding.MaxSamplesStored=0.
ConfigAppLogDecoratingEnabled(true) conjuntos ApplicationLogging.LocalDecorating.Enabled=true mas também conjuntos ApplicationLogging.Enabled=true.
ConfigAppLogDecoratingEnabled(false) define ApplicationLogging.LocalDecorating.Enabled=false mas não afeta ApplicationLogging.Enabled.
ConfigAppLogMetricsEnabled(true) conjuntos ApplicationLogging.Metrics.Enabled=true mas também conjuntos ApplicationLogging.Enabled=true.
ConfigAppLogMetricsEnabled(false) define ApplicationLogging.Metrics.Enabled=false mas não afeta ApplicationLogging.Enabled.
Nota da tabela 2:
Ao definir Logger por meio da variável de ambiente NEW_RELIC_LOG , o tipo de agente usado depende do valor de NEW_RELIC_LOG_LEVEL. Se a última variável for definida e tiver o valor debug, Debug, DEBUG, d ou D, um agente de nível de depuração será usado em vez de um agente padrão. NEW_RELIC_LOG pode ter os valores stdout, Stdout, STDOUT, stderr, Stderr ou STDERR.
Dica
As variáveis de ambiente devem ter um valor não vazio para serem lidas por newrelic.ConfigFromEnvironment.
Definir tag de versão
A configuração de NEW_RELIC_METADATA_SERVICE_VERSION criará uma tag tag.service.version nos dados do evento. Neste contexto, a versão do serviço é a versão do seu código que está implantada, em muitos casos uma versão semântica como 1.2.3 mas nem sempre. O envio dessas informações permite facetar sua telemetria pela versão do software implantado para que você possa identificar rapidamente quais versões do seu software estão produzindo os erros.
AI Monitoring
Esta seção inclui a configuração do agente Go para configurar AI Monitoring.
Importante
Se distributed tracing estiver desativado ou o modo de alta segurança estiver ativado, AI Monitoring não coletará dados de IA.
Quando definido como true, permite que o agente capture respostas transmitidas. Se definido como false, o agente não capturará dados de eventos sobre respostas transmitidas, mas o agente ainda poderá capturar métricas e spans. A duração do intervalo terminará quando a chamada da função LLM terminar. Quando definido como true, a duração do intervalo termina quando o resultado final é lido no stream.
Se definido como false, o agente omitirá o conteúdo de entrada e saída (como sequências de texto de prompt e respostas) capturado no evento LLM. Esta é uma configuração de segurança opcional se você não quiser registrar dados confidenciais enviados e recebidos de seus LLMs.
Configuração personalizada do evento
Você pode criar eventos personalizados e disponibilizá-los para consulta e análise.
Os eventos de transação são usados na coleta de eventos correspondentes a solicitações da web e tarefas em segundo plano. Os dados do evento permitem que a interface do New Relic mostre informações adicionais como histograma e percentil.
TransactionEvents.Attributes é uma estrutura com três campos:
Enabled bool
Include []string
Exclude []string
Use TransactionEvents.Attributes.Enabled para ativar ou desativar a coleta de atributos para evento de transação. Use Include e Exclude para incluir ou excluir um atributo específico.
Um exemplo de exclusão de uma fatia de atributo denominada allAgentAttributeNames do evento de transação:
newrelic.ConfigSetErrorGroupCallbackFunction opção de configuração
Quando não for nulo, o agente aplicará a função de retorno de chamada definida pelo usuário a todos os erros percebidos no momento da coleta, aplicando um grupo de erros a eles.
Tipo
Inteiro
Padrão
Os códigos de erro 399 e inferiores e 404 são ignorados.
Isto controla quais códigos de resposta HTTP são ignorados como erros.
Os códigos de resposta maiores ou iguais a 100 e estritamente menores que 400 são ignorados por padrão e nunca precisam ser especificados ao chamar esta função. Os códigos de resposta 0, 5 e 404 estão incluídos na lista por padrão, mas devem ser especificados ao serem adicionados à lista de ignorados.
O formato padrão desta função é:
config.ErrorCollector.IgnoreStatusCodes =[]int{
0,// gRPC OK
5,// gRPC NOT_FOUND
http.StatusNotFound,// 404
}
Você também pode adicionar códigos de resposta como HTTPs, conforme http.StatusNotFound acima.
Importante
Se usada, a configuração no lado do servidor substituirá quaisquer valores definidos na estrutura newrelic.Config . Portanto para ignorar 404 quando a configuração no lado do servidor estiver habilitada, você deve incluir 404 na configuração definida na interface.
Para adicionar o código de resposta HTTP 418 à lista de ignorados padrão, que inclui 0, 5 e 404:
ErrorCollector.Attributes é uma estrutura com três campos:
Enabled bool
Include []string
Exclude []string
Use ErrorCollector.Attributes.Enabled para ativar ou desativar a coleta de atributos em caso de erros. Use Include e Exclude para incluir ou excluir um atributo específico.
Um exemplo de exclusão de uma fatia de atributo chamada allAgentAttributeNames de erros:
Aqui estão as configurações para alterar a configuração tracer de transação. Para obter mais informações sobre rastreamento de transação, consulte rastreamento de transação.
TransactionTracer.Segments.Attributes é uma estrutura com três campos:
Enabled bool
Include []string
Exclude []string
Use TransactionTracer.Segments.Attributes.Enabled para ativar ou desativar a coleta de atributos para segmentos de rastreamento da transação. Use Include e Exclude para incluir ou excluir um atributo específico.
Um exemplo de exclusão de uma fatia de atributo denominada allSegmentAttributeNames do rastreamento:
TransactionTracer.Attributes é uma estrutura com três campos:
Enabled bool
Include []string
Exclude []string
Use TransactionTracer.Attributes.Enabled para ativar ou desativar a coleta de atributos para rastreamento da transação. Use Include e Exclude para incluir ou excluir um atributo específico.
Um exemplo de exclusão de uma fatia de atributo denominada allAgentAttributeNames do rastreamento:
Isso permite a coleta de métricas de instância do armazenamento de dados (como host e porta) para algum driver do banco de dados. Eles são relatados no rastreamento da transação e como parte de dados de consulta lenta.
Use isto para permitir a coleta do nome do banco de dados na consulta lenta de rastreamento e rastreamento da transação. O valor padrão do atributo ativado é true.
Quando true, o agente adicionará cabeçalhos de rastreamento multiaplicativo em solicitações de saída e verificará as solicitações recebidas em busca de cabeçalhos de rastreamento multiaplicativo.
Distributed tracing e o rastreamento multiaplicativo não podem ser usados simultaneamente. A configuração padrão do agente Go desativa distributed tracing e ativa o rastreamento multiaplicativo.
Configuração distributed tracing
Importante
A ativação distributed tracing requer o agente Go versão 2.1.0 ou superior, e desativa o rastreamento multiaplicativo. Também tem efeitos sobre outros recursos. Antes de ativar, leia o guia de transição.
distributed tracing permite ver o caminho que uma solicitação percorre ao percorrer sistemas distribuídos.
Quando distributed tracing está habilitado, você pode coletar span evento.
O rastreamento padrão está ativado por padrão nas versões 3.16.0 e superiores do agente Go. Isso significa que o agente adicionará automaticamente cabeçalhos distributed tracing em solicitações de saída e verificará as solicitações recebidas em busca de cabeçalhos distributed tracing . Para desativar distributed tracing, defina o valor como false.
Defina como true para excluir o cabeçalho New Relic anexado às solicitações de saída e, em vez disso, confiar apenas nos cabeçalhos W3C Trace Context para distributed tracing. Se for false , ambos os tipos de cabeçalho serão usados.
Configuração do evento de extensão
Os eventos Span são relatados para distributed tracing. distributed tracing deve ser ativado para relatar o evento span. Estas configurações controlam a coleção de eventos span:
SpanEvents.Attributes é uma estrutura com três campos:
Enabled bool
Include []string
Exclude []string
Use SpanEvents.Attributes.Enabled para ativar ou desativar a coleta de atributos para o evento span. Use Include e Exclude para incluir ou excluir um atributo específico.
Um exemplo de exclusão de uma fatia de atributo denominada allSpanAttributeNames do rastreamento:
Para ativar o rastreamento infinito, ative distributed tracing (defina config.DistributedTracer.Enabled = true na estrutura newrelic.Config) e adicione as configurações adicionais abaixo. Por exemplo, consulte Agente de idioma: configurar distributed tracing.
As configurações a seguir estão disponíveis para configuração do log do aplicativo no agente. Para obter dicas sobre como usar o logs contextualizados do agente Go, consulte logs contextualizados do Go.
Se true, habilita a coleta de evento de log e métrica de registro caso estes sub-recursos de configuração também estejam habilitados. Se false, nenhum recurso de instrumentação de criação de log será ativado.
Se true, o agente captura os registros de log emitidos pelo seu aplicativo e os encaminha para o New Relic. ApplicationLogging.Enabled também deve ser true para que esta configuração tenha efeito.
Habilite o encaminhamento de logs chamando ConfigAppLogForwardingEnabled().
Número de registros de log a serem enviados por minuto para o New Relic. Esta configuração controla o consumo geral de memória ao usar o recurso de encaminhamento de logs.
Defina um valor mais baixo para reduzir a quantidade de linhas de log enviadas (pode causar amostragem de log). Defina um valor mais alto para enviar mais linhas de log.
Cada log recebe a mesma prioridade que sua transação associada. log que ocorrem fora de uma transação receberão uma prioridade aleatória. Alguns registros podem não ser incluídos porque são limitados por MaxSamplesStored. Por exemplo, se o registro em log MaxSamplesStored estiver definido como 10.000 e a transação 1 tiver 10.000 entradas de log, somente as entradas de log da transação 1 serão registradas. Se a transação 1 tiver menos de 10.000 logs, você receberá todos os logs da transação 1. Se ainda houver espaço, você receberá todo o log da transação 2 e assim por diante.
Se após todos os logs de transação amostrados forem registrados, e eles não atingirem o limite em MaxSamplesStored, então será enviada a mensagem do log de transação amostrada que não estava em nossa amostragem. Se sobrar alguma, as mensagens do log fora da transação serão registradas.
Se true, o agente captura métricas relacionadas às linhas de log enviadas pela sua aplicação. ApplicationLogging.Enabled também deve ser true para que esta configuração tenha efeito.
A métrica de dependência do módulo pode ser configurada de diversas maneiras no agente Go. A métrica de dependência de módulo relata a lista de módulos importados usados por seu aplicativo Go para ajudar a facilitar o gerenciamento de dependência de código. Também inclui as informações de versão dos módulos do seu aplicativo.
Você pode ativar a configuração das opções do agente Go por meio de variáveis de ambiente inserindo ConfigFromEnvironment() em sua chamada para NewApplication. Se você fez isso, você pode ativar ou desativar a coleta de métricas de dependência do módulo definindo a variável de ambiente.
Esta lista de prefixos de caminho de módulo especifica que você deseja excluir alguns módulos das informações de dependência relatadas pelo agente. Qualquer módulo cujo caminho import comece com qualquer uma das sequências de prefixos listadas será excluído. O padrão é uma lista vazia, o que significa reportar todos os módulos encontrados.
Especifique uma lista de sequências de prefixos de caminho a serem excluídas chamando ConfigModuleDependencyMetricsIgnoredPrefixes.
Se você ativou a configuração das opções do agente Go por meio de variáveis de ambiente inserindo ConfigFromEnvironment() em sua chamada para NewApplication, poderá listar os prefixos de caminho definindo a variável de ambiente.
Normalmente, todas as opções definidas como parte da configuração do agente são relatadas e visíveis na interface do New Relic. Se você optar por excluir alguns módulos do relatório por meio da opção ConfigModuleDependencyIgnoredPrefixes , também poderá editá-los dos dados de configuração. Por exemplo, se os módulos foram excluídos por questões de confidencialidade.
Ative ou desative a redação de caminhos excluídos chamando ConfigModuleDependencyMetricsRedactIgnoredPrefixes. Se true, a lista de prefixos de módulos excluídos não será informada. Se false, eles serão relatados.
Se você ativou a configuração das opções do agente Go por meio de variáveis de ambiente inserindo ConfigFromEnvironment() em sua chamada para NewApplication, poderá listar os prefixos de caminho definindo a variável de ambiente.
New Relic Interactive aplicativo Security Testing (IAST) testa seu aplicativo em busca de vulnerabilidades exploráveis, reproduzindo a solicitação HTTP gerada com carga vulnerável. Você pode habilitar New Relic IAST atualizando o código do seu aplicativo Go com configurações que são passadas para a função INIT. Você também pode fazer essas configurações através de um arquivo YAML ou com variáveis de ambiente.
As opções definidas usando funções INIT têm precedência sobre o ambiente ou a configuração YAML. Dito isso, recomendamos habilitar o IAST usando um arquivo YAML porque essas configurações serão passadas para outro agente em seu ambiente.
Instruções de configuração
Importe a integração adicionando a seguinte dependência direta ao seu arquivo go.mod .
ConfigSecurityFromEnvironment direciona a integração do nrsecurityagent para obter todas as suas informações de configuração a partir de variáveis de ambiente.
err:= nrsecurityagent.InitSecurityAgent(
app,
ConfigSecurityFromEnvironment(),
)
ConfigSecurityFromYaml direciona a integração do nrsecurityagent para ler um arquivo externo formatado em YAML para obter seus valores de configuração. O caminho para este arquivo deve ser fornecido definindo a variável de ambiente NEW_RELIC_SECURITY_CONFIG_PATH.
err:= nrsecurityagent.InitSecurityAgent(
app,
ConfigSecurityFromYaml(),
)
O arquivo YAML padrão se parece com isto.
enabled:true
# NR security provides two modes IAST and RASP
# Default is IAST
mode: IAST
# New Relic’s SaaS connection URLs
validator_service_url: wss://csec.nr-data.net
# Following category of security events
# can be disabled from generating.
detection:
rxss:
enabled:true
request:
body_limit:300
Configurar o IAST
O agente de segurança pode ser configurado com as opções a seguir.
Tipo
Boleano
Função de configuração
func(cfg *SecurityConfig){
cfg.Security.Agent.Enabled =true
}
Variável de ambiente
NEW_RELIC_SECURITY_AGENT_ENABLED
Padrão
true
Para desabilitar completamente todas as funcionalidades de segurança, defina este sinalizador como falso. Ao importar e inicializar o agente de segurança em go, presume-se que você pretende usá-lo, portanto, esse valor é padronizado como true. Observe que este é o comportamento oposto do agente instrumentado automaticamente. Esta propriedade é lida apenas uma vez no início do aplicativo.
Tipo
Boleano
Função de configuração
nrsecurityagent.ConfigSecurityEnable(false)
Variável de ambiente
NEW_RELIC_SECURITY_ENABLED
Padrão
false
Determina se os dados de segurança são enviados para o New Relic ou não. Quando estiver desabilitado e agente.enabled for verdadeiro, o módulo de segurança será executado, mas os dados não serão enviados. O padrão é falso.
Tipo
Corda
Função de configuração
nrsecurityagent.ConfigSecurityMode("IAST")
Variável de ambiente
NEW_RELIC_SECURITY_MODE
Padrão
IAST
Modo de fornecimento do New Relic Security: IAST. O padrão é IAST. Devido à natureza invasiva da varredura IAST, NÃO ative esse modo em um ambiente de produção ou em um ambiente onde os dados de produção são processados.
URL de conexão SaaS da New Relic Security. Este é o endpoint para o qual o agente de segurança envia dados; ele deve corresponder ao ambiente que você configurou para o agente Java do APM.
Limite do corpo da solicitação de segurança define um limite de leitura da quantidade de memória que pode ser consumida ao ler um corpo de solicitação em KB. Por padrão, é "300".
Partes sensíveis de segurança do instrumento do seu aplicativo
A integração nrgin, nrgrpc, nrmicro, fasthttp ou nrmongo agora contém código para dar suporte à análise de segurança dos dados que eles manipulam.
Além disso, o agente Go realizará varredura de vulnerabilidades em código instrumentado contendo segmentos de armazenamento de dados, operações SQL, transação e chamadas HTTP encapsuladas e endpoint.