コード例 #1
0
    def setUp(self):

        self.exporter = OTLPLogExporter()

        self.server = server(ThreadPoolExecutor(max_workers=10))

        self.server.add_insecure_port("[::]:4317")

        self.server.start()

        self.log_data_1 = LogData(
            log_record=LogRecord(
                timestamp=int(time.time() * 1e9),
                trace_id=2604504634922341076776623263868986797,
                span_id=5213367945872657620,
                trace_flags=TraceFlags(0x01),
                severity_text="WARNING",
                severity_number=SDKSeverityNumber.WARN,
                name="name",
                body="Zhengzhou, We have a heaviest rains in 1000 years",
                resource=SDKResource({"key": "value"}),
                attributes={
                    "a": 1,
                    "b": "c"
                },
            ),
            instrumentation_info=InstrumentationInfo("first_name",
                                                     "first_version"),
        )
        self.log_data_2 = LogData(
            log_record=LogRecord(
                timestamp=int(time.time() * 1e9),
                trace_id=2604504634922341076776623263868986799,
                span_id=5213367945872657623,
                trace_flags=TraceFlags(0x01),
                severity_text="INFO",
                severity_number=SDKSeverityNumber.INFO2,
                name="info name",
                body="Sydney, Opera House is closed",
                resource=SDKResource({"key": "value"}),
                attributes={"custom_attr": [1, 2, 3]},
            ),
            instrumentation_info=InstrumentationInfo("second_name",
                                                     "second_version"),
        )
        self.log_data_3 = LogData(
            log_record=LogRecord(
                timestamp=int(time.time() * 1e9),
                trace_id=2604504634922341076776623263868986800,
                span_id=5213367945872657628,
                trace_flags=TraceFlags(0x01),
                severity_text="ERROR",
                severity_number=SDKSeverityNumber.WARN,
                name="error name",
                body="Mumbai, Boil water before drinking",
                resource=SDKResource({"service": "myapp"}),
            ),
            instrumentation_info=InstrumentationInfo("third_name",
                                                     "third_version"),
        )
コード例 #2
0
 def test_otlp_exporter_endpoint(self, mock_secure, mock_insecure):
     expected_endpoint = "localhost:4317"
     endpoints = [
         (
             "http://localhost:4317",
             None,
             mock_insecure,
         ),
         (
             "localhost:4317",
             None,
             mock_insecure,
         ),
         (
             "localhost:4317",
             False,
             mock_secure,
         ),
         (
             "https://localhost:4317",
             None,
             mock_secure,
         ),
         (
             "https://localhost:4317",
             True,
             mock_insecure,
         ),
     ]
     # pylint: disable=C0209
     for endpoint, insecure, mock_method in endpoints:
         OTLPLogExporter(endpoint=endpoint, insecure=insecure)
         self.assertEqual(
             1,
             mock_method.call_count,
             "expected {} to be called for {} {}".format(
                 mock_method, endpoint, insecure),
         )
         self.assertEqual(
             expected_endpoint,
             mock_method.call_args[0][0],
             "expected {} got {} {}".format(expected_endpoint,
                                            mock_method.call_args[0][0],
                                            endpoint),
         )
         mock_method.reset_mock()
コード例 #3
0
class TestOTLPLogExporter(TestCase):
    def setUp(self):

        self.exporter = OTLPLogExporter()

        self.server = server(ThreadPoolExecutor(max_workers=10))

        self.server.add_insecure_port("[::]:4317")

        self.server.start()

        self.log_data_1 = LogData(
            log_record=LogRecord(
                timestamp=int(time.time() * 1e9),
                trace_id=2604504634922341076776623263868986797,
                span_id=5213367945872657620,
                trace_flags=TraceFlags(0x01),
                severity_text="WARNING",
                severity_number=SDKSeverityNumber.WARN,
                name="name",
                body="Zhengzhou, We have a heaviest rains in 1000 years",
                resource=SDKResource({"key": "value"}),
                attributes={
                    "a": 1,
                    "b": "c"
                },
            ),
            instrumentation_info=InstrumentationInfo("first_name",
                                                     "first_version"),
        )
        self.log_data_2 = LogData(
            log_record=LogRecord(
                timestamp=int(time.time() * 1e9),
                trace_id=2604504634922341076776623263868986799,
                span_id=5213367945872657623,
                trace_flags=TraceFlags(0x01),
                severity_text="INFO",
                severity_number=SDKSeverityNumber.INFO2,
                name="info name",
                body="Sydney, Opera House is closed",
                resource=SDKResource({"key": "value"}),
                attributes={"custom_attr": [1, 2, 3]},
            ),
            instrumentation_info=InstrumentationInfo("second_name",
                                                     "second_version"),
        )
        self.log_data_3 = LogData(
            log_record=LogRecord(
                timestamp=int(time.time() * 1e9),
                trace_id=2604504634922341076776623263868986800,
                span_id=5213367945872657628,
                trace_flags=TraceFlags(0x01),
                severity_text="ERROR",
                severity_number=SDKSeverityNumber.WARN,
                name="error name",
                body="Mumbai, Boil water before drinking",
                resource=SDKResource({"service": "myapp"}),
            ),
            instrumentation_info=InstrumentationInfo("third_name",
                                                     "third_version"),
        )

    def tearDown(self):
        self.server.stop(None)

    @patch(
        "opentelemetry.exporter.otlp.proto.grpc.exporter.ssl_channel_credentials"
    )
    @patch("opentelemetry.exporter.otlp.proto.grpc.exporter.secure_channel")
    @patch(
        "opentelemetry.exporter.otlp.proto.grpc._log_exporter.OTLPLogExporter._stub"
    )
    # pylint: disable=unused-argument
    def test_no_credentials_error(self, mock_ssl_channel, mock_secure,
                                  mock_stub):
        OTLPLogExporter(insecure=False)
        self.assertTrue(mock_ssl_channel.called)

    # pylint: disable=no-self-use
    @patch("opentelemetry.exporter.otlp.proto.grpc.exporter.insecure_channel")
    @patch("opentelemetry.exporter.otlp.proto.grpc.exporter.secure_channel")
    def test_otlp_exporter_endpoint(self, mock_secure, mock_insecure):
        expected_endpoint = "localhost:4317"
        endpoints = [
            (
                "http://*****:*****@patch("opentelemetry.exporter.otlp.proto.grpc.exporter.expo")
    @patch("opentelemetry.exporter.otlp.proto.grpc.exporter.sleep")
    def test_unavailable(self, mock_sleep, mock_expo):

        mock_expo.configure_mock(**{"return_value": [1]})

        add_LogsServiceServicer_to_server(LogsServiceServicerUNAVAILABLE(),
                                          self.server)
        self.assertEqual(self.exporter.export([self.log_data_1]),
                         LogExportResult.FAILURE)
        mock_sleep.assert_called_with(1)

    @patch("opentelemetry.exporter.otlp.proto.grpc.exporter.expo")
    @patch("opentelemetry.exporter.otlp.proto.grpc.exporter.sleep")
    def test_unavailable_delay(self, mock_sleep, mock_expo):

        mock_expo.configure_mock(**{"return_value": [1]})

        add_LogsServiceServicer_to_server(
            LogsServiceServicerUNAVAILABLEDelay(), self.server)
        self.assertEqual(self.exporter.export([self.log_data_1]),
                         LogExportResult.FAILURE)
        mock_sleep.assert_called_with(4)

    def test_success(self):
        add_LogsServiceServicer_to_server(LogsServiceServicerSUCCESS(),
                                          self.server)
        self.assertEqual(self.exporter.export([self.log_data_1]),
                         LogExportResult.SUCCESS)

    def test_failure(self):
        add_LogsServiceServicer_to_server(LogsServiceServicerALREADY_EXISTS(),
                                          self.server)
        self.assertEqual(self.exporter.export([self.log_data_1]),
                         LogExportResult.FAILURE)

    def test_translate_log_data(self):

        expected = ExportLogsServiceRequest(resource_logs=[
            ResourceLogs(
                resource=OTLPResource(attributes=[
                    KeyValue(key="key", value=AnyValue(string_value="value")),
                ]),
                instrumentation_library_logs=[
                    InstrumentationLibraryLogs(
                        instrumentation_library=InstrumentationLibrary(
                            name="first_name", version="first_version"),
                        logs=[
                            PB2LogRecord(
                                # pylint: disable=no-member
                                name="name",
                                time_unix_nano=self.log_data_1.log_record.
                                timestamp,
                                severity_number=self.log_data_1.log_record.
                                severity_number.value,
                                severity_text="WARNING",
                                span_id=int.to_bytes(5213367945872657620, 8,
                                                     "big"),
                                trace_id=int.to_bytes(
                                    2604504634922341076776623263868986797,
                                    16,
                                    "big",
                                ),
                                body=_translate_value(
                                    "Zhengzhou, We have a heaviest rains in 1000 years"
                                ),
                                attributes=[
                                    KeyValue(
                                        key="a",
                                        value=AnyValue(int_value=1),
                                    ),
                                    KeyValue(
                                        key="b",
                                        value=AnyValue(string_value="c"),
                                    ),
                                ],
                                flags=int(
                                    self.log_data_1.log_record.trace_flags),
                            )
                        ],
                    )
                ],
            ),
        ])

        # pylint: disable=protected-access
        self.assertEqual(expected,
                         self.exporter._translate_data([self.log_data_1]))

    def test_translate_multiple_logs(self):
        expected = ExportLogsServiceRequest(resource_logs=[
            ResourceLogs(
                resource=OTLPResource(attributes=[
                    KeyValue(key="key", value=AnyValue(string_value="value")),
                ]),
                instrumentation_library_logs=[
                    InstrumentationLibraryLogs(
                        instrumentation_library=InstrumentationLibrary(
                            name="first_name", version="first_version"),
                        logs=[
                            PB2LogRecord(
                                # pylint: disable=no-member
                                name="name",
                                time_unix_nano=self.log_data_1.log_record.
                                timestamp,
                                severity_number=self.log_data_1.log_record.
                                severity_number.value,
                                severity_text="WARNING",
                                span_id=int.to_bytes(5213367945872657620, 8,
                                                     "big"),
                                trace_id=int.to_bytes(
                                    2604504634922341076776623263868986797,
                                    16,
                                    "big",
                                ),
                                body=_translate_value(
                                    "Zhengzhou, We have a heaviest rains in 1000 years"
                                ),
                                attributes=[
                                    KeyValue(
                                        key="a",
                                        value=AnyValue(int_value=1),
                                    ),
                                    KeyValue(
                                        key="b",
                                        value=AnyValue(string_value="c"),
                                    ),
                                ],
                                flags=int(
                                    self.log_data_1.log_record.trace_flags),
                            )
                        ],
                    ),
                    InstrumentationLibraryLogs(
                        instrumentation_library=InstrumentationLibrary(
                            name="second_name", version="second_version"),
                        logs=[
                            PB2LogRecord(
                                # pylint: disable=no-member
                                name="info name",
                                time_unix_nano=self.log_data_2.log_record.
                                timestamp,
                                severity_number=self.log_data_2.log_record.
                                severity_number.value,
                                severity_text="INFO",
                                span_id=int.to_bytes(5213367945872657623, 8,
                                                     "big"),
                                trace_id=int.to_bytes(
                                    2604504634922341076776623263868986799,
                                    16,
                                    "big",
                                ),
                                body=_translate_value(
                                    "Sydney, Opera House is closed"),
                                attributes=[
                                    KeyValue(
                                        key="custom_attr",
                                        value=_translate_value([1, 2, 3]),
                                    ),
                                ],
                                flags=int(
                                    self.log_data_2.log_record.trace_flags),
                            )
                        ],
                    ),
                ],
            ),
            ResourceLogs(
                resource=OTLPResource(attributes=[
                    KeyValue(
                        key="service",
                        value=AnyValue(string_value="myapp"),
                    ),
                ]),
                instrumentation_library_logs=[
                    InstrumentationLibraryLogs(
                        instrumentation_library=InstrumentationLibrary(
                            name="third_name", version="third_version"),
                        logs=[
                            PB2LogRecord(
                                # pylint: disable=no-member
                                name="error name",
                                time_unix_nano=self.log_data_3.log_record.
                                timestamp,
                                severity_number=self.log_data_3.log_record.
                                severity_number.value,
                                severity_text="ERROR",
                                span_id=int.to_bytes(5213367945872657628, 8,
                                                     "big"),
                                trace_id=int.to_bytes(
                                    2604504634922341076776623263868986800,
                                    16,
                                    "big",
                                ),
                                body=_translate_value(
                                    "Mumbai, Boil water before drinking"),
                                attributes=[],
                                flags=int(
                                    self.log_data_3.log_record.trace_flags),
                            )
                        ],
                    )
                ],
            ),
        ])

        # pylint: disable=protected-access
        self.assertEqual(
            expected,
            self.exporter._translate_data(
                [self.log_data_1, self.log_data_2, self.log_data_3]),
        )
コード例 #4
0
 def test_no_credentials_error(self, mock_ssl_channel, mock_secure,
                               mock_stub):
     OTLPLogExporter(insecure=False)
     self.assertTrue(mock_ssl_channel.called)
コード例 #5
0
    ConsoleSpanExporter,
)

trace.set_tracer_provider(TracerProvider())
trace.get_tracer_provider().add_span_processor(
    BatchSpanProcessor(ConsoleSpanExporter()))

log_emitter_provider = LogEmitterProvider(resource=Resource.create({
    "service.name":
    "shoppingcart",
    "service.instance.id":
    "instance-12",
}), )
set_log_emitter_provider(log_emitter_provider)

exporter = OTLPLogExporter(insecure=True)
log_emitter_provider.add_log_processor(BatchLogProcessor(exporter))
log_emitter = log_emitter_provider.get_log_emitter(__name__, "0.1")
handler = OTLPHandler(level=logging.NOTSET, log_emitter=log_emitter)

# Attach OTLP handler to root logger
logging.getLogger().addHandler(handler)

# Log directly
logging.info("Jackdaws love my big sphinx of quartz.")

# Create different namespaced loggers
logger1 = logging.getLogger("myapp.area1")
logger2 = logging.getLogger("myapp.area2")

logger1.debug("Quick zephyrs blow, vexing daft Jim.")