Cargar logs de OpenTelemetry

Si desea ingerir logs de sus aplicaciones o infraestructura instrumentada mediante OpenTelemetry en Oracle Log Analytics, utilice la API UploadOtlpLogs para cargarlos.

La API soporta actualmente logs OpenTelemetry (OTLP) en formato JSON. Los logs de OTEL cargados mediante esta API en el formato especificado se procesan mediante el origen de log OpenTelemetry logs definido por Oracle, por defecto. Para obtener más información sobre los logs de OTLP en formato JSON, consulte Ejemplos.

Requisitos

Asegúrese de haber completado los siguientes requisitos previos esenciales antes de cargar los logs de OTEL:

Temas:

Permitir a los usuarios cargar logs de OpenTelemetry

Agregue cualquiera de las siguientes sentencias de política de IAM según sus requisitos:

  • La siguiente sentencia de política de IAM sirve para proporcionar permiso al grupo de usuarios especificado para cargar los logs de OTEL:

    allow group <group_name> to {LOG_ANALYTICS_LOG_GROUP_UPLOAD_LOGS} in compartment <log_group_compartment>
  • La siguiente sentencia de política de IAM sirve para proporcionar permiso en el nivel del tipo de recurso individual loganalytics-log-group para realizar la carga:

    allow group <group_name> to use loganalytics-log-group in compartment <log_group_compartment>
  • La siguiente sentencia de política de IAM sirve para proporcionar permiso en el nivel de recursos agregados de Oracle Log Analytics para realizar la carga:

    allow group <group_name> to use loganalytics-resources-family in tenancy/compartment

group_name en todas las sentencias de política anteriores hace referencia al grupo de usuarios al que se deben otorgar los permisos necesarios.

API para cargar logs de OpenTelemetry

Para obtener información sobre el uso de la API de REST y las solicitudes de firma, consulte API de REST y Credenciales de seguridad.

Para obtener documentación sobre la API, consulte API de Log Analytics: UploadOtlpLogs.

A continuación, se muestra un ejemplo de comando de la CLI para cargar logs de OTEL:

oci log-analytics upload upload-otlp-logs --file <Log_File_Path> --opc-meta-loggrpid <Log_Group_OCID> --namespace-name <Service_Namespace>

En el comando anterior:

  • Log_File_Path: ruta de acceso del archivo log.
  • Service_Namespace: espacio de nombres del arrendamiento en el que se deben cargar los logs. Para conocer los pasos para obtener el valor, consulte Visualización de detalles de servicio de Log Analytics.
  • Log_Group_OCID: OCID del grupo de logs que proporciona control de acceso para los logs.

Manejo de atributos de OTEL en Log Analytics

Los atributos se pueden definir en tres niveles: recurso, ámbito y registro de log individual. Los atributos de juego se almacenan para cada registro de log en el campo Atributos de Log Analytics. Cada atributo también se puede extraer en un campo de Log Analytics diferente mediante el atributo personalizado oci_la_attribute_mapping.

Temas:

Escenario 1: Formato de log de OTLP por defecto y su extracción

Considere el log del ejemplo siguiente en formato OTLP:

{
    "resourceLogs": [
        {
            "resource": {
                "attributes": [
                    {
                        "key": "deployment.environment",
                        "value": {
                            "stringValue": "development"
                        }
                    },
                    {
                        "key": "service.name",
                        "value": {
                            "stringValue": "SampleLogApp"
                        }
                    },
                    {
                        "key": "service.version",
                        "value": {
                            "stringValue": "0.0.2"
                        }
                    }
                ]
            },
            "scopeLogs": [
                {
                    "scope": {
                        "name": "sample-scope-info",
                        "version": "1.0.0"
                    },
                    "logRecords": [
                        {
                            "timeUnixNano": "1758112881118549000",
                            "severityNumber": 10,
                            "severityText": "INFO",
                            "body": {
                                "stringValue": "Processed request successfully"
                            },
                            "attributes": [
                                {
                                    "key": "event_type",
                                    "value": {
                                        "stringValue": "event-info"
                                    }
                                },
                                {
                                    "key": "os",
                                    "value": {
                                        "stringValue": "linux"
                                    }
                                },
                                {
                                    "key": "custom_attribute",
                                    "value": {
                                        "stringValue": "some_value"
                                    }
                                },
                                {
                                    "key": "dropped",
                                    "value": {
                                        "stringValue": "value"
                                    }
                                },
                                {
                                    "key": "otel.dropped_attributes_count",
                                    "value": {
                                        "intValue": "5"
                                    }
                                },
                                {
                                    "key": "id",
                                    "value": {
                                        "stringValue": "123"
                                    }
                                }
                            ],
                            "traceId": "0102030405060708090a0b0c0d0e0f10",
                            "spanId": "0102030405060708"
                        }
                    ]
                }
            ]
        }
    ]
}

Los atributos del ejemplo anterior se extraen en el campo Atributos de Oracle Log Analytics de la siguiente manera:

{
  "service.version":"0.0.2",
  "os":"linux",
  "dropped":"value",
  "id":"123",
  "custom_attribute":"some_value",
  "otel.dropped_attributes_count":"5"
}

Escenario 2: Asignación personalizada de atributos mediante el atributo especial oci_la_attribute_mapping

Por ejemplo, para asignar los siguientes atributos a los campos de Oracle Log Analytics:

  • service.name en el campo Aplicación
  • deployment.environment en el campo Entorno
  • event_type en el campo Tipo de evento.

oci_la_attribute_mapping se debe definir como sigue:

[{"attributeName":"service.name","laFieldName":"Application"},{"attributeName":"deployment.environment","laFieldName":"Environment"},{"attributeName":"event_type","laFieldName":"Event Type"}]

A continuación, se muestra un ejemplo de la asignación personalizada anterior incorporada en el log de OTEL:

{
    "resourceLogs": [
        {
            "resource": {
                "attributes": [
                    {
                        "key": "deployment.environment",
                        "value": {
                            "stringValue": "development"
                        }
                    },
                    {
                        "key": "service.name",
                        "value": {
                            "stringValue": "SampleLogApp"
                        }
                    },
                    {
                        "key": "service.version",
                        "value": {
                            "stringValue": "0.0.2"
                        }
                    },
                    {
                        "key": "oci_la_attribute_mapping",
                        "value": {
                            "stringValue": "[{\"attributeName\":\"service.name\",\"laFieldName\":\"Application\"},{\"attributeName\":\"deployment.environment\",\"laFieldName\":\"Environment\"},{\"attributeName\":\"event_type\",\"laFieldName\":\"Event Type\"}]"
                        }
                    }
                ]
            },
            "scopeLogs": [
                {
                    "scope": {
                        "name": "sample-scope-info",
                        "version": "1.0.0"
                    },
                    "logRecords": [
                        {
                            "timeUnixNano": "1758112881118549000",
                            "severityNumber": 10,
                            "severityText": "INFO",
                            "body": {
                                "stringValue": "Processed request successfully"
                            },
                            "attributes": [
                                {
                                    "key": "event_type",
                                    "value": {
                                        "stringValue": "event-info"
                                    }
                                },
                                {
                                    "key": "os",
                                    "value": {
                                        "stringValue": "linux"
                                    }
                                },
                                {
                                    "key": "custom_attribute",
                                    "value": {
                                        "stringValue": "value"
                                    }
                                },
                                {
                                    "key": "dropped",
                                    "value": {
                                        "stringValue": "value"
                                    }
                                },
                                {
                                    "key": "otel.dropped_attributes_count",
                                    "value": {
                                        "intValue": "5"
                                    }
                                },
                                {
                                    "key": "id",
                                    "value": {
                                        "stringValue": "123"
                                    }
                                }
                            ],
                            "traceId": "0102030405060708090a0b0c0d0e0f10",
                            "spanId": "0102030405060708"
                        }
                    ]
                }
            ]
        }
    ]
}

Escenario 3: Manejo de la asignación de atributos complejos

Atributos de matriz (varios valores):

Para un atributo con un valor de matriz (lista), asegúrese de que el campo de Oracle Log Analytics asignado soporta tipos de datos de varios valores, por ejemplo:

{"key": "teams", "value": {"arrayValue": {"values": [{"stringValue": "Alpha"}, {"stringValue": "Beta"}]}}}

Asignar atributos (clave-valor anidado):

Para un atributo de asignación (objeto), especifique la clave secundaria que desea asignar al campo de Oracle Log Analytics.

Atributo de lista de ejemplo:

{
    "key": "system",
    "value": {
        "kvlistValue": {
            "values": [
                {
                    "key": "version",
                    "value": {
                        "stringValue": "1.0"
                    }
                },
                {
                    "key": "build",
                    "value": {
                        "stringValue": "2.0"
                    }
                },
                {
                    "key": "env",
                    "value": {
                        "stringValue": "test"
                    }
                }
            ]
        }
    }
}

Ejemplo de asignación en oci_la_attribute_mapping para el atributo de lista anterior:

[{"attributeName":"system","childAttributeName":"env","laFieldName":"Environment"}]