Te ofrecemos esta traducción automática para facilitar la lectura.
En caso de que haya discrepancias entre la versión en inglés y la versión traducida, se entiende que prevalece la versión en inglés. Visita esta página para obtener más información.
Con New Relic for Go, puede monitor los segmentos específicos de una transacción en una aplicación Go para obtener más detalles sobre funciones o bloques de código específicos.
Medir el tiempo para funciones y bloques de código.
Segments son las partes específicas de una transacción en una aplicación. Mediante segmentos instrumentados, puede medir el tiempo que toman funciones y bloques de código, como llamadas externas, llamadas de almacenamiento de datos, agregar mensajes a colas y tareas en segundo plano.
Example: Tiene una transacción asociada con un proceso de pago, que procesa tanto la información de envío como la información de la tarjeta de crédito. Podrías instrumentar tu aplicación para dividir esa transacción en dos partes: un segmento para envío y un segmento para pago.
Segmentos de bloque de código
Una vez que instrumente una transacción, estará listo para instrumentar uno o más segmentos de esa transacción.
Para instrumentar un bloque de código arbitrario como segmento, utilice el siguiente patrón e incluya txn como nombre de variable establecido para la transacción:
segment := newrelic.Segment{}
segment.Name ="mySegmentName"
segment.StartTime = txn.StartSegmentNow()
// ... code you want to time here ...
segment.End()
StartSegment es una ayuda conveniente. Crea un segmento y lo inicia:
segment := txn.StartSegment("mySegmentName")
// ... code you want to time here ...
segment.End()
Segmentos de función
Instrumentar una función como un segmento es esencialmente lo mismo que instrumentar un bloque arbitrario de código como un segmento. La principal diferencia es que, debido a que una función tiene un final discreto, puedes usar la declaración aplazar de Go.
Para instrumentar una función como segmento, agregue el siguiente código al inicio de la función e incluya txn como el nombre de variable establecido para la transacción:
defer txn.StartSegment("mySegmentName").End()
Segmentos de nido
Los segmentos se pueden anidar. El segmento que finaliza debe ser el segmento iniciado más recientemente.
A continuación se muestra un ejemplo de un segmento que comienza y termina dentro de otro segmento:
s1 := txn.StartSegment("outerSegment")
s2 := txn.StartSegment("innerSegment")
// s2 must end before s1
s2.End()
s1.End()
Un segmento de valor cero puede finalizarse de forma segura. Por lo tanto, el siguiente código es seguro incluso si el condicional falla:
var s newrelic.Segment
if recordSegment {
s.StartTime = txn.StartSegmentNow()
}
// ... code you wish to time here ...
s.End()
Segmentos de almacenamiento de datos
Puede Instrumentar a la aplicación Go de almacenamiento de datos de llamadas. Los segmentos de almacenamiento de datos aparecen en la tabla APM Transactions breakdown y en la pestaña Databases de la páginaTransactionsen New Relic.
Si está utilizando un controlador de base de datos MySQL, PostgreSQL o SQLite, la forma más sencilla de agregar segmentos de almacenamiento de datos es utilizar nuestros paquetes de integración prediseñados. De lo contrario, puede crear manualmente segmentos de almacenamiento de datos para cada llamada a la base de datos.
Existe un paquete de integración para cada controlador de la base de datos que admitimos:
En segundo lugar, utilice los métodos ExecContext, QueryContext y QueryRowContext de sql.DB, sql.Conn, sql.Tx y sql.Stmt y proporcione un contexto que contenga transacciones. Las llamadas a Exec, Query y QueryRow no se instrumentan.
Los paquetes de integración de almacenamiento de datos para MySQL, PostgreSQL y SQLite se agregaron en Go agente v2.8.0 y requieren Go v1.10 o superior.
Al igual que los segmentos básicos, los segmentos de almacenamiento de datos comienzan cuando se completa el campo StartTime y terminan cuando se llama al método End . Para instrumentar un segmento de almacenamiento de datos, coloque lo siguiente al comienzo de la función que desea monitor:
s := newrelic.DatastoreSegment{
Product: newrelic.DatastoreMySQL,
Collection:"users",
Operation:"INSERT",
ParameterizedQuery:"INSERT INTO users (name, age) VALUES ($1, $2)",
Al instrumentar una llamada de almacenamiento de datos que abarca una llamada de función completa, puede usar la declaración defer para simplificar la instrumentación:
s := newrelic.DatastoreSegment{
StartTime: txn.StartSegmentNow(),
Product: newrelic.DatastoreMySQL,
Collection:"users",
Operation:"INSERT",
ParameterizedQuery:"INSERT INTO users (name, age) VALUES ($1, $2)",
QueryParameters:map[string]interface{}{
"name":"Dracula",
"age":439,
},
Host:"mysql-server-1",
PortPathOrID:"3306",
DatabaseName:"my_database",
}
defer s.End()
Segmentos externos
Puede utilizar la aplicación Instrument Go para realizar llamadas a servicios externos, como servicios web, recursos en la nube y cualquier otra llamada de red. Los segmentos externos aparecen en la tabla Transactions breakdown y en la páginaExternal servicesde New Relic.
Hay dos formas de instrumentar segmentos externos:
Recommendation: Utilice el ayudante StartExternalSegment, ya que New Relic lo utiliza para trazar la actividad entre su aplicación mediante Distributed tracing.
NewRoundTripper devuelve un http.RoundTripper, que le permite realizar llamadas externas sin llamar StartExternalSegment modificando el campo Transport de su http.Client. El RoundTripper devuelto buscará un Transaction en el contexto de la solicitud usando FromContext.
A continuación se muestra un ejemplo de NewRoundTripper instrumentación:
Puede utilizar llamadas de la aplicación Go que agregan mensajes a sistemas de cola como RabbitMQ y Kafka. Los segmentos de productores de mensajes aparecen en el APM Transactions breakdown en New Relic.
Sólo hay una forma de instrumentart mensajes a los segmentos de productores:
Al igual que los segmentos básicos, los segmentos productores de mensajes comienzan cuando se completa el campo StartTime y terminan cuando se llama al método End . Para instrumentar un segmento de productor de mensajes, coloque lo siguiente al comienzo de la función que desea monitor:
Al instrumentar una llamada de productor de mensajes que abarca una llamada de función completa, puede usar la instrucción aplazar para simplificar la instrumentación:
s := newrelic.MessageProducerSegment{
StartTime: txn.StartSegmentNow(),
Library:"RabbitMQ",
DestinationType: newrelic.MessageExchange,
DestinationName:"myExchange",
DestinationTemporary:false,
}
defer s.End()
// ... add message to queue
Importante
Los segmentos de productores de mensajes se agregaron en la versión 2.14.0 del agente Go.