Skywalking 可以将应用日志存储起来,默认为内存,可以修改为存储到 MySQL 或 ES 。
当存储端为 MySQL 时,在 Skywalking 的 UI 日志功能界面可以显示 TraceId (追踪 ID ),
但是,如果将存储端设置为 ES 时,TraceId 就无法显示,如下图:
我看了下 Skywalking 在 MySQL 和 ES 的数据结构,在 MySQL 中是这样的:
CREATE TABLE log ( id varchar(512) NOT NULL PRIMARY KEY, unique_id varchar(200) NULL, service_id varchar(200) NULL, service_instance_id varchar(200) NULL, endpoint_id varchar(200) NULL, -- 这里存储了 trace_id trace_id varchar(150) NULL, trace_segment_id varchar(150) NULL, span_id int NULL, content_type int NULL, content mediumtext NULL, timestamp bigint NULL, tags_raw_data mediumtext NULL, tags_0 varchar(200) NULL, tags_1 varchar(200) NULL, tags_2 varchar(200) NULL, tags_3 varchar(200) NULL, tags_4 varchar(200) NULL, tags_5 varchar(200) NULL, tags_6 varchar(200) NULL, tags_7 varchar(200) NULL, tags_8 varchar(200) NULL, tags_9 varchar(200) NULL, tags_10 varchar(200) NULL, tags_11 varchar(200) NULL, tags_12 varchar(200) NULL, tags_13 varchar(200) NULL, tags_14 varchar(200) NULL, tags_15 varchar(200) NULL, tags_16 varchar(200) NULL, tags_17 varchar(200) NULL, tags_18 varchar(200) NULL, tags_19 varchar(200) NULL, time_bucket bigint NULL );
但是,在 ES 中,是这样存储的:
{ "_index": "skywalking_log-20230321", "_type": "_doc", "_id": "bbdd208df28c4521aa436dbfd9a26a3a", "_version": 1, "_seq_no": 132, "_primary_term": 1, "found": true, "_source": { "unique_id": "bbdd208df28c4521aa436dbfd9a26a3a", "span_id": 0, "service_instance_id": "Z29sZGVuLXNlcnZpY2UtZmFjZQ==.1_MWJlOGE0N2QxOTM1NDM1NGEzMzJmMGNkM2ViYzQ4MzZAMTcyLjE3LjAuMQ==", "content": "2023-03-21 16:31:46.935 [TID:ee137820a72441a4a119ede353229b10.92.16793875068960035] INFO", "tags": [ "level=INFO" ], "content_type": 1, "tags_raw_data": "Cg0KBWxldmVsEgRJTkZPCi4KBmxvZ2dlchIkY29tLnprc2ouY29tbW9uLmxvZy5hc3BlY3QuTG9nQXNwZWN0Ch4KBnRocmVhZBIUaHR0cC1uaW8tOTIxMS1leGVjLTI=", "service_id": "Z29sZGVuLXNlcnZpY2UtZmFjZQ==.1", "time_bucket": 20230321163146, "timestamp": 1679387506935 } }
也就是说,其实日志在 ES 中的索引结构根本就没有 TraceId
这种情况下,需要修改什么设置才能让索引结构增加 TraceId 字段,使得 Skywalking 的 UI 界面中可以显示 TraceId ,方便搜索。
各位大佬用 Skywalking 集成 ES 时,是怎么解决这个问题的呢?
搜索了很多文章,似乎都没有提到这个问题,难道必须通过 Logstash 再处理一层才行嘛?
![]() | 1 amwyyyy 2023-03-21 18:41:04 +08:00 去 github 提 issue 啊 |
![]() | 2 leeqingshui OP @amwyyyy 找到一圈 issue 终于找到原因了,不是数据结构的问题,原因是由于日志配置的问题引起的:日志配置不能配置为异步输出 |