GitHub user pavelekshin added a comment to the discussion: Airflow 2.10.X and 
standalone OpenTelemetry Collector integration


I get packet capture, and it's seems like airflow send binary protobuf body 
with application/json header, and reicive 400 bad request on this body.

it's should be application/x-protobuf, but content type is hardcoded

https://github.com/apache/airflow/blob/2.10.5/airflow/metrics/otel_logger.py#L410

```logs
POST /v1/metrics HTTP/1.1
Host: otel-collector:4318
User-Agent: OTel-OTLP-Exporter-Python/1.40.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Type: application/json
Content-Length: 3275


..
..
"
.telemetry.sdk.language..
.python
%
.telemetry.sdk.name..

opentelemetry
!
.telemetry.sdk.version..
.1.40.0
.
        host.name..
.96fb917f9fba
.
.service.name.  
.Airflow...
.
.airflow.metrics.otel_logger.6
.airflow.job_start:!
..      &.NK....z..Ag...1.............X
3airflow.dag_processing.file_path_queue_update_count:!
..,/.WK....z..Ag...1..............

 airflow.dag_processing.processes:.     
~.<..WK....z..Ag...1........:N
        file_path.A
?/usr/local/ECO/airflow/dags/maintenance/temp_cleanup_logs.py:.
.action..
.start
y..ZRXK....z..Ag...1........:I
        file_path.<
:/usr/local/ECO/airflow/dags/maintenance/cleanup_logs.py:.
.action..
.start
t..=.YK....z..Ag...1........:D
        file_path.7
5/usr/local/ECO/airflow/dags/maintenance/migrate.py:.
.action..
.start
.....gZK....z..Ag...1........:Q
        file_path.D
B/usr/local/ECO/airflow/dags/maintenance/cleanup_target_group.py:.
.action..
.start
..vw.]K....z..Ag...1........:N
        file_path.A
?/usr/local/ECO/airflow/dags/maintenance/temp_cleanup_logs.py:.
.action..
.finish
{..%.]K....z..Ag...1........:K
        file_path.>
</usr/local/ECO/airflow/dags/maintenance/load_variables.py:.
.action..
.start
z....^K....z..Ag...1........:I
        file_path.<
:/usr/local/ECO/airflow/dags/maintenance/cleanup_logs.py:.
.action..
.finish
u..]R^K....z..Ag...1........:D
        file_path.7
5/usr/local/ECO/airflow/dags/maintenance/migrate.py:.
.action..
.finish
|.._.bK....z..Ag...1........:K
        file_path.>
</usr/local/ECO/airflow/dags/maintenance/load_variables.py:.
.action..
.finish
.....%bK....z..Ag...1........:Q
        file_path.D
B/usr/local/ECO/airflow/dags/maintenance/cleanup_target_group.py:.
.action..
.finish...6
.airflow.serde.load_serializers*.
..z..Ag...!.....oR?.C
+airflow.dag_processing.file_path_queue_size*.
..z..Ag...!.........W
?airflow.dag_processing.last_num_of_db_queries.temp_cleanup_logs*.
..z..Ag...1.........R
:airflow.dag_processing.last_num_of_db_queries.cleanup_logs*.
..z..Ag...1.........M
5airflow.dag_processing.last_num_of_db_queries.migrate*.
..z..Ag...1
........W
?airflow.dag_processing.last_num_of_db_queries.cleanup_target_gr*.
..z..Ag...1.........T
<airflow.dag_processing.last_num_of_db_queries.load_variables*.
..z..Ag...1
........N
6airflow.dag_processing.last_duration.temp_cleanup_logs*.
..z..Ag...!.J..h..?.^
$airflow.dag_processing.last_duration*6
4.z..Ag...!.J..h..?: 
        file_name..
.temp_cleanup_logs.I
1airflow.dag_processing.last_duration.cleanup_logs*.
..z..Ag...!J    ..z..?.?
'airflow.dag_processing.total_parse_time*.
..z..Ag...!..`.b..?.+
.airflow.dagbag_size*.
..z..Ag...1.........<
$airflow.dag_processing.import_errors*.
..z..Ag...!.........D
,airflow.dag_processing.last_duration.migrate*.
..z..Ag...!.. ..=.?.K
3airflow.dag_processing.last_duration.load_variables*.
..z..Ag...!..!r.z.?.Q
9airflow.dag_processing.last_duration.cleanup_target_group*.
..z..Ag...![.a/...?.U
=airflow.dag_processing.last_run.seconds_ago.temp_cleanup_logs*.
..z..Ag...!.X..C-"@.P
8airflow.dag_processing.last_run.seconds_ago.cleanup_logs*.
..z..Ag...!...K.*"@.K
3airflow.dag_processing.last_run.seconds_ago.migrate*.
..z..Ag...!.U.q70"@.W
?airflow.dag_processing.last_run.seconds_ago.cleanup_target_grou*.
..z..Ag...!.f...&"@.R
:airflow.dag_processing.last_run.seconds_ago.load_variables*.
..z..Ag...!S..c$."@HTTP/1.1 400 Bad Request
Content-Type: application/json
Date: Tue, 17 Mar 2026 15:08:09 GMT
Content-Length: 276

{"code":3,"message":"ReadObjectCB: expect { or n, but found \ufffd, error found 
in #2 byte of ...|\n\ufffd\u0019\n\ufffd\u0001\n\"\n\u0016te|..., bigger 
context 
...|\n\ufffd\u0019\n\ufffd\u0001\n\"\n\u0016telemetry.sdk.language\u0012\u0008\n\u0006python\n%\n\u0012teleme|..."}POST
 /v1/metrics HTTP/1.1
Host: otel-collector:4318
User-Agent: OTel-OTLP-Exporter-Python/1.40.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Type: application/json
Content-Length: 3275

GitHub link: 
https://github.com/apache/airflow/discussions/63808#discussioncomment-16179931

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: [email protected]

Reply via email to