Signoz 에서 로그 확인 시 필터링 에서 이슈가 발생했다.
필터를 걸어주지 않으면 로그가 출력되지만
필터를 걸어주면 key not found 라고 하면서 로그가 출력되지 않았다.
docker exec -it signoz-clickhouse clickhouse-client
SELECT DISTINCT arrayJoin(mapKeys(resources_string)) AS resource_key
FROM signoz_logs.distributed_logs_v2
ORDER BY resource_key ASC
Query id: 472d571d-1224-40ed-a66f-7a6f72afa1dd
┌─resource_key────────────────┐
│ container.id │
│ deployment.environment │
│ deployment.environment.name │
│ host.arch │
│ host.name │
│ os.description │
│ os.name │
│ os.type │
│ os.version │
│ process.command │
│ process.command_args │
│ process.executable.path │
│ process.owner │
│ process.pid │
│ process.runtime.description │
│ process.runtime.name │
│ process.runtime.version │
│ service.instance.id │
│ service.name │
│ service.version │
│ telemetry.distro.name │
│ telemetry.distro.version │
│ telemetry.sdk.language │
│ telemetry.sdk.name │
│ telemetry.sdk.version │
└─────────────────────────────┘
실제 데이터는 잘 들어오는 것을 확인했다.
에러가 없는 다른 signoz 서버와 비교했을때
데이터가 똑같은 resource_key 컬럼으로 들어오고 있었다.
이 때문에 필터를 걸어주지 않았을때 정상적으로 데이터가 출력되었다.
그러다가 필터에 관련된 테이블을 발견했다.
signoz_logs.distributed_logs_resource_keys
이 테이블에 위 테이블의 column 값들이 없어서 발생한 현상이었다.
실제로 아래와 같은 명령어로 resource_key를 확인해보니
에러가 없는 필터 key 값이 들어있었다.
SELECT DISTINCT name,datatype
FROM signoz_logs.distributed_logs_resource_keys
Query id: af9ba0d2-7e72-4246-b8d5-0592c4159b2d
┌─name────────────────────────┬─datatype─┐
│ container.id │ string │
│ process.command │ string │
│ process.command_args │ string │
│ process.runtime.description │ string │
│ service.instance.id │ string │
│ service.version │ string │
└─────────────────────────────┴───────┘
INSERT INTO signoz_logs.distributed_logs_resource_keys (name, datatype)
VALUES ('os.name', 'string');
위와 같은 쿼리를 날려 데이터를 넣어
signoz_logs.distributed_logs_v2 테이블의 resource_keys와
signoz_logs.distributed_logs_resource_keys 테이블의 데이터를 맞춰주니 필터가 정상적으로 동작하는 것을 확인했다.