Я изучаю открытую телеметрию, собирая журналы и трассировки и отправляя их в экземпляр opensearch. Я использую примеры opensearch из документации opensearch, но, похоже, сталкиваюсь с проблемами, когда сборщик пытается отправить данные специалисту по подготовке данных. Я не уверен, что я делаю неправильно на данный момент.
Я использую файл компоновки Docker для запуска служб:
name: log-aggregation
services:
opensearch:
ports:
- "9200:9200"
- "9600:9600"
networks:
- log-aggregation
image: docker.io/opensearchproject/opensearch:latest
environment:
"discovery.type": 'single-node'
"plugins.security.disabled": 'true'
OPENSEARCH_INITIAL_ADMIN_PASSWORD: <password>
opensearch-dashboard:
ports:
- "5601:5601"
networks:
- log-aggregation
build: ./opensearch/
image: opensearch-dashboards-no-security
environment:
OPENSEARCH_HOSTS: "http://opensearch:9200"
"server.ssl.enabled": "false"
data-prepper:
ports:
- "4900:4900"
- "21890:21890"
networks:
- log-aggregation
image: docker.io/opensearchproject/data-prepper:latest
volumes:
- '.\opensearch\pipelines.yaml:/usr/share/data-prepper/pipelines/pipelines.yaml'
- '.\opensearch\data-prepper-config.yaml:/usr/share/data-prepper/config/data-prepper-config.yaml'
otel-collector:
image: docker.io/otel/opentelemetry-collector:latest
ports:
- "4317:4317"
- "4318:4318"
networks:
- log-aggregation
command: ["--config=/etc/otel/config.yaml"]
volumes:
- "./opentelemetry/collector-config.yaml:/etc/otel/config.yaml"
networks:
log-aggregation: {}
Docker-файл для образа opensearch-dashboards-no-security
выглядит следующим образом:
FROM opensearchproject/opensearch-dashboards:latest
RUN /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin remove securityDashboards
COPY --chown=opensearch-dashboards:opensearch-dashboards opensearch_dashboards.yml /usr/share/opensearch-dashboards/config/
Я знаю, что это не подходит для производства. Это всего лишь тестовая установка для оценки. Я могу использовать панель мониторинга и экземпляр opensearch, как и ожидалось.
Я настраиваю сборщик отелей, используя следующую конфигурацию:
receivers:
otlp:
protocols:
grpc:
http:
endpoint: 0.0.0.0:4318
processors:
batch:
exporters:
debug:
verbosity: detailed
otlp/data-prepper:
endpoint: data-prepper:21890
tls:
insecure: true
service:
pipelines:
traces:
receivers: [otlp]
processors: [batch]
exporters: [debug, otlp/data-prepper]
metrics:
receivers: [otlp]
processors: [batch]
exporters: [debug, otlp/data-prepper]
logs:
receivers: [otlp]
processors: [batch]
exporters: [debug, otlp/data-prepper]
telemetry:
logs:
level: "debug"
Средство подготовки данных настраивается со следующей конфигурацией (если не указывать опцию authentication
, средство подготовки данных не должно требовать никаких настроек согласно их документации):
ssl: false
Затем я настраиваю эти конвейеры:
entry-pipeline:
delay: "100"
source:
otel_trace_source:
ssl: false
authentication:
unauthenticated:
buffer:
bounded_blocking:
buffer_size: 10240
batch_size: 160
sink:
- pipeline:
name: "raw-pipeline"
- pipeline:
name: "service-map-pipeline"
raw-pipeline:
source:
pipeline:
name: "entry-pipeline"
buffer:
bounded_blocking:
buffer_size: 10240
batch_size: 160
processor:
- otel_trace_raw:
sink:
- opensearch:
hosts: ["http://opensearch:9200"]
insecure: true
index_type: trace-analytics-raw
service-map-pipeline:
delay: "100"
source:
pipeline:
name: "entry-pipeline"
buffer:
bounded_blocking:
buffer_size: 10240
batch_size: 160
processor:
- service_map_stateful:
sink:
- opensearch:
hosts: ["http://opensearch:9200"]
insecure: true
index_type: trace-analytics-service-map
Я могу запросить экземпляр средства подготовки данных, чтобы проверить, настроены ли конвейеры:
curl.exe localhost:4900/list
{"pipelines":[{"name":"entry-pipeline"},{"name":"service-map-pipeline"},{"name":"raw-pipeline"}]}
Но когда я отправляю тестовую трассировку сборщику отелей, я получаю лишь частичный успех в ответе:
curl.exe -i http://localhost:4318/v1/traces -H 'Content-Type: application/json' -d '@opentelemetry/span.json'
HTTP/1.1 200 OK
Content-Type: application/json
Date: Sun, 21 Jul 2024 11:15:49 GMT
Content-Length: 21
{"partialSuccess":{}}
и ошибка подключения received goaway and there are no active streams
в логах:
2024-07-21T11:06:49.213Z info zapgrpc/zapgrpc.go:176 [core] [Channel #3 SubChannel #6]Subchannel created {"grpc_log": true}
2024-07-21T11:06:49.213Z info zapgrpc/zapgrpc.go:176 [core] [Channel #3]Channel Connectivity change to CONNECTING {"grpc_log": true}
2024-07-21T11:06:49.213Z info zapgrpc/zapgrpc.go:176 [core] [Channel #3 SubChannel #6]Subchannel Connectivity change to CONNECTING {"grpc_log": true}
2024-07-21T11:06:49.213Z info zapgrpc/zapgrpc.go:176 [core] [Channel #3 SubChannel #6]Subchannel picks a new address "10.89.1.14:21890" to connect {"grpc_log": true}
2024-07-21T11:06:49.213Z info zapgrpc/zapgrpc.go:176 [pick-first-lb] [pick-first-lb 0xc00074b620] Received SubConn state update: 0xc00074b6b0, {ConnectivityState:CONNECTING ConnectionError:<nil>} {"grpc_log": true}
2024-07-21T11:06:49.269Z info zapgrpc/zapgrpc.go:176 [core] [Channel #3 SubChannel #6]Subchannel Connectivity change to READY {"grpc_log": true}
2024-07-21T11:06:49.269Z info zapgrpc/zapgrpc.go:176 [pick-first-lb] [pick-first-lb 0xc00074b620] Received SubConn state update: 0xc00074b6b0, {ConnectivityState:READY ConnectionError:<nil>} {"grpc_log": true}
2024-07-21T11:06:49.269Z info zapgrpc/zapgrpc.go:176 [core] [Channel #3]Channel Connectivity change to READY {"grpc_log": true}
2024-07-21T11:07:04.348Z info zapgrpc/zapgrpc.go:176 [core] [Channel #3 SubChannel #6]Subchannel Connectivity change to IDLE {"grpc_log": true}
2024-07-21T11:07:04.348Z info zapgrpc/zapgrpc.go:176 [transport] [client-transport 0xc000ba2248] Closing: connection error: desc = "received goaway and there are no active streams" {"grpc_log": true}
2024-07-21T11:07:04.348Z info zapgrpc/zapgrpc.go:176 [transport] [client-transport 0xc000ba2248] loopyWriter exiting with error: connection error: desc = "received goaway and there are no active streams" {"grpc_log": true}
Порт средства подготовки данных кажется правильным. Когда я настраиваю любой другой код, например 21892 (который я видел в других вопросах), вместо этого сборщик получает ошибку connection refused
.
Кажется, пример немного устарел. Я просмотрел журналы экземпляра Data Prepper и обнаружил два предупреждения. Хотя я по-прежнему получаю ошибку соединения после переключения процессоров, перезапуска контейнеров и повторной отправки тестовой трассировки сборщику, теперь тестовая трассировка появляется в opensearch через несколько секунд.
Журналы подготовки данных:
2024-07-23T16:53:10,348 [main] WARN org.opensearch.dataprepper.plugin.DefaultPluginFactory - Plugin name 'service_map_stateful' is deprecated and will be removed in the next major release. Consider using the updated plugin name 'service_map'.
024-07-23T16:53:10,573 [main] WARN org.opensearch.dataprepper.plugin.DefaultPluginFactory - Plugin name 'otel_trace_raw' is deprecated and will be removed in the next major release. Consider using the updated plugin name 'otel_traces'.
конвейеры.yaml:
entry-pipeline:
delay: "100"
source:
otel_trace_source:
ssl: false
authentication:
unauthenticated:
buffer:
bounded_blocking:
buffer_size: 10240
batch_size: 160
sink:
- pipeline:
name: "raw-pipeline"
- pipeline:
name: "service-map-pipeline"
raw-pipeline:
source:
pipeline:
name: "entry-pipeline"
buffer:
bounded_blocking:
buffer_size: 10240
batch_size: 160
processor:
- - otel_trace_raw:
+ - otel_traces:
sink:
- opensearch:
hosts: ["http://opensearch:9200"]
insecure: true
index_type: trace-analytics-raw
service-map-pipeline:
delay: "100"
source:
pipeline:
name: "entry-pipeline"
buffer:
bounded_blocking:
buffer_size: 10240
batch_size: 160
processor:
- - service_map_stateful:
+ - service_map:
sink:
- opensearch:
hosts: ["http://opensearch:9200"]
insecure: true
index_type: trace-analytics-service-map