Router YAML Configuration Reference
This reference covers the YAML configuration file properties for configuring an Apollo Router.
YAML configuration properties
The router can be configured by a YAML configuration file. This file enables you to declaratively configure various runtime properties of your router's behavior.
At startup, you set the config file for your router by providing its path with the --config option:
1./router --config router.yamlExample YAML with all properties
Expand the code block to view an example YAML config file containing all properties.
Example router YAML config file with all properties
1apq:
2 enabled: true
3 router:
4 cache:
5 in_memory:
6 limit: 1
7 redis:
8 namespace: example_namespace
9 password: example_password
10 pool_size: 1
11 required_to_start: false
12 reset_ttl: true
13 timeout: null
14 tls:
15 certificate_authorities: null
16 client_authentication:
17 certificate_chain: example_certificate_chain
18 key: example_key
19 ttl: null
20 urls:
21 - http://example.com/urls_item
22 username: example_username
23 subgraph:
24 all:
25 enabled: false
26 subgraphs: {}
27authentication:
28 connector:
29 sources: {}
30 router:
31 jwt:
32 header_name: authorization
33 header_value_prefix: Bearer
34 ignore_other_prefixes: false
35 jwks:
36 - algorithms: null
37 headers:
38 - name: example_name
39 value: example_value
40 issuer: example_issuer
41 poll_interval:
42 secs: 60
43 nanos: 0
44 url: http://service.example.com/url
45 on_error: Continue
46 sources:
47 - name: authorization
48 type: header
49 value_prefix: Bearer
50 subgraph:
51 all:
52 aws_sig_v4:
53 hardcoded:
54 access_key_id: example_access_key_id
55 assume_role:
56 external_id: example_external_id
57 role_arn: example_role_arn
58 session_name: example_session_name
59 region: example_region
60 secret_access_key: example_secret_access_key
61 service_name: example_service_name
62 subgraphs: {}
63authorization:
64 directives:
65 dry_run: false
66 enabled: true
67 errors:
68 log: true
69 response: errors
70 reject_unauthorized: false
71 require_authentication: false
72batching:
73 enabled: false
74 maximum_size: null
75 mode: batch_http_link
76 subgraph:
77 all:
78 enabled: false
79 subgraphs: {}
80connectors:
81 debug_extensions: false
82 expose_sources_in_context: false
83 max_requests_per_operation_per_source: null
84 sources: {}
85 subgraphs: {}
86coprocessor:
87 client:
88 dns_resolution_strategy: ipv4_only
89 experimental_http2: enable
90 execution:
91 request:
92 body: false
93 context: false
94 headers: false
95 method: false
96 query_plan: false
97 sdl: false
98 response:
99 body: false
100 context: false
101 headers: false
102 sdl: false
103 status_code: false
104 router:
105 request:
106 body: false
107 condition:
108 eq:
109 - false
110 - false
111 context: false
112 headers: false
113 method: false
114 path: false
115 sdl: false
116 response:
117 body: false
118 condition:
119 eq:
120 - false
121 - false
122 context: false
123 headers: false
124 sdl: false
125 status_code: false
126 subgraph:
127 all:
128 request:
129 body: false
130 condition:
131 eq:
132 - false
133 - false
134 context: false
135 headers: false
136 method: false
137 service_name: false
138 subgraph_request_id: false
139 uri: false
140 response:
141 body: false
142 condition:
143 eq:
144 - false
145 - false
146 context: false
147 headers: false
148 service_name: false
149 status_code: false
150 subgraph_request_id: false
151 supergraph:
152 request:
153 body: false
154 condition:
155 eq:
156 - false
157 - false
158 context: false
159 headers: false
160 method: false
161 sdl: false
162 response:
163 body: false
164 condition:
165 eq:
166 - false
167 - false
168 context: false
169 headers: false
170 sdl: false
171 status_code: false
172 timeout:
173 secs: 1
174 nanos: 0
175 url: http://service.example.com/url
176cors:
177 allow_any_origin: false
178 allow_credentials: false
179 allow_headers: []
180 expose_headers: null
181 match_origins: null
182 max_age: null
183 methods:
184 - GET
185 - POST
186 - OPTIONS
187 policies:
188 - origins: [https://studio.apollographql.com]
189csrf:
190 required_headers:
191 - x-apollo-operation-name
192 - apollo-require-preflight
193 unsafe_disabled: false
194demand_control:
195 enabled: false
196 mode: measure
197 strategy:
198 static_estimated:
199 list_size: 0
200 max: 0.0
201 actual_cost_mode: by_subgraph
202experimental_chaos:
203 force_reload: null
204experimental_type_conditioned_fetching: false
205fleet_detector: {}
206forbid_mutations: false
207headers:
208 all:
209 request:
210 - insert:
211 name: example_name
212 value: example_value
213 subgraphs: {}
214health_check:
215 enabled: true
216 listen: example_listen
217 path: /health
218 readiness:
219 allowed: 100
220 interval:
221 sampling: 0s
222 unready: null
223homepage:
224 enabled: true
225 graph_ref: null
226include_subgraph_errors:
227 all: false
228 subgraphs: {}
229license_enforcement: {}
230limits:
231 http1_max_request_buf_size: null
232 http1_max_request_headers: null
233 http_max_request_bytes: 2000000
234 introspection_max_depth: true
235 max_aliases: null
236 max_depth: null
237 max_height: null
238 max_root_fields: null
239 parser_max_recursion: 500
240 parser_max_tokens: 15000
241 warn_only: false
242override_subgraph_url: {}
243persisted_queries:
244 enabled: false
245 experimental_prewarm_query_plan_cache:
246 on_reload: true
247 on_startup: false
248 hot_reload: false
249 local_manifests: null
250 log_unknown: false
251 safelist:
252 enabled: false
253 require_id: false
254plugins: unknown_type_plugins
255preview_entity_cache:
256 enabled: false
257 expose_keys_in_context: false
258 invalidation:
259 concurrent_requests: 10
260 listen: example_listen
261 path: example_path
262 scan_count: 1000
263 metrics:
264 enabled: false
265 separate_per_type: false
266 ttl: 30s
267 subgraph:
268 all:
269 enabled: true
270 invalidation:
271 enabled: false
272 shared_key: ""
273 private_id: null
274 redis:
275 namespace: example_namespace
276 password: example_password
277 pool_size: 1
278 required_to_start: false
279 reset_ttl: true
280 timeout: null
281 tls:
282 certificate_authorities: null
283 client_authentication:
284 certificate_chain: example_certificate_chain
285 key: example_key
286 ttl: null
287 urls:
288 - http://example.com/urls_item
289 username: example_username
290 ttl: 30s
291 subgraphs: {}
292preview_file_uploads:
293 enabled: false
294 protocols:
295 multipart:
296 enabled: true
297 limits:
298 max_file_size: example_max_file_size
299 max_files: 0
300 mode: stream
301progressive_override: {}
302rhai:
303 main: example_main
304 scripts: example_scripts
305sandbox:
306 enabled: false
307subscription:
308 enable_deduplication: true
309 enabled: true
310 max_opened_subscriptions: null
311 mode:
312 callback:
313 heartbeat_interval: disabled
314 listen: example_listen
315 path: example_path
316 public_url: http://service.example.com/public_url
317 subgraphs: []
318 passthrough:
319 all:
320 heartbeat_interval: disabled
321 path: null
322 protocol: graphql_ws
323 subgraphs: {}
324 queue_capacity: null
325supergraph:
326 defer_support: true
327 early_cancel: false
328 experimental_log_on_broken_pipe: false
329 generate_query_fragments: true
330 introspection: false
331 listen: example_listen
332 path: /
333 query_planning:
334 cache:
335 in_memory:
336 limit: 1
337 redis:
338 namespace: example_namespace
339 password: example_password
340 pool_size: 1
341 required_to_start: false
342 reset_ttl: true
343 timeout: null
344 tls:
345 certificate_authorities: null
346 client_authentication:
347 certificate_chain: example_certificate_chain
348 key: example_key
349 ttl:
350 secs: 2592000
351 nanos: 0
352 urls:
353 - http://example.com/urls_item
354 username: example_username
355 experimental_paths_limit: null
356 experimental_plans_limit: null
357 experimental_reuse_query_plans: false
358 warmed_up_queries: null
359telemetry:
360 apollo:
361 batch_processor:
362 max_concurrent_exports: 1
363 max_export_batch_size: 512
364 max_export_timeout:
365 secs: 30
366 nanos: 0
367 max_queue_size: 2048
368 scheduled_delay:
369 secs: 5
370 nanos: 0
371 buffer_size: 10000
372 client_name_header: apollographql-client-name
373 client_version_header: apollographql-client-version
374 endpoint: https://usage-reporting.api.apollographql.com/api/ingress/traces
375 errors:
376 preview_extended_error_metrics: disabled
377 subgraph:
378 all:
379 redact: true
380 redaction_policy: strict
381 send: true
382 subgraphs: {}
383 experimental_local_field_metrics: false
384 experimental_otlp_endpoint: https://usage-reporting.api.apollographql.com/
385 experimental_otlp_tracing_protocol: grpc
386 field_level_instrumentation_sampler: 0.0
387 metrics_reference_mode: extended
388 otlp_tracing_sampler: 0.0
389 send_headers:
390 only:
391 - example_only_item
392 send_variable_values:
393 only:
394 - example_only_item
395 signature_normalization_algorithm: legacy
396 exporters:
397 logging:
398 common:
399 resource: {}
400 service_name: null
401 service_namespace: null
402 stdout:
403 enabled: true
404 format:
405 json:
406 display_current_span: false
407 display_filename: false
408 display_level: true
409 display_line_number: false
410 display_resource: true
411 display_span_id: true
412 display_span_list: true
413 display_target: true
414 display_thread_id: false
415 display_thread_name: false
416 display_timestamp: true
417 display_trace_id: hexadecimal
418 span_attributes: []
419 rate_limit:
420 capacity: 1
421 enabled: false
422 interval:
423 secs: 1
424 nanos: 0
425 tty_format:
426 json:
427 display_current_span: false
428 display_filename: false
429 display_level: true
430 display_line_number: false
431 display_resource: true
432 display_span_id: true
433 display_span_list: true
434 display_target: true
435 display_thread_id: false
436 display_thread_name: false
437 display_timestamp: true
438 display_trace_id: hexadecimal
439 span_attributes: []
440 metrics:
441 common:
442 buckets:
443 - 0.001
444 - 0.005
445 - 0.015
446 - 0.05
447 - 0.1
448 - 0.2
449 - 0.3
450 - 0.4
451 - 0.5
452 - 1.0
453 - 5.0
454 - 10.0
455 resource: {}
456 service_name: null
457 service_namespace: null
458 views:
459 - aggregation:
460 histogram:
461 buckets:
462 - 0.0
463 allowed_attribute_keys:
464 - example_allowed_attribute_keys_item
465 description: example_description
466 name: example_name
467 unit: example_unit
468 otlp:
469 batch_processor:
470 max_concurrent_exports: 1
471 max_export_batch_size: 512
472 max_export_timeout:
473 secs: 30
474 nanos: 0
475 max_queue_size: 2048
476 scheduled_delay:
477 secs: 5
478 nanos: 0
479 enabled: false
480 endpoint: example_endpoint
481 grpc:
482 ca: null
483 cert: null
484 domain_name: null
485 key: null
486 metadata: {}
487 http:
488 headers: {}
489 protocol: grpc
490 temporality: cumulative
491 prometheus:
492 enabled: false
493 listen: example_listen
494 path: /metrics
495 tracing:
496 common:
497 max_attributes_per_event: 128
498 max_attributes_per_link: 128
499 max_attributes_per_span: 128
500 max_events_per_span: 128
501 max_links_per_span: 128
502 parent_based_sampler: true
503 preview_datadog_agent_sampling: null
504 resource: {}
505 sampler: 0.0
506 service_name: null
507 service_namespace: null
508 datadog:
509 batch_processor:
510 max_concurrent_exports: 1
511 max_export_batch_size: 512
512 max_export_timeout:
513 secs: 30
514 nanos: 0
515 max_queue_size: 2048
516 scheduled_delay:
517 secs: 5
518 nanos: 0
519 enable_span_mapping: true
520 enabled: false
521 endpoint: example_endpoint
522 fixed_span_names: true
523 resource_mapping: {}
524 span_metrics:
525 parse_query: true
526 connect: true
527 execution: true
528 http_request: true
529 request: true
530 query_planning: true
531 connect_request: true
532 subgraph: true
533 router: true
534 supergraph: true
535 subgraph_request: true
536 experimental_response_trace_id:
537 enabled: false
538 format: hexadecimal
539 header_name: example_header_name
540 otlp:
541 batch_processor:
542 max_concurrent_exports: 1
543 max_export_batch_size: 512
544 max_export_timeout:
545 secs: 30
546 nanos: 0
547 max_queue_size: 2048
548 scheduled_delay:
549 secs: 5
550 nanos: 0
551 enabled: false
552 endpoint: example_endpoint
553 grpc:
554 ca: null
555 cert: null
556 domain_name: null
557 key: null
558 metadata: {}
559 http:
560 headers: {}
561 protocol: grpc
562 temporality: cumulative
563 propagation:
564 aws_xray: false
565 baggage: false
566 datadog: false
567 jaeger: false
568 request:
569 format: hexadecimal
570 header_name: example_header_name
571 trace_context: false
572 zipkin: false
573 zipkin:
574 batch_processor:
575 max_concurrent_exports: 1
576 max_export_batch_size: 512
577 max_export_timeout:
578 secs: 30
579 nanos: 0
580 max_queue_size: 2048
581 scheduled_delay:
582 secs: 5
583 nanos: 0
584 enabled: false
585 endpoint: example_endpoint
586 instrumentation:
587 events:
588 connector:
589 error:
590 condition:
591 eq:
592 - false
593 - false
594 level: info
595 request:
596 condition:
597 eq:
598 - false
599 - false
600 level: info
601 response:
602 condition:
603 eq:
604 - false
605 - false
606 level: info
607 router:
608 error:
609 condition:
610 eq:
611 - false
612 - false
613 level: info
614 request:
615 condition:
616 eq:
617 - false
618 - false
619 level: info
620 response:
621 condition:
622 eq:
623 - false
624 - false
625 level: info
626 subgraph:
627 error:
628 condition:
629 eq:
630 - false
631 - false
632 level: info
633 request:
634 condition:
635 eq:
636 - false
637 - false
638 level: info
639 response:
640 condition:
641 eq:
642 - false
643 - false
644 level: info
645 supergraph:
646 error:
647 condition:
648 eq:
649 - false
650 - false
651 level: info
652 request:
653 condition:
654 eq:
655 - false
656 - false
657 level: info
658 response:
659 condition:
660 eq:
661 - false
662 - false
663 level: info
664 instruments:
665 cache:
666 apollo.router.operations.entity.cache:
667 attributes:
668 graphql.type.name:
669 alias: example_alias
670 connector:
671 http.client.request.body.size:
672 attributes:
673 connector.http.method:
674 alias: example_alias
675 connector.source.name:
676 alias: example_alias
677 connector.url.template:
678 alias: example_alias
679 subgraph.name:
680 alias: example_alias
681 http.client.request.duration:
682 attributes:
683 connector.http.method:
684 alias: example_alias
685 connector.source.name:
686 alias: example_alias
687 connector.url.template:
688 alias: example_alias
689 subgraph.name:
690 alias: example_alias
691 http.client.response.body.size:
692 attributes:
693 connector.http.method:
694 alias: example_alias
695 connector.source.name:
696 alias: example_alias
697 connector.url.template:
698 alias: example_alias
699 subgraph.name:
700 alias: example_alias
701 default_requirement_level: none
702 graphql:
703 field.execution:
704 attributes:
705 graphql.field.name:
706 alias: example_alias
707 graphql.field.type:
708 alias: example_alias
709 graphql.list.length:
710 alias: example_alias
711 graphql.operation.name:
712 alias: example_alias
713 graphql.type.name:
714 alias: example_alias
715 list.length:
716 attributes:
717 graphql.field.name:
718 alias: example_alias
719 graphql.field.type:
720 alias: example_alias
721 graphql.list.length:
722 alias: example_alias
723 graphql.operation.name:
724 alias: example_alias
725 graphql.type.name:
726 alias: example_alias
727 router:
728 http.server.active_requests:
729 attributes:
730 http.request.method: false
731 server.address: false
732 server.port: false
733 url.scheme: false
734 http.server.request.body.size:
735 attributes:
736 baggage: null
737 dd.trace_id:
738 alias: example_alias
739 error.type:
740 alias: example_alias
741 http.request.body.size:
742 alias: example_alias
743 http.request.method:
744 alias: example_alias
745 http.response.body.size:
746 alias: example_alias
747 http.response.status_code:
748 alias: example_alias
749 http.route:
750 alias: example_alias
751 network.local.address:
752 alias: example_alias
753 network.local.port:
754 alias: example_alias
755 network.peer.address:
756 alias: example_alias
757 network.peer.port:
758 alias: example_alias
759 network.protocol.name:
760 alias: example_alias
761 network.protocol.version:
762 alias: example_alias
763 network.transport:
764 alias: example_alias
765 network.type:
766 alias: example_alias
767 server.address:
768 alias: example_alias
769 server.port:
770 alias: example_alias
771 trace_id:
772 alias: example_alias
773 url.path:
774 alias: example_alias
775 url.query:
776 alias: example_alias
777 url.scheme:
778 alias: example_alias
779 user_agent.original:
780 alias: example_alias
781 http.server.request.duration:
782 attributes:
783 baggage: null
784 dd.trace_id:
785 alias: example_alias
786 error.type:
787 alias: example_alias
788 http.request.body.size:
789 alias: example_alias
790 http.request.method:
791 alias: example_alias
792 http.response.body.size:
793 alias: example_alias
794 http.response.status_code:
795 alias: example_alias
796 http.route:
797 alias: example_alias
798 network.local.address:
799 alias: example_alias
800 network.local.port:
801 alias: example_alias
802 network.peer.address:
803 alias: example_alias
804 network.peer.port:
805 alias: example_alias
806 network.protocol.name:
807 alias: example_alias
808 network.protocol.version:
809 alias: example_alias
810 network.transport:
811 alias: example_alias
812 network.type:
813 alias: example_alias
814 server.address:
815 alias: example_alias
816 server.port:
817 alias: example_alias
818 trace_id:
819 alias: example_alias
820 url.path:
821 alias: example_alias
822 url.query:
823 alias: example_alias
824 url.scheme:
825 alias: example_alias
826 user_agent.original:
827 alias: example_alias
828 http.server.response.body.size:
829 attributes:
830 baggage: null
831 dd.trace_id:
832 alias: example_alias
833 error.type:
834 alias: example_alias
835 http.request.body.size:
836 alias: example_alias
837 http.request.method:
838 alias: example_alias
839 http.response.body.size:
840 alias: example_alias
841 http.response.status_code:
842 alias: example_alias
843 http.route:
844 alias: example_alias
845 network.local.address:
846 alias: example_alias
847 network.local.port:
848 alias: example_alias
849 network.peer.address:
850 alias: example_alias
851 network.peer.port:
852 alias: example_alias
853 network.protocol.name:
854 alias: example_alias
855 network.protocol.version:
856 alias: example_alias
857 network.transport:
858 alias: example_alias
859 network.type:
860 alias: example_alias
861 server.address:
862 alias: example_alias
863 server.port:
864 alias: example_alias
865 trace_id:
866 alias: example_alias
867 url.path:
868 alias: example_alias
869 url.query:
870 alias: example_alias
871 url.scheme:
872 alias: example_alias
873 user_agent.original:
874 alias: example_alias
875 subgraph:
876 http.client.request.body.size:
877 attributes:
878 http.request.resend_count:
879 alias: example_alias
880 subgraph.graphql.document:
881 alias: example_alias
882 subgraph.graphql.operation.name:
883 alias: example_alias
884 subgraph.graphql.operation.type:
885 alias: example_alias
886 subgraph.name:
887 alias: example_alias
888 http.client.request.duration:
889 attributes:
890 http.request.resend_count:
891 alias: example_alias
892 subgraph.graphql.document:
893 alias: example_alias
894 subgraph.graphql.operation.name:
895 alias: example_alias
896 subgraph.graphql.operation.type:
897 alias: example_alias
898 subgraph.name:
899 alias: example_alias
900 http.client.response.body.size:
901 attributes:
902 http.request.resend_count:
903 alias: example_alias
904 subgraph.graphql.document:
905 alias: example_alias
906 subgraph.graphql.operation.name:
907 alias: example_alias
908 subgraph.graphql.operation.type:
909 alias: example_alias
910 subgraph.name:
911 alias: example_alias
912 supergraph:
913 cost.actual:
914 attributes:
915 cost.actual:
916 alias: example_alias
917 cost.delta:
918 alias: example_alias
919 cost.estimated:
920 alias: example_alias
921 cost.result:
922 alias: example_alias
923 graphql.document:
924 alias: example_alias
925 graphql.operation.name:
926 alias: example_alias
927 graphql.operation.type:
928 alias: example_alias
929 cost.delta:
930 attributes:
931 cost.actual:
932 alias: example_alias
933 cost.delta:
934 alias: example_alias
935 cost.estimated:
936 alias: example_alias
937 cost.result:
938 alias: example_alias
939 graphql.document:
940 alias: example_alias
941 graphql.operation.name:
942 alias: example_alias
943 graphql.operation.type:
944 alias: example_alias
945 cost.estimated:
946 attributes:
947 cost.actual:
948 alias: example_alias
949 cost.delta:
950 alias: example_alias
951 cost.estimated:
952 alias: example_alias
953 cost.result:
954 alias: example_alias
955 graphql.document:
956 alias: example_alias
957 graphql.operation.name:
958 alias: example_alias
959 graphql.operation.type:
960 alias: example_alias
961 spans:
962 connector:
963 attributes:
964 connector.http.method:
965 alias: example_alias
966 connector.source.name:
967 alias: example_alias
968 connector.url.template:
969 alias: example_alias
970 subgraph.name:
971 alias: example_alias
972 default_attribute_requirement_level: none
973 mode: deprecated
974 router:
975 attributes:
976 baggage: null
977 dd.trace_id:
978 alias: example_alias
979 error.type:
980 alias: example_alias
981 http.request.body.size:
982 alias: example_alias
983 http.request.method:
984 alias: example_alias
985 http.response.body.size:
986 alias: example_alias
987 http.response.status_code:
988 alias: example_alias
989 http.route:
990 alias: example_alias
991 network.local.address:
992 alias: example_alias
993 network.local.port:
994 alias: example_alias
995 network.peer.address:
996 alias: example_alias
997 network.peer.port:
998 alias: example_alias
999 network.protocol.name:
1000 alias: example_alias
1001 network.protocol.version:
1002 alias: example_alias
1003 network.transport:
1004 alias: example_alias
1005 network.type:
1006 alias: example_alias
1007 server.address:
1008 alias: example_alias
1009 server.port:
1010 alias: example_alias
1011 trace_id:
1012 alias: example_alias
1013 url.path:
1014 alias: example_alias
1015 url.query:
1016 alias: example_alias
1017 url.scheme:
1018 alias: example_alias
1019 user_agent.original:
1020 alias: example_alias
1021 subgraph:
1022 attributes:
1023 http.request.resend_count:
1024 alias: example_alias
1025 subgraph.graphql.document:
1026 alias: example_alias
1027 subgraph.graphql.operation.name:
1028 alias: example_alias
1029 subgraph.graphql.operation.type:
1030 alias: example_alias
1031 subgraph.name:
1032 alias: example_alias
1033 supergraph:
1034 attributes:
1035 cost.actual:
1036 alias: example_alias
1037 cost.delta:
1038 alias: example_alias
1039 cost.estimated:
1040 alias: example_alias
1041 cost.result:
1042 alias: example_alias
1043 graphql.document:
1044 alias: example_alias
1045 graphql.operation.name:
1046 alias: example_alias
1047 graphql.operation.type:
1048 alias: example_alias
1049tls:
1050 connector:
1051 all:
1052 certificate_authorities: null
1053 client_authentication:
1054 certificate_chain: example_certificate_chain
1055 key: example_key
1056 sources: {}
1057 subgraph:
1058 all:
1059 certificate_authorities: null
1060 client_authentication:
1061 certificate_chain: example_certificate_chain
1062 key: example_key
1063 subgraphs: {}
1064 supergraph:
1065 certificate: example_certificate
1066 certificate_chain: example_certificate_chain
1067 key: example_key
1068traffic_shaping:
1069 all:
1070 compression: gzip
1071 deduplicate_query: false
1072 dns_resolution_strategy: ipv4_only
1073 experimental_http2: enable
1074 global_rate_limit:
1075 capacity: 1
1076 interval: 30s
1077 timeout: null
1078 connector:
1079 all:
1080 compression: gzip
1081 dns_resolution_strategy: ipv4_only
1082 experimental_http2: enable
1083 global_rate_limit:
1084 capacity: 1
1085 interval: 30s
1086 timeout: null
1087 sources: {}
1088 deduplicate_variables: null
1089 router:
1090 concurrency_limit: 0
1091 global_rate_limit:
1092 capacity: 1
1093 interval: 30s
1094 timeout: null
1095 subgraphs: {}Properties
apq
1apq:
2 enabled: true
3 router:
4 cache:
5 in_memory:
6 limit: 1
7 redis:
8 namespace: example_namespace
9 password: example_password
10 pool_size: 1
11 required_to_start: false
12 reset_ttl: true
13 timeout: null
14 tls:
15 certificate_authorities: null
16 client_authentication:
17 certificate_chain: example_certificate_chain
18 key: example_key
19 ttl: null
20 urls:
21 - http://example.com/urls_item
22 username: example_username
23 subgraph:
24 all:
25 enabled: false
26 subgraphs: {}Learn more in Automatic Persisted Queries.
authentication
authentication YAML snippet
1authentication:
2 connector:
3 sources: {}
4 router:
5 jwt:
6 header_name: authorization
7 header_value_prefix: Bearer
8 ignore_other_prefixes: false
9 jwks:
10 - algorithms: null
11 headers:
12 - name: example_name
13 value: example_value
14 issuer: example_issuer
15 poll_interval:
16 nanos: 0
17 secs: 60
18 url: http://service.example.com/url
19 on_error: Continue
20 sources:
21 - name: authorization
22 type: header
23 value_prefix: Bearer
24 subgraph:
25 all:
26 aws_sig_v4:
27 hardcoded:
28 access_key_id: example_access_key_id
29 assume_role:
30 external_id: example_external_id
31 role_arn: example_role_arn
32 session_name: example_session_name
33 region: example_region
34 secret_access_key: example_secret_access_key
35 service_name: example_service_name
36 subgraphs: {}To learn about JWT authentication, go to JWT authentication in the GraphOS Router.
To learn about subgraph authentication with AWS SigV4, go to a subgraph authentication configuration example.
authorization
1authorization:
2 directives:
3 dry_run: false
4 enabled: true
5 errors:
6 log: true
7 response: errors
8 reject_unauthorized: false
9 require_authentication: falseTo configure authorization directives, see Authorization directives.
To configure the authorization plugin, see Configuration options.
batching
1batching:
2 enabled: false
3 maximum_size: null
4 mode: batch_http_link
5 subgraph:
6 all:
7 enabled: false
8 subgraphs: {}Learn more in query batching.
connectors
1connectors:
2 debug_extensions: false
3 expose_sources_in_context: false
4 max_requests_per_operation_per_source: null
5 sources: {}
6 subgraphs: {}Learn more in Working with router for Apollo Connectors.
coprocessor
coprocessor YAML snippet
1coprocessor:
2 client:
3 dns_resolution_strategy: ipv4_only
4 experimental_http2: enable
5 execution:
6 request:
7 body: false
8 context: false
9 headers: false
10 method: false
11 query_plan: false
12 sdl: false
13 response:
14 body: false
15 context: false
16 headers: false
17 sdl: false
18 status_code: false
19 router:
20 request:
21 body: false
22 condition:
23 eq:
24 - false
25 - false
26 context: false
27 headers: false
28 method: false
29 path: false
30 sdl: false
31 response:
32 body: false
33 condition:
34 eq:
35 - false
36 - false
37 context: false
38 headers: false
39 sdl: false
40 status_code: false
41 subgraph:
42 all:
43 request:
44 body: false
45 condition:
46 eq:
47 - false
48 - false
49 context: false
50 headers: false
51 method: false
52 service_name: false
53 subgraph_request_id: false
54 uri: false
55 response:
56 body: false
57 condition:
58 eq:
59 - false
60 - false
61 context: false
62 headers: false
63 service_name: false
64 status_code: false
65 subgraph_request_id: false
66 supergraph:
67 request:
68 body: false
69 condition:
70 eq:
71 - false
72 - false
73 context: false
74 headers: false
75 method: false
76 sdl: false
77 response:
78 body: false
79 condition:
80 eq:
81 - false
82 - false
83 context: false
84 headers: false
85 sdl: false
86 status_code: false
87 timeout:
88 nanos: 0
89 secs: 1
90 url: http://service.example.com/urlLearn more in External coprocessing in the GraphOS Router.
cors
1cors:
2 allow_any_origin: false
3 allow_credentials: false
4 allow_headers: []
5 expose_headers: null
6 max_age: null
7 methods:
8 - GET
9 - POST
10 - OPTIONS
11 policies:
12 - origins:
13 - https://studio.apollographql.com
14 - https://myapp.com
15 allow_credentials: false
16 allow_headers: []
17 expose_headers: []
18 private_network_access:
19 access_id:
20 # methods not specified - uses global defaults [GET, POST, OPTIONS]
21 - origins:
22 - https://restricted.com
23 methods: [] # Explicitly no methods allowed
24 - origins:
25 - https://api.example.com
26 match_origins:
27 - "^https://.*\\.example\\.com$"
28 allow_headers:
29 - content-type
30 - authorization
31 methods:
32 - GET
33 - POST
34 private_network_access:
35 access_id: "01:23:45:67:89:0A"
36 access_name: "mega-corp device"
37 # Specific methods override global defaultsBy default, the router only allows GraphOS Studio to initiate browser connections to it. If your supergraph serves data to other browser-based applications, you need to update its Cross-Origin Resource Sharing (CORS) configuration.
Learn more in CORS.
csrf
1csrf:
2 required_headers:
3 - x-apollo-operation-name
4 - apollo-require-preflight
5 unsafe_disabled: falseLearn more in CSRF prevention in the router.
demand_control
1demand_control:
2 enabled: false
3 mode: measure
4 strategy:
5 static_estimated:
6 list_size: 0
7 max: 0.0
8 actual_cost_mode: by_subgraphWith demand control, the router analyzes the cost of operations and rejects requests with operations that exceed customizable cost limits.
Learn more in Demand Control
experimental_chaos
1experimental_chaos:
2 force_reload: nullexperimental_type_conditioned_fetching
1experimental_type_conditioned_fetching: falsefleet_detector
1fleet_detector: {}forbid_mutations
1forbid_mutations: falseheaders
1headers:
2 all:
3 request:
4 - insert:
5 name: example_name
6 value: example_value
7 subgraphs: {}Learn more in Sending HTTP headers to subgraphs.
health_check
1health_check:
2 enabled: true
3 listen: example_listen
4 path: /health
5 readiness:
6 allowed: 100
7 interval:
8 sampling: 0s
9 unready: nullLearn more in Health Checks.
homepage
1homepage:
2 enabled: true
3 graph_ref: nullThe router can serve a landing page to browsers that visit its endpoint path (supergraph.path):
A basic landing page that displays an example query
curlcommand (default)YAMLrouter.yaml1# This is the default behavior. You don't need to include this config. 2homepage: 3 enabled: trueNo landing page
YAMLrouter.yaml1homepage: 2 enabled: falseSending users to Apollo Explorer
YAMLrouter.yaml1homepage: 2 graph_ref: my-org-graph@productionWhen you specify a
graph_ref, the router's landing page includes an option for users to redirect to Apollo Explorer. Users can check a box that will remember their preference and automatically redirect them to Explorer on subsequent visits.noteThegraph_refvalue should match the formatorganization-name@variant-name, which is the same format used with theAPOLLO_GRAPH_REFenvironment variable. Note that the router does not automatically use the value from theAPOLLO_GRAPH_REFenvironment variable for this setting - you must explicitly setgraph_refin your YAML configuration even if you're already using the environment variable.
include_subgraph_errors
1include_subgraph_errors:
2 all: false
3 subgraphs: {}license_enforcement
1license_enforcement: {}limits
1limits:
2 http1_max_request_buf_size: null
3 http1_max_request_headers: null
4 http_max_request_bytes: 2000000
5 introspection_max_depth: true
6 max_aliases: null
7 max_depth: null
8 max_height: null
9 max_root_fields: null
10 parser_max_recursion: 500
11 parser_max_tokens: 15000
12 warn_only: falseLearn more in Request Limits.
override_subgraph_url
1override_subgraph_url: {}By default, the router obtains the routing URL for each of your subgraphs from the composed supergraph schema you provide it. In most cases, no additional configuration is required. The URL can use HTTP and HTTPS for network access to subgraph, or have the following shape for Unix sockets usage: unix:///path/to/subgraph.sock
However, if you do need to override a particular subgraph's routing URL (for example, to handle changing network topography), you can do so with the override_subgraph_url option:
1override_subgraph_url:
2 organizations: http://localhost:8080
3 accounts: "${env.ACCOUNTS_SUBGRAPH_HOST_URL}"In this example, the organizations subgraph URL is overridden to point to http://localhost:8080, and the accounts subgraph URL is overridden to point to a new URL using variable expansion. The URL specified in the supergraph schema is ignored.
Any subgraphs that are omitted from override_subgraph_url continue to use the routing URL specified in the supergraph schema.
If you need to override the subgraph URL at runtime on a per-request basis, you can use request customizations in the SubgraphService layer.
persisted_queries
1persisted_queries:
2 enabled: false
3 experimental_prewarm_query_plan_cache:
4 on_reload: true
5 on_startup: false
6 hot_reload: false
7 local_manifests: null
8 log_unknown: false
9 safelist:
10 enabled: false
11 require_id: falseYou can enhance your graph's security with GraphOS Router by maintaining a persisted query list (PQL), an operation safelist made by your first-party apps. As opposed to automatic persisted queries (APQ) where operations are automatically cached, operations must be preregistered to the PQL. Once configured, the router checks incoming requests against the PQL.
Learn more about safelisting with persisted queries.
plugins
1plugins: unknown_type_pluginsYou can customize the router's behavior with plugins. Each plugin can have its own section in the configuration file with arbitrary values:
1plugins:
2 example.plugin:
3 var1: "hello"
4 var2: 1Learn more in Native Plugins for router.
preview_entity_cache
preview_entity_cache YAML snippet
1preview_entity_cache:
2 enabled: false
3 expose_keys_in_context: false
4 invalidation:
5 concurrent_requests: 10
6 listen: example_listen
7 path: example_path
8 scan_count: 1000
9 metrics:
10 enabled: false
11 separate_per_type: false
12 ttl: 30s
13 subgraph:
14 all:
15 enabled: true
16 invalidation:
17 enabled: false
18 shared_key: ''
19 private_id: null
20 redis:
21 namespace: example_namespace
22 password: example_password
23 pool_size: 1
24 required_to_start: false
25 reset_ttl: true
26 timeout: null
27 tls:
28 certificate_authorities: null
29 client_authentication:
30 certificate_chain: example_certificate_chain
31 key: example_key
32 ttl: null
33 urls:
34 - http://example.com/urls_item
35 username: example_username
36 ttl: 30s
37 subgraphs: {}When using Redis as the cache backend, the router emits additional Redis-specific metrics to help monitor cache performance:
Connection metrics: Track Redis connection establishment and health
Command metrics: Monitor Redis command execution, queue length, and redelivery counts
Performance metrics: Measure average latency, network latency, and request/response sizes
Operational metrics: Help identify connection issues, network problems, or performance bottlenecks
These metrics use the kind attribute to distinguish between different Redis cache uses (e.g., entity). For the complete list of Redis metrics and their descriptions, see the Redis Cache metrics documentation.
Learn more in Entity Caching.
response_cache
response_cache YAML snippet
1response_cache:
2 enabled: false
3 debug: false
4 private_queries_buffer_size: 2048
5 invalidation:
6 listen: 127.0.0.1:4000
7 path: /invalidation
8 subgraph:
9 all:
10 enabled: true
11 ttl: 30s
12 private_id: null
13 redis:
14 urls:
15 - redis://127.0.0.1:6379
16 username: example_username
17 password: example_password
18 fetch_timeout: 150ms
19 insert_timeout: 500ms
20 invalidate_timeout: 1s
21 maintenance_timeout: 500ms
22 namespace: example_namespace
23 tls:
24 certificate_authorities: null
25 client_authentication:
26 certificate_chain: example_certificate_chain
27 key: example_key
28 required_to_start: false
29 pool_size: 5
30 metrics_interval: 1s
31 invalidation:
32 enabled: false
33 shared_key: ''
34 subgraphs: {}When using Redis as the cache backend, the router emits additional Redis-specific metrics to help monitor cache performance:
Connection metrics: Track Redis connection establishment and health
Command metrics: Monitor Redis command execution, queue length, and redelivery counts
Performance metrics: Measure average latency, network latency, and request/response sizes
Operational metrics: Help identify connection issues, network problems, or performance bottlenecks
These metrics use the kind attribute to distinguish between different Redis cache uses (e.g., response). For the complete list of Redis metrics and their descriptions, see the Redis Cache metrics documentation.
Learn more in Response Caching.
preview_file_uploads
1preview_file_uploads:
2 enabled: false
3 protocols:
4 multipart:
5 enabled: true
6 limits:
7 max_file_size: example_max_file_size
8 max_files: 0
9 mode: streamLearn more in File Uploads.
rhai
1rhai:
2 main: example_main
3 scripts: example_scriptsLearn more in Rhai customization for router.
sandbox
1sandbox:
2 enabled: falseApollo Sandbox is a GraphQL development environment. It runs a graph via introspection queries on the router's supergrpah schema, and it provides an IDE for making queries to the graph.
Running Sandbox in router requires configuring sandbox.enabled, supergraph.instrospection, and homepage.enabled:
1sandbox:
2 enabled: true
3
4# Sandbox uses introspection to obtain your router's schema.
5supergraph:
6 introspection: true
7
8# Sandbox requires the default landing page to be disabled.
9homepage:
10 enabled: falseLearn more in Apollo Sandbox.
server
1server:
2 http:
3 header_read_timeout: 30s
4 tls_handshake_timeout: 30sHeader Read Timeout
The header read timeout is the amount of time the Router will wait to receive the complete request headers from a client before timing out. It applies both when the connection is fully idle and when a request has been started but sending the headers has not been completed.
By default, the header read timeout is set to 10 seconds. A longer timeout can be configured using the server.http.header_read_timeout configuration option.
TLS handshake timeout
The TLS handshake timeout determines how long the router waits to complete a TLS handshake with a client.
The default timeout is ten seconds. You can configure the server.http.tls_handshake_timeout option to change this duration.
subscription
1subscription:
2 enable_deduplication: true
3 enabled: true
4 max_opened_subscriptions: null
5 mode:
6 callback:
7 heartbeat_interval: disabled
8 listen: example_listen
9 path: example_path
10 public_url: http://service.example.com/public_url
11 subgraphs: []
12 passthrough:
13 all:
14 heartbeat_interval: disabled
15 path: null
16 protocol: graphql_ws
17 subgraphs: {}
18 queue_capacity: nullLearn more in Subscriptions.
supergraph
supergraph YAML snippet
1supergraph:
2 defer_support: true
3 early_cancel: false
4 experimental_log_on_broken_pipe: false
5 generate_query_fragments: true
6 introspection: false
7 listen: example_listen
8 path: /
9 query_planning:
10 cache:
11 in_memory:
12 limit: 1
13 redis:
14 namespace: example_namespace
15 password: example_password
16 pool_size: 1
17 required_to_start: false
18 reset_ttl: true
19 timeout: null
20 tls:
21 certificate_authorities: null
22 client_authentication:
23 certificate_chain: example_certificate_chain
24 key: example_key
25 ttl:
26 nanos: 0
27 secs: 2592000
28 urls:
29 - http://example.com/urls_item
30 username: example_username
31 experimental_paths_limit: null
32 experimental_plans_limit: null
33 experimental_reuse_query_plans: false
34 warmed_up_queries: nullSupergraph listen address
As the gateway and single endpoint to your supergraph, an Apollo Router has a socket address and port that it listens for client requests. This listen address is configurable in YAML as supergraph.listen.
By default, the router starts an HTTP server that listens on 127.0.0.1:4000. You can specify a different address by setting supergraph.listen for IPv4, IPv6, or Unix sockets.
IPv4
1supergraph:
2 # The socket address and port to listen on (default: 127.0.0.1:400)
3 listen: 127.0.0.1:4000IPv6
1supergraph:
2 # The socket address and port to listen on. (default: [::1]:4000)
3 # Note that this must be quoted to avoid interpretation as an array in YAML.
4 listen: "[::1]:4000"Unix socket
1supergraph:
2 # Absolute path to a Unix socket
3 listen: /tmp/router.sockSupergraph endpoint path
The path of the HTTP endpoint of the supergraph that the router runs is configured by supergraph.path.
By default, the router starts an HTTP server that exposes a POST/GET endpoint at path /.
1supergraph:
2 # The path for GraphQL execution
3 # (Defaults to /)
4 path: /graphqlThe path must start with /.
A path can contain parameters and wildcards:
/{parameter}matches a single segment. For example:/abc/{my_param}/defmatches/abc/1/defand/abc/whatever/def, but it doesn't match/abc/1/2/defor/abc/def
/{*parameter}matches all segments in the rest of a path. For example:/abc/{*wildcard}matches/abc/1/defand/abc/w/h/a/t/e/v/e/r, but it doesn't match/abc/or/not_abc_at_all
- Both parameters and wildcards require a name, even though you can’t use those names anywhere.
- The router doesn't support wildcards in the middle of a path (e.g.,
/{*wild}/graphql). Instead, use a path parameter (e.g.,/{parameter}/graphql).
Introspection
In GraphQL, introspection queries are used during development to learn about a GraphQL API's schema. The router can resolve introspection queries, based on the configuration of supergraph.introspection.
By default, the router doesn't resolve introspection queries.
To enable introspection queries during development, set the supergraph.introspection flag:
1# Do not enable introspection in production!
2supergraph:
3 introspection: trueIntrospection recursion limit
The schema-introspection schema is recursive: a client can query the fields of the types of some other fields, and so on arbitrarily deep. This can produce responses that grow much faster than the size of the request.
To prevent this, the router is configured by default to not execute introspection queries that nest list fields that are too deep, instead returning an error. The criteria matches MaxIntrospectionDepthRule in graphql-js, and it may change in future versions.
In case the router rejects legitimate queries, you can disable the limit by setting the limits.introspection_max_depth flag:
1# Do not enable introspection in production!
2supergraph:
3 introspection: true
4limits:
5 introspection_max_depth: falseEarly cancel
Up until Apollo Router Core v1.43.1, when the client closed the connection without waiting for the response, the entire request was cancelled and did not go through the entire pipeline. Since this causes issues with request monitoring, the router introduced a new behavior in 1.43.1. Now, the entire pipeline is executed if the request is detected as cancelled, but subgraph requests are not actually done. The response will be reported with the 499 status code, but not actually sent to the client.
To go back to the previous behavior of immediately cancelling the request, the following configuration can be used for supergraph.early_cancel:
1supergraph:
2 early_cancel: trueAdditionally, since v1.43.1, the router can show a log when it detects that the client canceled the request. This log can be activated with:
1supergraph:
2 experimental_log_on_broken_pipe: trueConnection shutdown timeout
When the Router schema or configuration updates all connections must be closed for resources to be freed.
To ensure that long-lived connections do not hang on to resources, a maximum graceful shutdown timeout can be configured with supergraph.connection_shutdown_timeout:
1supergraph:
2 connection_shutdown_timeout: 60sThe default value is 60 seconds.
Note that if early_cancel is false (default), then requests in progress will still hold onto pipeline resources.
In that case, traffic shaping request timeouts should be used to prevent long-running requests:
1traffic_shaping:
2 router:
3 timeout: 60sAutomatic fragment generation
By default, the router compresses subgraph requests by generating fragment definitions based on the shape of the subgraph operation. In many cases this significantly reduces the size of the query sent to subgraphs.
You can explicitly opt-out of this behavior by specifying supergraph.generate_query_fragments:
1supergraph:
2 generate_query_fragments: falsetelemetry
telemetry YAML snippet (>= Router v2.7.0)
1telemetry:
2 apollo:
3 tracing:
4 batch_processor:
5 max_export_timeout: 30s
6 scheduled_delay: 5s
7 max_export_batch_size: 512
8 max_concurrent_exports: 1
9 max_queue_size: 2048
10 metrics:
11 otlp:
12 batch_processor:
13 scheduled_delay: 5s
14 max_export_timeout: 30s
15 usage_reports:
16 batch_processor:
17 max_export_timeout: 30s
18 scheduled_delay: 5s
19 max_queue_size: 2048
20 buffer_size: 10000
21 client_name_header: apollographql-client-name
22 client_version_header: apollographql-client-version
23 endpoint: https://usage-reporting.api.apollographql.com/api/ingress/traces
24 errors:
25 preview_extended_error_metrics: disabled
26 subgraph:
27 all:
28 redact: true
29 redaction_policy: strict
30 send: true
31 subgraphs: {}
32 experimental_local_field_metrics: false
33 experimental_otlp_endpoint: https://usage-reporting.api.apollographql.com/
34 experimental_otlp_tracing_protocol: grpc
35 field_level_instrumentation_sampler: 0.0
36 metrics_reference_mode: extended
37 otlp_tracing_sampler: 0.0
38 send_headers:
39 only:
40 - example_only_item
41 send_variable_values:
42 only:
43 - example_only_item
44 signature_normalization_algorithm: enhanced
45 exporters:
46 logging:
47 common:
48 resource: {}
49 service_name: null
50 service_namespace: null
51 stdout:
52 enabled: true
53 format:
54 json:
55 display_current_span: false
56 display_filename: false
57 display_level: true
58 display_line_number: false
59 display_resource: true
60 display_span_id: true
61 display_span_list: true
62 display_target: true
63 display_thread_id: false
64 display_thread_name: false
65 display_timestamp: true
66 display_trace_id: hexadecimal
67 span_attributes: []
68 rate_limit:
69 capacity: 1
70 enabled: false
71 interval:
72 nanos: 0
73 secs: 1
74 tty_format:
75 json:
76 display_current_span: false
77 display_filename: false
78 display_level: true
79 display_line_number: false
80 display_resource: true
81 display_span_id: true
82 display_span_list: true
83 display_target: true
84 display_thread_id: false
85 display_thread_name: false
86 display_timestamp: true
87 display_trace_id: hexadecimal
88 span_attributes: []
89 metrics:
90 common:
91 buckets:
92 - 0.001
93 - 0.005
94 - 0.015
95 - 0.05
96 - 0.1
97 - 0.2
98 - 0.3
99 - 0.4
100 - 0.5
101 - 1.0
102 - 5.0
103 - 10.0
104 resource: {}
105 service_name: null
106 service_namespace: null
107 views:
108 - aggregation:
109 histogram:
110 buckets:
111 - 0.0
112 allowed_attribute_keys:
113 - example_allowed_attribute_keys_item
114 description: example_description
115 name: example_name
116 rename: example_rename
117 unit: example_unit
118 otlp:
119 batch_processor:
120 max_concurrent_exports: 1
121 max_export_batch_size: 512
122 max_export_timeout:
123 nanos: 0
124 secs: 30
125 max_queue_size: 2048
126 scheduled_delay:
127 nanos: 0
128 secs: 5
129 enabled: false
130 endpoint: example_endpoint
131 grpc:
132 ca: null
133 cert: null
134 domain_name: null
135 key: null
136 metadata: {}
137 http:
138 headers: {}
139 protocol: grpc
140 temporality: cumulative
141 prometheus:
142 enabled: false
143 listen: example_listen
144 path: /metrics
145 tracing:
146 common:
147 max_attributes_per_event: 128
148 max_attributes_per_link: 128
149 max_attributes_per_span: 128
150 max_events_per_span: 128
151 max_links_per_span: 128
152 parent_based_sampler: true
153 preview_datadog_agent_sampling: null
154 resource: {}
155 sampler: 0.0
156 service_name: null
157 service_namespace: null
158 datadog:
159 batch_processor:
160 max_concurrent_exports: 1
161 max_export_batch_size: 512
162 max_export_timeout:
163 nanos: 0
164 secs: 30
165 max_queue_size: 2048
166 scheduled_delay:
167 nanos: 0
168 secs: 5
169 enable_span_mapping: true
170 enabled: false
171 endpoint: example_endpoint
172 fixed_span_names: true
173 resource_mapping: {}
174 span_metrics:
175 connect: true
176 connect_request: true
177 execution: true
178 http_request: true
179 parse_query: true
180 query_planning: true
181 request: true
182 router: true
183 subgraph: true
184 subgraph_request: true
185 supergraph: true
186 experimental_response_trace_id:
187 enabled: false
188 format: hexadecimal
189 header_name: example_header_name
190 otlp:
191 batch_processor:
192 max_concurrent_exports: 1
193 max_export_batch_size: 512
194 max_export_timeout:
195 nanos: 0
196 secs: 30
197 max_queue_size: 2048
198 scheduled_delay:
199 nanos: 0
200 secs: 5
201 enabled: false
202 endpoint: example_endpoint
203 grpc:
204 ca: null
205 cert: null
206 domain_name: null
207 key: null
208 metadata: {}
209 http:
210 headers: {}
211 protocol: grpc
212 temporality: cumulative
213 propagation:
214 aws_xray: false
215 baggage: false
216 datadog: false
217 jaeger: false
218 request:
219 format: hexadecimal
220 header_name: example_header_name
221 trace_context: false
222 zipkin: false
223 zipkin:
224 batch_processor:
225 max_concurrent_exports: 1
226 max_export_batch_size: 512
227 max_export_timeout:
228 nanos: 0
229 secs: 30
230 max_queue_size: 2048
231 scheduled_delay:
232 nanos: 0
233 secs: 5
234 enabled: false
235 endpoint: example_endpoint
236 instrumentation:
237 events:
238 connector:
239 error:
240 condition:
241 eq:
242 - false
243 - false
244 level: info
245 request:
246 condition:
247 eq:
248 - false
249 - false
250 level: info
251 response:
252 condition:
253 eq:
254 - false
255 - false
256 level: info
257 router:
258 error:
259 condition:
260 eq:
261 - false
262 - false
263 level: info
264 request:
265 condition:
266 eq:
267 - false
268 - false
269 level: info
270 response:
271 condition:
272 eq:
273 - false
274 - false
275 level: info
276 subgraph:
277 error:
278 condition:
279 eq:
280 - false
281 - false
282 level: info
283 request:
284 condition:
285 eq:
286 - false
287 - false
288 level: info
289 response:
290 condition:
291 eq:
292 - false
293 - false
294 level: info
295 supergraph:
296 error:
297 condition:
298 eq:
299 - false
300 - false
301 level: info
302 request:
303 condition:
304 eq:
305 - false
306 - false
307 level: info
308 response:
309 condition:
310 eq:
311 - false
312 - false
313 level: info
314 instruments:
315 cache:
316 apollo.router.operations.entity.cache:
317 attributes:
318 graphql.type.name:
319 alias: example_alias
320 connector:
321 http.client.request.body.size:
322 attributes:
323 connector.http.method:
324 alias: example_alias
325 connector.source.name:
326 alias: example_alias
327 connector.url.template:
328 alias: example_alias
329 subgraph.name:
330 alias: example_alias
331 http.client.request.duration:
332 attributes:
333 connector.http.method:
334 alias: example_alias
335 connector.source.name:
336 alias: example_alias
337 connector.url.template:
338 alias: example_alias
339 subgraph.name:
340 alias: example_alias
341 http.client.response.body.size:
342 attributes:
343 connector.http.method:
344 alias: example_alias
345 connector.source.name:
346 alias: example_alias
347 connector.url.template:
348 alias: example_alias
349 subgraph.name:
350 alias: example_alias
351 default_requirement_level: none
352 graphql:
353 field.execution:
354 attributes:
355 graphql.field.name:
356 alias: example_alias
357 graphql.field.type:
358 alias: example_alias
359 graphql.list.length:
360 alias: example_alias
361 graphql.operation.name:
362 alias: example_alias
363 graphql.type.name:
364 alias: example_alias
365 list.length:
366 attributes:
367 graphql.field.name:
368 alias: example_alias
369 graphql.field.type:
370 alias: example_alias
371 graphql.list.length:
372 alias: example_alias
373 graphql.operation.name:
374 alias: example_alias
375 graphql.type.name:
376 alias: example_alias
377 router:
378 http.server.active_requests:
379 attributes:
380 http.request.method: false
381 server.address: false
382 server.port: false
383 url.scheme: false
384 http.server.request.body.size:
385 attributes:
386 baggage: null
387 dd.trace_id:
388 alias: example_alias
389 error.type:
390 alias: example_alias
391 http.request.body.size:
392 alias: example_alias
393 http.request.method:
394 alias: example_alias
395 http.response.body.size:
396 alias: example_alias
397 http.response.status_code:
398 alias: example_alias
399 http.route:
400 alias: example_alias
401 network.local.address:
402 alias: example_alias
403 network.local.port:
404 alias: example_alias
405 network.peer.address:
406 alias: example_alias
407 network.peer.port:
408 alias: example_alias
409 network.protocol.name:
410 alias: example_alias
411 network.protocol.version:
412 alias: example_alias
413 network.transport:
414 alias: example_alias
415 network.type:
416 alias: example_alias
417 server.address:
418 alias: example_alias
419 server.port:
420 alias: example_alias
421 trace_id:
422 alias: example_alias
423 url.path:
424 alias: example_alias
425 url.query:
426 alias: example_alias
427 url.scheme:
428 alias: example_alias
429 user_agent.original:
430 alias: example_alias
431 http.server.request.duration:
432 attributes:
433 baggage: null
434 dd.trace_id:
435 alias: example_alias
436 error.type:
437 alias: example_alias
438 http.request.body.size:
439 alias: example_alias
440 http.request.method:
441 alias: example_alias
442 http.response.body.size:
443 alias: example_alias
444 http.response.status_code:
445 alias: example_alias
446 http.route:
447 alias: example_alias
448 network.local.address:
449 alias: example_alias
450 network.local.port:
451 alias: example_alias
452 network.peer.address:
453 alias: example_alias
454 network.peer.port:
455 alias: example_alias
456 network.protocol.name:
457 alias: example_alias
458 network.protocol.version:
459 alias: example_alias
460 network.transport:
461 alias: example_alias
462 network.type:
463 alias: example_alias
464 server.address:
465 alias: example_alias
466 server.port:
467 alias: example_alias
468 trace_id:
469 alias: example_alias
470 url.path:
471 alias: example_alias
472 url.query:
473 alias: example_alias
474 url.scheme:
475 alias: example_alias
476 user_agent.original:
477 alias: example_alias
478 http.server.response.body.size:
479 attributes:
480 baggage: null
481 dd.trace_id:
482 alias: example_alias
483 error.type:
484 alias: example_alias
485 http.request.body.size:
486 alias: example_alias
487 http.request.method:
488 alias: example_alias
489 http.response.body.size:
490 alias: example_alias
491 http.response.status_code:
492 alias: example_alias
493 http.route:
494 alias: example_alias
495 network.local.address:
496 alias: example_alias
497 network.local.port:
498 alias: example_alias
499 network.peer.address:
500 alias: example_alias
501 network.peer.port:
502 alias: example_alias
503 network.protocol.name:
504 alias: example_alias
505 network.protocol.version:
506 alias: example_alias
507 network.transport:
508 alias: example_alias
509 network.type:
510 alias: example_alias
511 server.address:
512 alias: example_alias
513 server.port:
514 alias: example_alias
515 trace_id:
516 alias: example_alias
517 url.path:
518 alias: example_alias
519 url.query:
520 alias: example_alias
521 url.scheme:
522 alias: example_alias
523 user_agent.original:
524 alias: example_alias
525 subgraph:
526 http.client.request.body.size:
527 attributes:
528 http.request.resend_count:
529 alias: example_alias
530 subgraph.graphql.document:
531 alias: example_alias
532 subgraph.graphql.operation.name:
533 alias: example_alias
534 subgraph.graphql.operation.type:
535 alias: example_alias
536 subgraph.name:
537 alias: example_alias
538 http.client.request.duration:
539 attributes:
540 http.request.resend_count:
541 alias: example_alias
542 subgraph.graphql.document:
543 alias: example_alias
544 subgraph.graphql.operation.name:
545 alias: example_alias
546 subgraph.graphql.operation.type:
547 alias: example_alias
548 subgraph.name:
549 alias: example_alias
550 http.client.response.body.size:
551 attributes:
552 http.request.resend_count:
553 alias: example_alias
554 subgraph.graphql.document:
555 alias: example_alias
556 subgraph.graphql.operation.name:
557 alias: example_alias
558 subgraph.graphql.operation.type:
559 alias: example_alias
560 subgraph.name:
561 alias: example_alias
562 supergraph:
563 cost.actual:
564 attributes:
565 cost.actual:
566 alias: example_alias
567 cost.delta:
568 alias: example_alias
569 cost.estimated:
570 alias: example_alias
571 cost.result:
572 alias: example_alias
573 graphql.document:
574 alias: example_alias
575 graphql.operation.name:
576 alias: example_alias
577 graphql.operation.type:
578 alias: example_alias
579 cost.delta:
580 attributes:
581 cost.actual:
582 alias: example_alias
583 cost.delta:
584 alias: example_alias
585 cost.estimated:
586 alias: example_alias
587 cost.result:
588 alias: example_alias
589 graphql.document:
590 alias: example_alias
591 graphql.operation.name:
592 alias: example_alias
593 graphql.operation.type:
594 alias: example_alias
595 cost.estimated:
596 attributes:
597 cost.actual:
598 alias: example_alias
599 cost.delta:
600 alias: example_alias
601 cost.estimated:
602 alias: example_alias
603 cost.result:
604 alias: example_alias
605 graphql.document:
606 alias: example_alias
607 graphql.operation.name:
608 alias: example_alias
609 graphql.operation.type:
610 alias: example_alias
611 spans:
612 connector:
613 attributes:
614 connector.http.method:
615 alias: example_alias
616 connector.source.name:
617 alias: example_alias
618 connector.url.template:
619 alias: example_alias
620 subgraph.name:
621 alias: example_alias
622 default_attribute_requirement_level: none
623 mode: deprecated
624 router:
625 attributes:
626 baggage: null
627 dd.trace_id:
628 alias: example_alias
629 error.type:
630 alias: example_alias
631 http.request.body.size:
632 alias: example_alias
633 http.request.method:
634 alias: example_alias
635 http.response.body.size:
636 alias: example_alias
637 http.response.status_code:
638 alias: example_alias
639 http.route:
640 alias: example_alias
641 network.local.address:
642 alias: example_alias
643 network.local.port:
644 alias: example_alias
645 network.peer.address:
646 alias: example_alias
647 network.peer.port:
648 alias: example_alias
649 network.protocol.name:
650 alias: example_alias
651 network.protocol.version:
652 alias: example_alias
653 network.transport:
654 alias: example_alias
655 network.type:
656 alias: example_alias
657 server.address:
658 alias: example_alias
659 server.port:
660 alias: example_alias
661 trace_id:
662 alias: example_alias
663 url.path:
664 alias: example_alias
665 url.query:
666 alias: example_alias
667 url.scheme:
668 alias: example_alias
669 user_agent.original:
670 alias: example_alias
671 subgraph:
672 attributes:
673 http.request.resend_count:
674 alias: example_alias
675 subgraph.graphql.document:
676 alias: example_alias
677 subgraph.graphql.operation.name:
678 alias: example_alias
679 subgraph.graphql.operation.type:
680 alias: example_alias
681 subgraph.name:
682 alias: example_alias
683 supergraph:
684 attributes:
685 cost.actual:
686 alias: example_alias
687 cost.delta:
688 alias: example_alias
689 cost.estimated:
690 alias: example_alias
691 cost.result:
692 alias: example_alias
693 graphql.document:
694 alias: example_alias
695 graphql.operation.name:
696 alias: example_alias
697 graphql.operation.type:
698 alias: example_aliastelemetry YAML snippet (deprecated <= Router v2.6)
1telemetry:
2 apollo:
3 batch_processor:
4 max_concurrent_exports: 1
5 max_export_batch_size: 512
6 max_export_timeout:
7 nanos: 0
8 secs: 30
9 max_queue_size: 2048
10 scheduled_delay:
11 nanos: 0
12 secs: 5
13 buffer_size: 10000
14 client_name_header: apollographql-client-name
15 client_version_header: apollographql-client-version
16 endpoint: https://usage-reporting.api.apollographql.com/api/ingress/traces
17 errors:
18 preview_extended_error_metrics: disabled
19 subgraph:
20 all:
21 redact: true
22 redaction_policy: strict
23 send: true
24 subgraphs: {}
25 experimental_local_field_metrics: false
26 experimental_otlp_endpoint: https://usage-reporting.api.apollographql.com/
27 experimental_otlp_tracing_protocol: grpc
28 field_level_instrumentation_sampler: 0.0
29 metrics_reference_mode: extended
30 otlp_tracing_sampler: 0.0
31 send_headers:
32 only:
33 - example_only_item
34 send_variable_values:
35 only:
36 - example_only_item
37 signature_normalization_algorithm: enhanced
38 exporters:
39 logging:
40 common:
41 resource: {}
42 service_name: null
43 service_namespace: null
44 stdout:
45 enabled: true
46 format:
47 json:
48 display_current_span: false
49 display_filename: false
50 display_level: true
51 display_line_number: false
52 display_resource: true
53 display_span_id: true
54 display_span_list: true
55 display_target: true
56 display_thread_id: false
57 display_thread_name: false
58 display_timestamp: true
59 display_trace_id: hexadecimal
60 span_attributes: []
61 rate_limit:
62 capacity: 1
63 enabled: false
64 interval:
65 nanos: 0
66 secs: 1
67 tty_format:
68 json:
69 display_current_span: false
70 display_filename: false
71 display_level: true
72 display_line_number: false
73 display_resource: true
74 display_span_id: true
75 display_span_list: true
76 display_target: true
77 display_thread_id: false
78 display_thread_name: false
79 display_timestamp: true
80 display_trace_id: hexadecimal
81 span_attributes: []
82 metrics:
83 common:
84 buckets:
85 - 0.001
86 - 0.005
87 - 0.015
88 - 0.05
89 - 0.1
90 - 0.2
91 - 0.3
92 - 0.4
93 - 0.5
94 - 1.0
95 - 5.0
96 - 10.0
97 resource: {}
98 service_name: null
99 service_namespace: null
100 views:
101 - aggregation:
102 histogram:
103 buckets:
104 - 0.0
105 allowed_attribute_keys:
106 - example_allowed_attribute_keys_item
107 description: example_description
108 name: example_name
109 unit: example_unit
110 otlp:
111 batch_processor:
112 max_concurrent_exports: 1
113 max_export_batch_size: 512
114 max_export_timeout:
115 nanos: 0
116 secs: 30
117 max_queue_size: 2048
118 scheduled_delay:
119 nanos: 0
120 secs: 5
121 enabled: false
122 endpoint: example_endpoint
123 grpc:
124 ca: null
125 cert: null
126 domain_name: null
127 key: null
128 metadata: {}
129 http:
130 headers: {}
131 protocol: grpc
132 temporality: cumulative
133 prometheus:
134 enabled: false
135 listen: example_listen
136 path: /metrics
137 tracing:
138 common:
139 max_attributes_per_event: 128
140 max_attributes_per_link: 128
141 max_attributes_per_span: 128
142 max_events_per_span: 128
143 max_links_per_span: 128
144 parent_based_sampler: true
145 preview_datadog_agent_sampling: null
146 resource: {}
147 sampler: 0.0
148 service_name: null
149 service_namespace: null
150 datadog:
151 batch_processor:
152 max_concurrent_exports: 1
153 max_export_batch_size: 512
154 max_export_timeout:
155 nanos: 0
156 secs: 30
157 max_queue_size: 2048
158 scheduled_delay:
159 nanos: 0
160 secs: 5
161 enable_span_mapping: true
162 enabled: false
163 endpoint: example_endpoint
164 fixed_span_names: true
165 resource_mapping: {}
166 span_metrics:
167 connect: true
168 connect_request: true
169 execution: true
170 http_request: true
171 parse_query: true
172 query_planning: true
173 request: true
174 router: true
175 subgraph: true
176 subgraph_request: true
177 supergraph: true
178 experimental_response_trace_id:
179 enabled: false
180 format: hexadecimal
181 header_name: example_header_name
182 otlp:
183 batch_processor:
184 max_concurrent_exports: 1
185 max_export_batch_size: 512
186 max_export_timeout:
187 nanos: 0
188 secs: 30
189 max_queue_size: 2048
190 scheduled_delay:
191 nanos: 0
192 secs: 5
193 enabled: false
194 endpoint: example_endpoint
195 grpc:
196 ca: null
197 cert: null
198 domain_name: null
199 key: null
200 metadata: {}
201 http:
202 headers: {}
203 protocol: grpc
204 temporality: cumulative
205 propagation:
206 aws_xray: false
207 baggage: false
208 datadog: false
209 jaeger: false
210 request:
211 format: hexadecimal
212 header_name: example_header_name
213 trace_context: false
214 zipkin: false
215 zipkin:
216 batch_processor:
217 max_concurrent_exports: 1
218 max_export_batch_size: 512
219 max_export_timeout:
220 nanos: 0
221 secs: 30
222 max_queue_size: 2048
223 scheduled_delay:
224 nanos: 0
225 secs: 5
226 enabled: false
227 endpoint: example_endpoint
228 instrumentation:
229 events:
230 connector:
231 error:
232 condition:
233 eq:
234 - false
235 - false
236 level: info
237 request:
238 condition:
239 eq:
240 - false
241 - false
242 level: info
243 response:
244 condition:
245 eq:
246 - false
247 - false
248 level: info
249 router:
250 error:
251 condition:
252 eq:
253 - false
254 - false
255 level: info
256 request:
257 condition:
258 eq:
259 - false
260 - false
261 level: info
262 response:
263 condition:
264 eq:
265 - false
266 - false
267 level: info
268 subgraph:
269 error:
270 condition:
271 eq:
272 - false
273 - false
274 level: info
275 request:
276 condition:
277 eq:
278 - false
279 - false
280 level: info
281 response:
282 condition:
283 eq:
284 - false
285 - false
286 level: info
287 supergraph:
288 error:
289 condition:
290 eq:
291 - false
292 - false
293 level: info
294 request:
295 condition:
296 eq:
297 - false
298 - false
299 level: info
300 response:
301 condition:
302 eq:
303 - false
304 - false
305 level: info
306 instruments:
307 cache:
308 apollo.router.operations.entity.cache:
309 attributes:
310 graphql.type.name:
311 alias: example_alias
312 connector:
313 http.client.request.body.size:
314 attributes:
315 connector.http.method:
316 alias: example_alias
317 connector.source.name:
318 alias: example_alias
319 connector.url.template:
320 alias: example_alias
321 subgraph.name:
322 alias: example_alias
323 http.client.request.duration:
324 attributes:
325 connector.http.method:
326 alias: example_alias
327 connector.source.name:
328 alias: example_alias
329 connector.url.template:
330 alias: example_alias
331 subgraph.name:
332 alias: example_alias
333 http.client.response.body.size:
334 attributes:
335 connector.http.method:
336 alias: example_alias
337 connector.source.name:
338 alias: example_alias
339 connector.url.template:
340 alias: example_alias
341 subgraph.name:
342 alias: example_alias
343 default_requirement_level: none
344 graphql:
345 field.execution:
346 attributes:
347 graphql.field.name:
348 alias: example_alias
349 graphql.field.type:
350 alias: example_alias
351 graphql.list.length:
352 alias: example_alias
353 graphql.operation.name:
354 alias: example_alias
355 graphql.type.name:
356 alias: example_alias
357 list.length:
358 attributes:
359 graphql.field.name:
360 alias: example_alias
361 graphql.field.type:
362 alias: example_alias
363 graphql.list.length:
364 alias: example_alias
365 graphql.operation.name:
366 alias: example_alias
367 graphql.type.name:
368 alias: example_alias
369 router:
370 http.server.active_requests:
371 attributes:
372 http.request.method: false
373 server.address: false
374 server.port: false
375 url.scheme: false
376 http.server.request.body.size:
377 attributes:
378 baggage: null
379 dd.trace_id:
380 alias: example_alias
381 error.type:
382 alias: example_alias
383 http.request.body.size:
384 alias: example_alias
385 http.request.method:
386 alias: example_alias
387 http.response.body.size:
388 alias: example_alias
389 http.response.status_code:
390 alias: example_alias
391 http.route:
392 alias: example_alias
393 network.local.address:
394 alias: example_alias
395 network.local.port:
396 alias: example_alias
397 network.peer.address:
398 alias: example_alias
399 network.peer.port:
400 alias: example_alias
401 network.protocol.name:
402 alias: example_alias
403 network.protocol.version:
404 alias: example_alias
405 network.transport:
406 alias: example_alias
407 network.type:
408 alias: example_alias
409 server.address:
410 alias: example_alias
411 server.port:
412 alias: example_alias
413 trace_id:
414 alias: example_alias
415 url.path:
416 alias: example_alias
417 url.query:
418 alias: example_alias
419 url.scheme:
420 alias: example_alias
421 user_agent.original:
422 alias: example_alias
423 http.server.request.duration:
424 attributes:
425 baggage: null
426 dd.trace_id:
427 alias: example_alias
428 error.type:
429 alias: example_alias
430 http.request.body.size:
431 alias: example_alias
432 http.request.method:
433 alias: example_alias
434 http.response.body.size:
435 alias: example_alias
436 http.response.status_code:
437 alias: example_alias
438 http.route:
439 alias: example_alias
440 network.local.address:
441 alias: example_alias
442 network.local.port:
443 alias: example_alias
444 network.peer.address:
445 alias: example_alias
446 network.peer.port:
447 alias: example_alias
448 network.protocol.name:
449 alias: example_alias
450 network.protocol.version:
451 alias: example_alias
452 network.transport:
453 alias: example_alias
454 network.type:
455 alias: example_alias
456 server.address:
457 alias: example_alias
458 server.port:
459 alias: example_alias
460 trace_id:
461 alias: example_alias
462 url.path:
463 alias: example_alias
464 url.query:
465 alias: example_alias
466 url.scheme:
467 alias: example_alias
468 user_agent.original:
469 alias: example_alias
470 http.server.response.body.size:
471 attributes:
472 baggage: null
473 dd.trace_id:
474 alias: example_alias
475 error.type:
476 alias: example_alias
477 http.request.body.size:
478 alias: example_alias
479 http.request.method:
480 alias: example_alias
481 http.response.body.size:
482 alias: example_alias
483 http.response.status_code:
484 alias: example_alias
485 http.route:
486 alias: example_alias
487 network.local.address:
488 alias: example_alias
489 network.local.port:
490 alias: example_alias
491 network.peer.address:
492 alias: example_alias
493 network.peer.port:
494 alias: example_alias
495 network.protocol.name:
496 alias: example_alias
497 network.protocol.version:
498 alias: example_alias
499 network.transport:
500 alias: example_alias
501 network.type:
502 alias: example_alias
503 server.address:
504 alias: example_alias
505 server.port:
506 alias: example_alias
507 trace_id:
508 alias: example_alias
509 url.path:
510 alias: example_alias
511 url.query:
512 alias: example_alias
513 url.scheme:
514 alias: example_alias
515 user_agent.original:
516 alias: example_alias
517 subgraph:
518 http.client.request.body.size:
519 attributes:
520 http.request.resend_count:
521 alias: example_alias
522 subgraph.graphql.document:
523 alias: example_alias
524 subgraph.graphql.operation.name:
525 alias: example_alias
526 subgraph.graphql.operation.type:
527 alias: example_alias
528 subgraph.name:
529 alias: example_alias
530 http.client.request.duration:
531 attributes:
532 http.request.resend_count:
533 alias: example_alias
534 subgraph.graphql.document:
535 alias: example_alias
536 subgraph.graphql.operation.name:
537 alias: example_alias
538 subgraph.graphql.operation.type:
539 alias: example_alias
540 subgraph.name:
541 alias: example_alias
542 http.client.response.body.size:
543 attributes:
544 http.request.resend_count:
545 alias: example_alias
546 subgraph.graphql.document:
547 alias: example_alias
548 subgraph.graphql.operation.name:
549 alias: example_alias
550 subgraph.graphql.operation.type:
551 alias: example_alias
552 subgraph.name:
553 alias: example_alias
554 supergraph:
555 cost.actual:
556 attributes:
557 cost.actual:
558 alias: example_alias
559 cost.delta:
560 alias: example_alias
561 cost.estimated:
562 alias: example_alias
563 cost.result:
564 alias: example_alias
565 graphql.document:
566 alias: example_alias
567 graphql.operation.name:
568 alias: example_alias
569 graphql.operation.type:
570 alias: example_alias
571 cost.delta:
572 attributes:
573 cost.actual:
574 alias: example_alias
575 cost.delta:
576 alias: example_alias
577 cost.estimated:
578 alias: example_alias
579 cost.result:
580 alias: example_alias
581 graphql.document:
582 alias: example_alias
583 graphql.operation.name:
584 alias: example_alias
585 graphql.operation.type:
586 alias: example_alias
587 cost.estimated:
588 attributes:
589 cost.actual:
590 alias: example_alias
591 cost.delta:
592 alias: example_alias
593 cost.estimated:
594 alias: example_alias
595 cost.result:
596 alias: example_alias
597 graphql.document:
598 alias: example_alias
599 graphql.operation.name:
600 alias: example_alias
601 graphql.operation.type:
602 alias: example_alias
603 spans:
604 connector:
605 attributes:
606 connector.http.method:
607 alias: example_alias
608 connector.source.name:
609 alias: example_alias
610 connector.url.template:
611 alias: example_alias
612 subgraph.name:
613 alias: example_alias
614 default_attribute_requirement_level: none
615 mode: deprecated
616 router:
617 attributes:
618 baggage: null
619 dd.trace_id:
620 alias: example_alias
621 error.type:
622 alias: example_alias
623 http.request.body.size:
624 alias: example_alias
625 http.request.method:
626 alias: example_alias
627 http.response.body.size:
628 alias: example_alias
629 http.response.status_code:
630 alias: example_alias
631 http.route:
632 alias: example_alias
633 network.local.address:
634 alias: example_alias
635 network.local.port:
636 alias: example_alias
637 network.peer.address:
638 alias: example_alias
639 network.peer.port:
640 alias: example_alias
641 network.protocol.name:
642 alias: example_alias
643 network.protocol.version:
644 alias: example_alias
645 network.transport:
646 alias: example_alias
647 network.type:
648 alias: example_alias
649 server.address:
650 alias: example_alias
651 server.port:
652 alias: example_alias
653 trace_id:
654 alias: example_alias
655 url.path:
656 alias: example_alias
657 url.query:
658 alias: example_alias
659 url.scheme:
660 alias: example_alias
661 user_agent.original:
662 alias: example_alias
663 subgraph:
664 attributes:
665 http.request.resend_count:
666 alias: example_alias
667 subgraph.graphql.document:
668 alias: example_alias
669 subgraph.graphql.operation.name:
670 alias: example_alias
671 subgraph.graphql.operation.type:
672 alias: example_alias
673 subgraph.name:
674 alias: example_alias
675 supergraph:
676 attributes:
677 cost.actual:
678 alias: example_alias
679 cost.delta:
680 alias: example_alias
681 cost.estimated:
682 alias: example_alias
683 cost.result:
684 alias: example_alias
685 graphql.document:
686 alias: example_alias
687 graphql.operation.name:
688 alias: example_alias
689 graphql.operation.type:
690 alias: example_aliasEnhanced operation signature normalization
- General availability in v1.54.0 and later
- Experimental in v1.49.0 to v1.53.0
Apollo's legacy operation signature algorithm removes information about certain fields, such as input objects and aliases. This removal means some operations may have the same normalized signature though they are distinct operations.
Enhanced normalization incorporates input types and aliases in signature generation. It also includes other improvements that make it more likely that two operations that only vary slightly have the same signature.
Configure enhanced operation signature normalization in router.yaml with the telemetry.apollo.signature_normalization_algorithm option:
1telemetry:
2 apollo:
3 signature_normalization_algorithm: enhanced # Default is legacyOnce you enable this configuration, operations with enhanced signatures might appear with different operation IDs than they did previously in GraphOS Studio.
Input types
Enhanced signatures include input object type shapes, while still redacting any actual values.
Legacy signatures replace input object type with {}.
Given the following example operation:
query InlineInputTypeQuery {
inputTypeQuery(
input: {
inputString: "foo"
inputInt: 42
inputBoolean: null
nestedType: { someFloat: 4.2 }
enumInput: SOME_VALUE_1
nestedTypeList: [{ someFloat: 4.2, someNullableFloat: null }]
listInput: [1, 2, 3]
}
) {
enumResponse
}
}The legacy normalization algorithm generates the following signature:
query InlineInputTypeQuery {
inputTypeQuery(input: {}) {
enumResponse
}
}The enhanced normalization algorithm generates the following signature:
query InlineInputTypeQuery {
inputTypeQuery(
input: {
inputString: ""
inputInt: 0
inputBoolean: null
nestedType: { someFloat: 0 }
enumInput: SOME_VALUE_1
nestedTypeList: [{ someFloat: 0, someNullableFloat: null }]
listInput: []
}
) {
enumResponse
}
}Aliases
Enhanced signatures include any field aliases used in an operation. Legacy signatures remove aliases completely, meaning the signature may be invalid if the same field was used with multiple aliases.
Given the following example operation:
query AliasedQuery {
noInputQuery {
interfaceAlias1: interfaceResponse {
sharedField
}
interfaceAlias2: interfaceResponse {
... on InterfaceImplementation1 {
implementation1Field
}
... on InterfaceImplementation2 {
implementation2Field
}
}
inputFieldAlias1: objectTypeWithInputField(boolInput: true) {
stringField
}
inputFieldAlias2: objectTypeWithInputField(boolInput: false) {
intField
}
}
}The legacy normalization algorithm generates the following signature:
query AliasedQuery {
noInputQuery {
interfaceResponse {
sharedField
}
interfaceResponse {
... on InterfaceImplementation1 {
implementation1Field
}
... on InterfaceImplementation2 {
implementation2Field
}
}
objectTypeWithInputField(boolInput: true) {
stringField
}
objectTypeWithInputField(boolInput: false) {
intField
}
}
}The enhanced normalization algorithm generates the following signature:
query AliasedQuery {
noInputQuery {
interfaceAlias1: interfaceResponse {
sharedField
}
interfaceAlias2: interfaceResponse {
... on InterfaceImplementation1 {
implementation1Field
}
... on InterfaceImplementation2 {
implementation2Field
}
}
inputFieldAlias1: objectTypeWithInputField(boolInput: true) {
stringField
}
inputFieldAlias2: objectTypeWithInputField(boolInput: false) {
intField
}
}
}Extended reference reporting
- General availability in v1.54.0 and later
- Experimental in v1.50.0 to v1.53.0
You can configure the router to report enum and input object references for enhanced insights and operation checks. Apollo's legacy reference reporting doesn't include data about enum values and input object fields, meaning you can't view enum and input object field usage in GraphOS Studio. Legacy reporting can also cause inaccurate operation checks.
Configure extended reference reporting in router.yaml with the telemetry.apollo.metrics_reference_mode option like so:
1telemetry:
2 apollo:
3 metrics_reference_mode: extended # Default is legacyExtended error reporting
- Preview in v2.1.2 and later
- Experimental in v2.0.0
You can configure the router to report extended error information for improved diagnostics. Apollo's legacy error reporting doesn't include the service or error code, meaning you can't easily attribute errors to their root cause in GraphOS Studio.
Configure extended reference reporting in router.yaml with the telemetry.apollo.errors.preview_extended_error_metrics option like so:
1telemetry:
2 apollo:
3 errors:
4 preview_extended_error_metrics: enabled # Default is disabledConfiguration effect timing
Once you configure extended reference reporting, you can view enum value and input field usage alongside object field usage in GraphOS Studio for all subsequent operations.
Configuring extended reference reporting automatically turns on enhanced operation checks, though you won't see an immediate change in your operations check behavior.
This delay is because operation checks rely on historical operation data. To ensure sufficient data to distinguish between genuinely unused values and those simply not reported in legacy data, enhanced checks require some operations with extended reference reporting turned on.
Enhanced operation checks
Thanks to extended reference reporting, operation checks can more accurately flag issues for changes to enum values and input object fields. See the comparison table below for differences between standard operation checks based on legacy reference reporting and enhanced checks based on extended reference reporting.
| Standard Check Behavior (Legacy reference reporting) | Enhanced Check Behavior (Extended reference reporting) | |
|---|---|---|
Enum value removal | Removing any enum values is considered a breaking change if any operations use the enum. | Removing enum values is only a breaking change if historical operations use the specific enum value(s) that were removed. |
Default argument changes for input object fields | Changing or removing a default argument is generally considered a breaking change, but changing or removing default values for input object fields isn't. | Changing or removing default values for input object fields is considered a breaking change.You can configure checks to ignore default values changes. |
Nullable input object field removal | Removing a nullable input object field is always considered a breaking change. | Removing a nullable input object field is only considered a breaking change if the nullable field is present in historical operations. If the nullable field is always omitted in historical operations, its removal isn't considered a breaking change. |
Changing nullable input object fields to non-nullable | Changing a nullable input object field to non-nullable is considered a breaking change. | Changing a nullable input object field to non-nullable is only considered a breaking change if the field had a null value in historical operations. If the field was always a non-null value in historical operations, changing it to non-nullable isn't considered a breaking change. |
tls
1tls:
2 connector:
3 all:
4 certificate_authorities: null
5 client_authentication:
6 certificate_chain: example_certificate_chain
7 key: example_key
8 sources: {}
9 subgraph:
10 all:
11 certificate_authorities: null
12 client_authentication:
13 certificate_chain: example_certificate_chain
14 key: example_key
15 subgraphs: {}
16 supergraph:
17 certificate: example_certificate
18 certificate_chain: example_certificate_chain
19 key: example_keyLearn more in TLS for the router.
traffic_shaping
1traffic_shaping:
2 all:
3 compression: gzip
4 deduplicate_query: false
5 dns_resolution_strategy: ipv4_only
6 experimental_http2: enable
7 global_rate_limit:
8 capacity: 1
9 interval: 30s
10 timeout: null
11 connector:
12 all:
13 compression: gzip
14 dns_resolution_strategy: ipv4_only
15 experimental_http2: enable
16 global_rate_limit:
17 capacity: 1
18 interval: 30s
19 timeout: null
20 sources: {}
21 deduplicate_variables: null
22 router:
23 concurrency_limit: 0
24 global_rate_limit:
25 capacity: 1
26 interval: 30s
27 timeout: null
28 subgraphs: {}Learn more in Traffic Shaping.
YAML configuration utilities
Variable expansion
You can reference variables directly in your YAML config file. This is useful for referencing secrets without including them in the file.
Currently, the router supports expansion of environment variables and file paths. Corresponding variables are prefixed with env. and file., respectively.
The router uses Unix-style expansion. Here are some examples:
${env.ENV_VAR_NAME}expands to the value of environment variableENV_VAR_NAME.${env.ENV_VAR_NAME:-some_default}expands to the value of environment variableENV_VAR_NAME, or falls back to the valuesome_defaultif the environment variable is not defined.${file.a.txt}expands to the contents of the filea.txt.${file.a.txt:-some_default}expands to the contents of the filea.txt, or falls back to the valuesome_defaultif the file does not exist.
Variable expansions are valid only for YAML values, not keys.
Reusing configurations with YAML aliases
You can reuse parts of your configuration file in multiple places using standard YAML aliasing syntax:
1headers:
2 subgraphs:
3 products:
4 request:
5 - insert: &insert_custom_header
6 name: "custom-header"
7 value: "something"
8 reviews:
9 request:
10 - insert: *insert_custom_headerHere, the name and value entries under &insert_custom_header are reused under *insert_custom_header.
Escaping special characters
To include a literal $ character, double it as $$. The router converts each $$ to a single $:
Config value:
prefix$$suffixResult:
prefix$suffix