elasticsearch 多租户和开放遥测

gblwokeq  于 2023-08-03  发布在  ElasticSearch
关注(0)|答案(1)|浏览(119)

我在一个java spring Boot 应用程序中使用openemetry(以elastic search 8.3.2作为后端),这是一个多租户应用程序。我希望在ElasticSearch中将每个租户的跟踪数据隔离在其自己的索引中使用opentelemetry实现这一点的最佳方法是什么?
我尝试使用下面的方法,但看起来ElasticsearchSpanExporter不支持

@Bean
    public SpanExporter otelElasticsearchExporter() {
        return ElasticsearchSpanExporter.builder()
                .setEndpoint(elasticsearchEndpoint)
                .setCompression(Compression.GZIP)
                .setIndex(exporterProperties.getSpan().getSpanName() + "-{tenant-id}")
                .build();
    }

字符串
接下来,我尝试了以下方法,但ElasticSearch8.3.2不支持RestHighLevelClient

import org.elasticsearch.client.RestHighLevelClient;
@Bean
    public SpanExporter otelElasticsearchExporter(RestHighLevelClient elasticsearchClient) {
        return new SpanExporter() {
            @Override
            public SpanExporterResult export(Collection<SpanData> spanDataList) {
                BulkRequest bulkRequest = new BulkRequest();
                spanDataList.forEach(spanData -> {
                    bulkRequest.add(
                            new IndexRequest("your_index_name")
                                    .source(spanDataToJson(spanData), XContentType.JSON)
                    );
                });
                try {
                    BulkResponse bulkResponse = elasticsearchClient.bulk(bulkRequest, RequestOptions.DEFAULT);
                    if (bulkResponse.hasFailures()) {
                        return SpanExporterResult.FAILURE;
                    }
                } catch (IOException e) {
                    return SpanExporterResult.FAILURE;
                }
                return SpanExporterResult.SUCCESS;
            }


我看到,如果我在创建跟踪提供程序时使用setResource方法,我的跟踪将进入每个租户的单独索引中。但不确定这是否是一个好方法。

SdkTracerProvider tracerProvider =
                SdkTracerProvider.builder()
                        .addSpanProcessor(BatchSpanProcessor.builder(otlpExporter).build())
                        .setResource(Resource.getDefault().merge(tenantId))
                        .build();


保持每个租户的跟踪数据隔离的首选方法是什么?

monwx1rj

monwx1rj1#

如何使用跟踪数据?它是通过Elastic APM,还是你使用Elasticsearch作为一个持久层,上面有一个不同的可观察性工具?
根据上面的问题,范围数据的导出看起来会有所不同。
如果您使用的是Elastic APM,则此is the documentation for exporting OTel data to Elastic APM
在后一种情况下,您可以使用第二种方法,使用Java API Client而不是RestHighLevelClient。使用这种方法,您可以控制将span写入哪个索引。

相关问题